Files
metro-puzzle-jp/.gitea/workflows/release.yaml
claude 4ae7dba291
Some checks failed
release / build-release (push) Failing after 27s
M1: rörelse, kollision, kamera, scener, tileset, skärmdumpar, CI
- internal/sim: rutbaserad Mover (4 riktningar, riktningsbyte vid rutgräns,
  bildrute-exakt ankomst) och Camera (följer, klampar, centrerar små kartor),
  med tester
- internal/game: scener meny -> bana -> resultat, tangentbord + gamepad,
  tileset och spelaranimation, HUD, skriptläge (-script) för deterministiska
  skärmdumpar och tester
- tools/genart genererar placeholder-grafik (tiles.png, player.png);
  tools/shots tar doc/img/*.png som README och wiki visar
- bana 002-shinjuku (33x21) för kamerascroll; level.List/LoadFile/TrainAt
- .gitea/workflows/release.yaml: vet + test + linux/windows-zippar till
  rullande latest på brasse-linux01-runnern (linux-amd64)
- docs: roadmap M1 klar, tester, plan, README med bilder och styrning

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

122 lines
5.5 KiB
YAML
Raw 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.
on:
push:
branches: [master]
tags: ["v*"]
workflow_dispatch:
inputs:
tag:
description: "Release-tag (lämna tom för 'latest')"
required: false
jobs:
build-release:
runs-on: linux-amd64
container:
image: golang:1.27-bookworm
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: Byggberoenden (X11/GL/ALSA-headers för Ebitengine på Linux)
run: |
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 '*'
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"