initial commit
[skip ci]
This commit is contained in:
commit
5d8863e4d9
2 changed files with 149 additions and 0 deletions
36
.forgejo/workflows/alpine.yml
Normal file
36
.forgejo/workflows/alpine.yml
Normal file
|
@ -0,0 +1,36 @@
|
|||
name: Alpine
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
abuild:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch:
|
||||
- "aarch64"
|
||||
pkg:
|
||||
# https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/77851
|
||||
- path: testing/lsd
|
||||
branch: master
|
||||
repo: https://gitlab.alpinelinux.org/alpine/aports
|
||||
|
||||
# https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/77918
|
||||
- path: testing/hickory-dns
|
||||
branch: hickory-dns
|
||||
repo: https://gitlab.alpinelinux.org/msrd0/aports
|
||||
|
||||
steps:
|
||||
- name: Build Alpine Package ${{matrix.pkg.path}}
|
||||
uses: docker://ghcr.io/msrd0/abuild-aarch64:3.21
|
||||
with:
|
||||
entrypoint: ./build.sh
|
||||
args: |
|
||||
"${{github.event.repository.html_url}}"
|
||||
"${{matrix.pkg.path}}"
|
||||
"${{}}"
|
113
build.sh
Executable file
113
build.sh
Executable file
|
@ -0,0 +1,113 @@
|
|||
#!/bin/busybox ash
|
||||
set -eo pipefail
|
||||
|
||||
alpine_branch="$(cat /etc/alpine-release | sed -E 's,^([0-9]+)\.([0-9]+)\..*,v\1.\2,')"
|
||||
arch="${CARCH:-aarch64}"
|
||||
|
||||
# Usage: $0 <packager> <path> <branch> [<git>]
|
||||
# This file will build a package _if_ it is not yet uploaded, and upload it
|
||||
packager="$1"
|
||||
path="$2"
|
||||
branch="$3"
|
||||
git="$4"
|
||||
|
||||
# Let's use some common names, we're in our own docker container anyways
|
||||
sudo mkdir -p /alpine
|
||||
sudo chown -R ${USER:-1000} /alpine
|
||||
dir="/alpine/src"
|
||||
repo="/alpine/repo"
|
||||
mkdir -p "$repo"
|
||||
|
||||
# forgejo will re-sign the package anyways, so we just create a throwaway key here
|
||||
echo | abuild-keygen -a -i -b 4096
|
||||
echo "REPODEST=\"$repo\"" >>~/.abuild/abuild.conf
|
||||
echo "PACKAGER=\"$packager\"" >>~/.abuild/abuild.conf
|
||||
|
||||
# initialise abuild repos
|
||||
abuild-apk update
|
||||
if [ -n "$CBUILDROOT" ]; then
|
||||
abuild-apk update --root "$CBUILDROOT" --arch "$CTARGET"
|
||||
fi
|
||||
|
||||
# this script needs jq
|
||||
abuild-apk add jq
|
||||
|
||||
set -x
|
||||
|
||||
# so we need to download the relevant files for `abuild up2date`
|
||||
api="https://msrd0.dev/api/v1/packages/alpine"
|
||||
repo_api="https://msrd0.dev/api/packages/alpine"
|
||||
repo_dest="$repo/$(dirname "$path")/$arch"
|
||||
mkdir -p "$repo_dest"
|
||||
# definitely the best way to get the filename for the key (:
|
||||
tmpfile=$(mktemp -u)
|
||||
keyfile=$(wget -SO "$tmpfile" "$repo_api/key" 2>&1 \
|
||||
| grep 'Content-Disposition: attachment' \
|
||||
| awk '{print $3}' \
|
||||
| sed -e 's,filename=",,' -e 's,";,,' \
|
||||
|| true)
|
||||
# if we couldn't download the keyfile, the repository might not yet exist
|
||||
if [ -n "$keyfile" ]
|
||||
then
|
||||
sudo mv "$tmpfile" "/etc/apk/keys/$keyfile"
|
||||
fi
|
||||
dl_pkg() {
|
||||
local pkg ver dest dl_url
|
||||
pkg="$1"
|
||||
shift
|
||||
ver="$1"
|
||||
shift
|
||||
while [ "$#" -gt 0 ]
|
||||
do
|
||||
if [ "$(apk version -t "$ver" "$1")" == "<" ]
|
||||
then
|
||||
ver="$1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
for file in $(wget -qO- "$api/alpine/$pkg/$ver/files")
|
||||
do
|
||||
# so ... apparently noarch packages get "reassigned" to the target architecture
|
||||
# this means we can rely on $CARCH to download the package
|
||||
dl_url="$repo_api/alpine/$alpine_branch/alpine/$file"
|
||||
echo "Trying to download existing package $dl_url ..."
|
||||
wget -O "$dest/$file" "$dl_url" \
|
||||
|| echo "Failed to download $dl_url" >&2
|
||||
done
|
||||
}
|
||||
wget -qO- "$api" \
|
||||
|| (echo "[]"; echo "Failed to download $api" >&2) \
|
||||
| jq -rc 'group_by(.name) | .[] | [.[0].name] + [.[] | .version]' \
|
||||
| sed -e 's,\[,,' -e 's/,/ /g' -e 's,\],,' \
|
||||
| while read line
|
||||
do
|
||||
dl_pkg $line
|
||||
done
|
||||
apk index --no-warnings --quiet \
|
||||
--output "$repo_dest/APKINDEX.tar.gz" \
|
||||
--rewrite-arch "$arch" \
|
||||
"$repo_dest"/*.apk \
|
||||
&& abuild-sign -q "$repo_dest/APKINDEX.tar.gz" \
|
||||
|| echo "Failed to create APKINDEX.tar.gz" >&2
|
||||
|
||||
# let's not waste more CPU cycles than necessary
|
||||
abuild-apk add lld
|
||||
echo "export LDFLAGS=\"\$LDFLAGS -fuse-ld=lld\"" >>~/.abuild/abuild.conf
|
||||
echo "export RUSTFLAGS=\"-C link-arg=-fuse-ld=lld\"" >>~/.abuild/abuild.conf
|
||||
echo "export CARGO_NET_GIT_FETCH_WITH_CLI=true" >>~/.abuild/abuild.conf
|
||||
|
||||
# grab the path from the repository
|
||||
git clone --depth 1 --sparse --branch "$branch" -- "$git" "$dir"
|
||||
cd "$dir"
|
||||
git sparse-checkout add "$path"
|
||||
export APKBUILD="$path/APKBUILD"
|
||||
|
||||
# make sure that all checksums match, regardless if we build the package or not
|
||||
abuild verify
|
||||
|
||||
# if not up to date, build and upload
|
||||
if ! abuild up2date
|
||||
then
|
||||
abuild -r
|
||||
# TODO upload
|
||||
fi
|
Loading…
Add table
Reference in a new issue