build: Release-Pipeline (scripts/release.sh + Gitea-Workflow) und flake.nix

- scripts/release.sh baut die sechs Targets (linux/darwin/windows ×
  amd64/arm64) statisch mit CGO_ENABLED=0, -trimpath, Version und Commit
  per ldflags, und schreibt checksums.txt. Asset-Vertrag für das Fleet-
  Rollout: talk_<os>_<arch>[.exe]. Bewusst ohne GoReleaser — dasselbe
  Artefakt lokal, in CI und unter nix, ohne zusätzliches Werkzeug.
- .gitea/workflows/release.yml: bei Tag v* Tests, Build, Gitea-Release mit
  Assets (actions/gitea-release-action, Repo-Token).
- flake.nix: Paket (buildGoModule, ein Binary), App, Overlay, devShell,
  Formatter. Linux-Wrapper legt alsa-lib in den LD_LIBRARY_PATH (oto lädt
  ALSA per dlopen, spricht PulseAudio/PipeWire aber direkt in Go) und
  espeak-ng/libnotify in den PATH. Verifiziert: nix build .#talk, nix flake
  check, Snapshot-Build aller sechs Targets.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
m3ta-chironandClaude Fable 5.1 committed 2026-10-24 10:37:46 +02:00
1 parent 9e2aa506a6
commit 423377bade
3 files changed
+146

No files matched your search

+40
View File
@@ -0,0 +1,40 @@
# Release-Matrix: bei Tag v* → Tests → Artefakte für alle Plattformen →
# Gitea-Release mit Assets talk_<os>_<arch>[.exe] + checksums.txt.
name: release
on:
push:
tags:
- "v*"
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # git describe braucht die Tags
- name: Go einrichten
uses: actions/setup-go@v5
with:
go-version-file: go.mod
- name: Tests
run: go vet ./... && go test ./...
- name: Artefakte bauen
run: scripts/release.sh "${{ github.ref_name }}"
- name: Gitea-Release anlegen und Assets hochladen
uses: https://gitea.com/actions/gitea-release-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ github.ref_name }}
name: talk ${{ github.ref_name }}
body: |
Statische Binaries (CGO_ENABLED=0), Prüfsummen in `checksums.txt`.
Installation: passendes `talk_<os>_<arch>` laden, Prüfsumme vergleichen,
als `talk` in den PATH legen, `talk doctor`. Der Daemon startet beim ersten
Sprechbefehl von selbst.
files: |-
dist/talk_*
dist/checksums.txt