-
Notifications
You must be signed in to change notification settings - Fork 12
177 lines (172 loc) · 7.62 KB
/
testing.yml
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
name: Device Sequencer Test Suite
on:
push:
workflow_dispatch:
schedule:
- cron: '0 23 * * *'
concurrency:
group: ci-${{ github.repository }}
cancel-in-progress: true
env:
UDMI_REPO: ${{ vars.UDMI_REPO }}
UDMI_VERSION: ${{ vars.UDMI_VERSION }}
UPDATE_OPTS: ${{ vars.UPDATE_OPTS }}
SITE_MODEL: ${{ vars.SITE_MODEL }}
REFLECTOR_PKCS8_B64: ${{ secrets.REFLECTOR_PKCS8_B64 }}
DEVICE_NAME: ${{ vars.DEVICE_NAME }}
DEVICE_SERIAL: ${{ vars.DEVICE_SERIAL }}
PROJECT_ID: ${{ vars.PROJECT_ID }}
SITE_OPTS: ${{ vars.SITE_OPTS }}
PUBBER_OPTS: ${{ vars.PUBBER_OPTS }}
PUBBER_PKCS8_B64: ${{ secrets.PUBBER_PKCS8_B64 }}
KEYGEN_DEVICE: ${{ vars.KEYGEN_DEVICE }}
SEQUENCER_OPTS: ${{ vars.SEQUENCER_OPTS }}
SEQUENCER_TESTS: ${{ vars.SEQUENCER_TESTS }}
VALIDATOR_OPTS: ${{ vars.VALIDATOR_OPTS }}
VALIDATOR_TIMEOUT: ${{ vars.VALIDATOR_TIMEOUT }}
defaults:
run:
shell: bash -e -c "source ~/udmi/etc/actions_init.sh; source {0}"
jobs:
udmis:
name: Site model actions
runs-on: ubuntu-latest
timeout-minutes: 30
if: vars.UDMI_REPO != ''
steps:
- name: Checkout site model source
uses: actions/checkout@v3
- name: Clone UDMI tools
shell: bash -e {0}
run: |
echo Cloning UDMI tools repo...
[[ -n $UDMI_REPO ]] || (echo UDMI_REPO not defined.; false)
[[ -n $UDMI_VERSION ]] || UDMI_VERSION=$(git rev-parse --abbrev-ref HEAD)
[[ -n $UDMI_VERSION ]] || (echo UDMI_VERSION not defined.; false)
cd $HOME
git clone $UDMI_REPO
cd udmi
echo Switching to UDMI_VERSION $UDMI_VERSION
git switch $UDMI_VERSION
git log -n 1
- name: Perform environment sanity check
run: |
steps to check to see that required env variables are defined.
[[ -n $UDMI_BIN ]] || fail UDMI_BIN not defined.
[[ -n $PROJECT_ID ]] || fail PROJECT_ID not defined.
[[ -n $SITE_MODEL ]] || fail SITE_MODEL not defined.
- name: Setup Java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Setup UDMI
run: |
steps to setup UDMI tools and dependencies
$UDMI_BIN/setup_base
- name: Setup reflector key
if: env.REFLECTOR_PKCS8_B64 != ''
run: |
steps to setup the UDMI reflector key from environment REFLECTOR_PKCS8_B64.
mkdir -p $SITE_MODEL/reflector/
keyfile=$SITE_MODEL/reflector/rsa_private.pkcs8
echo $REFLECTOR_PKCS8_B64 | tr -d ' \n' | base64 --decode > $keyfile
md5sum $keyfile
- name: Upgrade UDMIS install
if: vars.UPDATE_OPTS != ''
run: |
steps to update GKE udmis k8s install
echo $UDMI_BIN/update_udmis $SITE_MODEL $PROJECT_ID
$UDMI_BIN/update_udmis $SITE_MODEL $PROJECT_ID
- name: Generate device key pair
if: vars.KEYGEN_DEVICE != ''
run: |
steps to generate rsa key pair for device KEYGEN_DEVICE
rm -f $SITE_MODEL/devices/$KEYGEN_DEVICE/rsa_*.*
auth_type=$(jq -r .cloud.auth_type $SITE_MODEL/devices/$KEYGEN_DEVICE/metadata.json)
echo Extracted auth_type $auth_type from device metadata file
echo $UDMI_BIN/keygen $auth_type $SITE_MODEL/devices/$KEYGEN_DEVICE
$UDMI_BIN/keygen $auth_type $SITE_MODEL/devices/$KEYGEN_DEVICE
md5sum $SITE_MODEL/devices/$KEYGEN_DEVICE/rsa_private.pkcs8
- name: Perform registrar complete site run
if: vars.SITE_OPTS != ''
run: |
steps to registrar on the entire site.
md5sum $SITE_MODEL/reflector/rsa_private.pkcs8
echo $UDMI_BIN/registrar $SITE_MODEL $PROJECT_ID $SITE_OPTS
$UDMI_BIN/registrar $SITE_MODEL $PROJECT_ID $SITE_OPTS
- name: Perform registrar device-only run
if: vars.SITE_OPTS == ''
run: |
steps to registrar just the device DEVICE_NAME.
md5sum $SITE_MODEL/reflector/rsa_private.pkcs8
[[ -z DEVICE_NAME ]] && fail DEVICE_NAME not defined.
echo $UDMI_BIN/registrar $SITE_MODEL $PROJECT_ID $DEVICE_NAME
$UDMI_BIN/registrar $SITE_MODEL $PROJECT_ID $DEVICE_NAME
- name: Output of registrar errors
run: |
steps to show a summary of registrar errors.
more $SITE_MODEL/devices/*/out/e* | cat
- name: Startup testing pubber instance
if: vars.PUBBER_OPTS != ''
run: |
steps to run pubber for device DEVICE_NAME, maybe with key from PUBBER_PKCS8_B64.
[[ -z DEVICE_NAME ]] && fail DEVICE_NAME not defined.
[[ -z DEVICE_SERIAL ]] && fail DEVICE_SERIAL not defined.
[[ -n $PUBBER_PKCS8_B64 ]] && $UDMI_BIN/augment_auth $SITE_MODEL $DEVICE_NAME "$PUBBER_PKCS8_B64"
echo $UDMI_BIN/pubber $SITE_MODEL $PROJECT_ID $DEVICE_NAME $DEVICE_SERIAL $PUBBER_OPTS
$UDMI_BIN/pubber $SITE_MODEL $PROJECT_ID $DEVICE_NAME $DEVICE_SERIAL $PUBBER_OPTS > $HOME/pubber.out 2>&1 &
PUBBER_PID=$!
sleep 60 # Wait for connection retries, and supported features file.
$UDMI_BIN/augment_metadata $SITE_MODEL $DEVICE_NAME
more $HOME/pubber.out | cat
[[ -d /proc/$PUBBER_PID ]] || fail pubber instance no longer running
- name: Perform site-wide validator run
if: vars.VALIDATOR_OPTS != ''
run: |
steps to validate all site telemetry.
[[ -n VALIDATOR_TIMEOUT ]] || echo Defaulting VALIDATOR_TIMEOUT to 10m
echo timeout ${VALIDATOR_TIMEOUT:-10m} $UDMI_BIN/validator $SITE_MODEL $PROJECT_ID $VALIDATOR_OPTS
timeout ${VALIDATOR_TIMEOUT:-10m} $UDMI_BIN/validator $SITE_MODEL $PROJECT_ID $VALIDATOR_OPTS || true
- name: Validator results
if: vars.VALIDATOR_OPTS != ''
run: |
more $SITE_MODEL/out/validation_report.json | cat
- name: Perform device sequencer run
if: vars.SEQUENCER_OPTS != ''
run: |
steps to run a complete sequence test on device DEVICE_NAME.
[[ -z DEVICE_NAME ]] && fail DEVICE_NAME not defined.
[[ -z DEVICE_SERIAL ]] && fail DEVICE_SERIAL not defined.
echo $UDMI_BIN/sequencer $SEQUENCER_OPTS $SITE_MODEL $PROJECT_ID $DEVICE_NAME $DEVICE_SERIAL $SEQUENCER_TESTS
$UDMI_BIN/sequencer $SEQUENCER_OPTS $SITE_MODEL $PROJECT_ID $DEVICE_NAME $DEVICE_SERIAL $SEQUENCER_TESTS | tee sequencer.log
cp $SITE_MODEL/out/devices/$DEVICE_NAME/results.md $GITHUB_STEP_SUMMARY
- name: Sequencer results
if: vars.SEQUENCER_OPTS != ''
run: |
steps to show sequencer results.
RESULT_LOG=$SITE_MODEL/out/devices/${DEVICE_NAME}/RESULT.log
sort -k 4 $RESULT_LOG | sponge $RESULT_LOG
more $SITE_MODEL/out/sequencer_${DEVICE_NAME}.json $RESULT_LOG | cat
if [[ -d expected ]]; then
echo
echo ::::::::::::::
echo Checking diff -u expected/sequencer-results_${DEVICE_NAME}.log $RESULT_LOG
diff -u expected/sequencer-results_${DEVICE_NAME}.log $RESULT_LOG
fi
- name: sequence test timing
if: ${{ always() && vars.SEQUENCER_OPTS != '' }}
run: fgrep ' ending test ' sequencer.log
- name: Pubber output log
if: vars.PUBBER_OPTS != ''
run: more $HOME/pubber.out | cat
- name: Create support bundle
if: ${{ always() }}
run: $UDMI_BIN/support
- name: Upload support bundle
uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
if-no-files-found: error
name: udmi-support_${{ github.run_id }}-${{ github.run_attempt }}
path: 'udmi-support_*.tgz'