image: alpine/latest packages: - coreutils - losetup - procps - py3-requests - xz sources: - "https://gitlab.postmarketos.org/postmarketOS/pmaports.git/" - "https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git/" - "https://gitlab.postmarketos.org/postmarketOS/build.postmarketos.org.git/" environment: BPO_TOKEN_FILE: "/home/build/.token" BPO_API_HOST: https://build.postmarketos.org BPO_JOB_NAME: build_image secrets: - 482975ec-22f7-49fd-9b54-486b0b1947c3 triggers: - action: webhook condition: failure url: https://build.postmarketos.org/api/public/update-job-status tasks: - bpo_setup: | export BPO_JOB_ID="$JOB_ID" git -C pmbootstrap checkout 2.3.x # Switch branch and release channel mkdir -p ~/.config ( echo "[pmbootstrap]" echo "is_default_channel = False" ) > ~/.config/pmbootstrap.cfg git -C pmaports checkout v24.06 sudo ln -s "$PWD"/pmbootstrap/pmbootstrap.py /usr/bin/pmbootstrap yes "" | pmbootstrap --aports=$PWD/pmaports -q init sudo modprobe binfmt_misc sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc branch="$(git -C pmaports rev-parse --abbrev-ref HEAD)" if [ "$branch" != v24.06 ]; then echo "ERROR: pmbootstrap switched to the wrong branch: $branch" exit 1 fi # Put apk cache into tmpfs to use less disk space (pma#1623) sudo mkdir -p /mnt/tmpfs-for-apks sudo mount -t tmpfs -o size=1500M tmpfs /mnt/tmpfs-for-apks WORK="$(pmbootstrap config work)" for arch in x86_64 aarch64 armv7; do mkdir -p /mnt/tmpfs-for-apks/cache_apk_"$arch" sudo rm -rf "$WORK"/cache_apk_"$arch" ln -s /mnt/tmpfs-for-apks/cache_apk_"$arch" "$WORK" done - img_prepare: | export BPO_JOB_ID="$JOB_ID" IMG_DATE="$(date +%Y%m%d-%H%M)" echo "$IMG_DATE" > img-date # Image prefix format: # -postmarketOS---- UI_VERSION=$(grep "^pkgver=" "$(pmbootstrap config aports \ )"/main/postmarketos-ui-sway/APKBUILD | cut -d= -f2) IMG_PREFIX="$IMG_DATE"-postmarketOS-v24.06-sway IMG_PREFIX="$IMG_PREFIX"-"$UI_VERSION"-google-kukui echo "$IMG_PREFIX" > img-prefix pmbootstrap config ui sway pmbootstrap config device google-kukui mkdir out - img: | export BPO_JOB_ID="$JOB_ID" IMG_PREFIX=$(cat img-prefix) pmbootstrap config kernel '' pmbootstrap config extra_space 0 pmbootstrap config extra_packages lang,musl-locales pmbootstrap -q -y zap -p pmbootstrap \ --details-to-stdout \ -mp http://mirror.postmarketos.org/postmarketos/\ -m http://dl-cdn.alpinelinux.org/alpine/\ \ install \ --no-sshd \ --no-local-pkgs \ --password 147147 if [ -e $(pmbootstrap config work)/chroot_native/home/pmos/rootfs/google-kukui.img ]; then sudo mv $(pmbootstrap config work)/chroot_native/home/pmos/rootfs/google-kukui.img \ "out/$IMG_PREFIX.img" else # Boot and root partitions in separate files (pmbootstrap!1871) # Name the second file -bootpart.img instead of -boot.img to # avoid confusion with Android boot.img files. sudo mv $(pmbootstrap config work)/chroot_native/home/pmos/rootfs/google-kukui-root.img \ "out/$IMG_PREFIX.img" sudo mv $(pmbootstrap config work)/chroot_native/home/pmos/rootfs/google-kukui-boot.img \ "out/$IMG_PREFIX-bootpart.img" fi ls -lh out - img_bootimg: | export BPO_JOB_ID="$JOB_ID" IMG_PREFIX=$(cat img-prefix) for i in $(pmbootstrap config work)/chroot_rootfs_google-kukui/boot/boot.img*; do if [ -e "$i" ]; then sudo mv "$i" "out/$IMG_PREFIX-boot.img" fi done ls -lh out - img_lk2nd: | export BPO_JOB_ID="$JOB_ID" IMG_PREFIX=$(cat img-prefix) for i in $(pmbootstrap config work)/chroot_rootfs_google-kukui/boot/lk2nd.img; do if [ -e "$i" ]; then sudo mv "$i" "out/$IMG_PREFIX-lk2nd.img" fi done ls -lh out - compress: | export BPO_JOB_ID="$JOB_ID" sudo chown "$(id -u):$(id -g)" out/*.img for i in out/*.img; do xz -0 -T0 "$i" done ls -lh out - checksums: | export BPO_JOB_ID="$JOB_ID" cd out for i in *; do sha256sum "$i" | tee "$i.sha256" sha512sum "$i" | tee "$i.sha512" done - submit: | export BPO_JOB_ID="$JOB_ID" export BPO_API_ENDPOINT="build-image" export BPO_ARCH="" export BPO_BRANCH=v24.06 export BPO_DEVICE=google-kukui export BPO_UI=sway export BPO_PAYLOAD_IS_JSON="0" export BPO_PKGNAME="" export BPO_VERSION="$(cat img-date)" # Upload one file at a time prev="" for i in out/*; do export BPO_PAYLOAD_FILES_PREVIOUS="$prev" export BPO_PAYLOAD_FILES="$i" build.postmarketos.org/helpers/submit.py prev="$prev$(basename "$i")#" done # Finalize upload export BPO_PAYLOAD_FILES_PREVIOUS="$prev" export BPO_PAYLOAD_FILES="" build.postmarketos.org/helpers/submit.py