-
-
Notifications
You must be signed in to change notification settings - Fork 12
144 lines (126 loc) · 4.85 KB
/
integration-test.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
name: pi-gen-action-integration-test
on:
workflow_dispatch:
inputs:
enable-noobs:
description: Enable NOOBS
default: true
required: false
type: boolean
compression-level:
description: Image compression level
default: 1
required: false
type: number
increase-runner-disk:
description: Increase runner root disk size
required: false
default: true
type: boolean
full-image:
description: Build all stages
default: false
required: false
type: boolean
push:
paths-ignore:
- '**.md'
- 'renovate.json'
branches:
- main
pull_request:
types: [ labeled, opened, synchronize, reopened ]
schedule:
# Run integration tests every other week to get notified on incompatible pi-gen changes
- cron: '0 0 1,15 * *'
env:
MOUNT_DIR: /mnt
ROOTFS_DIR: /mnt/root
CONFIG_TIMEZONE: Europe/Berlin
CONFIG_LOCALE: de_DE.UTF-8
CONFIG_USERNAME: pi-gen
CONFIG_HOSTNAME: pi-gen-test
CONFIG_PUBLIC_KEY: ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAoK4bf7Tj47S67Mf3aCsRPOcYU2F91xLBJ4U4n9jqgsAf75NWFX5UfoRQhWsGVsCYfA84ZTYIrIHMw57CLA2gM= [email protected]
jobs:
integration-test:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'test')
steps:
- name: Check out repository
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Compile action code before test
run: npm ci && npm run package
- name: Restore package cache
uses: actions/cache@v4
with:
path: apt-cache/
key: ${{ runner.os }}-${{ github.job }}
restore-keys: |
${{ runner.os }}
- name: Setup APT proxy on runner
run: |
mkdir -p apt-cache
sudo apt-get install -y apt-cacher-ng --no-install-suggests --no-install-recommends
sudo bash -c 'echo -e "Port: 9999\nDebug: 99" >> /etc/apt-cacher-ng/acng.conf'
sudo mv -f apt-cache/* /var/cache/apt-cacher-ng/ || true
sudo chown -R apt-cacher-ng:apt-cacher-ng /var/cache/apt-cacher-ng
sudo service apt-cacher-ng restart
- name: Run pi-gen build
uses: ./
id: build
with:
image-name: integration-test
stage-list: stage0 stage1 stage2 ./__test__/it-test-stage ${{ inputs.full-image && 'stage3 stage4 stage5' }}
verbose-output: true
enable-noobs: ${{ github.event_name != 'workflow_dispatch' || inputs.enable-noobs }}
compression: xz
compression-level: ${{ github.event_name == 'workflow_dispatch' && inputs.compression-level || 1 }}
locale: ${{ env.CONFIG_LOCALE }}
hostname: ${{ env.CONFIG_HOSTNAME }}
keyboard-keymap: de
keyboard-layout: German - no dead keys
username: ${{ env.CONFIG_USERNAME }}
wpa-essid: foo
wpa-password: '1234567890'
timezone: ${{ env.CONFIG_TIMEZONE }}
pubkey-ssh-first-user: ${{ env.CONFIG_PUBLIC_KEY }}
increase-runner-disk-size: ${{ github.event_name != 'workflow_dispatch' || inputs.increase-runner-disk }}
apt-proxy: http://172.17.0.1:9999
- name: Move APT cache
continue-on-error: true
run: rm -rf apt-cache/* && sudo mv -f /var/cache/apt-cacher-ng/* apt-cache/
- name: List working directory
run: tree
- name: Uncompress image and mount loopback device
run: |
set -ex
xz -d ${{ steps.build.outputs.image-path }}
file_name="${{ steps.build.outputs.image-path }}"
./__test__/mount-pi-gen-image.sh "${file_name/.xz/}" $MOUNT_DIR
- name: Test configuration values
run: |
set -ex
test -x ${ROOTFS_DIR}/usr/bin/node
test "$(cat ${ROOTFS_DIR}/etc/hostname)" = "$CONFIG_HOSTNAME"
grep $CONFIG_USERNAME ${ROOTFS_DIR}/etc/passwd
source ${ROOTFS_DIR}/etc/default/locale
test "$LANG" = "$CONFIG_LOCALE"
test "$(cat ${ROOTFS_DIR}/etc/timezone)" = "$CONFIG_TIMEZONE"
test "$(sudo cat ${ROOTFS_DIR}/home/${CONFIG_USERNAME}/.ssh/authorized_keys)" = "$CONFIG_PUBLIC_KEY"
- run: df -h
if: always()
- name: Remove test label from PR (if set)
uses: actions-ecosystem/action-remove-labels@v1
if: ${{ github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'test') }}
with:
labels: test
- name: Debug APT proxy
if: always()
run: |
sudo tail -n 100 /etc/apt-cacher-ng/acng.conf
sudo service apt-cacher-ng status
sudo tail -n 200 /var/log/syslog /var/log/apt-cacher-ng/*