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