-
Notifications
You must be signed in to change notification settings - Fork 18
160 lines (143 loc) · 5.24 KB
/
build.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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
name: Build, Upload and Test
on:
push:
branches:
- master
pull_request:
branches:
- master
- release/*
workflow_dispatch:
inputs:
frontend_branch:
description: 'Branch of FrontEnd to use'
required: true
default: 'master'
env:
SCRIPT_PATH: /opt/actions-runner-external/script
CACHE_PATH: /opt/actions-runner-external/cache
TEST_FAILED: false
jobs:
build:
if: github.event.pull_request.draft == false
runs-on: self-hosted
defaults:
run:
shell: bash -leo pipefail {0}
steps:
# Checkout repo
- name: Checkout code
uses: actions/checkout@v4
with:
path: CraneSched
# Checkout frontend
- name: Checkout frontend
uses: actions/checkout@v4
with:
repository: PKUHPC/CraneSched-FrontEnd
path: CraneSched-FrontEnd
ref: ${{ inputs.frontend_branch }}
# Pull CI Image and Prepare
- name: Pull CI Image
run: |
podman pull ghcr.io/nativu5/cranedev:ci
echo "Linking $SCRIPT_PATH to $(pwd)/script"
ln -sfT $SCRIPT_PATH $(pwd)/script
echo "Linking $CACHE_PATH to $(pwd)/cache"
ln -sfT $CACHE_PATH $(pwd)/cache
mkdir -p output
mkdir -p log
- name: Build in Container
run: |
podman run --rm \
-v ./CraneSched:/Workspace/CraneSched \
-v ./CraneSched-FrontEnd:/Workspace/CraneSched-FrontEnd \
-v ./output:/Workspace/output \
-v ./script:/Workspace/script \
-v ./cache/ccache:/root/.ccache \
ghcr.io/nativu5/cranedev:ci /bin/bash --login script/build.sh
# Collect and upload artifacts
- name: Count Artifacts
run: |
ARTIFACT_NAME_CRANED_DEB=$(basename $(ls output/*craned.deb))
ARTIFACT_NAME_CRANED_RPM=$(basename $(ls output/*craned.rpm))
ARTIFACT_NAME_CRANECTLD_DEB=$(basename $(ls output/*cranectld.deb))
ARTIFACT_NAME_CRANECTLD_RPM=$(basename $(ls output/*cranectld.rpm))
ARTIFACT_NAME_FRONTEND=bin
ARTIFACT_NAME_PLUGIN=plugin
echo "ARTIFACT_NAME_CRANED_DEB=$ARTIFACT_NAME_CRANED_DEB" >> $GITHUB_ENV
echo "ARTIFACT_NAME_CRANED_RPM=$ARTIFACT_NAME_CRANED_RPM" >> $GITHUB_ENV
echo "ARTIFACT_NAME_CRANECTLD_DEB=$ARTIFACT_NAME_CRANECTLD_DEB" >> $GITHUB_ENV
echo "ARTIFACT_NAME_CRANECTLD_RPM=$ARTIFACT_NAME_CRANECTLD_RPM" >> $GITHUB_ENV
echo "ARTIFACT_NAME_FRONTEND=$ARTIFACT_NAME_FRONTEND" >> $GITHUB_ENV
echo "ARTIFACT_NAME_PLUGIN=$ARTIFACT_NAME_PLUGIN" >> $GITHUB_ENV
- name: Upload craned .deb package
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_CRANED_DEB }}
path: output/${{ env.ARTIFACT_NAME_CRANED_DEB }}
retention-days: 14
if-no-files-found: error
- name: Upload craned .rpm package
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_CRANED_RPM }}
path: output/${{ env.ARTIFACT_NAME_CRANED_RPM }}
retention-days: 14
if-no-files-found: error
- name: Upload cranectld .deb package
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_CRANECTLD_DEB }}
path: output/${{ env.ARTIFACT_NAME_CRANECTLD_DEB }}
retention-days: 14
if-no-files-found: error
- name: Upload cranectld .rpm package
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_CRANECTLD_RPM }}
path: output/${{ env.ARTIFACT_NAME_CRANECTLD_RPM }}
retention-days: 14
if-no-files-found: error
- name: Upload frontend
uses: actions/upload-artifact@v4
with:
name: frontend
path: output/${{ env.ARTIFACT_NAME_FRONTEND }}
retention-days: 14
if-no-files-found: error
- name: Upload plugin
uses: actions/upload-artifact@v4
with:
name: plugin
path: output/${{ env.ARTIFACT_NAME_PLUGIN }}
retention-days: 14
if-no-files-found: error
# Run AutoTest
- name: Run AutoTest
continue-on-error: true
run: |
NETWORK_ID=$(podman container inspect mongodb | jq -r '.[0].NetworkSettings.Networks | keys[]')
podman run -d --rm --name autotest \
--privileged \
--systemd true \
-v /lib/modules:/lib/modules:ro \
-v ./script:/CraneSched-AutoTest/script \
-v ./output:/CraneSched-AutoTest/output \
-v ./log:/CraneSched-AutoTest/log \
--network $NETWORK_ID \
localhost/autotest
podman exec autotest /bin/bash --login script/run.sh || echo "TEST_FAILED=true" >> $GITHUB_ENV
podman stop autotest
# Upload AutoTest Results
- name: Upload AutoTest Results
uses: actions/upload-artifact@v4
with:
name: result.json
path: output/result.json
retention-days: 14
if-no-files-found: error
# Alarm if has failed cases
- name: Alarm on test failure
if: env.TEST_FAILED == 'true'
run: exit 1