From b7ff6a235444c3eb04fa1f95fbf62b7b59ff88fc Mon Sep 17 00:00:00 2001 From: jbergner Date: Sat, 25 Oct 2025 21:09:58 +0200 Subject: [PATCH] Updated to Release Hub --- .gitea/workflows/release.yml | 88 ++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 383583e..59fe30f 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -122,3 +122,91 @@ jobs: files: | dist/**/wol-server-*.tar.gz dist/**/wol-server-*.zip + publish-agent: + if: startsWith(github.ref, 'refs/tags/') + needs: release + runs-on: ubuntu-fast + env: + PRODUCT: edge-wol + AGENT_URL: ${{ secrets.AGENT_URL }} + AGENT_TOKEN: ${{ secrets.AGENT_TOKEN }} + + # Funktioniert in GitHub und Gitea (Actions) weitgehend gleich: + SERVER_URL: ${{ github.server_url }} # z.B. https://github.com oder https://gitea.example.com + REPOSITORY: ${{ github.repository }} # owner/repo + TAG: ${{ github.ref_name }} # vX.Y.Z + + steps: + - name: Download artifacts + uses: actions/download-artifact@v3 + with: + path: ./dist + + - name: Publish release metadata to Version Agent + shell: bash + run: | + set -euo pipefail + + if [[ -z "${AGENT_URL:-}" || -z "${AGENT_TOKEN:-}" ]]; then + echo "Missing AGENT_URL or AGENT_TOKEN" >&2; exit 1 + fi + + VERSION="${TAG#v}" # 12.3.1[-rc.1|-beta.1] + MAJOR="${VERSION%%.*}" # 12 + BRANCH="${MAJOR}.x" # 12.x + + CHANNEL="stable" + [[ "$VERSION" == *"-rc"* ]] && CHANNEL="rc" + [[ "$VERSION" == *"-beta"* ]] && CHANNEL="beta" + # Optional: Nightly-Channel bei Non-Tag-Builds (separater Job, siehe unten) + + RELEASED_AT="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" + NOTES_URL="${SERVER_URL}/${REPOSITORY}/releases/tag/${TAG}" + + publish() { # args: OS ARCH FILE + local OS="$1" ARCH="$2" FILE="$3" + local BIT="64" + case "$ARCH" in 386|armv7) BIT="32";; esac + + local FNAME="$(basename "$FILE")" + local URL="${SERVER_URL}/${REPOSITORY}/releases/download/${TAG}/${FNAME}" + + local SHA256 SIZE + SHA256="$(sha256sum "$FILE" | awk '{print $1}')" + SIZE="$(stat -c%s "$FILE")" + + jq -n \ + --arg branch "$BRANCH" \ + --arg channel "$CHANNEL" \ + --arg arch "$ARCH" \ + --arg bit "$BIT" \ + --arg os "$OS" \ + --arg version "$VERSION" \ + --arg released_at "$RELEASED_AT" \ + --arg notes "$NOTES_URL" \ + --arg url "$URL" \ + --arg sha256 "$SHA256" \ + --argjson size "$SIZE" \ + '{ + branch:$branch, channel:$channel, arch:$arch, bit:$bit, os:$os, + release:{ + version:$version, released_at:$released_at, notes_url:$notes, + assets:[{url:$url, sha256:$sha256, size_bytes:$size}] + } + }' > payload.json + echo @payload.json + curl -fsS -H "Content-Type: application/json" \ + -H "Authorization: Bearer ${AGENT_TOKEN}" \ + -d @payload.json "${AGENT_URL}/v1/publish" + } + + shopt -s nullglob + + # linux/amd64 + for f in dist/**/${PRODUCT}-linux-amd64.tar.gz; do publish linux amd64 "$f"; done + # linux/arm64 + for f in dist/**/${PRODUCT}-linux-arm64.tar.gz; do publish linux arm64 "$f"; done + # linux/armv7 + for f in dist/**/${PRODUCT}-linux-armv7.tar.gz; do publish linux armv7 "$f"; done + # windows/amd64 + for f in dist/**/${PRODUCT}-windows-amd64.zip; do publish windows amd64 "$f"; done \ No newline at end of file