diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index b5043003..eabf36eb 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -1,33 +1,23 @@ name: Docker CI -# Controls when the action will run. on: push: branches: - docker-compose - main - # paths: - # - 'algorithms/**' - # - 'experiment/**' - # - '.github/workflows/**' + paths: + - 'algorithms/**' + - 'experiment/methods/**' + - '.github/workflows/**' pull_request: branches: - docker-compose - # paths: - # - 'algorithms/**' - # - 'experiment/**' - # - '.github/workflows/**' - # workflow_dispatch: - -# env: -# USER: ${{ secrets.DOCKER_HUB_USERNAME }} -# PASS: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} -# APP: srbench + paths: + - 'algorithms/**' + - 'experiment/methods/**' + - '.github/workflows/**' jobs: - ################################################################################ - # get a list of algorithms - ################################################################################ list-algs: runs-on: ubuntu-latest outputs: @@ -36,13 +26,51 @@ jobs: - uses: actions/checkout@v3 - id: set-matrix run: echo "::set-output name=matrix::$(ls algorithms/ | jq -R -s -c 'split("\n")[:-1]')" - - ################################################################################ - # build each algorithm in parallel and run tests - ################################################################################ + + 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: @@ -51,37 +79,39 @@ jobs: matrix: alg: ${{ fromJson(needs.list-algs.outputs.matrix) }} fail-fast: false + if: needs.check-changes.outputs.changes-detected == 'true' steps: - - - name: Checkout code - uses: actions/checkout@v3 - # - name: Log in to Docker Hub - # uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a - # with: - # username: ${{ secrets.DOCKERHUB_USERNAME }} - # password: ${{ secrets.DOCKERHUB_KEY }} - - - name: Make docker-compose.yml file - run: bash scripts/make_docker_compose_file.sh - # - - # name: Pull docker image - # run: docker compose pull ${{ matrix.alg }} - # - - # name: Build docker image - # run: docker compose build ${{ matrix.alg }} - - - name: Test docker image - run: docker compose run --build ${{ matrix.alg }} bash test.sh - # - - # name: Push docker image - # run: docker compose push ${{ matrix.alg }} - ################################################################################ - # tests - ################################################################################ - # - - # name: Test Method - # run: | - # docker compose run ${{ matrix.alg }} bash test.sh - # - - # name: Push docker image - # run: docker compose push ${{ matrix.alg }} \ No newline at end of file + - 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 }}