linux_alpine/.gitea/workflows/release_arm64v8-edge.yml
itmodulo 9cb7aad32c
Some checks failed
Release Alpine apk for ARM64v8 Edge / compilation-arm64v8 (push) Failing after -1m56s
optimize ci, add Notify test1
2025-07-01 16:53:31 +02:00

103 lines
3.9 KiB
YAML
Executable file

name: "Release Alpine apk for ARM64v8 Edge"
on:
push:
branches:
- release
jobs:
compilation-arm64v8:
runs-on: aarch-64-alpine-edge
env:
REPO_URL: "https://alpine.sakamoto.pl/alpine/edge/testing/aarch64"
REMOTE_SSH: "${{ secrets.SERVER_LOGIN_AND_ADDRESS }}"
REMOTE_PORT: "${{ secrets.LOGIN_PORT }}"
REMOTE_PATH: "${{ secrets.SERVER_REPO_PATH }}/edge/main/aarch64"
steps:
- name: Install base tools
shell: sh
run: |
# faster mirror + essential build tools
echo "https://alpine.sakamoto.pl/alpine/$(. /etc/os-release; echo $PRETTY_NAME|cut -d '"' -f2)/main" > /etc/apk/repositories
echo "https://alpine.sakamoto.pl/alpine/$(. /etc/os-release; echo $PRETTY_NAME|cut -d '"' -f2)/community" >> /etc/apk/repositories
echo "https://alpine.sakamoto.pl/alpine/$(. /etc/os-release; echo $PRETTY_NAME|cut -d '"' -f2)/testing" >> /etc/apk/repositories
apk update && apk upgrade
apk add bash git curl alpine-sdk abuild sudo shadow fuse sshfs
- name: Checkout sources
uses: actions/checkout@v4
- name: Prepare runner user
run: |
echo "user_allow_other" >> /etc/fuse.conf
addgroup -g 1003 runner
adduser -u 1003 -D -s /bin/bash -G wheel,abuild runner
echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod 440 /etc/sudoers
mkdir -p /var/cache/distfiles && chmod a+w /var/cache/distfiles
- name: Fetch remote index and parse existing pkgs
id: get_remote
shell: bash
run: |
mkdir -p remote_index
curl -sfL "${REPO_URL}/APKINDEX.tar.gz" -o remote_index/APKINDEX.tar.gz
tar -xzf remote_index/APKINDEX.tar.gz -C remote_index
# Extract P: and V: fields into a list of "name-version-pkgrel"
awk '
/^P:/ { pkg=$2 }
/^V:/ { ver=$2 }
/^PR:/ { pr=$2; print pkg "-" ver "-" pr }
' remote_index/APKINDEX > remote_index/list.txt
echo "::set-output name=existing::$(sort remote_index/list.txt | paste -sd, -)"
- name: Build only missing packages
shell: bash
run: |
EXISTING="$(echo "${{ steps.get_remote.outputs.existing }}" | tr ',' '\n')"
mkdir -p built newpkgs
for d in srcpkgs/*; do
cd "$d"
# source the APKBUILD so we get PKGNAME, PKGVER, PKGREL
. APKBUILD
ident="${PKGNAME}-${PKGVER}-${PKGREL}"
if echo "$EXISTING" | grep -qx "$ident"; then
echo "Skipping $ident (already in repo)"
else
echo "Building $ident..."
abuild -r -c
# collect the resulting .apk
mv /home/runner/packages/srcpkgs/aarch64/${PKGNAME}-*.apk ../../newpkgs/ || true
fi
cd - >/dev/null
done
- name: Sync new pkgs, clean old versions, rebuild & sign index
shell: bash
run: |
# prepare SSH key for sshfs
echo "${{ secrets.REPO_LOGIN }}" > /home/runner/id_ecdsa
chmod 600 /home/runner/id_ecdsa
mkdir -p /home/runner/remote
sshfs -p "${REMOTE_PORT}" -o StrictHostKeyChecking=accept-new \
-o IdentityFile=/home/runner/id_ecdsa \
"${REMOTE_SSH}:${REMOTE_PATH}" /home/runner/remote
cd /home/runner/remote
# For each newly-built package, remove older versions
for pkg in /home/runner/newpkgs/*.apk; do
base=$(basename "$pkg" | sed -E 's/(-[0-9]+\.[0-9]+.*)//')
rm -f ${base}-*.apk || true
done
# Copy over the truly new files
cp /home/runner/newpkgs/*.apk .
# Rebuild the index
apk index -o APKINDEX.tar.gz *.apk
# Sign it
abuild-sign APKINDEX.tar.gz
fusermount -u /home/runner/remote