@treeseed/sdk 0.4.12 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/control-plane-client.d.ts +60 -1
- package/dist/control-plane-client.js +59 -0
- package/dist/control-plane.d.ts +1 -1
- package/dist/control-plane.js +11 -4
- package/dist/d1-store.d.ts +58 -0
- package/dist/d1-store.js +64 -0
- package/dist/dispatch.js +6 -0
- package/dist/graph/schema.js +4 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +32 -0
- package/dist/knowledge-coop.d.ts +223 -0
- package/dist/knowledge-coop.js +82 -0
- package/dist/model-registry.js +79 -0
- package/dist/operations/providers/default.js +128 -7
- package/dist/operations/services/config-runtime.d.ts +102 -24
- package/dist/operations/services/config-runtime.js +896 -160
- package/dist/operations/services/deploy.d.ts +223 -15
- package/dist/operations/services/deploy.js +626 -55
- package/dist/operations/services/git-workflow.d.ts +47 -3
- package/dist/operations/services/git-workflow.js +125 -19
- package/dist/operations/services/github-automation.d.ts +85 -0
- package/dist/operations/services/github-automation.js +220 -1
- package/dist/operations/services/key-agent.d.ts +118 -0
- package/dist/operations/services/key-agent.js +476 -0
- package/dist/operations/services/knowledge-coop-launch.d.ts +90 -0
- package/dist/operations/services/knowledge-coop-launch.js +753 -0
- package/dist/operations/services/knowledge-coop-packaging.d.ts +59 -0
- package/dist/operations/services/knowledge-coop-packaging.js +234 -0
- package/dist/operations/services/local-dev.d.ts +0 -1
- package/dist/operations/services/local-dev.js +1 -14
- package/dist/operations/services/project-platform.d.ts +42 -182
- package/dist/operations/services/project-platform.js +162 -59
- package/dist/operations/services/railway-deploy.d.ts +1 -0
- package/dist/operations/services/railway-deploy.js +31 -13
- package/dist/operations/services/runtime-tools.d.ts +52 -5
- package/dist/operations/services/runtime-tools.js +186 -26
- package/dist/operations/services/watch-dev.js +2 -4
- package/dist/operations/services/workspace-preflight.d.ts +4 -4
- package/dist/operations/services/workspace-preflight.js +22 -20
- package/dist/operations/services/workspace-save.d.ts +10 -1
- package/dist/operations/services/workspace-save.js +54 -3
- package/dist/operations/services/workspace-tools.d.ts +1 -0
- package/dist/operations/services/workspace-tools.js +20 -5
- package/dist/operations-registry.js +15 -8
- package/dist/operations-types.d.ts +2 -2
- package/dist/platform/contracts.d.ts +39 -3
- package/dist/platform/deploy-config.d.ts +12 -1
- package/dist/platform/deploy-config.js +214 -15
- package/dist/platform/deploy-runtime.d.ts +1 -0
- package/dist/platform/deploy-runtime.js +10 -2
- package/dist/platform/env.yaml +93 -61
- package/dist/platform/environment.d.ts +13 -2
- package/dist/platform/environment.js +90 -20
- package/dist/platform/plugins/constants.d.ts +1 -0
- package/dist/platform/plugins/constants.js +7 -6
- package/dist/platform/tenant/runtime-config.js +8 -1
- package/dist/platform/tenant-config.js +4 -0
- package/dist/platform/utils/site-config-schema.js +18 -0
- package/dist/plugin-default.js +2 -2
- package/dist/scripts/key-agent.js +165 -0
- package/dist/scripts/tenant-build.js +4 -1
- package/dist/scripts/tenant-check.js +4 -1
- package/dist/scripts/tenant-deploy.js +43 -4
- package/dist/scripts/tenant-dev.js +0 -1
- package/dist/scripts/workspace-start-warning.js +2 -2
- package/dist/sdk-types.d.ts +2 -2
- package/dist/sdk-types.js +2 -0
- package/dist/sdk.d.ts +13 -0
- package/dist/sdk.js +40 -0
- package/dist/stores/knowledge-coop-store.d.ts +56 -0
- package/dist/stores/knowledge-coop-store.js +482 -0
- package/dist/treeseed/template-catalog/templates/starter-basic/template/package.json +6 -2
- package/dist/treeseed/template-catalog/templates/starter-basic/template/src/api/server.js +4 -0
- package/dist/treeseed/template-catalog/templates/starter-basic/template/src/config.yaml +25 -0
- package/dist/treeseed/template-catalog/templates/starter-basic/template/src/content/decisions/adopt-initial-proposal-loop.mdx +22 -0
- package/dist/treeseed/template-catalog/templates/starter-basic/template/src/content/people/starter-steward.mdx +11 -0
- package/dist/treeseed/template-catalog/templates/starter-basic/template/src/content/proposals/establish-initial-proposal-loop.mdx +17 -0
- package/dist/treeseed/template-catalog/templates/starter-basic/template/src/manifest.yaml +17 -10
- package/dist/treeseed/template-catalog/templates/starter-basic/template/treeseed.site.yaml +69 -7
- package/dist/treeseed/template-catalog/templates/starter-basic/template.config.json +1 -0
- package/dist/workflow/operations.d.ts +592 -243
- package/dist/workflow/operations.js +1908 -219
- package/dist/workflow/runs.d.ts +90 -0
- package/dist/workflow/runs.js +242 -0
- package/dist/workflow/session.d.ts +31 -0
- package/dist/workflow/session.js +97 -0
- package/dist/workflow-state.d.ts +88 -2
- package/dist/workflow-state.js +288 -26
- package/dist/workflow-support.d.ts +1 -1
- package/dist/workflow-support.js +32 -2
- package/dist/workflow.d.ts +93 -3
- package/dist/workflow.js +12 -0
- package/package.json +1 -1
- package/templates/github/deploy.workflow.yml +11 -1
- package/dist/scripts/sync-dev-vars.js +0 -6
- package/dist/scripts/workspace-close.js +0 -24
- package/dist/scripts/workspace-release.js +0 -42
- package/dist/scripts/workspace-start.js +0 -71
package/dist/workflow.d.ts
CHANGED
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
import { resolveTreeseedWorkflowState } from './workflow-state.ts';
|
|
2
2
|
import { listTaskBranches } from './operations/services/git-workflow.ts';
|
|
3
3
|
import { TreeseedWorkflowError, type TreeseedWorkflowErrorCode } from './workflow/operations.ts';
|
|
4
|
-
export type TreeseedWorkflowOperationId = 'status' | 'config' | 'tasks' | 'switch' | 'dev' | 'save' | 'close' | 'stage' | 'release' | 'destroy' | 'export';
|
|
4
|
+
export type TreeseedWorkflowOperationId = 'status' | 'config' | 'tasks' | 'switch' | 'dev' | 'save' | 'close' | 'stage' | 'release' | 'resume' | 'recover' | 'destroy' | 'export';
|
|
5
5
|
export type TreeseedWorkflowNextStep = {
|
|
6
6
|
operation: string;
|
|
7
7
|
reason?: string;
|
|
8
8
|
input?: Record<string, unknown>;
|
|
9
9
|
};
|
|
10
|
+
export type TreeseedWorkflowFact = {
|
|
11
|
+
label: string;
|
|
12
|
+
value: string | number | boolean | null;
|
|
13
|
+
};
|
|
14
|
+
export type TreeseedWorkflowErrorDetail = {
|
|
15
|
+
code: string;
|
|
16
|
+
message: string;
|
|
17
|
+
details?: Record<string, unknown> | null;
|
|
18
|
+
};
|
|
19
|
+
export type TreeseedWorkflowRecovery = {
|
|
20
|
+
resumable: boolean;
|
|
21
|
+
runId?: string | null;
|
|
22
|
+
command?: string | null;
|
|
23
|
+
message?: string | null;
|
|
24
|
+
recoverCommand?: string | null;
|
|
25
|
+
resumeCommand?: string | null;
|
|
26
|
+
lock?: Record<string, unknown> | null;
|
|
27
|
+
};
|
|
28
|
+
export type TreeseedWorkflowExecutionMode = 'execute' | 'plan';
|
|
10
29
|
export type TreeseedWorkflowContext = {
|
|
11
30
|
cwd?: string;
|
|
12
31
|
env?: NodeJS.ProcessEnv;
|
|
@@ -14,12 +33,25 @@ export type TreeseedWorkflowContext = {
|
|
|
14
33
|
prompt?: (message: string) => Promise<string> | string;
|
|
15
34
|
confirm?: (message: string, expected: string) => Promise<boolean> | boolean;
|
|
16
35
|
transport?: 'sdk' | 'cli' | 'api';
|
|
36
|
+
workflow?: {
|
|
37
|
+
resumeRunId?: string;
|
|
38
|
+
};
|
|
17
39
|
};
|
|
18
40
|
export type TreeseedWorkflowResult<TPayload = Record<string, unknown>> = {
|
|
41
|
+
schemaVersion: 1;
|
|
42
|
+
kind: 'treeseed.workflow.result';
|
|
43
|
+
command: TreeseedWorkflowOperationId;
|
|
44
|
+
executionMode: TreeseedWorkflowExecutionMode;
|
|
45
|
+
runId: string | null;
|
|
19
46
|
ok: boolean;
|
|
20
47
|
operation: TreeseedWorkflowOperationId;
|
|
48
|
+
summary?: string;
|
|
49
|
+
facts?: TreeseedWorkflowFact[];
|
|
21
50
|
payload: TPayload;
|
|
51
|
+
result: TPayload;
|
|
22
52
|
nextSteps?: TreeseedWorkflowNextStep[];
|
|
53
|
+
recovery?: TreeseedWorkflowRecovery | null;
|
|
54
|
+
errors?: TreeseedWorkflowErrorDetail[];
|
|
23
55
|
};
|
|
24
56
|
export type TreeseedTaskBranchMetadata = ReturnType<typeof listTaskBranches>[number] & {
|
|
25
57
|
ageDays: number | null;
|
|
@@ -29,6 +61,33 @@ export type TreeseedTaskBranchMetadata = ReturnType<typeof listTaskBranches>[num
|
|
|
29
61
|
url: string | null;
|
|
30
62
|
lastDeploymentTimestamp: string | null;
|
|
31
63
|
};
|
|
64
|
+
packages?: Array<{
|
|
65
|
+
name: string;
|
|
66
|
+
path: string;
|
|
67
|
+
local: boolean;
|
|
68
|
+
remote: boolean;
|
|
69
|
+
current: boolean;
|
|
70
|
+
head: string | null;
|
|
71
|
+
pointer: string | null;
|
|
72
|
+
aligned: boolean;
|
|
73
|
+
}>;
|
|
74
|
+
};
|
|
75
|
+
export type TreeseedWorkflowWorkstreamSummary = {
|
|
76
|
+
id: string;
|
|
77
|
+
title: string;
|
|
78
|
+
linkedDirectRefs: Array<{
|
|
79
|
+
model: 'objective' | 'question' | 'note';
|
|
80
|
+
id: string;
|
|
81
|
+
}>;
|
|
82
|
+
branch: string;
|
|
83
|
+
local: boolean;
|
|
84
|
+
remote: boolean;
|
|
85
|
+
current: boolean;
|
|
86
|
+
previewUrl: string | null;
|
|
87
|
+
lastSaveAt: string | null;
|
|
88
|
+
verificationResult: 'ready' | 'needs_attention' | 'unknown';
|
|
89
|
+
stagingCandidate: boolean;
|
|
90
|
+
archived: boolean;
|
|
32
91
|
};
|
|
33
92
|
export type TreeseedSaveInput = {
|
|
34
93
|
message: string;
|
|
@@ -37,12 +96,16 @@ export type TreeseedSaveInput = {
|
|
|
37
96
|
refreshPreview?: boolean;
|
|
38
97
|
preview?: boolean;
|
|
39
98
|
rebase?: boolean;
|
|
99
|
+
plan?: boolean;
|
|
100
|
+
dryRun?: boolean;
|
|
40
101
|
};
|
|
41
102
|
export type TreeseedCloseInput = {
|
|
42
103
|
message: string;
|
|
43
104
|
deletePreview?: boolean;
|
|
44
105
|
deleteBranch?: boolean;
|
|
45
106
|
autoSave?: boolean;
|
|
107
|
+
plan?: boolean;
|
|
108
|
+
dryRun?: boolean;
|
|
46
109
|
};
|
|
47
110
|
export type TreeseedStageInput = {
|
|
48
111
|
message: string;
|
|
@@ -50,6 +113,8 @@ export type TreeseedStageInput = {
|
|
|
50
113
|
deletePreview?: boolean;
|
|
51
114
|
deleteBranch?: boolean;
|
|
52
115
|
autoSave?: boolean;
|
|
116
|
+
plan?: boolean;
|
|
117
|
+
dryRun?: boolean;
|
|
53
118
|
};
|
|
54
119
|
export type TreeseedSwitchInput = {
|
|
55
120
|
branch?: string;
|
|
@@ -57,6 +122,8 @@ export type TreeseedSwitchInput = {
|
|
|
57
122
|
preview?: boolean;
|
|
58
123
|
createIfMissing?: boolean;
|
|
59
124
|
baseBranch?: string;
|
|
125
|
+
plan?: boolean;
|
|
126
|
+
dryRun?: boolean;
|
|
60
127
|
};
|
|
61
128
|
export type TreeseedConfigScope = 'all' | 'local' | 'staging' | 'prod';
|
|
62
129
|
export type TreeseedConfigInput = {
|
|
@@ -75,6 +142,16 @@ export type TreeseedConfigInput = {
|
|
|
75
142
|
printEnvOnly?: boolean;
|
|
76
143
|
showSecrets?: boolean;
|
|
77
144
|
rotateMachineKey?: boolean;
|
|
145
|
+
connectMarket?: boolean;
|
|
146
|
+
marketBaseUrl?: string;
|
|
147
|
+
marketTeamId?: string;
|
|
148
|
+
marketTeamSlug?: string;
|
|
149
|
+
marketProjectId?: string;
|
|
150
|
+
marketProjectSlug?: string;
|
|
151
|
+
marketProjectApiBaseUrl?: string;
|
|
152
|
+
marketAccessToken?: string;
|
|
153
|
+
rotateRunnerToken?: boolean;
|
|
154
|
+
installMissingTooling?: boolean;
|
|
78
155
|
nonInteractive?: boolean;
|
|
79
156
|
};
|
|
80
157
|
export type TreeseedExportInput = {
|
|
@@ -82,12 +159,21 @@ export type TreeseedExportInput = {
|
|
|
82
159
|
};
|
|
83
160
|
export type TreeseedReleaseInput = {
|
|
84
161
|
bump: 'major' | 'minor' | 'patch';
|
|
162
|
+
plan?: boolean;
|
|
163
|
+
dryRun?: boolean;
|
|
164
|
+
};
|
|
165
|
+
export type TreeseedResumeInput = {
|
|
166
|
+
runId: string;
|
|
167
|
+
};
|
|
168
|
+
export type TreeseedRecoverInput = {
|
|
169
|
+
runId?: string;
|
|
85
170
|
};
|
|
86
171
|
export type TreeseedDestroyInput = {
|
|
87
172
|
target?: 'local' | 'staging' | 'prod';
|
|
88
173
|
environment?: 'local' | 'staging' | 'prod';
|
|
89
174
|
confirm?: boolean | string;
|
|
90
175
|
dryRun?: boolean;
|
|
176
|
+
plan?: boolean;
|
|
91
177
|
destroyRemote?: boolean;
|
|
92
178
|
destroyLocal?: boolean;
|
|
93
179
|
force?: boolean;
|
|
@@ -105,12 +191,14 @@ export declare class TreeseedWorkflowSdk {
|
|
|
105
191
|
private readonly context;
|
|
106
192
|
constructor(context?: TreeseedWorkflowContext);
|
|
107
193
|
private helpers;
|
|
108
|
-
execute(operation: TreeseedWorkflowOperationId, input?: Record<string, unknown>): Promise<TreeseedWorkflowResult<import("./workflow-state.ts").TreeseedWorkflowState> | TreeseedWorkflowResult<
|
|
194
|
+
execute(operation: TreeseedWorkflowOperationId, input?: Record<string, unknown>): Promise<TreeseedWorkflowResult<import("./workflow-state.ts").TreeseedWorkflowState> | TreeseedWorkflowResult<{
|
|
109
195
|
tasks: TreeseedTaskBranchMetadata[];
|
|
110
|
-
|
|
196
|
+
workstreams: TreeseedWorkflowWorkstreamSummary[];
|
|
197
|
+
}> | TreeseedWorkflowResult<Record<string, unknown>>>;
|
|
111
198
|
status(): Promise<TreeseedWorkflowResult<ReturnType<typeof resolveTreeseedWorkflowState>>>;
|
|
112
199
|
tasks(): Promise<TreeseedWorkflowResult<{
|
|
113
200
|
tasks: TreeseedTaskBranchMetadata[];
|
|
201
|
+
workstreams: TreeseedWorkflowWorkstreamSummary[];
|
|
114
202
|
}>>;
|
|
115
203
|
config(input?: TreeseedConfigInput): Promise<TreeseedWorkflowResult>;
|
|
116
204
|
switchTask(input: TreeseedSwitchInput): Promise<TreeseedWorkflowResult>;
|
|
@@ -119,6 +207,8 @@ export declare class TreeseedWorkflowSdk {
|
|
|
119
207
|
close(input: TreeseedCloseInput): Promise<TreeseedWorkflowResult>;
|
|
120
208
|
stage(input: TreeseedStageInput): Promise<TreeseedWorkflowResult>;
|
|
121
209
|
release(input: TreeseedReleaseInput): Promise<TreeseedWorkflowResult>;
|
|
210
|
+
resume(input: TreeseedResumeInput): Promise<TreeseedWorkflowResult>;
|
|
211
|
+
recover(input?: TreeseedRecoverInput): Promise<TreeseedWorkflowResult>;
|
|
122
212
|
destroy(input: TreeseedDestroyInput): Promise<TreeseedWorkflowResult>;
|
|
123
213
|
export(input?: TreeseedExportInput): Promise<TreeseedWorkflowResult>;
|
|
124
214
|
}
|
package/dist/workflow.js
CHANGED
|
@@ -6,7 +6,9 @@ import {
|
|
|
6
6
|
workflowDestroy,
|
|
7
7
|
workflowDev,
|
|
8
8
|
workflowExport,
|
|
9
|
+
workflowRecover,
|
|
9
10
|
workflowRelease,
|
|
11
|
+
workflowResume,
|
|
10
12
|
workflowSave,
|
|
11
13
|
workflowStage,
|
|
12
14
|
workflowStatus,
|
|
@@ -56,6 +58,10 @@ class TreeseedWorkflowSdk {
|
|
|
56
58
|
return this.stage(input);
|
|
57
59
|
case "release":
|
|
58
60
|
return this.release(input);
|
|
61
|
+
case "resume":
|
|
62
|
+
return this.resume(input);
|
|
63
|
+
case "recover":
|
|
64
|
+
return this.recover(input);
|
|
59
65
|
case "destroy":
|
|
60
66
|
return this.destroy(input);
|
|
61
67
|
case "export":
|
|
@@ -91,6 +97,12 @@ class TreeseedWorkflowSdk {
|
|
|
91
97
|
async release(input) {
|
|
92
98
|
return workflowRelease(this.helpers(), input);
|
|
93
99
|
}
|
|
100
|
+
async resume(input) {
|
|
101
|
+
return workflowResume(this.helpers(), input);
|
|
102
|
+
}
|
|
103
|
+
async recover(input = {}) {
|
|
104
|
+
return workflowRecover(this.helpers(), input);
|
|
105
|
+
}
|
|
94
106
|
async destroy(input) {
|
|
95
107
|
return workflowDestroy(this.helpers(), input);
|
|
96
108
|
}
|
package/package.json
CHANGED
|
@@ -98,7 +98,7 @@ jobs:
|
|
|
98
98
|
while IFS= read -r path; do
|
|
99
99
|
[[ -z "${path}" ]] && continue
|
|
100
100
|
case "${path}" in
|
|
101
|
-
src/content/*|content/*|books/*|docs/*|
|
|
101
|
+
src/content/*|content/*|books/*|docs/*|migrations/*)
|
|
102
102
|
content_changed="true"
|
|
103
103
|
;;
|
|
104
104
|
*)
|
|
@@ -287,6 +287,7 @@ __WORKING_DIRECTORY_BLOCK__
|
|
|
287
287
|
TREESEED_RAILWAY_PROJECT_ID: ${{ vars.TREESEED_RAILWAY_PROJECT_ID }}
|
|
288
288
|
TREESEED_RAILWAY_ENVIRONMENT_ID: ${{ vars.TREESEED_RAILWAY_ENVIRONMENT_ID }}
|
|
289
289
|
TREESEED_RAILWAY_WORKER_SERVICE_ID: ${{ vars.TREESEED_RAILWAY_WORKER_SERVICE_ID }}
|
|
290
|
+
TREESEED_CONTENT_SERVING_MODE: published_runtime
|
|
290
291
|
TREESEED_WORKFLOW_ACTION: deploy_code
|
|
291
292
|
TREESEED_WORKFLOW_ENVIRONMENT: ${{ needs.classify.outputs.scope }}
|
|
292
293
|
TREESEED_WORKFLOW_PROJECT: ${{ inputs.project_id || vars.TREESEED_PROJECT_ID }}
|
|
@@ -294,6 +295,15 @@ __WORKING_DIRECTORY_BLOCK__
|
|
|
294
295
|
steps:
|
|
295
296
|
- name: Checkout
|
|
296
297
|
uses: actions/checkout@v4
|
|
298
|
+
with:
|
|
299
|
+
submodules: false
|
|
300
|
+
sparse-checkout: |
|
|
301
|
+
/*
|
|
302
|
+
!/src/content/
|
|
303
|
+
!/src/content/**
|
|
304
|
+
!/public/books/
|
|
305
|
+
!/public/books/**
|
|
306
|
+
sparse-checkout-cone-mode: false
|
|
297
307
|
|
|
298
308
|
- name: Setup Node
|
|
299
309
|
uses: actions/setup-node@v4
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { applyTreeseedEnvironmentToProcess, writeTreeseedLocalEnvironmentFiles } from '../operations/services/config-runtime.js';
|
|
2
|
-
const tenantRoot = process.cwd();
|
|
3
|
-
applyTreeseedEnvironmentToProcess({ tenantRoot, scope: 'local', override: true });
|
|
4
|
-
const result = writeTreeseedLocalEnvironmentFiles(tenantRoot);
|
|
5
|
-
console.log(`Wrote ${result.envLocalPath}`);
|
|
6
|
-
console.log(`Wrote ${result.devVarsPath}`);
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { applyTreeseedEnvironmentToProcess } from '../operations/services/config-runtime.js';
|
|
3
|
-
import { cleanupDestroyedState, createBranchPreviewDeployTarget, destroyCloudflareResources, loadDeployState, printDestroySummary, validateDestroyPrerequisites, } from '../operations/services/deploy.js';
|
|
4
|
-
import { assertFeatureBranch, deleteLocalBranch, deleteRemoteBranch, mergeCurrentBranchIntoStaging, } from '../operations/services/git-workflow.js';
|
|
5
|
-
import { loadCliDeployConfig } from '../operations/services/runtime-tools.js';
|
|
6
|
-
import { runWorkspaceSavePreflight } from '../operations/services/save-deploy-preflight.js';
|
|
7
|
-
const tenantRoot = process.cwd();
|
|
8
|
-
const featureBranch = assertFeatureBranch(tenantRoot);
|
|
9
|
-
const previewTarget = createBranchPreviewDeployTarget(featureBranch);
|
|
10
|
-
const deployConfig = loadCliDeployConfig(tenantRoot);
|
|
11
|
-
const previewState = loadDeployState(tenantRoot, deployConfig, { target: previewTarget });
|
|
12
|
-
runWorkspaceSavePreflight({ cwd: tenantRoot });
|
|
13
|
-
const repoDir = mergeCurrentBranchIntoStaging(tenantRoot, featureBranch);
|
|
14
|
-
if (previewState.readiness?.initialized) {
|
|
15
|
-
applyTreeseedEnvironmentToProcess({ tenantRoot, scope: 'staging', override: true });
|
|
16
|
-
validateDestroyPrerequisites(tenantRoot, { requireRemote: true });
|
|
17
|
-
const result = destroyCloudflareResources(tenantRoot, { target: previewTarget });
|
|
18
|
-
printDestroySummary(result);
|
|
19
|
-
}
|
|
20
|
-
cleanupDestroyedState(tenantRoot, { target: previewTarget });
|
|
21
|
-
deleteRemoteBranch(repoDir, featureBranch);
|
|
22
|
-
deleteLocalBranch(repoDir, featureBranch);
|
|
23
|
-
console.log('Treeseed close completed successfully.');
|
|
24
|
-
console.log(`Merged ${featureBranch} into staging and removed branch artifacts.`);
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
-
import { resolve } from 'node:path';
|
|
4
|
-
import { applyTreeseedEnvironmentToProcess } from '../operations/services/config-runtime.js';
|
|
5
|
-
import { PRODUCTION_BRANCH, STAGING_BRANCH, mergeStagingIntoMain, prepareReleaseBranches, pushBranch } from '../operations/services/git-workflow.js';
|
|
6
|
-
import { incrementVersion, planWorkspaceReleaseBump, applyWorkspaceVersionChanges, repoRoot } from '../operations/services/workspace-save.js';
|
|
7
|
-
import { run, workspaceRoot } from '../operations/services/workspace-tools.js';
|
|
8
|
-
import { runWorkspaceSavePreflight } from '../operations/services/save-deploy-preflight.js';
|
|
9
|
-
function parseArgs(argv) {
|
|
10
|
-
const flags = new Set(argv);
|
|
11
|
-
const selected = ['major', 'minor', 'patch'].filter((level) => flags.has(`--${level}`));
|
|
12
|
-
if (selected.length !== 1) {
|
|
13
|
-
throw new Error('Treeseed release requires exactly one version bump flag: --major, --minor, or --patch.');
|
|
14
|
-
}
|
|
15
|
-
return { level: selected[0] };
|
|
16
|
-
}
|
|
17
|
-
function bumpRootPackageJson(root, level) {
|
|
18
|
-
const packageJsonPath = resolve(root, 'package.json');
|
|
19
|
-
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
20
|
-
packageJson.version = incrementVersion(packageJson.version, level);
|
|
21
|
-
writeFileSync(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`, 'utf8');
|
|
22
|
-
return packageJson.version;
|
|
23
|
-
}
|
|
24
|
-
const { level } = parseArgs(process.argv.slice(2));
|
|
25
|
-
const root = workspaceRoot();
|
|
26
|
-
const gitRoot = repoRoot(root);
|
|
27
|
-
prepareReleaseBranches(root);
|
|
28
|
-
applyTreeseedEnvironmentToProcess({ tenantRoot: root, scope: 'staging', override: true });
|
|
29
|
-
runWorkspaceSavePreflight({ cwd: root });
|
|
30
|
-
const plan = planWorkspaceReleaseBump(level, root);
|
|
31
|
-
applyWorkspaceVersionChanges(plan);
|
|
32
|
-
const rootVersion = bumpRootPackageJson(root, level);
|
|
33
|
-
run('git', ['checkout', STAGING_BRANCH], { cwd: gitRoot });
|
|
34
|
-
run('git', ['add', '-A'], { cwd: gitRoot });
|
|
35
|
-
run('git', ['commit', '-m', `release: ${level} bump`], { cwd: gitRoot });
|
|
36
|
-
pushBranch(gitRoot, STAGING_BRANCH);
|
|
37
|
-
mergeStagingIntoMain(root);
|
|
38
|
-
console.log('Treeseed release completed successfully.');
|
|
39
|
-
console.log(`Staging branch: ${STAGING_BRANCH}`);
|
|
40
|
-
console.log(`Production branch: ${PRODUCTION_BRANCH}`);
|
|
41
|
-
console.log(`Release level: ${level}`);
|
|
42
|
-
console.log(`Root version: ${rootVersion}`);
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { spawnSync } from 'node:child_process';
|
|
3
|
-
import { applyTreeseedEnvironmentToProcess, assertTreeseedCommandEnvironment } from '../operations/services/config-runtime.js';
|
|
4
|
-
import { createBranchPreviewDeployTarget, deployTargetLabel, ensureGeneratedWranglerConfig, finalizeDeploymentState, printDeploySummary, provisionCloudflareResources, runRemoteD1Migrations, syncCloudflareSecrets, validateDeployPrerequisites, } from '../operations/services/deploy.js';
|
|
5
|
-
import { createFeatureBranchFromStaging, pushBranch } from '../operations/services/git-workflow.js';
|
|
6
|
-
import { packageScriptPath, resolveWranglerBin } from '../operations/services/runtime-tools.js';
|
|
7
|
-
function parseArgs(argv) {
|
|
8
|
-
const parsed = {
|
|
9
|
-
branchName: null,
|
|
10
|
-
preview: false,
|
|
11
|
-
};
|
|
12
|
-
for (const current of argv) {
|
|
13
|
-
if (current === '--preview') {
|
|
14
|
-
parsed.preview = true;
|
|
15
|
-
continue;
|
|
16
|
-
}
|
|
17
|
-
if (!parsed.branchName) {
|
|
18
|
-
parsed.branchName = current;
|
|
19
|
-
continue;
|
|
20
|
-
}
|
|
21
|
-
throw new Error(`Unknown start argument: ${current}`);
|
|
22
|
-
}
|
|
23
|
-
if (!parsed.branchName) {
|
|
24
|
-
throw new Error('Usage: treeseed start <branch-name> [--preview]');
|
|
25
|
-
}
|
|
26
|
-
return parsed;
|
|
27
|
-
}
|
|
28
|
-
function runNodeScript(scriptPath, scriptArgs = [], cwd) {
|
|
29
|
-
const result = spawnSync(process.execPath, [scriptPath, ...scriptArgs], {
|
|
30
|
-
stdio: 'inherit',
|
|
31
|
-
cwd,
|
|
32
|
-
env: { ...process.env },
|
|
33
|
-
});
|
|
34
|
-
if (result.status !== 0) {
|
|
35
|
-
process.exit(result.status ?? 1);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
function runWranglerDeploy(configPath, cwd) {
|
|
39
|
-
const result = spawnSync(process.execPath, [resolveWranglerBin(), 'deploy', '--config', configPath], {
|
|
40
|
-
stdio: 'inherit',
|
|
41
|
-
cwd,
|
|
42
|
-
env: { ...process.env },
|
|
43
|
-
});
|
|
44
|
-
if (result.status !== 0) {
|
|
45
|
-
process.exit(result.status ?? 1);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
const options = parseArgs(process.argv.slice(2));
|
|
49
|
-
const tenantRoot = process.cwd();
|
|
50
|
-
const result = createFeatureBranchFromStaging(tenantRoot, options.branchName);
|
|
51
|
-
pushBranch(result.repoDir, options.branchName, { setUpstream: true });
|
|
52
|
-
if (!options.preview) {
|
|
53
|
-
console.log(`Created feature branch ${options.branchName} from staging.`);
|
|
54
|
-
console.log('Preview mode is disabled. Use local development for this branch.');
|
|
55
|
-
process.exit(0);
|
|
56
|
-
}
|
|
57
|
-
applyTreeseedEnvironmentToProcess({ tenantRoot, scope: 'staging', override: true });
|
|
58
|
-
assertTreeseedCommandEnvironment({ tenantRoot, scope: 'staging', purpose: 'deploy' });
|
|
59
|
-
validateDeployPrerequisites(tenantRoot, { requireRemote: true });
|
|
60
|
-
const target = createBranchPreviewDeployTarget(options.branchName);
|
|
61
|
-
const summary = provisionCloudflareResources(tenantRoot, { target });
|
|
62
|
-
printDeploySummary(summary);
|
|
63
|
-
const { wranglerPath } = ensureGeneratedWranglerConfig(tenantRoot, { target });
|
|
64
|
-
syncCloudflareSecrets(tenantRoot, { target });
|
|
65
|
-
runRemoteD1Migrations(tenantRoot, { target });
|
|
66
|
-
runNodeScript(packageScriptPath('tenant-build'), [], tenantRoot);
|
|
67
|
-
runWranglerDeploy(wranglerPath, tenantRoot);
|
|
68
|
-
const state = finalizeDeploymentState(tenantRoot, { target });
|
|
69
|
-
console.log(`Treeseed start preview completed for ${options.branchName}.`);
|
|
70
|
-
console.log(`Target: ${deployTargetLabel(target)}`);
|
|
71
|
-
console.log(`Preview URL: ${state.lastDeployedUrl}`);
|