Skip to content
Merged
Changes from all commits
Commits
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
140 changes: 85 additions & 55 deletions .github/workflows/ci-docker.yml
Original file line number Diff line number Diff line change
@@ -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:
Expand All @@ -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:
Expand All @@ -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 }}
- 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 }}
Loading