CI: modify to reusable workflow #983
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, Lint 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 | |
cmake_flags_extra: | |
description: additional flags to add to the common set of flags (see `.ci/build-kit/compile.sh`) | |
type: string | |
unit_tests: | |
description: Whether to run unit-tests or not | |
type: boolean | |
required: true | |
integration_tests: | |
description: Whether 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 and Test | |
runs-on: ${{ inputs.runner || 'ubuntu-22.04' }} | |
env: | |
CACHE_PATH: cache | |
CI_REPO: EVerest/everest-core | |
CI_REPO_DIR: ci-repo | |
SOURCE_DIR: source | |
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: ${{ env.CACHE_PATH }} | |
key: compile-${{ env.branch_name_for_cache }}-${{ github.sha }} | |
restore-keys: | | |
compile-${{ env.branch_name_for_cache }}- | |
compile- | |
- name: Checkout `${{ env.CI_REPO }}` to `${{ env.CI_REPO_DIR }}/` (for reusable workflow mode, see https://stackoverflow.com/a/74123003/1168315) | |
uses: actions/checkout@v4 | |
with: | |
path: ${{ env.CI_REPO_DIR }} | |
repository: ${{ env.CI_REPO }} | |
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 }} to `${{ env.SOURCE_DIR }}/` | |
uses: actions/checkout@v4 | |
with: | |
path: ${{ env.SOURCE_DIR }} | |
repository: ${{ inputs.repository }} | |
ref: ${{ inputs.repository_ref }} | |
- name: Pull build-kit image | |
run: | | |
docker pull --quiet ghcr.io/everest/build-kit-alpine:latest | |
docker image tag ghcr.io/everest/build-kit-alpine:latest build-kit | |
- name: Build and install | |
env: | |
CMAKE_FLAGS_EXTRA: ${{ inputs.cmake_flags_extra || '-DEVC_ENABLE_CCACHE=1 -DISO15118_2_GENERATE_AND_INSTALL_CERTIFICATES=OFF' }} | |
run: | | |
ls -hal . | |
docker run \ | |
--volume "${CACHE_PATH:?}:/ext/cache" \ | |
--volume "$(pwd)/${CI_REPO_DIR:?}/.ci:/.ci" \ | |
--volume "$(pwd)/${SOURCE_DIR:?}:/source" \ | |
--workdir "/source" \ | |
--env CMAKE_FLAGS_EXTRA="${CMAKE_FLAGS_EXTRA:?}" \ | |
--name build-container \ | |
build-kit /.ci/build-kit/build_install.sh | |
- name: upload CMake output & error logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: build-install-logs | |
path: build/CMakeFiles/ | |
- name: Unit tests | |
if: ${{ inputs.unit_tests || false }} | |
run: | | |
docker commit build-container unit-tests-image | |
docker run \ | |
--volume "$(pwd)/${CI_REPO_DIR:?}/.ci:/.ci" \ | |
--volume "$(pwd)/${SOURCE_DIR:?}:/source" \ | |
--workdir "/source" \ | |
--name test-container \ | |
unit-tests-image /.ci/build-kit/unit_tests.sh | |
- name: Integration tests | |
if: ${{ inputs.integration_tests || true }} | |
run: | | |
docker commit build-container integration-tests-image | |
docker-compose --file ${CI_REPO_DIR:?}/.ci/e2e/docker-compose.yaml \ | |
run \ | |
--volume "$(pwd)/${CI_REPO_DIR:?}/.ci:/.ci" \ | |
--volume "$(pwd)/${SOURCE_DIR:?}:/source" \ | |
--workdir "/source" \ | |
e2e-test-server /.ci/e2e/scripts/tests.sh | |
- name: FIXME own all files in cache by current user and group | |
# FIXME Workaround for non-readable certs in `cache/josev/[ID]/Josev/iso15118/shared/pki/iso15118_2/certs . See https://github.com/EVerest/everest-core/actions/runs/7286554315/job/19855498928#step:13:10 | |
if: always() | |
run: | | |
sudo chown --recursive $(id --user --name):$(id --user --name) ${CACHE_PATH} | |
- name: Store cache | |
uses: actions/cache/save@v3 | |
if: always() | |
with: | |
path: ${{ env.CACHE_PATH }} | |
key: ${{ steps.restore-cache.outputs.cache-primary-key }} | |
- name: upload test results | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ctest-report | |
path: ${{ env.SOURCE_DIR }}/build/Testing/Temporary/ | |
lint: | |
name: Lint C++/C files | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repo ${{ inputs.repository || 'EVerest/everest-core' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ inputs.repository }} | |
ref: ${{ inputs.repository_ref }} | |
- name: Run clang-format | |
uses: everest/everest-ci/github-actions/[email protected] | |
with: | |
source-dir: . # FIXME Make sure `.` is the default to remove this line. | |
extensions: hpp,cpp |