Repository navigation
Conversation
Commit a root bunfig.toml with the organization's Bun install policy: [install] ignoreScripts = true, so an install runs no lifecycle scripts, and minimumReleaseAge = 604800, so it installs no version published less than 7 days ago. A Strictness settings check in playstrictness.config.json holds every committed bunfig.toml to those two keys, and a CI job runs it. Strictness is private to the organization, on Artifact Registry, so it installs on its own in tools/strictness (with its own bunfig.toml under the same policy) and the public workspace install keeps needing no credentials. The settings kind is not released yet (springdotnew/strictness#214): bump @playfast/strictness to the release that ships it before merging. Task: t-3hz0d7qrep Signed-off-by: Ori Erel <orierel1i12@gmail.com>
The workflow's own identity gets a 403 from spring-452820/npm. Impersonate the reader service account the organization's other GitHub-hosted jobs use, and hand its token to the install step alone. Signed-off-by: Ori Erel <orierel1i12@gmail.com>
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.
What changed
bunfig.toml(new, root). It sets the organization's Bun install policy:[install] ignoreScripts = true: an install runs no lifecycle scripts, the repository's own included. Bun reads this key. The[install.lifecycle] ignore = truethat other org repositories write is not read by Bun, so it never stopped any script.[install] minimumReleaseAge = 604800: an install takes no version published less than 7 days ago (7 × 24 × 60 × 60 seconds).echoform had no
bunfig.tomlbefore, so lifecycle scripts ran and any fresh version could be installed.playstrictness.config.json(new). It holds one Strictness check,bun, of the newsettingskind. The check holdsbunfig.tomland every**/bunfig.tomlto those two keys, and fails if the root file is missing. The check only reads the two keys; every other setting stays the repository's own choice.tools/strictness/(new). This is the Strictness install:@playfast/strictnessis a devDependency here, with its ownbun.lock,.npmrcandbunfig.toml.@playfastscope to npm. Strictness is private to the organization, on Artifact Registry. A root devDependency would make everybun installneed an Artifact Registry token: CI, the release and deploy workflows, fork PRs and outside contributors. A root.npmrcmapping of@playfastwould also sendchangeset publishto Artifact Registry instead of npm.workspaces, and the workspace install andbun.lockare unchanged.bunfig.tomlholds the same policy. It also lists the five@playfast/strictness*packages inminimumReleaseAgeExcludes, the way data-solution does, so a new Strictness release can be added the day it ships. Without the excludes,bun installrefuses 0.8.3 (published 2026-10-19).package.json. Two new scripts:strictness:installrunscd tools/strictness && bun install --frozen-lockfile. It needsNPM_REGISTRY_TOKEN, for examplegcloud auth print-access-token.strictness:checkrunsplaystrictness check..github/workflows/ci.yml. A newstrictnessjob:gha-ar-reader@spring-452820.iam.gserviceaccount.com, the way muxmaxing and office-suite do on GitHub-hosted runners. It hands that token to the Strictness install step alone, then runsbun run strictness:check.build-and-test,release.ymlanddeploy-wmux-client.ymlare unchanged.Depends on springdotnew/strictness#214
The
settingskind is in springdotnew/strictness#214, which is not merged or released yet. Released@playfast/strictness0.8.3 refuses this configuration:So the
strictnessCI job fails until that release exists. Before this PR is marked ready, bump@playfast/strictnessintools/strictness/package.json(and itsbun.lock) to the release that contains the settings kind.The job also needs one IAM grant before it can install Strictness at all. Today it stops at the
Artifact Registry tokenstep:Grant echoform's principal
roles/iam.workloadIdentityUserongha-ar-reader@spring-452820.iam.gserviceaccount.com. The principal isprincipalSet://iam.googleapis.com/projects/59831676433/locations/global/workloadIdentityPools/github/attribute.repository/springdotnew/echoform, or whatever attribute the other repositories' bindings use. The first push used the workflow's own federated token without impersonation, and Artifact Registry answered403on the@playfast/strictness-0.8.3.tgzdownload.Check output, before and after
These runs use
playstrictnessbuilt from #214's branch (cargo build --release --locked -p strictness-cli).Before: master with only this
playstrictness.config.jsonadded. master has nobunfig.tomlat all.The same run with a root
bunfig.tomlthat holds only the legacy org form[install.lifecycle] ignore = true:After: this branch.
The two files are
bunfig.tomlandtools/strictness/bunfig.toml.Bun install evidence
All runs use Bun 1.3.11, the version
packageManagerand CI pin. Each scratch project is outside the repository. Before this PR, echoform had nobunfig.toml, so each control run has nobunfig.toml.a. Lifecycle scripts
The scratch project has a root
postinstalland afile:./local-depdependency with its ownpostinstall.local-depis intrustedDependencies. Each script writes a marker file. No key of the fixedbunfig.tomlhad to be dropped.bunfig.tomlbun installtools/strictness/bunfig.toml$ node -e …root-postinstall…root-postinstall,dep-postinstall[install.lifecycle] ignore = trueonly (legacy org form)root-postinstall,dep-postinstallb. Minimum release age
The test package is
undici. Its versions 8.12.0 (2026-10-14T09:04Z), 8.12.1 (2026-10-14T09:25Z), 8.12.2 (2026-10-15T15:05Z) and 8.12.3 (latest, 2026-10-19T14:02Z) are all newer than 7 days at the time of the test (cutoff 2026-10-13T21:04Z). 8.11.2 was published 2026-09-24T08:37Z.bunfig.tomlbun add undiciinstalled undici@8.11.2, so the newest 7-day-old version was resolvedbun add undici@8.12.3No version matching "undici" found for specifier "8.12.3" (blocked by minimum-release-age: 604800 seconds)bun add undiciinstalled undici@8.12.3c. The repository's own install
bun install --frozen-lockfilewith this branch's rootbunfig.tomlsucceeds: 950 packages installed, the same as on master. The newbunfig.tomlturns off three dependency scripts. echoform has no lifecycle scripts ortrustedDependenciesof its own.esbuild@0.25.12postinstall: the binary still comes from@esbuild/linux-x64, and the Vite builds work.bufferutil@4.0.7andutf-8-validate@5.0.10install: node-gyp-build: both ship prebuilds, andwstreats them as optional.On this branch after that install, every CI step passes locally:
bun run lint(0 errors, same 8 warnings as master),bun run typecheck,bun run build, thewmux-clientbuild,packages/echoformbun run test(8 pass) and the Playwright tests oftodo-app(6 passed),file-editor(5 passed) anddev-server(4 passed). No CI step needed an explicit replacement for a script.actionlint .github/workflows/ci.ymlreports nothing.bun run knipalready exits 1 on master. It reports one new line,Unlisted binaries: tools/strictness.bin/playstrictness, for thestrictness:checkscript. knip is not part of CI.Task: t-3hz0d7qrep