WIP: ci: run authored Vulkan fixtures locally and prepare Forgejo execution #67
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
needs measurements
question
testing wanted
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!67
Loading…
Reference in a new issue
No description provided.
Delete branch "mooki/Longshot:ci/vulkan-fixtures-lavapipe"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
Contributors can execute the existing authored Vulkan fixtures without a game dump, but the ordinary source suite leaves their device paths opt-in. This adds one strict local command and prepares a small native Forgejo workflow. Open as work in progress: the local fixtures work, but no Forgejo runner execution is proven; the earlier suite's compiler termination and its successful isolated follow-up remain recorded below.
What changed
.github/workflows/source-regressions.ymlinto.forgejo/workflows/vulkan-fixtures.yml, the documented Forgejo workflow directory. The legacy file is otherwise exactly pinned main's file; this does not migrate all CI.push,pull_requestand manual triggers, Forgejo concurrency contexts, a full-origin commit-pinned checkout action, a five-minute job bound and the same software-ICD/package steps. The test contract follows that move without dropping any fixture/validation assertion.permissionskey as a security guarantee: Forgejo does not enforce it. This job has no configured secrets/uploads, does not persist checkout credentials and removes the forge tokens from its fixture command. Disposable-runner isolation is still required.What the forge gets today: a usable local checker and a proposed workflow, not yet run on a forge runner. During the recorded checks, public repository metadata said
has_actions: false; the tasks endpoint returned HTTP 404. That is not an empty task list and cannot establish that no runner has ever completed a run. No completed Forgejo task could be verified. The release/CI migration has since merged; this proposed workflow has not yet run on a forge runner.The label
ubuntu-24.04does not buy a GitHub-hosted machine on Forgejo. This job requires Actions and an isolated runner with that label and an Ubuntu 24.04 environment containing Bash, Git, Python 3, Node.js 24 for the pinned checkout action, passwordless sudo and apt/network access. This PR does none of that. The wider release migration and this standalone job have not been tested together.With the compiler, Vulkan loader/headers,
vulkaninfo, lavapipe and Khronos validation installed, the fixtures run locally in one command. SetLVP_ICDto the single installed lavapipe manifest andVULKAN_HEADERSto its headers directory; the contribution guide also gives the Ubuntu example:Flags and settings
No game environment switch, menu option, ini key or build default changes. These are opt-in test-driver controls and existing Vulkan-loader variables used by the new runner.
--device--devicellvmpipein every device resultllvmpipeaccepted--headers--cxxg++--source-root--cxxg++; suite supplies its compilerVK_DRIVER_FILESVK_ICD_FILENAMESVK_INSTANCE_LAYERSVK_LAYER_KHRONOS_validationin child processesVK_LAYER_SETTINGS_PATHVK_LOADER_DEBUGlayerMeasurements
Branch state: on main
d725b3631982ed0035ea3ac9cbe1677e9fad260c; head3969145a3fd5eabd624cab3a40b2f3c51e5b1e54; whole game-free suite on this head:511 passed, 1 failed, 20 skipped(maind725b3631982ed0035ea3ac9cbe1677e9fad260c:510 passed, 1 failed, 20 skipped); the commits are unchanged by rebases apart from the results table.The only failure on both heads is
tests/test_updater_asset_digest.py: local .NETNU1100, unable to resolve the missingMicrosoft.AspNetCore.App.Ref (= 10.0.13)reference pack for net10.0.main:
d4a69456c9(2026-11-12)this PR: ci/vulkan-fixtures-lavapipe @ 668e1913508f3896c7797843150eb5863da9450e (measured fixture content)
Main
d725b363differs from measuredd4a69456only by scripts, docs and tests, all six topic patches are unchanged, and the fixture measurements above remain valid at their original commits.Hardware: Core i9-13900K, 94 GiB RAM, Arch Linux kernel 7.2.15-1-omarchy; CPU-only llvmpipe, Mesa 26.2.5-arch1.1 / LLVM 23.1.3, Vulkan 1.4.354; Khronos validation 1.4.363, Vulkan headers 1.4.345. Device fixtures: GCC 16.2.1. Source suite: default Clang 23.1.3, Python 3.12.16.
Scene: authored buffers, four texels and synthetic offscreen images; no dump, save, window, swapchain or game.
Method: unmeasured warm-up, then main/branch/main/branch on the same PC and sole software ICD, fresh HOME each command, ordinary shared conditions. Main uses its three original fixture commands; the branch uses the new one-command runner. Main's aspect fixture lacks a selector, but the sole pinned ICD exposes only llvmpipe. Counts and medians below are correctness evidence, not speed measurements. Separately run the new source regression twice each with
--source-rootselecting main/branch/main/branch. The whole source suite uses--jobs 6 --strict, unsharded. The base suite was run once for all moved pull requests of this day, on this commit; the final-head suite ran here once.How to reproduce: with only lavapipe exposed in both ICD variables and Khronos validation installed, run the local command above on the branch; on main run
test_wb_diff_observations_gpu.py --run --device llvmpipe,test_vulkan_copy_span.py --gpu --gpu-device llvmpipeandtest_present_aspect_vulkan.pyin turn, supplying the same compiler and header arguments. Repeat main/branch/main/branch. For the source negative control usetests/test_vulkan_fixtures_ci.py --source-rootwith the pinned main checkout; run the whole suite withpython -I -B tests/run_all.py --jobs 6 --strict.d4a69456The whole suite in the branch-state block ran after the clean rebase, including the final documentation rows. The shared
d725b363base suite's printed duration was 234 s. The depth fixture that lost a compiler in the earlier a283e04a run passes in this complete rebased-head suite too. The previous failure and its unknown cause remain in the historical receipts below; the remaining reason for work-in-progress status is the unrun Forgejo workflow.The source negative control reports missing tooling, not a failing GPU: main lacks the explicit aspect selector and the new Forgejo workflow. Its other nine output/validation guard tests run against the new runner; they are not baseline GPU coverage. Actual excerpts:
Both interleaved Vulkan pairs contain these actual result lines (the first seven lines are the five write-back cases and their completion/device identity):
Every fixture's own output also contains both loader records
Insert instance layer "VK_LAYER_KHRONOS_validation"andInserted device layer "VK_LAYER_KHRONOS_validation"; merely enumerating the layer is not counted as activation. Branch summaries:The printed durations include compilation under shared load, not a performance comparison. The bounded run's kernel interval was readable with no NVIDIA fault signatures; no coredump was recorded. Ordinary core validation is covered; warning counts, extra synchronization validation and GPU-assisted validation are not claimed.
Whole-suite failures are retained, not called green:
All have the same local prerequisite failure (temporary path omitted):
The shared main run also had two timing-sensitive
test_appimage_package_retry.pyassertions under heavy load; its separate isolated follow-up passed all nine cases. Both branch suites pass that file. The final branch run instead lost a compiler innx2/test_depth_sample_types.py: clang++ compilingemit_spirv_barriers.cpp“died with<Signals.SIGKILL: 9>”. Its completenx2/gpuinputs and depth fixture are identical to main, and the earlier branch suite passed it. One requested isolated follow-up on the unchanged final head passed:The kernel log covering the failed compile's minute is readable but has no out-of-memory kill or memory-pressure explanation. Cause unknown: the isolated pass does not prove a memory kill or erase the full-suite failure. It is not labelled an inherited baseline failure. No further rerun was made; the PR stays a draft.
Windows-target syntax: three translation units (selector, write-back and aspect) compile with warnings as errors; not run on Windows.
Historical GitHub evidence, not new Forgejo evidence: the source workflow on original PR head
6ea3f6a1f9b4a793259f2a5f89dc50cd9f1e78e2reports both Ubuntu parts, both Windows parts, Vulkan and actionlint successful. Across that head the public API lists 12 successful checks and two release-only skips. The original Hookshot report also records the earlier validated fork job completing in 23 seconds including setup; that duration and its Mesa 25.2.8 runner were not reproduced on Forgejo. Earlier NVIDIA/Intel fixture trials remain labelled Hookshot and were not repeated here. The new runner itself is byte-identical to the green GitHub head; the C++ aspect fixture has only the application-name rename. Workflow placement/contracts and documentation are the named migration adaptations, not a claim of unchanged hosted behavior.Testing
Tested: On this PC: Arch Linux, RTX 4090, NVIDIA 615.78.08, Core i9-13900K. The RTX 4090 was not selected: device checks used CPU-only llvmpipe, Mesa 26.2.5-arch1.1 / LLVM 23.1.3 with Khronos validation. Two interleaved main/branch pairs at the measured commits above passed all 13 authored write-back/copy-span/aspect cases in each arm with validation active. The source regression checked main/branch/main/branch; main lacked the selector/workflow, while the branch passed all 11 tests. The whole suite ran on the current head after the final documentation commit. Three Windows-target fixture units compiled; no Windows executable was run. Historical GitHub checks remain historical, not Forgejo execution.
Tested but not measured: none beyond the explicitly recorded correctness checks; no speed measurement is claimed from their printed durations.
Not tested: Not yet run on a forge runner; the requested workflow trial is below, and the earlier public tasks-endpoint response cannot establish historical runner completions. No new test request was posted by this migration.
Needs other testers:
Screenshots
Nothing on screen. These are offscreen pixel-readback assertions; no window or game screenshot was produced.
Risk and rollback
Mesa, the validation layer or loader messages can change and make this strict lane fail; runner images may lack Node.js 24 or the required packages. A failure must stay a failure, not become a skip. Disable/remove this standalone workflow or revert this PR to roll back; the ordinary source suite remains GPU-independent, and no game settings or saves need migration.
Reviewer notes
Start with
check_fixture()intests/run_vulkan_fixtures.py: every case and both layer-insertion markers must be present in each fixture's own output. The aspect selector keeps the old preference when no filter is passed and refuses an unmatched filter. The outstanding work is an operator-provided, isolated Forgejo runner trial, not a missing local implementation; the wider release migration remains separate.Issues
See #43 — the forge's hardware-test-runner proposal; this supplies only its game-free software-driver part, not a hardware service. Original report: https://github.com/NotRexed/Hookshot/issues/2797. Original PR: https://github.com/NotRexed/Hookshot/issues/2866. The corresponding proposal now exists at #43; it is not closed by this PR.
Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above). — The earlier compiler kill is retained as history, not this run's result.third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.docs/tested-configurations.mdfor each measured run.tests/that reads changed source updated in this PR, not weakened.Moved from NotRexed/Hookshot#2866.
Assisted-by: GPT-6 Astra
Co-Authored-By: GPT-6 Astra [email protected]
Added the three-part Testing section and updated the full checklist. Added one branch base/head/suite block under Measurements; apart from consolidating duplicate results and minor wording cleanup, nothing else changed.
View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.