diff --git a/.claude/skills/bump-deps/SKILL.md b/.claude/skills/bump-deps/SKILL.md index 8ad6fe0..4939793 100644 --- a/.claude/skills/bump-deps/SKILL.md +++ b/.claude/skills/bump-deps/SKILL.md @@ -66,7 +66,7 @@ dotnet build UnityExtension/UnityExtension.csproj -c Release -p:Platform=x64 -p: dotnet tool run csharpier check . ``` -Run the Release build whenever WindowsAppSDK or CsWinRT changed; it is what catches trim/AOT regressions. Also run the MSIX bundle build from `docs/PUBLISHING.md` ("Package build"): PR CI never builds the bundle, and packaging problems (publish profiles, runtime packs) only show up there. If an upgrade breaks the build, pin one step back and say why. Loading the result in PowerToys (`deploy` skill) is the only check that proves runtime compatibility; say when it was not done. +Run the Release build whenever WindowsAppSDK or CsWinRT changed; it is what catches trim/AOT regressions. Also run the MSIX bundle build from `docs/PUBLISHING.md` ("Package build"); the `bundle-build` CI job runs the same command, and packaging problems (publish profiles, runtime packs) only show up there. If an upgrade breaks the build, pin one step back and say why. Loading the result in PowerToys (`deploy` skill) is the only check that proves runtime compatibility; say when it was not done. ## Report diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md index 8dee2dc..c50cb04 100644 --- a/.claude/skills/release/SKILL.md +++ b/.claude/skills/release/SKILL.md @@ -23,7 +23,7 @@ The fourth segment stays `.0` (Store rule). Then grep tracked files (not `bin/`, ## 2. Validate -Delete `bin`, `obj` and `AppPackages` if identity, name or publish profiles changed, then run the restore + `--no-restore` unsigned bundle build from `docs/PUBLISHING.md` (the PR CI job does not build the bundle, so this is the only pre-tag packaging check). A bundle at repo-root `AppPackages/UnityExtension__Test/UnityExtension__x64_arm64.msixbundle` means it worked. Optionally sideload-test it via the `deploy` skill. +Delete `bin`, `obj` and `AppPackages` if identity, name or publish profiles changed, then run the restore + `--no-restore` unsigned bundle build from `docs/PUBLISHING.md` (the `bundle-build` job in `ci.yml` runs the same command on every PR; run it locally to debug a failure). A bundle at repo-root `AppPackages/UnityExtension__Test/UnityExtension__x64_arm64.msixbundle` means it worked. Optionally sideload-test it via the `deploy` skill. The version must be higher than the one last published to the Store (`winget show` does not report it; ask the user or check Partner Center), and no draft may be open in the Partner Center web UI. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d8fa50c..3a27dad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,8 @@ permissions: concurrency: group: ci-${{ github.ref }} - cancel-in-progress: true + # Only supersede PR runs; pushes to master each keep their own result. + cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: build-test: @@ -49,6 +50,38 @@ jobs: timeout-minutes: 10 run: dotnet test UnityExtension.Tests/UnityExtension.Tests.csproj -c Release -p:Platform=x64 -p:WindowsAppSdkBootstrapInitialize=false --blame-hang --blame-hang-timeout 2m + # Packaging check: mirrors the build step of release-msix.yml (unsigned) so publish-profile or + # runtime-pack problems surface on the PR instead of on the tag build. + bundle-build: + runs-on: windows-2022 + timeout-minutes: 30 + + steps: + - name: Checkout + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5 + with: + dotnet-version: 10.0.x + cache: true + cache-dependency-path: | + **/Directory.Packages.props + **/*.csproj + + - name: Restore + run: dotnet restore UnityExtension/UnityExtension.csproj + + - name: Build MSIX bundle (unsigned) + run: dotnet build UnityExtension/UnityExtension.csproj --no-restore -c Release -p:Platform=x64 -p:GenerateAppxPackageOnBuild=true -p:AppxBundle=Always -p:AppxBundlePlatforms="x64|arm64" -p:AppxPackageSigningEnabled=false -p:SuppressSdkNoise=false + + - name: Check bundle exists + shell: pwsh + run: | + $bundle = Get-ChildItem -Path AppPackages -Recurse -Filter *.msixbundle | Select-Object -First 1 + if (-not $bundle) { throw 'No .msixbundle produced under AppPackages' } + Write-Host "Built $($bundle.Name) ($([math]::Round($bundle.Length / 1MB, 1)) MB)" + validate-version: runs-on: ubuntu-latest timeout-minutes: 5 diff --git a/CLAUDE.md b/CLAUDE.md index d0c47e0..1559283 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,7 +13,7 @@ Published on the Microsoft Store as "Project Launcher for Unity", product ID `9N - `UnityExtension/` = C# project (`Commands/`, `Data/`, `Helpers/`, `Pages/`, `Program.cs`, `UnityExtension.cs`, `Package.appxmanifest`) - `docs/` = DEVELOPMENT, PUBLISHING, TROUBLESHOOTING (+ local-only, git-ignored `store-identity.md`); screenshots in `docs/assets/` -- `.github/workflows/ci.yml` = PR checks (format, unpackaged Release build, tests, version agreement); it does not build the MSIX bundle +- `.github/workflows/ci.yml` = PR/master checks: format, unpackaged Release build, tests, unsigned MSIX bundle build (`bundle-build`), version agreement - `.github/workflows/release-msix.yml` = tag `v*` -> validate versions -> build -> sign -> GitHub release -> opt-in `store-publish` (repo var `STORE_PUBLISH`, environment `microsoft-store` needs reviewer approval) - `Directory.Packages.props` = all package versions; `dotnet-tools.json` = csharpier, minver-cli; `.pre-commit-config.yaml` = hooks - No Markdown under `UnityExtension/`; contributor guidance -> `CONTRIBUTING.md`; user docs -> `docs/`