CI: modify to reusable workflow #872
Workflow file for this run
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
name: Build and test | |
on: | |
pull_request: {} | |
workflow_call: # defines it as reusable workflow | |
inputs: | |
repository: | |
description: The repo to checkout and run the workflow steps in | |
type: string | |
required: true | |
repository_ref: | |
description: The ref (branch, tag, commit-hash) of the `inputs.repository` | |
type: string | |
required: true | |
run_unit_tests: | |
description: Whether to run unit-tests or not | |
type: boolean | |
required: true | |
run_integration_tests: | |
description: Wether to run integration-tests or not | |
type: boolean | |
required: true | |
workflow_dispatch: | |
inputs: | |
runner: | |
description: Which runner to use | |
type: choice | |
default: 'ubuntu-22.04' | |
required: true | |
options: | |
- 'ubuntu-22.04' | |
- 'large-ubuntu-22.04-xxl' | |
schedule: | |
- cron: '37 13,1 * * *' | |
jobs: | |
build: | |
name: Build | |
runs-on: ${{ inputs.runner || 'ubuntu-22.04' }} | |
steps: | |
- name: Format branch name for cache key | |
run: | | |
BRANCH_NAME_FOR_CACHE="${GITHUB_REF_NAME//-/_}" | |
echo "branch_name_for_cache=${BRANCH_NAME_FOR_CACHE}" >> "$GITHUB_ENV" | |
- name: Restore cache | |
uses: actions/cache/restore@v3 | |
id: restore-cache | |
with: | |
path: cache # keep in sync with "Store cache" | |
key: compile-${{ env.branch_name_for_cache }}-${{ github.sha }} | |
restore-keys: | | |
compile-${{ env.branch_name_for_cache }}- | |
compile- | |
- name: Checkout from `everest-core` the `.ci/` directory (reusable workflow mode, see https://stackoverflow.com/a/74123003/1168315) | |
uses: actions/checkout@v4 | |
with: | |
sparse-checkout: | | |
.ci | |
repository: EVerest/everest-core | |
ref: CI/reusable-workflow # TODO get reference in general, see https://stackoverflow.com/questions/74784735 resp. https://github.com/actions/toolkit/issues/1264 | |
- name: Checkout repo ${{ inputs.repository || 'EVerest/everest-core' }} to directory `source/` | |
uses: actions/checkout@v4 | |
with: | |
path: source/ | |
repository: ${{ inputs.repository }} | |
ref: ${{ inputs.repository_ref }} | |
- name: Run clang-format | |
uses: everest/everest-ci/github-actions/[email protected] | |
with: | |
source-dir: source | |
extensions: hpp,cpp | |
exclude: cache | |
- name: Setup run scripts # FIXME update `build-kit` to not use the `scripts/`-dir implicitly | |
run: | | |
mkdir scripts | |
rsync -a .ci/build-kit/ scripts | |
- name: Pull docker container | |
run: | | |
docker pull --quiet ghcr.io/everest/build-kit-alpine:latest | |
docker image tag ghcr.io/everest/build-kit-alpine:latest build-kit | |
- name: Compile | |
run: | | |
docker run \ | |
--volume "$(pwd):/ext" \ | |
--name compile-container \ | |
build-kit run-script compile | |
- name: Unit tests and install | |
if: ${{ inputs.run_unit_tests || false }} | |
run: | | |
docker commit compile-container build-image | |
docker run \ | |
--volume "$(pwd):/ext" \ | |
--name test-container \ | |
build-image run-script unit_tests | |
- name: Run integration tests | |
if: ${{ inputs.run_integration_tests || true }} | |
run: | | |
docker commit test-container integration-image | |
pushd .ci/e2e | |
docker-compose run e2e-test-server run-script e2e-test-server | |
- name: Store cache | |
uses: actions/cache/save@v3 | |
if: always() | |
with: | |
path: cache # keep in sync with "Restore cache" | |
key: ${{ steps.restore-cache.outputs.cache-primary-key }} |