All checks were successful
release / build-release (push) Successful in 1m42s
golang-imagen saknar node, vilket actions/checkout och actions/cache kräver. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
130 lines
6.0 KiB
YAML
130 lines
6.0 KiB
YAML
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"
|