Release 1.1.3 with game window and Gamescope lifecycle fixes

This commit is contained in:
2026-10-25 20:47:19 +01:00
parent b6de80e758
commit 1f2aad0ee2
42 changed files with 9291 additions and 153 deletions

View File

@@ -3,11 +3,12 @@
Manual publication mode is currently active. Build a complete local package with:
```text
./scripts/release.sh stable 1.8.0
./scripts/release.sh prerelease 1.9.0-beta.1
SIGNING_KEY_PATH="${XDG_CONFIG_HOME:-$HOME/.config}/pristontale-eu/release/launcher-update-private.pem"
PTLINUX_SIGNING_KEY="$SIGNING_KEY_PATH" ./scripts/release.sh stable 1.8.0
PTLINUX_SIGNING_KEY="$SIGNING_KEY_PATH" ./scripts/release.sh prerelease 1.9.0-beta.1
```
The command creates `dist/v<VERSION>/`, validates the channel/version pair,
The command creates `.artifacts/releases/v<VERSION>/`, validates the channel/version pair,
builds and previews release notes, runs the configured preflight, creates a
deterministic archive, signs the manifest, and verifies the complete result. It
changes the requested version only inside the staged package, so the source
@@ -24,11 +25,15 @@ releases after `0.9.11` return to the flat layout.
Use `--description` for short Markdown or `--description-file` for a prepared
Markdown document. Generated commit notes are appended by default. Run
`./scripts/release.sh --help` for dry-run, editor, changelog-only, signing-key,
and test options.
output-directory, and test options. Custom release output must remain below
`.artifacts/releases/` or an operating-system temporary directory. See the
[artifact layout and migration guide](../docs/development/ARTIFACTS.md) for all
generated-output locations. The private signing key has no checkout default;
provide a mode-`0600` regular file outside the repository and artifact output.
After a successful build, create a new release in Gitea with tag `v<VERSION>`.
Leave **Pre-release** clear for `stable`; select it for `prerelease`. Use
`dist/v<VERSION>/release-notes.md` as the description and upload exactly these
`.artifacts/releases/v<VERSION>/release-notes.md` as the description and upload exactly these
five files from that version directory:
- `PristonTale-EU-<VERSION>.tar.gz`
@@ -43,14 +48,14 @@ signed archive URL includes its SHA-256 as a query parameter so Cloudflare and
other CDNs cannot reuse an empty response cached before the attachment existed.
After the Gitea release exists and each attachment has a nonzero size, publish
the matching files generated under
`dist/v<VERSION>/channel/` to the repository:
`.artifacts/releases/v<VERSION>/channel/` to the repository:
```text
dist/v<VERSION>/channel/stable.json -> updates/stable.json
dist/v<VERSION>/channel/stable.json.sig -> updates/stable.json.sig
.artifacts/releases/v<VERSION>/channel/stable.json -> updates/stable.json
.artifacts/releases/v<VERSION>/channel/stable.json.sig -> updates/stable.json.sig
dist/v<VERSION>/channel/prerelease.json -> updates/prerelease.json
dist/v<VERSION>/channel/prerelease.json.sig -> updates/prerelease.json.sig
.artifacts/releases/v<VERSION>/channel/prerelease.json -> updates/prerelease.json
.artifacts/releases/v<VERSION>/channel/prerelease.json.sig -> updates/prerelease.json.sig
```
Commit and push only the selected channel pair. Publishing a prerelease must not
@@ -71,8 +76,8 @@ For direct artifact tooling without release notes or manual-upload guidance:
```text
PTLINUX_PYTHON=/path/to/python \
./scripts/build-release.sh 0.9.11 stable ./dist/v0.9.11
./scripts/verify-release.sh 0.9.11 stable ./dist/v0.9.11
./scripts/build-release.sh 0.9.11 stable ./.artifacts/releases/v0.9.11
./scripts/verify-release.sh 0.9.11 stable ./.artifacts/releases/v0.9.11
```
The builder selects the runtime payload declared in `config.json`; it does not
@@ -101,13 +106,17 @@ must provide Git, Bash, curl, jq, Python 3.11 or newer, tar, gzip, coreutils
uses `actions/checkout@v4` and checks that the checked-out commit is the exact
commit referenced by the annotated tag.
The tracked runner template and local setup instructions are in
[`../infra/gitea-runner/`](../infra/gitea-runner/). Its `.env`, registration
token, and persistent state stay outside source control.
Configure these protected Actions secrets:
- `RELEASE_TOKEN`: a dedicated token with only the repository release and
repository-content write permissions needed to create releases, upload
attachments, and update signed channel metadata.
- `MANIFEST_SIGNING_KEY`: the private key corresponding to
`ptlinux/launcher-update-public.pem`.
`src/ptlinux/launcher-update-public.pem`.
Secrets are available only to trusted tag and release-status workflows. Do not
add the release secrets to pull-request workflows. The signing key is written under

