M1: rörelse, kollision, kamera, scener, tileset, skärmdumpar, CI
Some checks failed
release / build-release (push) Failing after 27s
Some checks failed
release / build-release (push) Failing after 27s
- 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>
This commit is contained in:
121
.gitea/workflows/release.yaml
Normal file
121
.gitea/workflows/release.yaml
Normal file
@@ -0,0 +1,121 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user