Skip to content

Commit

Permalink
#1: add first ci
Browse files Browse the repository at this point in the history
  • Loading branch information
tlamonthezie committed Nov 28, 2024
1 parent b81457d commit 43f88b9
Show file tree
Hide file tree
Showing 2 changed files with 157 additions and 4 deletions.
152 changes: 152 additions & 0 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
# Template workflow (Github Workflows). VT example.

# Build and test a project in all available setup configurations provided by DARMA-taking/workflows.
# See also: Azure Pipelines version at ./azure/pipelines/build-and-test.yml

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 # master
PROJECT: foo

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: Checkout
uses: actions/checkout@v4

- 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 WF_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: implement cache usage if required by your project"
- name: PR tests (${{ env.PROJECT }})
run: |
FOO_SRC_DIR=$PWD
FOO_BUILD_DIR=$PWD/build
if [[ "${{ matrix.runner.image }}" == "" ]]; then
FOO_SRC_DIR=opt/${{ env.PROJECT}}/src
FOO_BUILD_DIR=opt/${{ env.PROJECT}}/build
fi
CMD='
cd $FOO_SRC_DIR; \
chmod +x build.sh; \
\
FOO_BUILD_DIR=$FOO_BUILD_DIR \
FOO_COVERAGE_ENABLED=ON \
FOO_RUN_TESTS=ON \
build.sh;'
echo "Running ${CMD}"
if [[ "${{ matrix.runner.image }}" == "" ]]; then
bash -c "$CMD";
else
docker run \
--name test-container \
-v ${PWD}:/opt/${{ env.PROJECT }}/src \
-v ${PWD}/build:/opt/${{ env.PROJECT }}/build \
-v ${PWD}/output:/opt/${{ env.PROJECT }}/output \
-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
9 changes: 5 additions & 4 deletions build.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash

# Description: This script builds foo project
# Description: This script builds foo project and optionnaly run tests and coverage

set -e

Expand Down Expand Up @@ -35,7 +35,8 @@ PARENT_DIR="$(dirname "$CURRENT_DIR")"

CC="${CC:-$(which gcc || echo '')}"
CXX="${CXX:-$(which g++ || echo '')}"
FOO_DIR="${FOO_DIR:-$CURRENT_DIR}"
GCOV="${GCOV:-$(which gcov || echo '')}"
FOO_SRC_DIR="${FOO_SRC_DIR:-$CURRENT_DIR}"
FOO_BUILD_DIR="${FOO_BUILD_DIR:-$CURRENT_DIR/build}"
FOO_OUTPUT_DIR="${FOO_OUTPUT_DIR:-$CURRENT_DIR/output}"
# >> Build settings
Expand All @@ -50,7 +51,7 @@ FOO_WERROR_ENABLED=$(on_off ${FOO_WERROR_ENABLED:-OFF})
# >> Run tests settings
FOO_RUN_TESTS=$(on_off ${FOO_RUN_TESTS:-OFF})
FOO_RUN_TESTS_FILTER=${FOO_RUN_TESTS_FILTER:-""}
FOO_COVERAGE_REPORT=${FOO_COVERAGE_REPORT:-""}
FOO_COVERAGE_REPORT=${FOO_COVERAGE_REPORT:-"${FOO_OUTPUT_DIR}/cov.html"}

# >> CLI args support

Expand Down Expand Up @@ -177,7 +178,7 @@ if [[ "${FOO_BUILD}" == "ON" ]]; then
-DFOO_TESTS_ENABLED=${FOO_TESTS_ENABLED} \
-DFOO_COVERAGE_ENABLED=${FOO_COVERAGE_ENABLED} \
\
"${FOO_DIR}"
"${FOO_SRC_DIR}"

time cmake --build . --parallel -j "${FOO_CMAKE_JOBS}"

Expand Down

0 comments on commit 43f88b9

Please sign in to comment.