Skip to content

refactor(init): move init logic to action pattern#845

Draft
binoy14 wants to merge 3 commits intomainfrom
bundled-create
Draft

refactor(init): move init logic to action pattern#845
binoy14 wants to merge 3 commits intomainfrom
bundled-create

Conversation

@binoy14
Copy link
Copy Markdown
Contributor

@binoy14 binoy14 commented Mar 30, 2026

refactor(init): move init logic to action pattern (#748)

refactor(init): split init flows into separate functions (#753)

@claude
Copy link
Copy Markdown

claude bot commented Mar 30, 2026

Claude finished @mttdnt's task in 3m 28s —— View job


PR Review

  • Read CLAUDE.md for repo guidelines
  • Review changed files
  • Check for changeset
  • Post findings

Changeset

This PR is tagged as a refactor, but the latest commit (d82d20e) restores unattended mode behavior — a behavioral bug fix. Since this affects runtime behavior in packages/, a patch changeset is required but missing. Please add one describing the fix.


Issues

1. getOrCreateDataset skips dataset existence check in unattended mode
initAction.ts:497-498

if (dataset && opts.unattended) {
  return {datasetName: dataset, userAction: 'none'}
}

In unattended mode with --dataset, the function short-circuits before the existence check at lines 506–521. In interactive mode, if the specified dataset doesn't exist, it's automatically created. In unattended mode, it's silently trusted to exist — if it doesn't, downstream studio config will reference a non-existent dataset with no helpful error. Either replicate the check in unattended mode, or document this expectation explicitly.

Fix this →


2. Inconsistency in getOrCreateProject for unattended + projectId
initAction.ts:634 vs 646 vs 650-664

Three code paths for unattended + projectId behave inconsistently:

  • API fails → returns gracefully with displayName: 'Unknown project' (line 634)
  • API succeeds, 0 projects → throws "No projects found for current user" (line 646)
  • API succeeds, project not in list → returns gracefully with 'Unknown project' (line 660)

The middle case throws even when a specific projectId was provided. In CI environments where the caller knows the project ID, this produces a confusing error. The check at line 646 should be guarded with !projectId:

if (projects.length === 0 && unattended && !projectId) {
  throw new InitError('No projects found for current user', 1)
}

3. Missing test for the restored unattended behavior
initAction.test.ts

The commit d82d20e fixes unattended mode behavior specifically around project/dataset selection, but initAction.test.ts only tests auth-related unattended cases (throws InitError when not authenticated in unattended mode). The restored behavior for valid unattended project selection (the case actually fixed) has no test, making it easy to regress again.


Copy link
Copy Markdown
Contributor Author

binoy14 commented Mar 30, 2026

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 30, 2026

📦 Bundle Stats — @sanity/cli

Compared against main (e9022171) · v6.2.1 (npm)

@sanity/cli

Metric Value vs main (e902217) vs v6.2.1
Internal (raw) 2.1 KB - -
Internal (gzip) 799 B - -
Bundled (raw) 11.06 MB - +9.12 MB, +470.6%
Bundled (gzip) 2.07 MB - +1.60 MB, +335.8%
Import time 844ms +0ms, +0.0% +27ms, +3.3%

bin:sanity

Metric Value vs main (e902217) vs v6.2.1
Internal (raw) 975 B - -
Internal (gzip) 460 B - -
Bundled (raw) 9.83 MB - +9.12 MB, +1286.7%
Bundled (gzip) 1.77 MB - +1.60 MB, +940.0%
Import time NaNs - NaNs, NaN%

🗺️ View treemap · Artifacts

Details
  • Import time regressions over 10% are flagged with ⚠️
  • Sizes shown as raw / gzip 🗜️. Internal bytes = own code only. Total bytes = with all dependencies. Import time = Node.js cold-start median.

📦 Bundle Stats — @sanity/cli-core

Compared against main (e9022171) · v1.2.1 (npm)

Metric Value vs main (e902217) vs v1.2.1
Internal (raw) 92.2 KB - +3.9 KB, +4.4%
Internal (gzip) 21.6 KB - +1.1 KB, +5.5%
Bundled (raw) 21.64 MB - +9.08 MB, +72.3%
Bundled (gzip) 3.43 MB - +1.58 MB, +85.9%
Import time 790ms +3ms, +0.4% +39ms, +5.2%

🗺️ View treemap · Artifacts

Details
  • Import time regressions over 10% are flagged with ⚠️
  • Sizes shown as raw / gzip 🗜️. Internal bytes = own code only. Total bytes = with all dependencies. Import time = Node.js cold-start median.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 30, 2026

Coverage Delta

File Statements
packages/@sanity/cli/src/actions/init/bootstrapTemplate.ts 0.0% (±0%)
packages/@sanity/cli/src/actions/init/initAction.ts 94.9% (new)
packages/@sanity/cli/src/actions/init/initApp.ts 96.0% (+ 0.5%)
packages/@sanity/cli/src/actions/init/initError.ts 100.0% (new)
packages/@sanity/cli/src/actions/init/initHelpers.ts 100.0% (±0%)
packages/@sanity/cli/src/actions/init/initNextJs.ts 86.7% (- 3.1%)
packages/@sanity/cli/src/actions/init/initStudio.ts 87.0% (+ 0.6%)
packages/@sanity/cli/src/actions/init/scaffoldTemplate.ts 88.0% (+ 9.4%)
packages/@sanity/cli/src/actions/init/types.ts 100.0% (new)
packages/@sanity/cli/src/commands/init.ts 100.0% (+ 4.6%)
packages/@sanity/cli/src/telemetry/init.telemetry.ts 100.0% (±0%)

Comparing 11 changed files against main @ 9f2025641ca8399ebd4c0f8913bd7a8907b3e9b9

Overall Coverage

Metric Coverage
Statements 83.0% (+ 0.0%)
Branches 73.0% (+ 0.0%)
Functions 82.9% (+ 0.0%)
Lines 83.5% (+ 0.0%)

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

📦 Bundle Stats — @sanity/cli

Compared against main (9a7e2044)

@sanity/cli

Metric Value vs main (9a7e204)
Internal (raw) 2.1 KB -
Internal (gzip) 799 B -
Bundled (raw) 10.94 MB -
Bundled (gzip) 2.05 MB -
Import time 837ms +5ms, +0.5%

bin:sanity

Metric Value vs main (9a7e204)
Internal (raw) 975 B -
Internal (gzip) 460 B -
Bundled (raw) 9.84 MB -
Bundled (gzip) 1.77 MB -
Import time 2.01s +20ms, +1.0%

🗺️ View treemap · Artifacts

Details
  • Import time regressions over 10% are flagged with ⚠️
  • Sizes shown as raw / gzip 🗜️. Internal bytes = own code only. Total bytes = with all dependencies. Import time = Node.js cold-start median.

📦 Bundle Stats — @sanity/cli-core

Compared against main (9a7e2044)

Metric Value vs main (9a7e204)
Internal (raw) 93.1 KB -
Internal (gzip) 21.9 KB -
Bundled (raw) 21.62 MB -
Bundled (gzip) 3.42 MB -
Import time 811ms +17ms, +2.2%

🗺️ View treemap · Artifacts

Details
  • Import time regressions over 10% are flagged with ⚠️
  • Sizes shown as raw / gzip 🗜️. Internal bytes = own code only. Total bytes = with all dependencies. Import time = Node.js cold-start median.

📦 Bundle Stats — create-sanity

Compared against main (9a7e2044)

Metric Value vs main (9a7e204)
Internal (raw) 976 B -
Internal (gzip) 507 B -
Bundled (raw) 50.7 KB -
Bundled (gzip) 12.6 KB -
Import time ❌ ChildProcess denied: node -
Details
  • Import time regressions over 10% are flagged with ⚠️
  • Sizes shown as raw / gzip 🗜️. Internal bytes = own code only. Total bytes = with all dependencies. Import time = Node.js cold-start median.

@binoy14 binoy14 changed the title refactor(init): move init logic to action pattern (#748) refactor(init): move init logic to action pattern Apr 1, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

Coverage Delta

File Statements
packages/@sanity/cli/src/actions/init/bootstrapTemplate.ts 0.0% (±0%)
packages/@sanity/cli/src/actions/init/initAction.ts 94.8% (new)
packages/@sanity/cli/src/actions/init/initApp.ts 96.0% (new)
packages/@sanity/cli/src/actions/init/initError.ts 100.0% (new)
packages/@sanity/cli/src/actions/init/initHelpers.ts 100.0% (new)
packages/@sanity/cli/src/actions/init/initNextJs.ts 86.7% (new)
packages/@sanity/cli/src/actions/init/initStudio.ts 87.0% (new)
packages/@sanity/cli/src/actions/init/scaffoldTemplate.ts 88.0% (new)
packages/@sanity/cli/src/actions/init/types.ts 100.0% (new)
packages/@sanity/cli/src/commands/init.ts 100.0% (+ 7.4%)
packages/@sanity/cli/src/telemetry/init.telemetry.ts 100.0% (±0%)

Comparing 11 changed files against main @ 7af1594d79003801d6daeadeeb20508d184adb25

Overall Coverage

Metric Coverage
Statements 83.1% (+ 0.0%)
Branches 72.9% (+ 0.0%)
Functions 83.4% (+ 0.1%)
Lines 83.6% (+ 0.0%)

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

Coverage Delta

File Statements
packages/@sanity/cli/src/actions/init/bootstrapTemplate.ts 0.0% (±0%)
packages/@sanity/cli/src/actions/init/initAction.ts 94.8% (new)
packages/@sanity/cli/src/actions/init/initApp.ts 96.0% (new)
packages/@sanity/cli/src/actions/init/initError.ts 100.0% (new)
packages/@sanity/cli/src/actions/init/initHelpers.ts 100.0% (new)
packages/@sanity/cli/src/actions/init/initNextJs.ts 86.7% (new)
packages/@sanity/cli/src/actions/init/initStudio.ts 87.0% (new)
packages/@sanity/cli/src/actions/init/scaffoldTemplate.ts 88.0% (new)
packages/@sanity/cli/src/actions/init/types.ts 100.0% (new)
packages/@sanity/cli/src/commands/init.ts 100.0% (+ 7.4%)
packages/@sanity/cli/src/telemetry/init.telemetry.ts 100.0% (±0%)

Comparing 11 changed files against main @ ef5ed4565d33b83d67cd66c6b3c335516e5b1132

Overall Coverage

Metric Coverage
Statements 83.1% (+ 0.0%)
Branches 72.9% (+ 0.0%)
Functions 83.4% (+ 0.1%)
Lines 83.6% (+ 0.0%)

rexxars and others added 3 commits April 16, 2026 15:32
Behavior present on main but lost when bundled-create was rebased
(commits predate these fixes):

- Pass --missing to dataset import
- Allow --bare mode without --output-path in unattended mode
- Default to "production" dataset in unattended mode without --dataset

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants