Running docker build only for changed methods #110
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Docker CI | |
on: | |
push: | |
branches: | |
- docker-compose | |
- main | |
paths: | |
- 'algorithms/**' | |
- 'experiment/methods/**' | |
- '.github/workflows/**' | |
pull_request: | |
branches: | |
- docker-compose | |
paths: | |
- 'algorithms/**' | |
- 'experiment/methods/**' | |
- '.github/workflows/**' | |
jobs: | |
list-algs: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- uses: actions/checkout@v3 | |
- id: set-matrix | |
run: echo "::set-output name=matrix::$(ls algorithms/ | jq -R -s -c 'split("\n")[:-1]')" | |
check-changes: | |
runs-on: ubuntu-latest | |
outputs: | |
changed-algs: ${{ steps.check.outputs.changed-algs }} | |
unchanged-algs: ${{ steps.check.outputs.unchanged-algs }} | |
changed-experiments: ${{ steps.check.outputs.changed-experiments }} | |
unchanged-experiments: ${{ steps.check.outputs.unchanged-experiments }} | |
changes-detected: ${{ steps.check.outputs.changes-detected }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- id: check | |
run: | | |
CHANGED_ALGS=$(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2 | tr '\n' ',') | |
UNCHANGED_ALGS=$(comm -23 <(ls algorithms/) <(echo "$CHANGED_ALGS")) | |
CHANGED_EXPERIMENTS=$(git diff --name-only HEAD~1..HEAD | grep '^experiment/methods/' | cut -d '/' -f 2 | tr '\n' ',') | |
UNCHANGED_EXPERIMENTS=$(comm -23 <(ls experiment/methods/) <(echo "$CHANGED_EXPERIMENTS")) | |
echo "::set-output name=changed-algs::$CHANGED_ALGS" | |
echo "::set-output name=unchanged-algs::$UNCHANGED_ALGS" | |
echo "::set-output name=changed-experiments::$CHANGED_EXPERIMENTS" | |
echo "::set-output name=unchanged-experiments::$UNCHANGED_EXPERIMENTS" | |
echo "::set-output name=changes-detected::$(test -z "$CHANGED_ALGS$CHANGED_EXPERIMENTS" && echo "false" || echo "true")" | |
print-changes: | |
runs-on: ubuntu-latest | |
needs: check-changes | |
outputs: | |
changed-algorithms: ${{ steps.print.outputs.changed-algorithms }} | |
steps: | |
- uses: actions/checkout@v3 | |
- id: print | |
run: | | |
echo "Changed algorithms:" | |
echo "${{ needs.check-changes.outputs.changed-algs }}" | |
echo "" | |
echo "Changed experiments:" | |
echo "${{ needs.check-changes.outputs.changed-experiments }}" | |
build-and-test: | |
runs-on: ubuntu-latest | |
needs: | |
- check-changes | |
- print-changes | |
- list-algs | |
defaults: | |
run: | |
shell: bash -l {0} | |
strategy: | |
matrix: | |
alg: ${{ fromJson(needs.list-algs.outputs.matrix) }} | |
fail-fast: false | |
if: needs.check-changes.outputs.changes-detected == 'true' | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Check if algorithm has changed | |
id: check_algorithm | |
run: | | |
CHANGED_ALGS=$(echo "${{ needs.check-changes.outputs.changed-algs }}" | tr ',' '\n') | |
if [[ "$CHANGED_ALGS" == *"${{ matrix.alg }}"* ]]; then | |
echo "::set-output name=should_run::true" | |
else | |
echo "::set-output name=should_run::false" | |
echo "::set-output name=status::skipped" | |
fi | |
- name: Print should_run status | |
run: | | |
echo "Should run: ${{ steps.check_algorithm.outputs.should_run }}" | |
- name: Build and Test Algorithm | |
if: steps.check_algorithm.outputs.should_run == 'true' | |
run: | | |
# Log in to Docker Hub | |
# docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_KEY }} | |
# Make docker-compose.yml file | |
bash scripts/make_docker_compose_file.sh | |
# Pull docker image | |
# docker compose pull ${{ matrix.alg }} | |
# Build docker image | |
# docker compose build ${{ matrix.alg }} | |
# Test docker image | |
docker compose run --build ${{ matrix.alg }} bash test.sh | |
# Push docker image | |
# docker compose push ${{ matrix.alg }} |