Files
metro-puzzle-jp/.gitea/workflows/release.yaml
claude 3c00c7f356
All checks were successful
release / build-release (push) Successful in 1m42s
CI: kör i runnerns standardimage och installera Go från tarball
golang-imagen saknar node, vilket actions/checkout och actions/cache kräver.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-23 19:18:36 +02:00

130 lines
6.0 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: release
# Kör tester och bygger release-zippar för linux-amd64 och windows-amd64.
# Varje push till master uppdaterar den rullande releasen "latest"; en tagg
# vX.Y.Z ger dessutom en versionerad release.
#
# Körs ALLTID på brasse-linux01-runnern (label linux-amd64): Linux-bygget
# behöver cgo + X11/GL-headers för amd64, vilket Pi5:n (arm64) inte kan ge
# utan korskompilator – och Pi5:n ska inte belastas med spelbyggen.
# Är datorn av köas jobbet tills runnern är tillbaka (ofarligt: pushar görs
# ändå därifrån). Första steget vägrar köra på arm64 som skydd om labels ändras.
#
# Jobbet kör i runnerns standardimage (catthehacker/ubuntu:act-latest, har
# node som actions/checkout och actions/cache kräver) och installerar Go från
# go.dev – en golang-image saknar node och fäller JS-actions.
on:
push:
branches: [master]
tags: ["v*"]
workflow_dispatch:
inputs:
tag:
description: "Release-tag (lämna tom för 'latest')"
required: false
env:
GO_VERSION: "1.27.0"
jobs:
build-release:
runs-on: linux-amd64
steps:
- name: Vägra bygga på arm64/Pi5
run: |
if [ "$(uname -m)" != "x86_64" ]; then
echo "::error::Fel runner ($(uname -m)). Spelbygget ska köras på brasse-linux01 (label linux-amd64)."
exit 1
fi
echo "Runner OK: $(uname -m) på $(hostname)"
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # taggar behövs för versionsstämpeln (git describe)
- name: Installera Go ${{ env.GO_VERSION }} + byggberoenden (X11/GL/ALSA-headers för Ebitengine)
run: |
curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" -o /tmp/go.tgz
rm -rf /usr/local/go && tar -C /usr/local -xzf /tmp/go.tgz
echo "/usr/local/go/bin" >> "$GITHUB_PATH"
apt-get update -qq
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends \
gcc libc6-dev pkg-config libgl1-mesa-dev libx11-dev libxrandr-dev libxcursor-dev \
libxinerama-dev libxi-dev libxxf86vm-dev libasound2-dev zip jq curl git >/dev/null
git config --global --add safe.directory '*'
/usr/local/go/bin/go version
- name: Cache Go-moduler
uses: actions/cache@v4
with:
path: ~/go/pkg/mod
key: gomod-${{ hashFiles('go.sum') }}
restore-keys: gomod-
- name: Bestäm release-tag
id: t
run: |
case "$GITHUB_REF" in
refs/tags/*) T="$GITHUB_REF_NAME" ;;
*) T="${{ inputs.tag }}"; [ -z "$T" ] && T="latest" ;;
esac
echo "tag=$T" >> "$GITHUB_OUTPUT"
echo "bygger release: $T"
- name: Vet + test
run: |
go vet ./...
go test ./...
- name: Bygg release (linux-amd64 + windows-amd64)
run: |
go run ./tools/build -mode release -os linux -arch amd64
go run ./tools/build -mode release -os windows -arch amd64
mkdir -p out
(cd build/release && zip -qr ../../out/metro-puzzle-jp-linux-amd64.zip linux-amd64)
(cd build/release && zip -qr ../../out/metro-puzzle-jp-windows-amd64.zip windows-amd64)
(cd out && sha256sum *.zip > checksums.txt && ls -la && cat checksums.txt)
- name: Skapa/uppdatera Gitea-release + ladda upp assets
env:
REPO: ${{ github.repository }}
TAG: ${{ steps.t.outputs.tag }}
TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# gitea-d finns bara på Pi5:ns dockernät; härifrån används publika adressen
API=http://gitea-d:3000/api/v1
curl -sf -m 5 "$API/version" >/dev/null 2>&1 || API=https://gitea.brasse-pc.eu/api/v1
echo "API: $API"
auth() { curl -s -H "Authorization: token $TOKEN" "$@"; }
VER=$(./build/release/linux-amd64/metro-puzzle-jp -version 2>/dev/null | awk '{print $2}' || echo "$TAG")
BODY="Metro Puzzle JP $TAG ($VER, commit ${GITHUB_SHA:0:10}).
Packa upp zippen för din plattform och kör binären i mappen – resources/ måste ligga bredvid.
- Linux: kräver ett skrivbord med OpenGL (mesa) och X11/XWayland. Ljud via ALSA/PipeWire.
- Windows 10+: inga extra beroenden."
if [ "$TAG" = "latest" ]; then
# rullande release: ta bort den gamla så att taggen följer master
rid=$(auth "$API/repos/$REPO/releases/tags/$TAG" | jq -r '.id // empty')
[ -n "$rid" ] && auth -X DELETE "$API/repos/$REPO/releases/$rid" -o /dev/null
auth -X DELETE "$API/repos/$REPO/tags/$TAG" -o /dev/null || true
JSON=$(jq -n --arg t "$TAG" --arg c "$GITHUB_SHA" --arg n "latest ($VER)" --arg b "$BODY" \
'{tag_name:$t, target_commitish:$c, name:$n, body:$b, prerelease:true}')
else
JSON=$(jq -n --arg t "$TAG" --arg b "$BODY" '{tag_name:$t, name:$t, body:$b}')
fi
RESP=$(auth -X POST "$API/repos/$REPO/releases" -H 'Content-Type: application/json' -d "$JSON")
rid=$(echo "$RESP" | jq -r '.id // empty')
[ -z "$rid" ] && rid=$(auth "$API/repos/$REPO/releases/tags/$TAG" | jq -r '.id // empty')
[ -n "$rid" ] && [ "$rid" != "null" ] || { echo "kunde inte skapa release: $RESP"; exit 1; }
echo "release id: $rid"
for f in metro-puzzle-jp-linux-amd64.zip metro-puzzle-jp-windows-amd64.zip checksums.txt; do
aid=$(auth "$API/repos/$REPO/releases/$rid/assets" | jq -r ".[] | select(.name==\"$f\") | .id")
if [ -n "$aid" ] && [ "$aid" != "null" ]; then
auth -X DELETE "$API/repos/$REPO/releases/$rid/assets/$aid" -o /dev/null
fi
echo "laddar upp $f ..."
auth -X POST "$API/repos/$REPO/releases/$rid/assets?name=$f" -F "attachment=@out/$f" -o /dev/null -w " -> HTTP %{http_code}\n"
done
echo "klart: https://gitea.brasse-pc.eu/$REPO/releases/tag/$TAG"