From 36d2a0929482a3baecb8fef7890e36b2a911cbc8 Mon Sep 17 00:00:00 2001 From: Breadway Date: Sat, 13 Jun 2026 16:40:51 +0800 Subject: [PATCH] Add Arch packaging and Forgejo workflows for bakery - packaging/arch/PKGBUILD: builds the bakery CLI from the workspace - .forgejo/workflows/package.yml: publishes to the [breadway] Arch registry on tag - .forgejo/workflows/mirror.yml: mirrors to GitHub Co-Authored-By: Claude Opus 4.8 --- .forgejo/workflows/mirror.yml | 21 ++++++++++++++++++ .forgejo/workflows/package.yml | 40 ++++++++++++++++++++++++++++++++++ packaging/arch/PKGBUILD | 24 ++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 .forgejo/workflows/mirror.yml create mode 100644 .forgejo/workflows/package.yml create mode 100644 packaging/arch/PKGBUILD diff --git a/.forgejo/workflows/mirror.yml b/.forgejo/workflows/mirror.yml new file mode 100644 index 0000000..2128050 --- /dev/null +++ b/.forgejo/workflows/mirror.yml @@ -0,0 +1,21 @@ +name: Mirror to GitHub + +on: + push: + branches: ['**'] + tags: ['**'] + +jobs: + mirror: + runs-on: [self-hosted, hestia] + steps: + - name: Mirror to GitHub + run: | + set -euo pipefail + git clone --mirror "https://git.breadway.dev/${GITHUB_REPOSITORY}.git" repo.git + cd repo.git + # Mirror only branches and tags (not refs/pull/*, which GitHub rejects); + # --prune deletes GitHub refs that no longer exist on Forgejo. + git push --prune \ + "https://x-access-token:${{ secrets.MIRROR_TOKEN }}@github.com/Breadway/bread-ecosystem.git" \ + '+refs/heads/*:refs/heads/*' '+refs/tags/*:refs/tags/*' diff --git a/.forgejo/workflows/package.yml b/.forgejo/workflows/package.yml new file mode 100644 index 0000000..37f2a48 --- /dev/null +++ b/.forgejo/workflows/package.yml @@ -0,0 +1,40 @@ +name: Build and publish package + +on: + push: + tags: ['v*'] + +jobs: + package: + runs-on: [self-hosted, hestia] + container: + image: archlinux:latest + steps: + # Note: no actions/checkout — the archlinux image has no Node, which JS + # actions require. Everything runs as shell steps and clones manually. + - name: Build and publish + env: + PUBLISH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -euo pipefail + VERSION="${GITHUB_REF_NAME#v}" + pacman -Syu --noconfirm base-devel git rust cargo + useradd -m builder + git config --global --add safe.directory '*' + git clone --branch "${GITHUB_REF_NAME}" --depth 1 \ + "https://git.breadway.dev/${GITHUB_REPOSITORY}.git" /home/builder/src + cd /home/builder/src + git archive --format=tar.gz --prefix="bakery-${VERSION}/" HEAD \ + > packaging/arch/bakery-${VERSION}.tar.gz + SHA=$(sha256sum packaging/arch/bakery-${VERSION}.tar.gz | awk '{print $1}') + sed -i "s/^pkgver=.*/pkgver=${VERSION}/" packaging/arch/PKGBUILD + sed -i "s/^sha256sums=.*/sha256sums=('${SHA}')/" packaging/arch/PKGBUILD + chown -R builder:builder /home/builder/src + # --nocheck: packaging builds the artifact; tests belong in a CI job. + su builder -c "cd /home/builder/src/packaging/arch && makepkg -f --noconfirm --nocheck" + PKG=$(find /home/builder/src/packaging/arch -name '*.pkg.tar.zst' | head -1) + curl -fsS -X PUT \ + -H "Authorization: token ${PUBLISH_TOKEN}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@${PKG}" \ + "https://git.breadway.dev/api/packages/Breadway/arch/os" diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD new file mode 100644 index 0000000..e71dfdb --- /dev/null +++ b/packaging/arch/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Breadway + +pkgname=bakery +pkgver=0.2.3 +pkgrel=1 +pkgdesc="Package manager for the bread ecosystem" +arch=('x86_64') +url="https://github.com/Breadway/bread-ecosystem" +license=('MIT') +depends=('glibc' 'gcc-libs') +makedepends=('rust' 'cargo') +source=("${pkgname}-${pkgver}.tar.gz") +sha256sums=('SKIP') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + cargo build --release --locked -p bakery +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + install -Dm755 target/release/bakery "${pkgdir}/usr/bin/bakery" + install -Dm644 README.md "${pkgdir}/usr/share/doc/${pkgname}/README.md" +}