The README had grown to 422 lines: the device and carrier table came after 61 lines of architecture, and the configuration section after 237 lines of architecture, that table, build, run and packaging notes and GNOME Calls detail. AGENTS.md, a file for coding agents, takes that detail and adds to it: a reference to the tree at this commit, written from the code and the bench record. The README is now what a person needs: what imsd is and its status, the verified device/carrier table, what it needs, how to install and enable it, the two dialers, a status check for the installed daemon, a `Not there yet` list, and where the rest is. In-tree comments that sent readers to README sections which moved — the cross-compiling flow (the CI workflow, build-package.sh, APKBUILD.binary), GNOME Calls' known gaps (imsd-ofono-restart-calls.sh), the D-Bus ABI (main.cpp) and the Configuration section (imsd.service) — point at AGENTS.md's sections now.
69 lines
2.7 KiB
YAML
69 lines
2.7 KiB
YAML
name: package
|
|
|
|
# Builds the imsd apk(s) for aarch64 from the pushed commit and publishes
|
|
# them to the Forgejo Alpine registry — the repo installed phones already
|
|
# point at (via catcrafts-fp6-repo), so a release reaches users through
|
|
# plain 'apk upgrade' without an fp6-img image run.
|
|
#
|
|
# Build: crafter-build cross-compiles against an Alpine aarch64 sysroot
|
|
# (packaging/build-package.sh — AGENTS.md §4.3's cross-compiling flow), the
|
|
# test suite runs natively, and packaging/APKBUILD.binary wraps the result.
|
|
# This needs no privileged runner: it runs in an alpine:edge container on
|
|
# the ordinary arch-latest runner.
|
|
#
|
|
# Release gating is the version: pkgver comes from implementations/main.cpp,
|
|
# the registry answers 409 for an already-published version, and the publish
|
|
# step treats that as "nothing to do" — so pushes only release when the
|
|
# Version constant bumps. This is the only producer of the imsd apk: fp6-img
|
|
# images install the published package from the registry (pinned version,
|
|
# pinned sha256) instead of building their own, so image and 'apk upgrade'
|
|
# carry the same binary.
|
|
#
|
|
# Publishing needs PACKAGE_TOKEN (catbot account, package:write scope) — an
|
|
# org-level secret on Catcrafts since 2026-09-02, shared with fp6-img;
|
|
# without it the build still runs and the publish step skips quietly.
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
package:
|
|
runs-on: arch-latest
|
|
container:
|
|
image: alpine:edge
|
|
timeout-minutes: 90
|
|
steps:
|
|
# actions/checkout is a Node action; bare alpine has no node
|
|
- name: Provision job container
|
|
run: apk add -q nodejs git curl
|
|
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Build and package
|
|
run: ./packaging/build-package.sh
|
|
|
|
- name: Publish to the apk registry
|
|
env:
|
|
PACKAGE_TOKEN: ${{ secrets.PACKAGE_TOKEN }}
|
|
run: |
|
|
if [ -z "$PACKAGE_TOKEN" ]; then
|
|
echo "no PACKAGE_TOKEN secret configured; skipping package publish"
|
|
exit 0
|
|
fi
|
|
found=0
|
|
for f in /home/build/.local/share/abuild/*/aarch64/imsd*.apk; do
|
|
[ -e "$f" ] || continue
|
|
found=1
|
|
code=$(curl -s -o /dev/null -w '%{http_code}' \
|
|
--user "catbot:$PACKAGE_TOKEN" --upload-file "$f" \
|
|
"https://forgejo.catcrafts.net/api/packages/Catcrafts/alpine/edge/fp6")
|
|
case "$code" in
|
|
201) echo "published: $(basename "$f")" ;;
|
|
409) echo "already published: $(basename "$f")" ;;
|
|
*) echo "FAILED ($code): $(basename "$f")"; exit 1 ;;
|
|
esac
|
|
done
|
|
[ "$found" = 1 ] || { echo "no packages found to publish"; exit 1; }
|