Skip to content

CI: modify to reusable workflow #872

CI: modify to reusable workflow

CI: modify to reusable workflow #872

Workflow file for this run

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 }}