xetup/.claude/memory/project_v0.9_release.md
X9 Dev d08cfd3e63 memory: record v0.9 release, CI-via-dispatch, Forgejo UI, pwsh
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 16:43:40 +02:00

3.4 KiB

name description type
Xetup v0.9 release and CI/ops findings as of 2026-06-03 What shipped in v0.9 (bloatware toggles), how releases really trigger, Forgejo UI customization, dev tooling project

v0.9 shipped (2026-06-03)

Tag v0.9, named non-prerelease, signed xetup.exe published. Also on rolling latest.

Bloatware feature toggles (step 01)

The bloatware step now has three independent GUI checkboxes (in runner.StepFeatures() under bloatware, defaults in config.go + config.json):

  • standardBloatware (default on) - the bulk AppX/capability/feature list.
  • removeNewOutlook (default on) - the new Outlook for Windows app (Microsoft.OutlookForWindows). Classic Outlook from M365 is a Win32 app, never touched - only the bundled UWP new Outlook is.
  • removeSnippingTool (default OFF) - Snipping Tool is now KEPT by default. Spans three list entries: Microsoft.ScreenSketch (the modern app), the legacy capability Microsoft.Windows.SnippingTool, and the optional feature Microsoft-SnippingTool. Kept like Calculator (common productivity tool).

Gating logic is Test-RemovalAllowed in scripts/01-bloatware.ps1: each item is governed by its own flag, so toggles are independent (a single feature off does not disable the whole step).

Latent bug fixed

The Go Config struct had no Bloatware field, so the GUI's runtime-config regeneration silently dropped bloatware.keepPackages - the script's keep-list merge was effectively dead when run via xetup.exe. Added the field.

CI / release mechanics (important)

  • release.yml triggers on push to main ONLY for paths **.go, scripts/**, assets/**, embed.go, app.manifest, release.yml. Docs-only / web/** pushes do NOT trigger a build.
  • Version tags release via workflow_dispatch on the tag ref, NOT a plain tag push. A vX.Y tag usually points at a docs-only "release X.Y" commit, which the paths filter blocks - so git push <tag> does nothing. Dispatch instead: POST /api/v1/repos/x9/xetup/actions/workflows/release.yml/dispatches {"ref":"vX.Y"}. This is how v0.8 and v0.9 were built. github.ref = refs/tags/vX.Y -> named release.
  • Release notes come from the matching ## [X.Y] section in CHANGELOG.md. Move the [Unreleased] content into a dated ## [X.Y] - DATE section before tagging.

Forgejo UI customization

  • Top-left Forgejo brand logo (#navbar-logo) is replaced with a back-link to xetup.x9.cz via templates/custom/header.tmpl (CSS + small JS retargeting href).
  • Forgejo custom path is GITEA_CUSTOM=/data/gitea inside the xetup-forgejo container; templates live in the xetup_forgejo-data volume (NOT git by itself).
  • Source is versioned in the repo at deploy/forgejo/ (mirror + README). Deploy = docker cp into the container + docker restart xetup-forgejo (templates load at startup). Runner reconnects on its own.

Dev tooling

  • pwsh (PowerShell 7.6.2) is installed on the dev box (Debian 12) via the Microsoft apt repo. Use it for PS syntax/parse checks: [System.Management.Automation.Language.Parser]::ParseFile(...). Note: Windows-only cmdlets (Remove-AppxPackage, Get-WindowsCapability...) cannot run here.

Still open

  • v0.9 / latest are NOT smoke-tested on real Windows yet. Recommend VM test (snapshot -> run -> revert) before a technician deploys to a client. Revert path: git revert <sha> + push (CI rebuilds latest).