fix(init): expose freshly-installed rustup to the same dot init run#113
Merged
Conversation
The rustup installer drops binaries in $CARGO_HOME/bin and edits shell rc files, neither of which reaches the running dot process. The next two steps (Rust nightly, rust-src) then fail with `rustup: command not found` on a clean machine. Prepend $CARGO_HOME/bin to process.env.PATH after rustup install so the rest of `dot init` can resolve rustup immediately.
Contributor
|
Dev build ready — try this branch: |
Contributor
E2E Test Pass · ✅ PASSTag:
Sentry traces: view spans for this run |
ottovlotto
added a commit
that referenced
this pull request
May 4, 2026
Bring in 19 commits of e2e infrastructure work that landed since this branch was forked, including: - PR #68: dynamic registry contract address resolution at runtime - PR #78: e2e fixture fix to use the same live address (otherwise our registry-state assertions would query the snapshot contract while deploys write to the live one) - PR #113: rustup post-install path patching — the actual fix for the paritytech/playground-app#118 bug our cold-start smoke job was added to catch - Phase 5/6/7/8 e2e workflow restructuring (matrix-based cells, surface-failure helpers, post-release smoke, sticky PR comments) Conflict resolution notes: - e2e/cli/deploy.test.ts: kept main's runContractDeployTest helper + the new full-pipeline contract describes (foundry/hardhat/multi). Re-applied my QA tightening to the preflight tests (mainnet exact text + exit code, contracts-detected use the 'Checking availability' checkpoint, --contracts-no-project asserts exit code, availability- before-build verifies temporal ordering). Added registry-state verification to the frontend-only and re-deploy tests via the new getApp() fixture. DROPPED my 'already registered' tightening on the domain-taken test — in dev mode the availability check defers ownership to bulletin-deploy's preflight, so the rejection comes from the registry contract revert (Revive.ContractReverted), not the friendly availability message. Main's loose regex catches both paths correctly. - e2e/cli/mod.test.ts: kept main's split into 'dot mod — clone' and 'dot mod — registry miss' describes. Re-applied my exact-text tightening to both tests. - .github/workflows/e2e.yml: kept main's matrix-cell structure entirely, appended my init-cold-smoke job at the end (still daily cron + workflow_dispatch only).
ottovlotto
added a commit
that referenced
this pull request
May 5, 2026
Bring in 19 commits of e2e infrastructure work that landed since this branch was forked, including: - PR #68: dynamic registry contract address resolution at runtime - PR #78: e2e fixture fix to use the same live address (otherwise our registry-state assertions would query the snapshot contract while deploys write to the live one) - PR #113: rustup post-install path patching — the actual fix for the paritytech/playground-app#118 bug our cold-start smoke job was added to catch - Phase 5/6/7/8 e2e workflow restructuring (matrix-based cells, surface-failure helpers, post-release smoke, sticky PR comments) Conflict resolution notes: - e2e/cli/deploy.test.ts: kept main's runContractDeployTest helper + the new full-pipeline contract describes (foundry/hardhat/multi). Re-applied my QA tightening to the preflight tests (mainnet exact text + exit code, contracts-detected use the 'Checking availability' checkpoint, --contracts-no-project asserts exit code, availability- before-build verifies temporal ordering). Added registry-state verification to the frontend-only and re-deploy tests via the new getApp() fixture. DROPPED my 'already registered' tightening on the domain-taken test — in dev mode the availability check defers ownership to bulletin-deploy's preflight, so the rejection comes from the registry contract revert (Revive.ContractReverted), not the friendly availability message. Main's loose regex catches both paths correctly. - e2e/cli/mod.test.ts: kept main's split into 'dot mod — clone' and 'dot mod — registry miss' describes. Re-applied my exact-text tightening to both tests. - .github/workflows/e2e.yml: kept main's matrix-cell structure entirely, appended my init-cold-smoke job at the end (still daily cron + workflow_dispatch only).
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.
Summary
dot initshowsrustup✓ followed immediately byRust nightly✕ andrust-src✕ withbash: rustup: command not found. The rustup installer dropsrustupin$CARGO_HOME/bin(default~/.cargo/bin) and only updates PATH via~/.zshrc/~/.bashrc/~/.profile. Those edits never reach the runningdotprocess —runShellspawnsbash -c …which is non-interactive non-login, so it doesn't source the rc files, and inherits the parent's untouched PATH.$CARGO_HOME/bintoprocess.env.PATHso the very next steps in the samedot initrun can resolverustup. Logic lives in a new exportedprependPath()helper insrc/utils/toolchain.ts.src/utils/toolchain.test.tscoveringprependPath(idempotent on duplicates, handles empty/unset PATH, prepends when missing). Includes a patch changeset.Test plan
pnpm test— 454/454 pass, including 4 newprependPathcasespnpm format:checkcleantsc --noEmitcleancurl -fsSL https://raw.githubusercontent.com/paritytech/playground-cli/<this-branch>/install.sh | bashand confirmRust nightlyandrust-srccome up ✓ on first run