Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
75af5b7
Add the fold closure writer, header decisions and reference record
swhitt Oct 25, 2026
5096576
Write the shipped v1.0.11 first-party sources into runtime-recomp
swhitt Oct 25, 2026
0c868ab
Add the fold equivalence gate (levels 1 to 3)
swhitt Oct 25, 2026
394ffb7
Declare the folded sources and include dirs in CMake
swhitt Oct 25, 2026
20a22ea
Add the Camera++ and custom vehicle targets to CMake
swhitt Oct 25, 2026
043ff63
Mark launcher copy that v1.0.11 superseded, fix two moved entries
swhitt Oct 26, 2026
7cc60d1
Split DKRPortGame into an object library, add host-full-nogen
swhitt Oct 26, 2026
c8977f3
Assert shipped v1.0.11 behaviour in six stale host tests
swhitt Oct 26, 2026
74bb702
Pin the equivalence image by ID, add its reconstructed Dockerfile
swhitt Oct 26, 2026
fe0f338
Inline the startup-memory stage, list open fold items
swhitt Oct 26, 2026
18723b5
Register dkr_stage_patch patches in the manifest's stagedPatches
swhitt Oct 26, 2026
5c43102
Apply the v1.0.11 dependency transforms as registered stage patches
swhitt Oct 26, 2026
87e09e9
Apply guest hooks from hooks.toml instead of layer pipelines
swhitt Oct 26, 2026
c6b643e
Fold the Camera++ shadow kernel, derive its hook stubs in Camera.cmake
swhitt Oct 26, 2026
14cf8ab
Generate the guest symbol headers from runtime-recomp/symbols
swhitt Oct 26, 2026
1fe1f17
Note the intermittent Quick Join lifecycle wait for the maintainer
swhitt Oct 26, 2026
fd8e3b0
Record configure-time generation, wire-format re-baselines, open items
swhitt Oct 26, 2026
78f0724
Track owned guest inputs, prune stale guest-hook dirs
swhitt Oct 26, 2026
5826b08
Skip comments and literals in return fences, refuse unbraced returns
swhitt Oct 26, 2026
e261638
Remove generated symbol headers that no request names
swhitt Oct 26, 2026
8deb524
Raise the Python floor to 3.11, run strict pyright in the lint job
swhitt Oct 26, 2026
989ab44
Harden the equivalence gate against silent passes
swhitt Oct 26, 2026
ee39f63
List non-Linux PR-2 blockers, record the Quick Join flake on main
swhitt Oct 26, 2026
9694011
Merge remote-tracking branch 'origin/main' into refactor/patch-fold-in
swhitt Oct 26, 2026
13c783a
Freeze the owned rollback contracts at the v1.0.11 values (B7)
swhitt Oct 26, 2026
b27eeae
Fail if any CMake outside OnlineIdentity.cmake writes an owned ID
swhitt Oct 26, 2026
0037551
Build the folded tree on Windows and Android in CI
swhitt Oct 26, 2026
b205993
Record fold evidence, add the ROM-free closure check (B5)
swhitt Oct 26, 2026
d5d0071
macOS build of the folded tree: libc++ and Metal fixes (B6)
swhitt Oct 26, 2026
30bfe32
Let portability TUs change their header set; count them in level 3
swhitt Oct 26, 2026
2f3db66
Install pinned Python 3.12 in the new fold CI jobs
swhitt Oct 26, 2026
e017fba
Use one mutex-guarded snapshot holder, skip curl on Android (B6)
swhitt Oct 26, 2026
277cdac
Promote the prepared-input generators to prepare steps (B8a)
swhitt Oct 26, 2026
6382934
Gate prepare_payloads.py against the reference's prepared inputs
swhitt Oct 26, 2026
d587e07
Go back to AtomicSnapshot at the five snapshot sites
swhitt Oct 26, 2026
337696b
Name the two owned-engine input stages as the guest-code exception
swhitt Oct 26, 2026
a0628fb
Give Windows the same prepare path as macOS
swhitt Oct 26, 2026
e556cb0
Delete the layer pipelines, move the service backends to services/ (B8)
swhitt Oct 26, 2026
2bad264
Show the live Rollback panel only where its runtime is built (B6)
swhitt Oct 26, 2026
764d078
Replace release-prep with versionless scripts/release (B8)
swhitt Oct 26, 2026
6558be8
Let level 2 vouch for experimental_runtime.cpp, it is token-identical
swhitt Oct 26, 2026
a9ae74c
Name the legacy_identity.hpp include as an allowed level 1 delta
swhitt Oct 26, 2026
333bc30
Record why rollback stays off on Apple
swhitt Oct 26, 2026
b195ee0
Let Camera.cmake find the shadow hooks in formatted source
swhitt Oct 26, 2026
52214e3
Add the reproducible format script and its layout-only proof (B9 prep)
swhitt Oct 26, 2026
ed10e07
Record the closure by C/C++ tokens so comment reflow keeps it green
swhitt Oct 26, 2026
8beac7c
Make the source-text tests hold under any layout (B9 prep)
swhitt Oct 26, 2026
ef8ef5e
Keep clang-format off four tests' macro call lists, it never settles
swhitt Oct 26, 2026
52e7ae4
Format first-party C/C++ and CMake (B9, format only)
swhitt Oct 26, 2026
1d537e3
Ignore the B9 format pass in blame, make the formatters blocking
swhitt Oct 26, 2026
b84c604
Add the release build, input lock, evidence and tag gates (B9b)
swhitt Oct 26, 2026
6b9b2b9
Add the release runbook and the layer-to-source map (B9b)
swhitt Oct 26, 2026
7f2e255
Lock the configure-read manifest fields and code policies, test it
swhitt Oct 26, 2026
6ac4288
Keep AtomicSnapshot one type in open-items, list the water TU for C5
swhitt Oct 26, 2026
ca96ecc
Port upstream runtime fixes and restore eight folded release checks
swhitt Oct 31, 2026
9576db6
Fold profile identity and remembered sign-in into native services
swhitt Oct 31, 2026
1a13a4f
Fold profile UI, portraits and maintained online API modules
swhitt Oct 31, 2026
79a363c
Preserve per-instance logs and isolate updater handles
swhitt Oct 31, 2026
1c0c0a6
Fold bounded setup queues and pressure-aware resource reuse
swhitt Oct 31, 2026
815f1bd
Fold party delivery scheduling and preparation diagnostics
swhitt Oct 31, 2026
cdd0f0c
Restore both owned heap-entry release fixtures against production code
swhitt Oct 31, 2026
33e3904
Verify proposed identities against all published desktop artifacts
swhitt Oct 31, 2026
523c199
Merge main and preserve shipped v1.0.12 behavior in source owners
swhitt Oct 31, 2026
ffad314
Prune installed service tools from the source asset scan
swhitt Oct 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ ColumnLimit: 120
PointerAlignment: Left
AllowShortFunctionsOnASingleLine: Empty
SortIncludes: Never # include order is load-bearing in spliced TUs (runtime_ui.cpp)
BreakStringLiterals: false # a split literal is a token change; formatting must not make one
SortUsingDeclarations: Never # keep the pass layout-only (scripts/format_tokens.py)
17 changes: 17 additions & 0 deletions .clang-format-ignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Never formatted (scripts/format_sources.py NEVER, which this mirrors; a
# tooling test keeps the two in step). clang-format 18 matches * within one
# path segment, so each directory that holds C/C++ files is listed.
runtime-recomp/RecompiledRSP/*
runtime-recomp/guest/*
runtime-recomp/third_party/dr_libs/*
tests/fixtures/pattern-guard/PG006/negative/runtime-recomp/src/game/*
tests/fixtures/pattern-guard/PG006/positive/patches/feature/native/*
tests/fixtures/pattern-guard/PG009/negative/runtime-recomp/src/game/*
tests/fixtures/pattern-guard/PG009/positive/runtime-recomp/src/game/*
tests/fixtures/pattern-guard/PG010/negative/runtime-recomp/src/game/mods/*
tests/fixtures/pattern-guard/PG010/negative/runtime-recomp/src/game/netplay/*
tests/fixtures/pattern-guard/PG010/positive/runtime-recomp/src/game/netplay/*
tests/fixtures/pattern-guard/PG011/negative/runtime-recomp/src/game/*
tests/fixtures/pattern-guard/PG011/negative/runtime-recomp/src/game/generated/*
tests/fixtures/pattern-guard/PG011/positive/runtime-recomp/build/generated/*
tests/fixtures/pattern-guard/PG011/positive/runtime-recomp/src/game/*
2 changes: 2 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
# git config blame.ignoreRevsFile .git-blame-ignore-revs
# Apply ruff format, ruff --fix and shfmt to first-party scripts (A2)
d6690f6da8690bdaf79ab898f10e5cee69f6ef07
# Format first-party C/C++ and CMake (B9); proof: docs/fold-in/B9-format-proof.json
52e7ae44835fb70ff4cbdb15145204ec4b73e0cb
32 changes: 30 additions & 2 deletions .github/actions/prepare-dependencies/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,19 @@ name: Prepare reviewed dependencies
description: Cache pinned source checkouts and verify them before every build
inputs:
profile:
description: Dependency set (host, ios, or android)
description: Dependency set (host, ios, android, or android-full for the whole runtime)
default: host
decomp-symbols:
description: Check out decomp symbol tables; required automatically for host profiles
default: "false"
runs:
using: composite
steps:
- name: Restore dependency sources
id: sources
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
key: sources-v2-${{ runner.os }}-${{ runner.arch }}-${{ inputs.profile }}-${{ hashFiles('dependencies.lock.json', 'patches/**', 'scripts/bootstrap_dependencies.py', 'scripts/apply_dependency_patches.py', '.github/actions/prepare-dependencies/action.yml') }}
key: sources-v2-${{ runner.os }}-${{ runner.arch }}-${{ inputs.profile }}-symbols-${{ inputs.decomp-symbols == 'true' || inputs.profile == 'host' }}-${{ hashFiles('dependencies.lock.json', 'patches/**', 'scripts/bootstrap_dependencies.py', 'scripts/apply_dependency_patches.py', '.github/actions/prepare-dependencies/action.yml') }}
path: |
extern/n64-modern-runtime
extern/rt64
Expand All @@ -21,6 +24,7 @@ runs:
extern/mbedtls
extern/sdl3
extern/sdl2
extern/dkr-decomp
- name: Verify pinned sources and apply reviewed patches
shell: bash
env:
Expand All @@ -31,6 +35,7 @@ runs:
host) dependencies=(n64-modern-runtime rt64 gekkonet monocypher libdatachannel mbedtls sdl3) ;;
ios) dependencies=(rt64 sdl2) ;;
android) dependencies=(n64-modern-runtime rt64 sdl2) ;;
android-full) dependencies=(n64-modern-runtime rt64 gekkonet monocypher libdatachannel mbedtls sdl2) ;;
*)
echo "Unknown dependency profile: $DEPENDENCY_PROFILE" >&2
exit 1
Expand All @@ -42,6 +47,28 @@ runs:
done
"$PYTHON_EXECUTABLE" scripts/bootstrap_dependencies.py --shallow "${arguments[@]}"
"$PYTHON_EXECUTABLE" scripts/apply_dependency_patches.py
# The guest symbol headers need the decomp's symbol tables only, not the
# 563 MB tree: a sparse, blob-filtered checkout of ver/symbols at the
# locked commit. dkr-decomp carries no reviewed patches.
- name: Check out the decomp symbol tables
if: inputs.decomp-symbols == 'true' || inputs.profile == 'host'
shell: bash
env:
PYTHON_EXECUTABLE: ${{ runner.os == 'Windows' && 'python' || 'python3' }}
run: |
read -r repository commit < <("$PYTHON_EXECUTABLE" -c "import json; e = next(d for d in json.load(open('dependencies.lock.json'))['dependencies'] if d['name'] == 'dkr-decomp'); print(e['repository'], e['commit'])")
if [[ ! -d extern/dkr-decomp/.git ]]; then
git init --quiet extern/dkr-decomp
git -C extern/dkr-decomp remote add origin "$repository"
git -C extern/dkr-decomp sparse-checkout set ver/symbols
fi
if [[ "$(git -C extern/dkr-decomp rev-parse --verify --quiet HEAD || true)" != "$commit" ]]; then
git -C extern/dkr-decomp fetch --quiet --depth 1 --filter=blob:none origin "$commit"
git -C extern/dkr-decomp checkout --quiet --detach "$commit"
fi
test "$(git -C extern/dkr-decomp rev-parse HEAD)" = "$commit"
test -f extern/dkr-decomp/ver/symbols/symbol_addrs.us.v77.txt
test -f extern/dkr-decomp/ver/symbols/symbol_addrs.us.v80.txt
# Save before configuration: the cache contains reviewed source checkouts,
# never build outputs, ROMs, generated retail code, or local game data.
- name: Save verified dependency sources
Expand All @@ -58,3 +85,4 @@ runs:
extern/mbedtls
extern/sdl3
extern/sdl2
extern/dkr-decomp
53 changes: 53 additions & 0 deletions .github/workflows/build-android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,56 @@ jobs:
build/android-compile/compile_commands.json
build/android-compile/device-objects.json
build/android-compile/CMakeFiles/CMakeConfigureLog.yaml
# The folded runtime for Android: RT64 with the Android stage chain and the
# stage patches on top, and every first-party game TU (DKRPortGameCore),
# without ROM-derived payloads. Fold PR-2 merge blocker
# (docs/fold-in/open-items.md).
android-folded:
runs-on: ubuntu-24.04
timeout-minutes: 60
defaults:
run:
shell: bash
env:
NDK: ndk/29.0.14206865
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.12"
- uses: ./.github/actions/prepare-dependencies # zizmor: ignore[self-repository] -- actionlint 1.7.12 compatibility; checkout uses this workflow revision.
with:
profile: android-full
decomp-symbols: "true"
- name: Install exact device toolchain
run: |
if [[ ! -f "$ANDROID_HOME/$NDK/source.properties" ]]; then
"$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" 'ndk;29.0.14206865'
fi
- name: Build the host file_to_c the Android renderer embeds shaders with
run: |
mkdir -p build/android-host-tools
c++ -std=c++17 -O2 -o build/android-host-tools/file_to_c extern/rt64/src/tools/file_to_c/file_to_c.cpp
- name: Configure the folded runtime (RT64 on, no generated payload)
run: |
cmake -S runtime-recomp -B build/android-folded -G Ninja \
-DCMAKE_TOOLCHAIN_FILE="$ANDROID_HOME/$NDK/build/cmake/android.toolchain.cmake" \
-DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-28 -DANDROID_STL=c++_shared \
-DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DDKR_RUNTIME_BUILD_GENERATED=OFF -DDKR_RUNTIME_BUILD_RT64=ON \
-DDKR_ANDROID_SDL2_SOURCE="$GITHUB_WORKSPACE/extern/sdl2" \
-DDKR_HOST_FILE_TO_C="$GITHUB_WORKSPACE/build/android-host-tools/file_to_c"
- name: Build RT64, the staged dependency sources and the game TUs
run: cmake --build build/android-folded --parallel 4
- name: Preserve failure diagnostics
if: ${{ failure() }}
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: android-folded
retention-days: 7
if-no-files-found: ignore
path: |
build/android-folded/CMakeFiles/CMakeConfigureLog.yaml
build/android-folded/compile_commands.json
92 changes: 92 additions & 0 deletions .github/workflows/build-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,3 +122,95 @@ jobs:
build/host/CMakeFiles/CMakeOutput.log
build/host/Testing/Temporary/LastTest.log
build/host/Testing/Temporary/LastTestsFailed.log
# The folded tree under MSVC: the host-full-nogen preset builds RT64 with the
# stage chain and stage patches, and every first-party game TU
# (DKRPortGameCore), without ROM-derived payloads. Fold PR-2 merge blocker
# (docs/fold-in/open-items.md).
windows-full-nogen:
runs-on: windows-2022
timeout-minutes: 90
env:
SCCACHE_DIR: ${{ github.workspace }}/build/sccache
SCCACHE_CACHE_SIZE: 2G
defaults:
run:
shell: pwsh
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.12"
# The configure runs guest_hooks.py, gen_guest_symbols.py and
# stage_magic_code_payload.py, which need tomllib.
- name: Require Python 3.11 or newer
run: python -c "import sys; assert sys.version_info >= (3, 11), sys.version"
- name: Prepare pinned runtime dependencies
uses: ./.github/actions/prepare-dependencies # zizmor: ignore[self-repository] -- actionlint 1.7.12 compatibility; checkout uses this workflow revision.
with:
decomp-symbols: "true"
- name: Install pinned compiler cache
uses: mozilla-actions/sccache-action@fd02668681acd5f960e1372061bee5e3e987195c # v0.0.11
with:
version: v0.18.0
disable_annotations: true
- name: Identify MSVC and SDK
id: compiler
run: |
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$installation = & $vswhere -latest -products '*' -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
if (!$installation) { throw 'Visual Studio C++ tools are missing' }
"VS_INSTALLATION=$installation" >> $env:GITHUB_ENV
& "$installation\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -HostArch amd64 -SkipAutomaticLocation
if (!$?) { throw 'Could not initialize the x64 MSVC environment' }
New-Item -ItemType Directory -Force build | Out-Null
$compiler = (Get-Command cl.exe).Source
@(
"MSVC: $((Get-Item $compiler).VersionInfo.FileVersion)"
"Compiler SHA256: $((Get-FileHash $compiler -Algorithm SHA256).Hash)"
"Windows SDK: $env:WindowsSDKVersion"
"sccache: 0.18.0"
) | Set-Content build/compiler-toolchain.txt
$fingerprint = (Get-FileHash build/compiler-toolchain.txt -Algorithm SHA256).Hash.ToLowerInvariant()
"fingerprint=$fingerprint" >> $env:GITHUB_OUTPUT
- name: Restore compiler cache
id: objects
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: build/sccache
key: sccache-v1-windows-2022-full-nogen-${{ steps.compiler.outputs.fingerprint }}-${{ github.sha }}
restore-keys: sccache-v1-windows-2022-full-nogen-${{ steps.compiler.outputs.fingerprint }}-
- name: Configure (RT64 on, no generated payload)
working-directory: runtime-recomp
run: |
& "$env:VS_INSTALLATION\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -HostArch amd64 -SkipAutomaticLocation
if (!$?) { throw 'Could not initialize the x64 MSVC environment' }
sccache --zero-stats
cmake --preset host-full-nogen -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
- name: Build RT64, the staged dependency sources and the game TUs
working-directory: runtime-recomp
run: |
& "$env:VS_INSTALLATION\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -HostArch amd64 -SkipAutomaticLocation
if (!$?) { throw 'Could not initialize the x64 MSVC environment' }
cmake --build --preset host-full-nogen --parallel $env:NUMBER_OF_PROCESSORS
- name: Report compiler cache statistics
if: ${{ always() && steps.compiler.outcome == 'success' }}
run: sccache --stop-server
- name: Save compiler cache
if: ${{ success() && steps.objects.outputs.cache-hit != 'true' }}
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: build/sccache
key: ${{ steps.objects.outputs.cache-primary-key }}
- name: Preserve failure diagnostics
if: ${{ failure() }}
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: windows-full-nogen
retention-days: 7
if-no-files-found: ignore
path: |
build/compiler-toolchain.txt
build/host-full-nogen/CMakeFiles/CMakeConfigureLog.yaml
build/host-full-nogen/compile_commands.json
30 changes: 30 additions & 0 deletions .github/workflows/fold-equivalence.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Fold equivalence
# The ROM-free subset of the fold gate's level 1: every first-party file the
# shipped v1.0.11 binaries compile still holds its folded bytes (whitespace
# aside). Levels 0-3 need ROM-derived payloads and run on the devops machine
# (scripts/fold/run_equivalence.sh), whose signed fold-equivalence.json goes
# on the PR. Required on the fold branch and fold-in-base only; retired with
# scripts/fold/ after the first release from the folded tree.
on:
push:
branches: [refactor/patch-fold-in]
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
fold-equivalence:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.12"
- name: First-party closure matches v1.0.11
run: python3 scripts/fold/equivalence.py closure --check
50 changes: 50 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Release gates
# A release is an annotated tag Version<VERSION> on main (docs/RELEASING.md).
# The builds need the maintainer's ROM-derived inputs, so they run locally
# (scripts/release/build.py); this job runs every release gate that doesn't,
# on the tagged commit, and fails the tag if one doesn't hold.
on:
push:
tags: ["Version*"]
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
jobs:
release-gates:
runs-on: ubuntu-24.04
timeout-minutes: 20
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.12"
- name: Install verified lint tools
run: |
tool_dir="$RUNNER_TEMP/lint-tools"
python3 -m venv "$tool_dir"
"$tool_dir/bin/python" -m pip install --quiet \
--require-hashes --only-binary=:all: -r .github/lint-tools.txt
echo "$tool_dir/bin" >>"$GITHUB_PATH"
- name: The tag is Version<VERSION>
if: github.ref_type == 'tag'
env:
TAG: ${{ github.ref_name }}
run: python3 scripts/validate_release_metadata.py --tag "$TAG"
- name: Guard and tooling suites
run: python3 scripts/check.py --suite guard,tooling
- name: First-party closure (ROM-free fold check)
run: python3 scripts/fold/equivalence.py closure --check
- name: Formatting
run: python3 scripts/format_sources.py --check --local
# Fails while any check in scripts/release/required_checks.toml is
# pending (C5): no release is finalized from a tree that lacks a gate.
- name: Required release checks registry
run: python3 scripts/release/finalize.py --check-registry
39 changes: 39 additions & 0 deletions .github/workflows/services-library-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Service - library workflow
on:
push:
branches: [main]
paths: ["services/library-workflow/**", "services/test-tools/**", ".github/workflows/services-library-workflow.yml"]
pull_request:
paths: ["services/library-workflow/**", "services/test-tools/**", ".github/workflows/services-library-workflow.yml"]
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
# Stages the website/API update over services/library-workflow/baseline and
# runs its tests on the staged bundle (services/library-workflow/README.md).
library-workflow:
runs-on: ubuntu-24.04
timeout-minutes: 15
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: 24
- name: Stage tests
run: python3 -B services/library-workflow/tests/build_tests.py
- name: Stage the bundle
run: python3 -B services/library-workflow/build.py stage --output "$RUNNER_TEMP/stage"
- name: Workflow checks
run: node services/library-workflow/tests/run.cjs "$RUNNER_TEMP/stage"
- name: Cloudflare runtime checks (Miniflare)
run: |
npm ci --prefix services/test-tools --ignore-scripts
node services/library-workflow/tests/d1-runtime.cjs "$RUNNER_TEMP/stage" services/test-tools/node_modules/miniflare
Loading
Loading