Skip to content

pi-gen-action-integration-test #447

pi-gen-action-integration-test

pi-gen-action-integration-test #447

name: pi-gen-action-integration-test
on:
workflow_dispatch:
push:
paths-ignore:
- '**.md'
- 'renovate.json'
branches:
- master
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.ref_name == 'master' || (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: Run pi-gen build
uses: ./
id: build
with:
image-name: integration-test
stage-list: stage0 stage1 stage2 ./__test__/it-test-stage
verbose-output: true
enable-noobs: true
compression: xz
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 }}
- 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"
- 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