Skip to content

#2: implement common docker containers #352

#2: implement common docker containers

#2: implement common docker containers #352

# Template workflow (Github Workflows)
# Build and test a project in all available setup configurations configured in DARMA-taking/workflows
# See also: Azure Pipelines version at ci/azure/build-and-test-azure.yml
# WIP: This is currently a work in progress (#2: Docker image usage)
# ***: TODO only once this workflow file works and is completed
name: PR tests
on:
push:
branches:
- master
pull_request:
branches:
- '*'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CI_REPO: DARMA-tasking/workflows
CI_BRANCH: 2-implement-common-docker-containers # should be master in the future
jobs:
get-matrix:
name: Get matrix
runs-on: ubuntu-latest
steps:
- name: Get matrix
id: get-matrix
run: |
wget https://raw.githubusercontent.com/${{ env.CI_REPO }}/refs/heads/${{ env.CI_BRANCH }}/ci/shared/matrix/github.json
matrix=$(cat github.json | jq '.matrix')
echo "runner=$(echo $matrix)" >> $GITHUB_OUTPUT
outputs:
matrix: ${{ steps.get-matrix.outputs.runner }}
run:
name: Run ${{ matrix.runner.name }}
runs-on: ${{ matrix.runner.runs-on }}
needs: get-matrix
strategy:
fail-fast: false
matrix:
runner: ${{ fromJson(needs.get-matrix.outputs.matrix ) }}
steps:
- name: Display configuration
run: |
echo "Environment=${{ matrix.runner.name }}"
echo "Runner=${{ matrix.runner.runs-on }}"
if [ "${{ matrix.runner.image }}" != "" ]
then
echo "> With Docker Image=${{ matrix.runner.image }}"
else
echo "> With Runner Setup=${{ matrix.runner.setup }}"
fi
- name: Set up dependencies
run: |
if [[ "${{ matrix.runner.image }}" == "" ]]; then
echo "::group::Setup in runner"
echo "Set setup permissions..."
sudo mkdir -p /opt
sudo chown $(whoami) /opt
wget -O setup.sh https://raw.githubusercontent.com/${{ env.CI_REPO }}/refs/heads/${{ env.CI_BRANCH }}/ci/shared/scripts/setup-${{ matrix.runner.setup }}.sh
chmod +x setup.sh
export SETUP_ID=${{ matrix.runner.setup }}
./setup.sh
echo "::endgroup::"
elif [[ "${{ matrix.runner.image }}" != "" ]]; then
echo "::group::Pull Docker image"
docker image pull ${{ matrix.runner.image }}
echo "::endgroup::"
fi
- name: Run (example)
run: |
CMD="uname -a"
if [[ "${{ matrix.runner.image }}" == "" ]]
then
$CMD
else
docker run ${{ matrix.runner.image }} $CMD
fi
- name: Extract timestamps for caching
run: |
mkdir -p /opt/scripts
cd /opt/scripts
wget https://raw.githubusercontent.com/${{ env.CI_REPO }}/refs/heads/${{ env.CI_BRANCH }}/ci/shared/scripts/runner/set-variable.sh && chmod +x set-variable.sh
wget https://raw.githubusercontent.com/${{ env.CI_REPO }}/refs/heads/${{ env.CI_BRANCH }}/ci/shared/scripts/runner/set-timestamps.sh && chmod +x set-timestamps.sh
./set-timestamps.sh
- name: Setup build cache (vt)
run: |
echo "TODO"
- name: PR tests (vt)
if: ${{ contains(matrix.runner.label, 'mpich') || contains(matrix.runner.label, 'openmpi') }}
run: |
CMD='mkdir -p "/opt/vt/src" "/opt/vt/build/vt" ; \
git clone https://github.com/DARMA-tasking/vt /opt/vt/src ; \
cd /opt/vt/src ; \
bash ci/build_cpp.sh /opt/vt/src /opt/vt/build ; \
bash ci/test_cpp.sh /opt/vt/src /opt/vt/build ; \
bash ci/build_vt_sample.sh /opt/vt/src /opt/vt/build ;
rm -rf "/opt/vt/src" "/opt/vt/build"'
echo "Running ${CMD}"
if [[ "${{ matrix.runner.image }}" == "" ]]; then
bash -c "$CMD";
else
docker run \
--name test-container \
-e CI="1" \
-e CMAKE_CXX_STANDARD="17" \
-e CMAKE_BUILD_TYPE="Release" \
${{ matrix.runner.image }} \
bash -c "$CMD"
exit $(docker container inspect --format '{{.State.ExitCode}}' test-container)
fi
# - name: Build and test
# TODO: Build an test step.
# > Option 1: Docker image (Environment Setup="docker") WIP
# - pull the docker image
# - build & Test using `docker exec [container] build_and_test.sh` for example or by using an inner build_and_test docker image
# - (TODO: copy artifacts using a volume)
# > Option 2: Current runner (Environment Setup="local") (Future for some macos)
# - setup dependencies here directly
# (Here a work needs to be done to determine how to get the dependencies script. It might be shared by the workflows repo and put in matrix)
# - build & Test using build_and_test.sh
# - name: Upload artifacts
# - name: Report test results
# note: (as in vt-tv or LBAF)
# - name: Report coverage