File: generate-github-actions.sh

package info (click to toggle)
debuerreotype 0.16-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 312 kB
  • sloc: sh: 2,432; makefile: 6
file content (111 lines) | stat: -rwxr-xr-x 3,779 bytes parent folder | download
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
#!/usr/bin/env bash
set -Eeuo pipefail

cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"

_defaults() {
	export ARCH= TIMESTAMP='2017-01-01T00:00:00Z' SHA256=
}

combos=(
	'SUITE=stable    CODENAME=jessie  '
	'SUITE=jessie    CODENAME=""      '
	'SUITE=testing   CODENAME=stretch '
	'SUITE=stretch   CODENAME=""      '
	'SUITE=unstable  CODENAME=sid     '
	'SUITE=sid       CODENAME=""      '
	'SUITE=oldstable CODENAME=wheezy  '
	'SUITE=wheezy    CODENAME=""      '
	''
	'# EOL suites testing'
	# these are broken thanks to snapshot doing redirects now (and old APT not following those)
	#'SUITE=eol CODENAME=etch  '
	#'SUITE=eol CODENAME=lenny '
	#'SUITE=eol CODENAME=woody ARCH=i386 '
	# TODO fix this by updating squignix to detect old APT versions transparently somehow and handle the redirects in the reverse proxy
	'SUITE=eol CODENAME=jessie TIMESTAMP="2021-03-01T00:00:00Z" '
	''
	'# deb822 / usr-is-merged testing'
	# unstable keys at this timestamp are expired but it's not easy for debuerreotype to know that (TODO we should work harder to fix this)
	#'SUITE=unstable CODENAME="" TIMESTAMP="2022-09-30T00:00:00Z" '
	'SUITE=bookworm CODENAME="" TIMESTAMP="2022-09-30T00:00:00Z" '
	'SUITE=bullseye CODENAME="" TIMESTAMP="2022-09-30T00:00:00Z" '
	''
	'# qemu-debootstrap testing'
	'ARCH=arm64   SUITE=jessie   CODENAME="" '
	# at this timestamp, these are both ports, and ports keys expire too quickly to be realistic to actually support in CI
	#'ARCH=sh4     SUITE=unstable CODENAME="" TIMESTAMP="2022-02-01T00:00:00Z" '
	#'ARCH=riscv64 SUITE=unstable CODENAME="" TIMESTAMP="2022-02-01T00:00:00Z" '
	''
	'# a few entries for "today" to try and catch issues like https://github.com/debuerreotype/debuerreotype/issues/41 sooner'
	'SUITE=unstable  CODENAME="" TIMESTAMP="today 00:00:00" SHA256=""'
	'SUITE=stable    CODENAME="" TIMESTAMP="today 00:00:00" SHA256=""'
	'SUITE=oldstable CODENAME="" TIMESTAMP="today 00:00:00" SHA256=""'
	''
	'# Dockerfile checksums'
	'DISTRO=dockerfile SUITE=stretch TIMESTAMP="2017-05-08T00:00:00Z" '
	'DISTRO=dockerfile SUITE=jessie  TIMESTAMP="2017-05-08T00:00:00Z" '
	'# README.md checksum'
	'DISTRO=readme     SUITE=stretch TIMESTAMP="2017-01-01T00:00:00Z" '
	''
	'# smoke test Ubuntu 24.04 and 22.04'
	'DISTRO=ubuntu SUITE=noble SHA256=""'
	'DISTRO=ubuntu SUITE=jammy SHA256=""'
)

githubEnv=
for combo in "${combos[@]}"; do
	unset ARCH SUITE CODENAME TIMESTAMP DISTRO
	_defaults
	githubEnv+=$'\n'"$combo"
	case "$combo" in
		'' | '#'* | *' SHA256='*)
			continue
			;;
	esac
	vars="$(
		grep -oE1 'ARCH=[^ ]+' <<<"$combo" || :
		grep -oE1 'SUITE=[^ ]+' <<<"$combo" || :
		grep -oE1 'CODENAME=[^ ]*' <<<"$combo" || :
		grep -oE1 'TIMESTAMP=[^ ]*' <<<"$combo" || :
		grep -oE1 'DISTRO=[^ ]+' <<<"$combo" || :
	)"
	eval "$vars"
	[ -n "$SUITE" ]
	serial="$(TZ=UTC date --date="$TIMESTAMP" '+%Y%m%d')"
	: "${DISTRO:=debian}"
	case "$DISTRO" in
		debian)
			rootfs="validate/$serial/${ARCH:-amd64}/${CODENAME:-$SUITE}/rootfs.tar.xz"
			sha256="$rootfs.sha256"
			;;
		dockerfile | readme)
			tar="validate/$DISTRO/$SUITE.tar"
			rootfs="$tar.xz"
			sha256="$tar.sha256"
			;;
		*) echo >&2 "programming error: no validate script for '$DISTRO' ($combo)"; exit 1 ;;
	esac
	if [ ! -s "$rootfs" ] || [ ! -s "$sha256" ]; then
		( set -x; eval "$combo ./.validate-$DISTRO.sh" )
	fi
	sha256="$(< "$sha256")"
	if ! grep -qF 'TIMESTAMP=' <<<"$combo"; then
		githubEnv+="TIMESTAMP=\"$TIMESTAMP\" "
	fi
	githubEnv+="SHA256=$sha256"
done

gawk '{
	# leave text comments and blank lines alone!
	if (!/^$|^#[[:space:]]+/) {
		$0 = gensub(/([[:space:]]+[A-Z])/, ",\\1", "g")
		$0 = gensub(/=/, ": ", "g")
		$0 = gensub(/^(#)?/, "\\1- { ", 1)
		$0 = gensub(/$/, " }", 1)
	}
	if (!/^$/) {
		$0 = gensub(/^/, "          ", 1)
	}
	print
}' <<<"$githubEnv"$'\n'