fetch_ml/.forgejo/workflows/release-mirror.yml
Jeremie Fraeys d003b3de64
Some checks failed
Checkout test / test (push) Successful in 5s
CI with Native Libraries / Check Build Environment (push) Successful in 12s
Documentation / build-and-publish (push) Failing after 32s
CI with Native Libraries / Build and Test Native Libraries (push) Failing after 5s
CI with Native Libraries / Build Release Libraries (push) Has been skipped
ci: replace slow setup-go with fast shell script in all workflows
2026-02-12 13:41:59 -05:00

199 lines
5.8 KiB
YAML

name: Mirror Release to GitHub
on:
push:
tags:
- 'v*'
workflow_dispatch:
env:
GO_VERSION: '1.25.0'
ZIG_VERSION: '0.15.2'
GH_MIRROR_REPO: ${{ vars.GH_MIRROR_REPO }}
jobs:
prepare_rsync:
name: Prepare rsync metadata
runs-on: self-hosted
outputs:
matrix: ${{ steps.manifest.outputs.matrix }}
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install jq
run: |
sudo apt-get update
sudo apt-get install -y jq
- name: Load rsync manifest
id: manifest
run: |
MANIFEST=.gitea/rsync_manifest.json
MATRIX=$(jq -c '
. as $cfg
| $cfg.platforms
| to_entries
| map({
platform: .key,
target: .value.target,
"rsync-url": ($cfg.base_url + "/" + $cfg.version + "/" + .value.asset),
"rsync-sha256": .value.sha256
})
' "$MANIFEST")
printf 'matrix={"include":%s}\n' "$MATRIX" >> "$GITHUB_OUTPUT"
build-cli:
name: Build CLI - ${{ matrix.platform }}
needs: prepare_rsync
runs-on: self-hosted
strategy:
matrix: ${{ fromJson(needs.prepare_rsync.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Zig
uses: goto-bus-stop/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
- name: Download static rsync
run: |
mkdir -p cli/src/assets
TARGET="${{ matrix.target }}"
OS=""
ARCH=""
case "$TARGET" in
x86_64-linux-*) OS="linux"; ARCH="x86_64" ;;
aarch64-linux-*) OS="linux"; ARCH="arm64" ;;
x86_64-macos*) OS="darwin"; ARCH="x86_64" ;;
aarch64-macos*) OS="darwin"; ARCH="arm64" ;;
x86_64-windows*) OS="windows"; ARCH="x86_64" ;;
aarch64-windows*) OS="windows"; ARCH="arm64" ;;
*) echo "Unsupported Zig target: $TARGET"; exit 1 ;;
esac
RSYNC_OUT="cli/src/assets/rsync_release_${OS}_${ARCH}.bin"
wget -O "$RSYNC_OUT" ${{ matrix.rsync-url }} || \
curl -L -o "$RSYNC_OUT" ${{ matrix.rsync-url }}
echo "${{ matrix.rsync-sha256 }} $RSYNC_OUT" | sha256sum -c
chmod +x "$RSYNC_OUT"
ls -lh "$RSYNC_OUT"
- name: Build CLI
working-directory: cli
run: |
zig build --release=small -Dtarget=${{ matrix.target }}
ls -lh zig-out/bin/ml
- name: Strip binary (Linux only)
if: matrix.platform == 'linux-x86_64'
working-directory: cli
run: strip zig-out/bin/ml
- name: Package binary
run: |
mkdir -p dist
cp cli/zig-out/bin/ml dist/ml-${{ matrix.platform }}
cd dist
tar -czf ml-${{ matrix.platform }}.tar.gz ml-${{ matrix.platform }}
sha256sum ml-${{ matrix.platform }}.tar.gz > ml-${{ matrix.platform }}.tar.gz.sha256
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: ml-${{ matrix.platform }}
path: |
dist/ml-${{ matrix.platform }}.tar.gz
dist/ml-${{ matrix.platform }}.tar.gz.sha256
build-go-backends:
name: Build Go Backends
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Go
run: |
REQUIRED_GO="${GO_VERSION}"
if command -v go &> /dev/null && go version | grep -q "go${REQUIRED_GO}"; then
echo "Go ${REQUIRED_GO} already installed - skipping download"
else
echo "Installing Go ${REQUIRED_GO}..."
curl -sL "https://go.dev/dl/go${REQUIRED_GO}.linux-amd64.tar.gz" | sudo tar -C /usr/local -xzf -
export PATH="/usr/local/go/bin:$PATH"
echo "/usr/local/go/bin" >> $GITHUB_PATH
echo "Go ${REQUIRED_GO} installed"
fi
go version
- name: Build binaries
run: |
make cross-platform
ls -lh dist/
- name: Package binaries
run: |
cd dist
for binary in fetch_ml_*; do
if [[ -f "${binary}" ]]; then
tar -czf "${binary}.tar.gz" "${binary}"
sha256sum "${binary}.tar.gz" > "${binary}.tar.gz.sha256"
fi
done
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: go-backends
path: |
dist/*.tar.gz
dist/*.sha256
mirror-github-release:
name: Mirror release to GitHub
needs: [build-cli, build-go-backends]
runs-on: self-hosted
steps:
- name: Validate mirror configuration
env:
GH_TOKEN: ${{ secrets.GH_MIRROR_TOKEN }}
run: |
if [ -z "${GH_MIRROR_REPO}" ]; then
echo "Missing required variable GH_MIRROR_REPO (expected like 'jfraeysd/fetch_ml')"
exit 1
fi
if [ -z "${GH_TOKEN}" ]; then
echo "Missing required secret GH_MIRROR_TOKEN"
exit 1
fi
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Prepare release assets
run: |
mkdir -p release
cp artifacts/ml-*/ml-*.tar.gz* release/
cp artifacts/go-backends/*.tar.gz* release/
cd release
sha256sum *.tar.gz > checksums.txt
ls -lh
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
repository: ${{ env.GH_MIRROR_REPO }}
files: release/*
generate_release_notes: true
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GH_MIRROR_TOKEN }}