Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Training Automation #8

Draft
wants to merge 30 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
776afed
Add a script to automate training repo filling
adriendupuis May 7, 2020
8488188
training.sh: Enh. feedback
adriendupuis May 7, 2020
7f8659b
README.md: Reword Usage intro
adriendupuis May 8, 2020
4b8f1f7
README.md: Reword Usage intro
adriendupuis May 8, 2020
52a91a7
Merge branch 'develop' into feature/automation
adriendupuis May 8, 2020
0eb996d
(minor) Fix commented training.sh config
adriendupuis May 8, 2020
26cd8ca
Merge branch 'develop' into feature/automation
adriendupuis May 8, 2020
72d40eb
Fix path list; Avoid stop on nothing to commit; Change src test to pe…
adriendupuis May 8, 2020
2a738e3
Force first push to restart over previous training
adriendupuis May 11, 2020
0c61ef3
chmod +x training.sh;
adriendupuis May 11, 2020
a296a71
Clean-up training.sh a bit
adriendupuis May 11, 2020
a718717
Merge branch 'develop' into feature/automation
adriendupuis May 11, 2020
3ddde3b
training.sh: Increase verbosity; Ignore Exercise Cleaner's file
adriendupuis May 13, 2020
74e820a
training.sh: Fix path when using source code
adriendupuis May 13, 2020
5a03d24
README.md: Start talking about training.sh
adriendupuis May 13, 2020
399ce41
Merge branch 'develop' into feature/automation
adriendupuis May 15, 2020
e306d03
Merge branch 'develop' into feature/automation
adriendupuis May 27, 2020
7387df4
training.sh: update config file path
adriendupuis May 27, 2020
cf22bdb
README.md: Add Training to TOC
adriendupuis May 27, 2020
348b5b3
training.sh: Do not send bin and config; Better commit msg
adriendupuis May 27, 2020
4d2c5c3
training.sh: Verbose initialization
adriendupuis May 28, 2020
70e9569
training.sh: Re-display exercise-cleaner output (without color)
adriendupuis May 28, 2020
06112f4
README.md: Update workflow names
adriendupuis May 28, 2020
cbff70b
DefaultSingleCommand.php: Add --step-name option
adriendupuis May 28, 2020
71ea50b
training.sh: Use --step-name option
adriendupuis May 28, 2020
58ca79c
DefaultSingleCommand.php: Do not cast to float because a wrong step a…
adriendupuis May 28, 2020
2e81f36
Merge branch 'develop' into feature/automation
adriendupuis May 28, 2020
982f3b3
Merge branch 'develop' into feature/automation
adriendupuis May 28, 2020
c98cc85
training.sh: ignore .github/
adriendupuis May 28, 2020
8958b4a
Refactorize file ignorance
adriendupuis May 28, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Exercise Cleaner
- [Tags](#tags)
- [Command](#command)
- [Config File](#config-file)
- [Training](#training)
* [Development](#development)
- [Development Requirements](#development-requirements)
- [Compile Phar](#compile-phar)
Expand Down Expand Up @@ -422,6 +423,17 @@ files:
./exercise-cleaner.phar --config exercise-cleaner.yml 2 examples/ --solution;
```

### Training

To run a training, training.sh script can be used as a base. Feel free to copy to your project and adapt to your needs.

The distributed training.sh is actually configured to run a training example from Exercise Cleaner repository itself.

```
rm -rf ~/training;
./training.sh;
```


Development
-----------
Expand Down
113 changes: 113 additions & 0 deletions training.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#!/usr/bin/env zsh

# USAGE:
# Set remote_*, local_working_directory, exercise_cleaner, path_list and step_list variables according to your needs

# Training repository config:
remote_training_repository='[email protected]:adriendupuis/training.git';
remote_training_branch='master';

# Reference repository config:
remote_reference_repository='https://github.com/adriendupuis/exercise-cleaner';
remote_reference_branch='feature/automation';
#remote_reference_branch='develop';

# Local repositories config:
local_working_directory=~/training;
local_training_repository='training';
local_training_branch='training';
local_reference_repository='reference';
local_reference_branch=$remote_reference_branch; # TODO: Make this variable customizable
#local_reference_branch='reference';

# Exercises config:
exercise_cleaner_bin='src/Application.php';
#exercise_cleaner_bin='./exercise-cleaner.phar';
exercise_cleaner_config='examples/config.yaml';
path_list=(examples/);
step_list=(1 1.1 1.2 2 3);
state_list=('exercise' 'solution');
ignore_list=(.github/); # Exercise Cleaner elements will be added to this list expect if running on Exercise Cleaner repository itself.

if [ -e $local_working_directory ]; then
echo "Error: $local_working_directory already exists.";
exit 1;
fi;

if [ ! -f $exercise_cleaner_bin ]; then
echo "Error: $exercise_cleaner_bin not found.";
exit 2;
fi;

if [ -n "$exercise_cleaner_config" ]; then
if [ -f $exercise_cleaner_config ]; then
exercise_cleaner="$exercise_cleaner_bin --config $exercise_cleaner_config";
else
echo "Error: $exercise_cleaner_config not found.";
exit 3;
fi;
else
exercise_cleaner="$exercise_cleaner_bin"
fi;

if [[ $exercise_cleaner_bin != *'Application.php'* ]]; then
ignore_list+=($0 $exercise_cleaner_bin $exercise_cleaner_config)
fi;

# Stop on error
set -e;

echo 'Initialization: Clone reference branch';
git clone --single-branch --depth 1 --origin $local_reference_repository $remote_reference_repository --branch $remote_reference_branch $local_working_directory;
cd $local_working_directory;
if [[ $exercise_cleaner_bin == *'Application.php'* ]]; then
echo 'Notice: Running source code (instead of phar archive); Composer install is needed.';
composer install --no-dev;
exercise_cleaner="php $exercise_cleaner";
fi
eval "$exercise_cleaner --version;";
echo 'Initialization: Add remote training repository';
git remote add $local_training_repository $remote_training_repository;
git remote -v;
echo 'Initialization: Create local training branch';
git checkout --orphan $local_training_branch;
echo 'Initialization: Ignore Exercise Cleaner and GitHub Actions';
{
echo "###> training ###";
for ignored_path in $ignore_list; do
echo "$ignored_path";
done;
echo "###< training ###"
} >> .gitignore;
git add .gitignore;
git rm -r --cached $ignore_list;
echo 'Initialization: Apply and commit step 0';
eval "$exercise_cleaner --verbose 0 $path_list";
git add $path_list;
git commit --message "Initialization";
echo 'Initialization: Force push step 0 on remote training branch (replace possible previous content)';
git push --force --set-upstream $local_training_repository $local_training_branch:$remote_training_branch;
git branch -vv;

echo "\nTraining: Entering steps' loop\n";
for step in $step_list; do
for state in $state_list; do
echo "Prepare step $step $state…";
git checkout $local_reference_branch -- $path_list;
git reset $ignore_list;
eval "$exercise_cleaner $step --$state $path_list";
name=`eval "$exercise_cleaner --step-name $step";`
git add $path_list;
if [[ -n "$(git status --short;)" ]]; then
git commit --quiet --message "$state: step $step “$name”";
echo "Step $step $state ready: Press 'enter' key to push it to training's remote repository…";
read -r -n 0;
echo "Push step $step $state…\n";
git push --quiet $local_training_repository $local_training_branch:$remote_training_branch;
else
echo "Nothing to update for this step and state.\n"
fi
done;
done;

exit 0;