Repository navigation
ci(release): the validate jobs upgrade over v0.8.0's .deb and start from a 0.8 config (#2726) - #2939
Merged
Merged
Conversation
…rom a 0.8 config (#2726) - validate-linux-package and validate-windows-package launch each binary a second time from a copy of tests/App/fixtures/config-v0.8.0.toml in its own TASKSMACK_CONFIG_DIR. It must quit cleanly (exit 0), log no [error] or [critical] line, and save config.toml with config_version and the fixture's distinctive settings kept. The Linux fresh launch now also fails on an [error]/[critical] line, as the Windows one already did. - New validate-linux-upgrade job (x64, ubuntu:26.04 container): fetches TaskSmack-0.8.0-Linux.deb from the v0.8.0 release by name, checks it against the pinned SHA-256 and the release's asset digest, installs it with apt and runs it for 5 s from the fixture in $HOME/.config/tasksmack. Then apt installs this run's .deb over it: exit 0, no dpkg file conflict, an in-place upgrade, every shipped file (helper and polkit policy by name) identical to the new .deb's, and no v0.8.0 file left over. The upgraded binary then starts with no TASKSMACK_CONFIG_DIR, quits cleanly and keeps the fixture's settings. 26.04, not 24.04, because v0.8.0's .deb depends on libsdl3-0, which Ubuntu 24.04 doesn't have. create-release needs it. - Windows NSIS upgrade: a comment pointing at #2302. - CONTRIBUTING.md's Release Artifact Validation describes both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
mgradwohl
enabled auto-merge (squash)
October 25, 2026 16:59
Owner
Author
|
Reviewed the new upgrade job: it has only read permissions, its actions are pinned by SHA, and v0.8.0's .deb is checked against both the pinned SHA-256 and the release's asset digest. Dry run 40211845017 passed every validate job, the upgrade included. Auto-merge is on. Whether #2726 moves to v0.10.0 is the maintainer's call, since this is main-only like #2720. |
This was referenced Oct 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
No CI step installed a new build over a real 0.8 install, or started one from a 0.8 config (#2488, #2489). This adds both to the release validate jobs, using #2720's clean quit (
TASKSMACK_SCREENSHOT=<png>;after=5, #2933) to check what the app saves on exit.The fixture is
tests/App/fixtures/config-v0.8.0.toml(#2725), which v0.8.0 saved itself. The checks look for the settings changed in v0.8.0's UI when it was made, since each one differs from today's default:[theme] id = 'dracula',[font] size = 'large',[sampling] interval_ms = 2000andhistory_max_seconds = 600,[ui] show_privilege_notice = false, and[process_columns] threads = true,user = false. A saved file must also haveconfig_version, which v0.8.0 didn't write, so it shows the shutdown's save rewrote v0.8.0's file. Window size and position aren't checked, because an offscreen or runner display can change them.Both smoke launches get a second run from v0.8.0's config:
smoke-check.sh, for both the.deband the.tar.gz): each binary runs twice, first from an emptyTASKSMACK_CONFIG_DIR(unchanged), then from one holding a copy of the fixture. Both runs must exit 0, write the frame, saveconfig.tomlwith its[theme]id, and log no[error]/[critical]line. The fresh run didn't check log lines before; the last dry run's Linux logs have only warnings, so this is safe. The second run must also haveconfig_versionand the fixture's settings. The asset log checks run on both.config_versionand the fixture settings. The leave-no-trace scan now covers both runs, with both config dirs allowed, and the package folder is deleted once after both. The step timeout goes from 5 to 8 minutes for the second launch. One checkout now fetches the signature check and the fixture, so it's no longer limited to the signed leg.actions/checkout. With no git there, the action falls back to downloading the tree through the REST API. Installing git would pull packages into the clean environment the.deb'sDependsis checked in.New
validate-linux-upgradejob (x64):TaskSmack-0.8.0-Linux.debis fetched by name from the v0.8.0 release through the API, with the job's token. The release has noSHA256SUMSasset, so the file is checked against a pinned SHA-256 (the onetests/App/fixtures/README.mdrecords) and against the release's own assetdigest.apt-get installputs v0.8.0 on. It then runs for 5 s from the fixture in$HOME/.config/tasksmack, where both versions look; v0.8.0 has noTASKSMACK_CONFIG_DIR. It must still be running when it's stopped. Its.debdoesn't declare thelibc++/GL libraries its binary links, so the step installs those too.apt-get installof this run's.debmust exit 0. dpkg must report notrying to overwriteand nodpkg: error. The log must sayUnpacking tasksmack (<new>) over (0.8.0), the installed version must be the new one, anddpkg --auditmust be clean..debships must be installed byte-for-byte as shipped, docs and man pages aside (the ubuntu image's dpkg excludes them). The helper (/usr/libexec/tasksmack/tasksmack-helper) and the polkit policy are required by name, and their SHA-256s are printed. No v0.8.0 file the new.debdoesn't ship may be left. v0.8.0 had no helper or policy, so the upgrade installs them; on a later upgrade, the same check shows they were replaced./usr/bin/TaskSmackstarts with noTASKSMACK_CONFIG_DIR, so it finds v0.8.0's file by itself. It must quit cleanly, log no[error]/[critical]line, and saveconfig_versionwith the fixture's settings kept.create-releasenow needs this job.Change from the issue's plan: the issue puts the upgrade in validate-linux-package's bare
ubuntu:24.04container. That isn't possible: v0.8.0's.debhasDepends: libsdl3-0, and Ubuntu 24.04 has no SDL3 package. That's why the fixture was made on 26.04. So the upgrade runs in its own job, in anubuntu:26.04container, wherelibsdl3-0installs and both versions run. It's x64 only, because v0.8.0 published no arm64.deb.Windows NSIS upgrade: out of scope. The
.zipis portable, so there's nothing to upgrade. A comment invalidate-windows-packagepoints at #2302's installer.CONTRIBUTING.md("Release Artifact Validation") describes the second launch and the upgrade job.Part of #2726 (the NSIS upgrade waits on #2302).
PR Size
Medium, over the size-S estimate: +540/−137, almost all in
release.yml. The new upgrade job is about 230 lines. The Windows smoke step's diff is large mostly because its launch moved into a loop and was re-indented.CONTRIBUTING.mdis 28 lines.Type of Change
Checklist
clang-tidyand addressed any warnings (no C++ changed)clang-formaton my changes (no C++ changed)pre-commit run --all-filesor installed pre-commit hooks (pre-commit run --fileson both files: all passed, actionlint included)Testing
Local dry runs: the steps' scripts were taken from
release.ymlwithtests/tools/workflow_steps.pyand run on Windows against fakes.smoke-check.sh(Git Bash, with a fakeTaskSmackscript): the good run passes. Each of these fails with its own message: a lost setting (theme), noconfig_version, an[error]line, exit 1, and a missing fixture.dpkg): passes, reading$HOME/.config/tasksmackwithTASKSMACK_CONFIG_DIRunset. A lost setting, noconfig_version, an[error]line and exit 1 each fail.TaskSmack.execompiled from C#): the good run passes. A lost setting (font size), noconfig_version, an[error]line, exit 1, and a new%LOCALAPPDATA%\TaskSmack-dryrun-leakeach fail.Release dry run from this branch, first dispatch: https://github.com/mgradwohl/tasksmack/actions/runs/40211845017
.deband.tar.gzeach passed both launches, and the v0.8.0 run savedsize = 'large'andid = 'dracula'.debmatched the pin and the release digest; v0.8.0 ran for 5 s;Unpacking tasksmack (0.9.0) over (0.8.0); helper and policy are the new.deb's; no v0.8.0 file left over; the upgraded app quit cleanly with the settings keptAdditional Notes
release/0.9lacksTASKSMACK_SCREENSHOT. So this is main-only too, with nobackport:0.9label. It's on v0.10.0; whether [CI] Upgrade-from-0.8 in the release validate jobs: apt-upgrade over v0.8.0's .deb, and seed the 0.8 config into the smoke launches #2726 moves off v0.9.1 is the maintainer's call.release.yml: the maintainer approved it (poll, 2026-10-25).timeout -k 10 5. The step only requires that it was still running at 5 s (status 124, or 137 if it ignored the stop). Its own log isn't checked for[error].toml_valueawk reader are in bothsmoke-check.shand the upgrade job. That's because the jobs run in different containers and nothing they share is checked out. Each copy has a "keep in step" comment, and the Windows step has its own copy.🤖 Generated with Claude Code