View File

@@ -27,7 +27,8 @@
"version_mirrors": [
"pyproject.toml"
],
"version_source": "ptlinux/__init__.py",
"version_source": "src/ptlinux/__init__.py",
"packaged_version_path": "ptlinux/__init__.py",
"payload": {
"python_trees": [
{
@@ -35,61 +36,80 @@
"desktop_entry.py",
"launcher_wrapper.py"
],
"source": "ptlinux"
"source": "src/ptlinux",
"destination": "ptlinux"
}
],
"files": [
{
"mode": "0644",
"path": "ptlinux/launcher-update-public.pem"
"source": "src/ptlinux/launcher-update-public.pem",
"destination": "ptlinux/launcher-update-public.pem"
},
{
"mode": "0644",
"path": "ptdiag/__init__.py"
"source": "src/ptdiag/__init__.py",
"destination": "ptdiag/__init__.py"
},
{
"mode": "0644",
"path": "ptdiag/assbin.py"
"source": "src/ptdiag/assbin.py",
"destination": "ptdiag/assbin.py"
},
{
"mode": "0644",
"path": "ptdiag/logs.py"
"source": "src/ptdiag/logs.py",
"destination": "ptdiag/logs.py"
},
{
"mode": "0644",
"path": "ptlinux/native/pt-identity-probe.exe"
"source": "src/ptlinux/native/pt-identity-probe.exe",
"destination": "ptlinux/native/pt-identity-probe.exe"
},
{
"mode": "0644",
"source": "src/ptlinux/native/ptr-bcrypt-proxy.dll",
"destination": "ptlinux/native/ptr-bcrypt-proxy.dll"
},
{
"mode": "0755",
"path": "ptlinux/native/gamescope-3.16.20-ubuntu26.04-amd64"
"source": "src/ptlinux/native/gamescope-3.16.20-ubuntu26.04-amd64",
"destination": "ptlinux/native/gamescope-3.16.20-ubuntu26.04-amd64"
},
{
"mode": "0644",
"path": "ptlinux/native/gamescope-compat.README"
"source": "native/gamescope/gamescope-compat.README",
"destination": "ptlinux/native/gamescope-compat.README"
},
{
"mode": "0644",
"path": "ptlinux/native/gamescope-compat.copyright"
"source": "native/gamescope/gamescope-compat.copyright",
"destination": "ptlinux/native/gamescope-compat.copyright"
},
{
"mode": "0644",
"path": "ptlinux/native/gamescope-lazy-output-images.patch"
"source": "native/gamescope/patches/gamescope-lazy-output-images.patch",
"destination": "ptlinux/native/gamescope-lazy-output-images.patch"
},
{
"mode": "0644",
"path": "ptlinux/native/gamescope-wayland-live-resize.patch"
"source": "native/gamescope/patches/gamescope-wayland-live-resize.patch",
"destination": "ptlinux/native/gamescope-wayland-live-resize.patch"
},
{
"mode": "0644",
"path": "ptlinux/native/gamescope-wayland-letterbox-backing.patch"
"source": "native/gamescope/patches/gamescope-wayland-letterbox-backing.patch",
"destination": "ptlinux/native/gamescope-wayland-letterbox-backing.patch"
},
{
"mode": "0644",
"path": "ptlinux/native/gamescope-wayland-libdecor-input-scope.patch"
"source": "native/gamescope/patches/gamescope-wayland-libdecor-input-scope.patch",
"destination": "ptlinux/native/gamescope-wayland-libdecor-input-scope.patch"
},
{
"mode": "0644",
"path": "ptlinux/native/gamescope-keep-nested-windows-visible.patch"
"source": "native/gamescope/patches/gamescope-keep-nested-windows-visible.patch",
"destination": "ptlinux/native/gamescope-keep-nested-windows-visible.patch"
}
]
},
@@ -97,12 +117,76 @@
"release.json",
"ptlinux/__init__.py",
"ptlinux/__main__.py",
"ptlinux/application/__init__.py",
"ptlinux/application/common.py",
"ptlinux/application/commands/__init__.py",
"ptlinux/application/commands/health.py",
"ptlinux/application/commands/installation.py",
"ptlinux/application/commands/launcher_update.py",
"ptlinux/application/commands/play.py",
"ptlinux/application/commands/settings.py",
"ptlinux/cli.py",
"ptlinux/diagnostics/__init__.py",
"ptlinux/diagnostics/crash_dumps.py",
"ptlinux/diagnostics/native_logs.py",
"ptlinux/game/__init__.py",
"ptlinux/game/arguments.py",
"ptlinux/game/compatibility/__init__.py",
"ptlinux/game/compatibility/assbin.py",
"ptlinux/game/depot/__init__.py",
"ptlinux/game/depot/catalogs.py",
"ptlinux/game/depot/filesystem.py",
"ptlinux/game/depot/integrity.py",
"ptlinux/game/depot/manifest.py",
"ptlinux/game/depot/models.py",
"ptlinux/game/depot/transfer.py",
"ptlinux/game/ptr_compat.py",
"ptlinux/gui_bootstrap.py",
"ptlinux/launcher_updates/__init__.py",
"ptlinux/launcher_updates/activation.py",
"ptlinux/launcher_updates/archive.py",
"ptlinux/launcher_updates/discovery.py",
"ptlinux/launcher_updates/models.py",
"ptlinux/launcher_updates/parsing.py",
"ptlinux/launcher_updates/rollback.py",
"ptlinux/launcher_updates/staging.py",
"ptlinux/self_update.py",
"ptlinux/telemetry/__init__.py",
"ptlinux/telemetry/dependencies.py",
"ptlinux/telemetry/environment.py",
"ptlinux/telemetry/errors.py",
"ptlinux/telemetry/extended.py",
"ptlinux/telemetry/graphics.py",
"ptlinux/telemetry/identity.py",
"ptlinux/telemetry/payload.py",
"ptlinux/telemetry/privacy.py",
"ptlinux/telemetry/probes.py",
"ptlinux/telemetry/runtime.py",
"ptlinux/telemetry/service.py",
"ptlinux/telemetry/transport.py",
"ptlinux/telemetry_environment.py",
"ptlinux/ui/components/content_view.py",
"ptlinux/ui/components/preloader.py",
"ptlinux/ui/components/startup_preloader.py",
"ptlinux/ui/controllers/__init__.py",
"ptlinux/ui/controllers/content.py",
"ptlinux/ui/controllers/events.py",
"ptlinux/ui/controllers/installation.py",
"ptlinux/ui/controllers/launcher_update.py",
"ptlinux/ui/controllers/operation.py",
"ptlinux/ui/controllers/play.py",
"ptlinux/ui/dialogs/debug.py",
"ptlinux/ui/dialogs/game_preloader.py",
"ptlinux/ui/viewmodels/debug.py",
"ptlinux/update_resolver.py",
"ptlinux/launcher-update-public.pem"
"ptlinux/launcher-update-public.pem",
"ptlinux/native/ptr-bcrypt-proxy.dll",
"ptdiag/__init__.py",
"ptdiag/assbin.py",
"ptdiag/logs.py"
],
"exclusions": [
".artifacts",
".git",
".gitea",
".idea",
@@ -133,8 +217,6 @@
"ptlinux/launcher-update-public.pem"
],
"preflight": [
"\"$PTLINUX_PYTHON\" -m compileall -q ptlinux ptdiag scripts release_tests",
"\"$PTLINUX_PYTHON\" -m unittest discover -s release_tests -p 'test_*.py'",
"\"$PTLINUX_PYTHON\" -m unittest discover -s tests -p 'test_*.py'"
"\"$PTLINUX_PYTHON\" -m compileall -q src/ptlinux src/ptdiag scripts"
]
}

5
release/notes/1.1.3.md Normal file
View File

@@ -0,0 +1,5 @@
- Improved game-window startup handling and focus tracking.
- Fixed Gamescope cleanup after game exit or interrupted startup.
- Corrected exit reporting when Gamescope closes without a recorded game status.
- Kept the launcher visible when game-window monitoring is unavailable.
- Added bounded local window diagnostics and preserved shutdown evidence in noisy logs.