-
Notifications
You must be signed in to change notification settings - Fork 80
146 lines (145 loc) · 5.59 KB
/
build_and_test.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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