-
Notifications
You must be signed in to change notification settings - Fork 74
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CI: modify to reusable workflow #482
Changes from 41 commits
0e9ab68
95bdf3e
fa82ebe
55c303e
b0ea833
ce0da9e
ef701ab
b7dcc8b
5371770
df793dd
b00bb1e
3ffae7b
93aa63a
a62c1cc
f65b397
1b93218
f6eb6db
2b3bf15
8e3cf21
9d0b89d
9a4da90
d565e5b
c8f6547
e1c8c55
483526a
653707f
5ddc728
58f05e1
24e20d2
a84d5d9
29b8d1b
5928cd8
90f4781
6d4a2e1
2147cb8
8701afa
0776892
e1ef485
6c21b2c
e3d60cd
604ffcd
82fd457
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#!/usr/bin/env sh | ||
set -ex | ||
|
||
cmake \ | ||
-B build/ \ | ||
-G Ninja \ | ||
-DCMAKE_INSTALL_PREFIX="build/dist/" \ | ||
-DBUILD_TESTING=ON \ | ||
"${CMAKE_FLAGS_EXTRA}" | ||
|
||
ninja -j$(nproc) -C build install |
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#!/usr/bin/env sh | ||
set -ex | ||
|
||
ninja -j$(nproc) -C build tests/test |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,8 @@ | ||
#!/bin/sh | ||
#!/usr/bin/env sh | ||
set -ex | ||
|
||
# install everest testing by cmake target to make sure using the version defined in dependencies.yaml | ||
ninja -C build install_everest_testing | ||
|
||
cd tests | ||
pytest --everest-prefix ../dist core_tests/*.py framework_tests/*.py | ||
pytest --everest-prefix ../build/dist core_tests/*.py framework_tests/*.py |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,27 @@ | ||
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: | ||
|
@@ -16,54 +37,110 @@ on: | |
|
||
jobs: | ||
build: | ||
name: Build, Lint and Test | ||
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: Setup cache | ||
uses: actions/cache@v3 | ||
- name: Restore cache | ||
uses: actions/cache/restore@v3 | ||
id: restore-cache | ||
with: | ||
path: cache | ||
path: ${{ env.CACHE_PATH }} | ||
key: compile-${{ env.branch_name_for_cache }}-${{ github.sha }} | ||
restore-keys: | | ||
compile-${{ env.branch_name_for_cache }}- | ||
compile- | ||
- name: Checkout everest-core | ||
uses: actions/checkout@v3 | ||
- 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: source | ||
- name: Run clang-format | ||
uses: everest/everest-ci/github-actions/[email protected] | ||
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: | ||
source-dir: source | ||
extensions: hpp,cpp | ||
exclude: cache | ||
- name: Setup run scripts | ||
run: | | ||
mkdir scripts | ||
rsync -a source/.ci/build-kit/ scripts | ||
path: ${{ env.SOURCE_DIR }} | ||
repository: ${{ inputs.repository }} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This doesn't seem like the right way to set up a reusable workflow. When someone makes a fork, the CI instructions on their forked branches will point to whatever original repository is passed in, for example, EVerest/libocpp. What should happen is that the current branch that initialized the workflow should run, fetching the branch from the forked repository. In the current state, this fails at the checkout stage because we can't check out the original repository from our fork. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't see the problem in the way the In the example of To enable workflows running on forks I suggest the use of the env variables -> In both examples I would replace the line with There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't the reusable workflow use that by default? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. yeah, maybe this parameter is obsolete, not sure about this.. I will spend some time on this in the next weeks to figure those things out |
||
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: Compile | ||
- 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 "$(pwd):/ext" \ | ||
--name compile-container \ | ||
build-kit run-script compile | ||
- name: Create integration-image | ||
--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 compile-container build-image | ||
docker commit build-container unit-tests-image | ||
docker run \ | ||
--volume "$(pwd):/ext" \ | ||
--name test-container \ | ||
build-image run-script test_and_install | ||
docker commit test-container integration-image | ||
- name: Run integration tests | ||
--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: | | ||
pushd source/.ci/e2e | ||
docker-compose run e2e-test-server run-script tests | ||
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 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,4 @@ | ||
*build | ||
*build-cross | ||
/build*/ | ||
.cache/ | ||
workspace.yaml | ||
.vscode/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@andistorm Do you know a solution for this? Otherwise, I would just set it to
main
for now.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would suggest to not checkout the ci repo in the workflow, but to use custom github actions. There are multiple options for github actions:
composite actions
that are similiar toreusable workflows
,Javascript actions
andDocker container actions
. The last one would be an option to include additional filesto the action.I could also imagine a solution with having the bash scripts in each repo with "custom" commands and cmake flags..