aboutsummaryrefslogtreecommitdiff
path: root/contrib/ci/generate-jobs
blob: 18c11698a172b549ddbde777a43df2c53b0bc20e (plain)
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
#!/bin/bash
set -e

export CI_DIR="$(pwd)/$(dirname $0)";

# the number to use as a base for generated ci job indexes
BASE_IDX=100;
# the amount of indexes to increment - the room a script has to put scripts in.
INCREMENT=5;

# our build targets
BUILD_FOR=(
  # Format:
  # distro codename arch
  # The codename must also be a tag on the distro
  "debian bookworm amd64"
  "debian bookworm arm64"
  "debian trixie amd64"
  "debian trixie arm64"
  "debian unstable amd64"
  "debian unstable arm64"
  "debian unstable riscv64"
)

declare -A DISTRO_IMAGES;
DISTRO_IMAGES['debian']='docker.io/library/debian';
DISTRO_IMAGES['archlinux']='docker.io/library/archlinux';

chmod +w -R $CI_DIR/jobs;
rm -rf $CI_DIR/jobs/*-generated;

TMPBINDIR="/tmp/ci-temp-bin-$RANDOM/"
mkdir -p "$TMPBINDIR"
export PATH="$PATH:$TMPBINDIR"

mkfn() {
  echo "$2" > "$TMPBINDIR/$1";
  chmod +x "$TMPBINDIR/$1";
}

mkfn mktarget '#!/bin/bash
RELATIVEIDX=$1
JOBNAME="$2"
OURIDX=$(($IDX + $RELATIVEIDX))
JOB="${OURIDX}-${JOBNAME}-${DISTRO}-${CODENAME}-${ARCH}-generated"
cd "$CI_DIR/jobs"
mkdir -p "${JOB}"
echo -n "${JOB}"
'

for TARGET in "${BUILD_FOR[@]}"; do
  export DISTRO=$(awk '{print $1}' <<< "$TARGET");
  export CODENAME=$(awk '{print $2}' <<< "$TARGET");
  export ARCH=$(awk '{print $3}' <<< "$TARGET");
  export OCI_IMAGE="${DISTRO_IMAGES[$DISTRO]}:$CODENAME";
  export DISTRO_TARGET="$CI_DIR/targets/$DISTRO";
  if [[ -d "$DISTRO_TARGET/$CODENAME-$ARCH" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$CODENAME-$ARCH";
  elif [[ -d "$DISTRO_TARGET/$CODENAME/$ARCH" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$CODENAME/$ARCH";
  elif [[ -d "$DISTRO_TARGET/$ARCH/$CODENAME" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$ARCH/$CODENAME";
  elif [[ -d "$DISTRO_TARGET/$ARCH" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$ARCH";
  elif [[ -d "$DISTRO_TARGET/$CODENAME" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$CODENAME";
  fi;
  export CONTAINERFILE="$DISTRO_TARGET/Containerfile";
  export IDX=$BASE_IDX;
  echo "";
  echo "> Generating scripts for $DISTRO ($CODENAME) on architecture $ARCH";
  echo "| > Base Image: $OCI_IMAGE";
  echo "| > Base Containerfile: $CONTAINERFILE";
  echo "| > Index: $BASE_IDX";
  "$DISTRO_TARGET/setup-job.sh";
  BASE_IDX=$(($BASE_IDX + $INCREMENT));
done;

rm -rf "$TMPBINDIR"
chmod +x -R $CI_DIR/jobs/*-generated
chmod -w -R $CI_DIR/jobs/*-generated