#2: implement common docker containers #352
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
# 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 |