@treeseed/core 0.8.2 → 0.8.4

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.
Files changed (133) hide show
  1. package/README.md +7 -11
  2. package/dist/dev-watch.js +1 -1
  3. package/dist/dev.d.ts +2 -4
  4. package/dist/dev.js +4 -124
  5. package/dist/env.yaml +23 -175
  6. package/dist/index.d.ts +0 -4
  7. package/dist/index.js +0 -6
  8. package/dist/scripts/build-dist.js +3 -3
  9. package/dist/scripts/dev-platform.js +1 -7
  10. package/dist/scripts/run-fixture-astro-command.js +25 -51
  11. package/dist/scripts/test-smoke.js +50 -7
  12. package/package.json +5 -78
  13. package/templates/github/deploy-web.workflow.yml +106 -0
  14. package/templates/github/hosted-project.workflow.yml +4 -4
  15. package/dist/agent-runtime.d.ts +0 -17
  16. package/dist/agent-runtime.js +0 -117
  17. package/dist/agent.d.ts +0 -11
  18. package/dist/agent.js +0 -25
  19. package/dist/agents/adapters/execution.d.ts +0 -41
  20. package/dist/agents/adapters/execution.js +0 -73
  21. package/dist/agents/adapters/mutations.d.ts +0 -22
  22. package/dist/agents/adapters/mutations.js +0 -30
  23. package/dist/agents/adapters/notification.d.ts +0 -26
  24. package/dist/agents/adapters/notification.js +0 -46
  25. package/dist/agents/adapters/repository.d.ts +0 -23
  26. package/dist/agents/adapters/repository.js +0 -61
  27. package/dist/agents/adapters/research.d.ts +0 -26
  28. package/dist/agents/adapters/research.js +0 -59
  29. package/dist/agents/adapters/verification.d.ts +0 -36
  30. package/dist/agents/adapters/verification.js +0 -62
  31. package/dist/agents/cli-tools.d.ts +0 -1
  32. package/dist/agents/cli-tools.js +0 -5
  33. package/dist/agents/cli.d.ts +0 -15
  34. package/dist/agents/cli.js +0 -109
  35. package/dist/agents/contracts/messages.d.ts +0 -88
  36. package/dist/agents/contracts/messages.js +0 -138
  37. package/dist/agents/contracts/run.d.ts +0 -21
  38. package/dist/agents/contracts/run.js +0 -0
  39. package/dist/agents/index.d.ts +0 -1
  40. package/dist/agents/index.js +0 -5
  41. package/dist/agents/kernel/agent-kernel.d.ts +0 -51
  42. package/dist/agents/kernel/agent-kernel.js +0 -292
  43. package/dist/agents/kernel/trigger-resolver.d.ts +0 -19
  44. package/dist/agents/kernel/trigger-resolver.js +0 -157
  45. package/dist/agents/registry-helper.d.ts +0 -4
  46. package/dist/agents/registry-helper.js +0 -14
  47. package/dist/agents/registry.d.ts +0 -6
  48. package/dist/agents/registry.js +0 -98
  49. package/dist/agents/runtime-types.d.ts +0 -118
  50. package/dist/agents/runtime-types.js +0 -0
  51. package/dist/agents/spec-loader.d.ts +0 -18
  52. package/dist/agents/spec-loader.js +0 -55
  53. package/dist/agents/spec-normalizer.d.ts +0 -2
  54. package/dist/agents/spec-normalizer.js +0 -327
  55. package/dist/agents/spec-types.d.ts +0 -64
  56. package/dist/agents/spec-types.js +0 -0
  57. package/dist/agents/testing/agents-smoke.d.ts +0 -1
  58. package/dist/agents/testing/agents-smoke.js +0 -32
  59. package/dist/agents/testing/e2e-harness.d.ts +0 -44
  60. package/dist/agents/testing/e2e-harness.js +0 -504
  61. package/dist/api/agent-routes.d.ts +0 -13
  62. package/dist/api/agent-routes.js +0 -327
  63. package/dist/api/app.d.ts +0 -5
  64. package/dist/api/app.js +0 -361
  65. package/dist/api/auth/d1-database.d.ts +0 -3
  66. package/dist/api/auth/d1-database.js +0 -20
  67. package/dist/api/auth/d1-provider.d.ts +0 -79
  68. package/dist/api/auth/d1-provider.js +0 -92
  69. package/dist/api/auth/d1-store.d.ts +0 -114
  70. package/dist/api/auth/d1-store.js +0 -895
  71. package/dist/api/auth/memory-provider.d.ts +0 -77
  72. package/dist/api/auth/memory-provider.js +0 -249
  73. package/dist/api/auth/rbac.d.ts +0 -22
  74. package/dist/api/auth/rbac.js +0 -162
  75. package/dist/api/auth/tokens.d.ts +0 -18
  76. package/dist/api/auth/tokens.js +0 -56
  77. package/dist/api/capabilities.d.ts +0 -9
  78. package/dist/api/capabilities.js +0 -33
  79. package/dist/api/config.d.ts +0 -2
  80. package/dist/api/config.js +0 -77
  81. package/dist/api/http.d.ts +0 -28
  82. package/dist/api/http.js +0 -51
  83. package/dist/api/index.d.ts +0 -9
  84. package/dist/api/index.js +0 -18
  85. package/dist/api/operations-routes.d.ts +0 -11
  86. package/dist/api/operations-routes.js +0 -87
  87. package/dist/api/operations.d.ts +0 -3
  88. package/dist/api/operations.js +0 -26
  89. package/dist/api/project-routes.d.ts +0 -8
  90. package/dist/api/project-routes.js +0 -586
  91. package/dist/api/providers.d.ts +0 -2
  92. package/dist/api/providers.js +0 -62
  93. package/dist/api/railway.d.ts +0 -50
  94. package/dist/api/railway.js +0 -69
  95. package/dist/api/sdk-dispatch.d.ts +0 -5
  96. package/dist/api/sdk-dispatch.js +0 -13
  97. package/dist/api/sdk-routes.d.ts +0 -11
  98. package/dist/api/sdk-routes.js +0 -29
  99. package/dist/api/server.d.ts +0 -2
  100. package/dist/api/server.js +0 -10
  101. package/dist/api/templates.d.ts +0 -3
  102. package/dist/api/templates.js +0 -31
  103. package/dist/api/types.d.ts +0 -231
  104. package/dist/api/types.js +0 -0
  105. package/dist/api.d.ts +0 -1
  106. package/dist/api.js +0 -1
  107. package/dist/railway.d.ts +0 -1
  108. package/dist/railway.js +0 -4
  109. package/dist/services/agents.d.ts +0 -11
  110. package/dist/services/agents.js +0 -48
  111. package/dist/services/common.d.ts +0 -66
  112. package/dist/services/common.js +0 -212
  113. package/dist/services/index.d.ts +0 -6
  114. package/dist/services/index.js +0 -19
  115. package/dist/services/manager.d.ts +0 -267
  116. package/dist/services/manager.js +0 -1368
  117. package/dist/services/remote-runner.d.ts +0 -30
  118. package/dist/services/remote-runner.js +0 -230
  119. package/dist/services/workday-content.d.ts +0 -53
  120. package/dist/services/workday-content.js +0 -190
  121. package/dist/services/workday-manager.d.ts +0 -279
  122. package/dist/services/workday-manager.js +0 -163
  123. package/dist/services/workday-report.d.ts +0 -195
  124. package/dist/services/workday-report.js +0 -17
  125. package/dist/services/workday-start.d.ts +0 -195
  126. package/dist/services/workday-start.js +0 -17
  127. package/dist/services/worker-capacity.d.ts +0 -58
  128. package/dist/services/worker-capacity.js +0 -208
  129. package/dist/services/worker-pool-scaler.d.ts +0 -27
  130. package/dist/services/worker-pool-scaler.js +0 -127
  131. package/dist/services/worker.d.ts +0 -19
  132. package/dist/services/worker.js +0 -436
  133. package/templates/github/deploy.workflow.yml +0 -577
@@ -1,577 +0,0 @@
1
- name: Treeseed Deploy
2
-
3
- on:
4
- push:
5
- branches:
6
- - staging
7
- - main
8
- tags:
9
- - 'v*'
10
- workflow_dispatch:
11
- inputs:
12
- environment:
13
- description: Target environment
14
- required: true
15
- default: staging
16
- type: choice
17
- options:
18
- - staging
19
- - prod
20
- action_kind:
21
- description: Workflow action to perform
22
- required: true
23
- default: deploy_code
24
- type: choice
25
- options:
26
- - provision
27
- - deploy_code
28
- - publish_content
29
- - monitor
30
- project_id:
31
- description: Treeseed project id for control-plane reporting
32
- required: false
33
- type: string
34
- preview_id:
35
- description: Optional preview overlay id for editorial publishes
36
- required: false
37
- type: string
38
-
39
- jobs:
40
- classify:
41
- runs-on: ubuntu-latest
42
- outputs:
43
- scope: ${{ steps.classify.outputs.scope }}
44
- code_changed: ${{ steps.classify.outputs.code_changed }}
45
- content_changed: ${{ steps.classify.outputs.content_changed }}
46
- release_tag: ${{ steps.classify.outputs.release_tag }}
47
- workflow_action: ${{ steps.classify.outputs.workflow_action }}
48
- preview_id: ${{ steps.classify.outputs.preview_id }}
49
- steps:
50
- - name: Checkout
51
- uses: actions/checkout@v4
52
- with:
53
- fetch-depth: 0
54
-
55
- - name: Classify changes
56
- id: classify
57
- shell: bash
58
- run: |
59
- set -euo pipefail
60
-
61
- if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then
62
- scope="${{ inputs.environment }}"
63
- workflow_action="${{ inputs.action_kind }}"
64
- release_tag="false"
65
- code_changed=$([[ "${workflow_action}" == "deploy_code" ]] && echo "true" || echo "false")
66
- content_changed=$([[ "${workflow_action}" == "publish_content" ]] && echo "true" || echo "false")
67
- preview_id="${{ inputs.preview_id }}"
68
- else
69
- ref_name="${GITHUB_REF_NAME}"
70
- ref_type="${GITHUB_REF_TYPE}"
71
- before_sha="${{ github.event.before }}"
72
- head_sha="${GITHUB_SHA}"
73
- workflow_action="auto"
74
- preview_id="staging-${GITHUB_SHA}"
75
-
76
- if [[ "${ref_type}" == "tag" ]]; then
77
- scope="prod"
78
- release_tag="true"
79
- compare_ref="$(git rev-list --parents -n 1 "${head_sha}" | awk '{print $2}')"
80
- elif [[ "${ref_name}" == "main" ]]; then
81
- scope="prod"
82
- release_tag="false"
83
- compare_ref="${before_sha}"
84
- else
85
- scope="staging"
86
- release_tag="false"
87
- compare_ref="${before_sha}"
88
- fi
89
-
90
- if [[ -z "${compare_ref}" || "${compare_ref}" == "0000000000000000000000000000000000000000" ]]; then
91
- compare_ref="$(git rev-list --max-count=1 "${head_sha}^" 2>/dev/null || true)"
92
- fi
93
-
94
- code_changed="false"
95
- content_changed="false"
96
-
97
- if [[ -n "${compare_ref}" ]]; then
98
- while IFS= read -r path; do
99
- [[ -z "${path}" ]] && continue
100
- case "${path}" in
101
- src/content/*|content/*|books/*|docs/*|migrations/*)
102
- content_changed="true"
103
- ;;
104
- *)
105
- code_changed="true"
106
- ;;
107
- esac
108
- done < <(git diff --name-only "${compare_ref}" "${head_sha}")
109
- else
110
- code_changed="true"
111
- fi
112
- fi
113
-
114
- {
115
- echo "scope=${scope}"
116
- echo "code_changed=${code_changed}"
117
- echo "content_changed=${content_changed}"
118
- echo "release_tag=${release_tag}"
119
- echo "workflow_action=${workflow_action}"
120
- echo "preview_id=${preview_id}"
121
- } >> "${GITHUB_OUTPUT}"
122
-
123
- verify:
124
- runs-on: ubuntu-latest
125
- needs: classify
126
- if: |
127
- needs.classify.outputs.workflow_action == 'deploy_code' ||
128
- needs.classify.outputs.workflow_action == 'publish_content' ||
129
- needs.classify.outputs.code_changed == 'true' ||
130
- needs.classify.outputs.content_changed == 'true' ||
131
- needs.classify.outputs.release_tag == 'true'
132
- permissions:
133
- contents: read
134
- steps:
135
- - name: Checkout
136
- uses: actions/checkout@v4
137
-
138
- - name: Setup Node
139
- uses: actions/setup-node@v4
140
- with:
141
- node-version: 22
142
- cache: npm
143
- cache-dependency-path: __CACHE_DEPENDENCY_PATH__
144
-
145
- - name: Prepare deployment install manifest
146
- shell: bash
147
- run: |
148
- node --input-type=module -e "import { readFileSync, writeFileSync } from 'node:fs'; const path = 'package.json'; const pkg = JSON.parse(readFileSync(path, 'utf8')); if (pkg.workspaces) { delete pkg.workspaces; writeFileSync(path, JSON.stringify(pkg, null, 2) + '\n'); console.log('Suppressed root workspaces for deployment install.'); }"
149
-
150
- - name: Install dependencies
151
- run: |
152
- for attempt in 1 2 3; do
153
- if npm ci --ignore-scripts; then
154
- break
155
- fi
156
- if test "${attempt}" = "3"; then
157
- exit 1
158
- fi
159
- echo "npm ci failed; retrying (${attempt}/3)."
160
- sleep $((attempt * 10))
161
- done
162
-
163
- - name: Build workspace package artifacts
164
- shell: bash
165
- run: |
166
- set -euo pipefail
167
- for dir in packages/sdk packages/core packages/cli; do
168
- if test -f "${dir}/package.json"; then
169
- npm --prefix "${dir}" run build:dist
170
- fi
171
- done
172
-
173
- - name: Verify workspace
174
- shell: bash
175
- run: |
176
- set -euo pipefail
177
- npm run verify:local 2>&1 | tee verify.log
178
- if test -f ./packages/sdk/scripts/check-build-warnings.mjs; then
179
- node ./packages/sdk/scripts/check-build-warnings.mjs verify.log
180
- elif test -f ./node_modules/@treeseed/sdk/dist/scripts/check-build-warnings.js; then
181
- node ./node_modules/@treeseed/sdk/dist/scripts/check-build-warnings.js verify.log
182
- else
183
- echo "Unable to resolve @treeseed/sdk warning scanner entrypoint."
184
- exit 1
185
- fi
186
- __WORKING_DIRECTORY_BLOCK__
187
-
188
- provision:
189
- runs-on: ubuntu-latest
190
- needs:
191
- - classify
192
- - verify
193
- if: |
194
- needs.classify.outputs.workflow_action == 'provision' ||
195
- needs.classify.outputs.workflow_action == 'deploy_code' ||
196
- needs.classify.outputs.workflow_action == 'publish_content' ||
197
- needs.classify.outputs.workflow_action == 'monitor' ||
198
- needs.classify.outputs.code_changed == 'true' ||
199
- needs.classify.outputs.content_changed == 'true' ||
200
- needs.classify.outputs.release_tag == 'true'
201
- permissions:
202
- contents: read
203
- deployments: write
204
- environment: ${{ needs.classify.outputs.scope == 'prod' && 'production' || 'staging' }}
205
- env:
206
- CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
207
- CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }}
208
- TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME: ${{ vars.TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME }}
209
- TREESEED_CLOUDFLARE_PAGES_PREVIEW_PROJECT_NAME: ${{ vars.TREESEED_CLOUDFLARE_PAGES_PREVIEW_PROJECT_NAME }}
210
- TREESEED_CONTENT_BUCKET_NAME: ${{ vars.TREESEED_CONTENT_BUCKET_NAME }}
211
- TREESEED_CONTENT_BUCKET_BINDING: ${{ vars.TREESEED_CONTENT_BUCKET_BINDING }}
212
- TREESEED_FORM_TOKEN_SECRET: ${{ secrets.TREESEED_FORM_TOKEN_SECRET }}
213
- TREESEED_EDITORIAL_PREVIEW_SECRET: ${{ secrets.TREESEED_EDITORIAL_PREVIEW_SECRET }}
214
- TREESEED_PUBLIC_TURNSTILE_SITE_KEY: ${{ vars.TREESEED_PUBLIC_TURNSTILE_SITE_KEY }}
215
- TREESEED_TURNSTILE_SECRET_KEY: ${{ secrets.TREESEED_TURNSTILE_SECRET_KEY }}
216
- TREESEED_SMTP_HOST: ${{ vars.TREESEED_SMTP_HOST }}
217
- TREESEED_SMTP_PORT: ${{ vars.TREESEED_SMTP_PORT }}
218
- TREESEED_SMTP_USERNAME: ${{ vars.TREESEED_SMTP_USERNAME }}
219
- TREESEED_SMTP_PASSWORD: ${{ secrets.TREESEED_SMTP_PASSWORD }}
220
- TREESEED_SMTP_FROM: ${{ vars.TREESEED_SMTP_FROM }}
221
- TREESEED_SMTP_REPLY_TO: ${{ vars.TREESEED_SMTP_REPLY_TO }}
222
- RAILWAY_API_TOKEN: ${{ secrets.RAILWAY_API_TOKEN }}
223
- TREESEED_MARKET_API_BASE_URL: ${{ vars.TREESEED_MARKET_API_BASE_URL }}
224
- TREESEED_PROJECT_ID: ${{ inputs.project_id || vars.TREESEED_PROJECT_ID }}
225
- TREESEED_PROJECT_RUNNER_TOKEN: ${{ secrets.TREESEED_PROJECT_RUNNER_TOKEN }}
226
- TREESEED_WORKER_POOL_SCALER: ${{ vars.TREESEED_WORKER_POOL_SCALER }}
227
- TREESEED_AGENT_POOL_MIN_WORKERS: ${{ vars.TREESEED_AGENT_POOL_MIN_WORKERS }}
228
- TREESEED_AGENT_POOL_MAX_WORKERS: ${{ vars.TREESEED_AGENT_POOL_MAX_WORKERS }}
229
- TREESEED_AGENT_POOL_TARGET_QUEUE_DEPTH: ${{ vars.TREESEED_AGENT_POOL_TARGET_QUEUE_DEPTH }}
230
- TREESEED_AGENT_POOL_COOLDOWN_SECONDS: ${{ vars.TREESEED_AGENT_POOL_COOLDOWN_SECONDS }}
231
- TREESEED_WORKDAY_TIMEZONE: ${{ vars.TREESEED_WORKDAY_TIMEZONE }}
232
- TREESEED_WORKDAY_WINDOWS_JSON: ${{ vars.TREESEED_WORKDAY_WINDOWS_JSON }}
233
- TREESEED_WORKDAY_TASK_CREDIT_BUDGET: ${{ vars.TREESEED_WORKDAY_TASK_CREDIT_BUDGET }}
234
- TREESEED_MANAGER_MAX_QUEUED_TASKS: ${{ vars.TREESEED_MANAGER_MAX_QUEUED_TASKS }}
235
- TREESEED_MANAGER_MAX_QUEUED_CREDITS: ${{ vars.TREESEED_MANAGER_MAX_QUEUED_CREDITS }}
236
- TREESEED_MANAGER_PRIORITY_MODELS: ${{ vars.TREESEED_MANAGER_PRIORITY_MODELS }}
237
- TREESEED_TASK_CREDIT_WEIGHTS_JSON: ${{ vars.TREESEED_TASK_CREDIT_WEIGHTS_JSON }}
238
- TREESEED_RAILWAY_PROJECT_ID: ${{ vars.TREESEED_RAILWAY_PROJECT_ID }}
239
- TREESEED_RAILWAY_ENVIRONMENT_ID: ${{ vars.TREESEED_RAILWAY_ENVIRONMENT_ID }}
240
- TREESEED_RAILWAY_WORKER_SERVICE_ID: ${{ vars.TREESEED_RAILWAY_WORKER_SERVICE_ID }}
241
- TREESEED_WORKFLOW_ACTION: provision
242
- TREESEED_WORKFLOW_ENVIRONMENT: ${{ needs.classify.outputs.scope }}
243
- TREESEED_WORKFLOW_PROJECT: ${{ inputs.project_id || vars.TREESEED_PROJECT_ID }}
244
- TREESEED_WORKFLOW_PREVIEW_ID: ${{ inputs.preview_id || needs.classify.outputs.preview_id }}
245
- steps:
246
- - name: Checkout
247
- uses: actions/checkout@v4
248
-
249
- - name: Setup Node
250
- uses: actions/setup-node@v4
251
- with:
252
- node-version: 22
253
- cache: npm
254
- cache-dependency-path: __CACHE_DEPENDENCY_PATH__
255
-
256
- - name: Prepare deployment install manifest
257
- shell: bash
258
- run: |
259
- node --input-type=module -e "import { readFileSync, writeFileSync } from 'node:fs'; const path = 'package.json'; const pkg = JSON.parse(readFileSync(path, 'utf8')); if (pkg.workspaces) { delete pkg.workspaces; writeFileSync(path, JSON.stringify(pkg, null, 2) + '\n'); console.log('Suppressed root workspaces for deployment install.'); }"
260
-
261
- - name: Install dependencies
262
- run: |
263
- for attempt in 1 2 3; do
264
- if npm ci --ignore-scripts; then
265
- break
266
- fi
267
- if test "${attempt}" = "3"; then
268
- exit 1
269
- fi
270
- echo "npm ci failed; retrying (${attempt}/3)."
271
- sleep $((attempt * 10))
272
- done
273
-
274
- - name: Build workspace package artifacts
275
- shell: bash
276
- run: |
277
- set -euo pipefail
278
- for dir in packages/sdk packages/core packages/cli; do
279
- if test -f "${dir}/package.json"; then
280
- npm --prefix "${dir}" run build:dist
281
- fi
282
- done
283
-
284
- - name: Provision Treeseed platform
285
- shell: bash
286
- run: |
287
- __TENANT_WORKFLOW_ACTION_COMMAND_BLOCK__
288
- __WORKING_DIRECTORY_BLOCK__
289
-
290
- deploy-code:
291
- runs-on: ubuntu-latest
292
- needs:
293
- - classify
294
- - verify
295
- - provision
296
- permissions:
297
- contents: read
298
- deployments: write
299
- if: |
300
- needs.classify.outputs.workflow_action == 'deploy_code' ||
301
- needs.classify.outputs.code_changed == 'true' ||
302
- needs.classify.outputs.release_tag == 'true'
303
- environment: ${{ needs.classify.outputs.scope == 'prod' && 'production' || 'staging' }}
304
- env:
305
- CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
306
- CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }}
307
- TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME: ${{ vars.TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME }}
308
- TREESEED_CLOUDFLARE_PAGES_PREVIEW_PROJECT_NAME: ${{ vars.TREESEED_CLOUDFLARE_PAGES_PREVIEW_PROJECT_NAME }}
309
- TREESEED_CONTENT_BUCKET_NAME: ${{ vars.TREESEED_CONTENT_BUCKET_NAME }}
310
- TREESEED_CONTENT_BUCKET_BINDING: ${{ vars.TREESEED_CONTENT_BUCKET_BINDING }}
311
- TREESEED_FORM_TOKEN_SECRET: ${{ secrets.TREESEED_FORM_TOKEN_SECRET }}
312
- TREESEED_EDITORIAL_PREVIEW_SECRET: ${{ secrets.TREESEED_EDITORIAL_PREVIEW_SECRET }}
313
- TREESEED_PUBLIC_TURNSTILE_SITE_KEY: ${{ vars.TREESEED_PUBLIC_TURNSTILE_SITE_KEY }}
314
- TREESEED_TURNSTILE_SECRET_KEY: ${{ secrets.TREESEED_TURNSTILE_SECRET_KEY }}
315
- TREESEED_SMTP_HOST: ${{ vars.TREESEED_SMTP_HOST }}
316
- TREESEED_SMTP_PORT: ${{ vars.TREESEED_SMTP_PORT }}
317
- TREESEED_SMTP_USERNAME: ${{ vars.TREESEED_SMTP_USERNAME }}
318
- TREESEED_SMTP_PASSWORD: ${{ secrets.TREESEED_SMTP_PASSWORD }}
319
- TREESEED_SMTP_FROM: ${{ vars.TREESEED_SMTP_FROM }}
320
- TREESEED_SMTP_REPLY_TO: ${{ vars.TREESEED_SMTP_REPLY_TO }}
321
- RAILWAY_API_TOKEN: ${{ secrets.RAILWAY_API_TOKEN }}
322
- TREESEED_MARKET_API_BASE_URL: ${{ vars.TREESEED_MARKET_API_BASE_URL }}
323
- TREESEED_PROJECT_ID: ${{ inputs.project_id || vars.TREESEED_PROJECT_ID }}
324
- TREESEED_PROJECT_RUNNER_TOKEN: ${{ secrets.TREESEED_PROJECT_RUNNER_TOKEN }}
325
- TREESEED_WORKER_POOL_SCALER: ${{ vars.TREESEED_WORKER_POOL_SCALER }}
326
- TREESEED_AGENT_POOL_MIN_WORKERS: ${{ vars.TREESEED_AGENT_POOL_MIN_WORKERS }}
327
- TREESEED_AGENT_POOL_MAX_WORKERS: ${{ vars.TREESEED_AGENT_POOL_MAX_WORKERS }}
328
- TREESEED_AGENT_POOL_TARGET_QUEUE_DEPTH: ${{ vars.TREESEED_AGENT_POOL_TARGET_QUEUE_DEPTH }}
329
- TREESEED_AGENT_POOL_COOLDOWN_SECONDS: ${{ vars.TREESEED_AGENT_POOL_COOLDOWN_SECONDS }}
330
- TREESEED_WORKDAY_TIMEZONE: ${{ vars.TREESEED_WORKDAY_TIMEZONE }}
331
- TREESEED_WORKDAY_WINDOWS_JSON: ${{ vars.TREESEED_WORKDAY_WINDOWS_JSON }}
332
- TREESEED_WORKDAY_TASK_CREDIT_BUDGET: ${{ vars.TREESEED_WORKDAY_TASK_CREDIT_BUDGET }}
333
- TREESEED_MANAGER_MAX_QUEUED_TASKS: ${{ vars.TREESEED_MANAGER_MAX_QUEUED_TASKS }}
334
- TREESEED_MANAGER_MAX_QUEUED_CREDITS: ${{ vars.TREESEED_MANAGER_MAX_QUEUED_CREDITS }}
335
- TREESEED_MANAGER_PRIORITY_MODELS: ${{ vars.TREESEED_MANAGER_PRIORITY_MODELS }}
336
- TREESEED_TASK_CREDIT_WEIGHTS_JSON: ${{ vars.TREESEED_TASK_CREDIT_WEIGHTS_JSON }}
337
- TREESEED_RAILWAY_PROJECT_ID: ${{ vars.TREESEED_RAILWAY_PROJECT_ID }}
338
- TREESEED_RAILWAY_ENVIRONMENT_ID: ${{ vars.TREESEED_RAILWAY_ENVIRONMENT_ID }}
339
- TREESEED_RAILWAY_WORKER_SERVICE_ID: ${{ vars.TREESEED_RAILWAY_WORKER_SERVICE_ID }}
340
- TREESEED_CONTENT_SERVING_MODE: published_runtime
341
- TREESEED_WORKFLOW_ACTION: deploy_code
342
- TREESEED_WORKFLOW_ENVIRONMENT: ${{ needs.classify.outputs.scope }}
343
- TREESEED_WORKFLOW_PROJECT: ${{ inputs.project_id || vars.TREESEED_PROJECT_ID }}
344
- TREESEED_WORKFLOW_PREVIEW_ID: ${{ inputs.preview_id || needs.classify.outputs.preview_id }}
345
- steps:
346
- - name: Checkout
347
- uses: actions/checkout@v4
348
- with:
349
- submodules: false
350
- sparse-checkout: |
351
- /*
352
- !/src/content/
353
- !/src/content/**
354
- !/public/books/
355
- !/public/books/**
356
- sparse-checkout-cone-mode: false
357
-
358
- - name: Setup Node
359
- uses: actions/setup-node@v4
360
- with:
361
- node-version: 22
362
- cache: npm
363
- cache-dependency-path: __CACHE_DEPENDENCY_PATH__
364
-
365
- - name: Prepare deployment install manifest
366
- shell: bash
367
- run: |
368
- node --input-type=module -e "import { readFileSync, writeFileSync } from 'node:fs'; const path = 'package.json'; const pkg = JSON.parse(readFileSync(path, 'utf8')); if (pkg.workspaces) { delete pkg.workspaces; writeFileSync(path, JSON.stringify(pkg, null, 2) + '\n'); console.log('Suppressed root workspaces for deployment install.'); }"
369
-
370
- - name: Install dependencies
371
- run: |
372
- for attempt in 1 2 3; do
373
- if npm ci --ignore-scripts; then
374
- break
375
- fi
376
- if test "${attempt}" = "3"; then
377
- exit 1
378
- fi
379
- echo "npm ci failed; retrying (${attempt}/3)."
380
- sleep $((attempt * 10))
381
- done
382
-
383
- - name: Build workspace package artifacts
384
- shell: bash
385
- run: |
386
- set -euo pipefail
387
- for dir in packages/sdk packages/core packages/cli; do
388
- if test -f "${dir}/package.json"; then
389
- npm --prefix "${dir}" run build:dist
390
- fi
391
- done
392
-
393
- - name: Deploy Treeseed platform
394
- shell: bash
395
- run: |
396
- __TENANT_WORKFLOW_ACTION_COMMAND_BLOCK__
397
- __WORKING_DIRECTORY_BLOCK__
398
-
399
- publish-content:
400
- runs-on: ubuntu-latest
401
- needs:
402
- - classify
403
- - verify
404
- - provision
405
- - deploy-code
406
- permissions:
407
- contents: read
408
- deployments: write
409
- if: |
410
- (needs.classify.outputs.workflow_action == 'publish_content' ||
411
- needs.classify.outputs.content_changed == 'true') &&
412
- (needs['deploy-code'].result == 'success' || needs['deploy-code'].result == 'skipped')
413
- environment: ${{ needs.classify.outputs.scope == 'prod' && 'production' || 'staging' }}
414
- env:
415
- CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
416
- CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }}
417
- TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME: ${{ vars.TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME }}
418
- TREESEED_CLOUDFLARE_PAGES_PREVIEW_PROJECT_NAME: ${{ vars.TREESEED_CLOUDFLARE_PAGES_PREVIEW_PROJECT_NAME }}
419
- TREESEED_CONTENT_BUCKET_NAME: ${{ vars.TREESEED_CONTENT_BUCKET_NAME }}
420
- TREESEED_CONTENT_BUCKET_BINDING: ${{ vars.TREESEED_CONTENT_BUCKET_BINDING }}
421
- TREESEED_FORM_TOKEN_SECRET: ${{ secrets.TREESEED_FORM_TOKEN_SECRET }}
422
- TREESEED_EDITORIAL_PREVIEW_SECRET: ${{ secrets.TREESEED_EDITORIAL_PREVIEW_SECRET }}
423
- TREESEED_PUBLIC_TURNSTILE_SITE_KEY: ${{ vars.TREESEED_PUBLIC_TURNSTILE_SITE_KEY }}
424
- TREESEED_TURNSTILE_SECRET_KEY: ${{ secrets.TREESEED_TURNSTILE_SECRET_KEY }}
425
- TREESEED_SMTP_HOST: ${{ vars.TREESEED_SMTP_HOST }}
426
- TREESEED_SMTP_PORT: ${{ vars.TREESEED_SMTP_PORT }}
427
- TREESEED_SMTP_USERNAME: ${{ vars.TREESEED_SMTP_USERNAME }}
428
- TREESEED_SMTP_PASSWORD: ${{ secrets.TREESEED_SMTP_PASSWORD }}
429
- TREESEED_SMTP_FROM: ${{ vars.TREESEED_SMTP_FROM }}
430
- TREESEED_SMTP_REPLY_TO: ${{ vars.TREESEED_SMTP_REPLY_TO }}
431
- RAILWAY_API_TOKEN: ${{ secrets.RAILWAY_API_TOKEN }}
432
- TREESEED_MARKET_API_BASE_URL: ${{ vars.TREESEED_MARKET_API_BASE_URL }}
433
- TREESEED_PROJECT_ID: ${{ inputs.project_id || vars.TREESEED_PROJECT_ID }}
434
- TREESEED_PROJECT_RUNNER_TOKEN: ${{ secrets.TREESEED_PROJECT_RUNNER_TOKEN }}
435
- TREESEED_WORKER_POOL_SCALER: ${{ vars.TREESEED_WORKER_POOL_SCALER }}
436
- TREESEED_AGENT_POOL_MIN_WORKERS: ${{ vars.TREESEED_AGENT_POOL_MIN_WORKERS }}
437
- TREESEED_AGENT_POOL_MAX_WORKERS: ${{ vars.TREESEED_AGENT_POOL_MAX_WORKERS }}
438
- TREESEED_AGENT_POOL_TARGET_QUEUE_DEPTH: ${{ vars.TREESEED_AGENT_POOL_TARGET_QUEUE_DEPTH }}
439
- TREESEED_AGENT_POOL_COOLDOWN_SECONDS: ${{ vars.TREESEED_AGENT_POOL_COOLDOWN_SECONDS }}
440
- TREESEED_WORKDAY_TIMEZONE: ${{ vars.TREESEED_WORKDAY_TIMEZONE }}
441
- TREESEED_WORKDAY_WINDOWS_JSON: ${{ vars.TREESEED_WORKDAY_WINDOWS_JSON }}
442
- TREESEED_WORKDAY_TASK_CREDIT_BUDGET: ${{ vars.TREESEED_WORKDAY_TASK_CREDIT_BUDGET }}
443
- TREESEED_MANAGER_MAX_QUEUED_TASKS: ${{ vars.TREESEED_MANAGER_MAX_QUEUED_TASKS }}
444
- TREESEED_MANAGER_MAX_QUEUED_CREDITS: ${{ vars.TREESEED_MANAGER_MAX_QUEUED_CREDITS }}
445
- TREESEED_MANAGER_PRIORITY_MODELS: ${{ vars.TREESEED_MANAGER_PRIORITY_MODELS }}
446
- TREESEED_TASK_CREDIT_WEIGHTS_JSON: ${{ vars.TREESEED_TASK_CREDIT_WEIGHTS_JSON }}
447
- TREESEED_RAILWAY_PROJECT_ID: ${{ vars.TREESEED_RAILWAY_PROJECT_ID }}
448
- TREESEED_RAILWAY_ENVIRONMENT_ID: ${{ vars.TREESEED_RAILWAY_ENVIRONMENT_ID }}
449
- TREESEED_RAILWAY_WORKER_SERVICE_ID: ${{ vars.TREESEED_RAILWAY_WORKER_SERVICE_ID }}
450
- TREESEED_WORKFLOW_ACTION: publish_content
451
- TREESEED_WORKFLOW_ENVIRONMENT: ${{ needs.classify.outputs.scope }}
452
- TREESEED_WORKFLOW_PROJECT: ${{ inputs.project_id || vars.TREESEED_PROJECT_ID }}
453
- TREESEED_WORKFLOW_PREVIEW_ID: ${{ inputs.preview_id || needs.classify.outputs.preview_id }}
454
- steps:
455
- - name: Checkout
456
- uses: actions/checkout@v4
457
-
458
- - name: Setup Node
459
- uses: actions/setup-node@v4
460
- with:
461
- node-version: 22
462
- cache: npm
463
- cache-dependency-path: __CACHE_DEPENDENCY_PATH__
464
-
465
- - name: Prepare deployment install manifest
466
- shell: bash
467
- run: |
468
- node --input-type=module -e "import { readFileSync, writeFileSync } from 'node:fs'; const path = 'package.json'; const pkg = JSON.parse(readFileSync(path, 'utf8')); if (pkg.workspaces) { delete pkg.workspaces; writeFileSync(path, JSON.stringify(pkg, null, 2) + '\n'); console.log('Suppressed root workspaces for deployment install.'); }"
469
-
470
- - name: Install dependencies
471
- run: |
472
- for attempt in 1 2 3; do
473
- if npm ci --ignore-scripts; then
474
- break
475
- fi
476
- if test "${attempt}" = "3"; then
477
- exit 1
478
- fi
479
- echo "npm ci failed; retrying (${attempt}/3)."
480
- sleep $((attempt * 10))
481
- done
482
-
483
- - name: Build workspace package artifacts
484
- shell: bash
485
- run: |
486
- set -euo pipefail
487
- for dir in packages/sdk packages/core packages/cli; do
488
- if test -f "${dir}/package.json"; then
489
- npm --prefix "${dir}" run build:dist
490
- fi
491
- done
492
-
493
- - name: Publish Treeseed content
494
- shell: bash
495
- run: |
496
- __TENANT_WORKFLOW_ACTION_COMMAND_BLOCK__
497
- __WORKING_DIRECTORY_BLOCK__
498
-
499
- monitor:
500
- runs-on: ubuntu-latest
501
- needs:
502
- - classify
503
- - provision
504
- - deploy-code
505
- - publish-content
506
- if: |
507
- (needs.classify.outputs.workflow_action == 'monitor' ||
508
- needs.classify.outputs.code_changed == 'true' ||
509
- needs.classify.outputs.content_changed == 'true' ||
510
- needs.classify.outputs.release_tag == 'true') &&
511
- (needs['deploy-code'].result == 'success' || needs['deploy-code'].result == 'skipped') &&
512
- (needs['publish-content'].result == 'success' || needs['publish-content'].result == 'skipped')
513
- permissions:
514
- contents: read
515
- deployments: write
516
- environment: ${{ needs.classify.outputs.scope == 'prod' && 'production' || 'staging' }}
517
- env:
518
- CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
519
- CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }}
520
- TREESEED_CONTENT_BUCKET_NAME: ${{ vars.TREESEED_CONTENT_BUCKET_NAME }}
521
- TREESEED_CONTENT_BUCKET_BINDING: ${{ vars.TREESEED_CONTENT_BUCKET_BINDING }}
522
- RAILWAY_API_TOKEN: ${{ secrets.RAILWAY_API_TOKEN }}
523
- TREESEED_MARKET_API_BASE_URL: ${{ vars.TREESEED_MARKET_API_BASE_URL }}
524
- TREESEED_PROJECT_ID: ${{ inputs.project_id || vars.TREESEED_PROJECT_ID }}
525
- TREESEED_PROJECT_RUNNER_TOKEN: ${{ secrets.TREESEED_PROJECT_RUNNER_TOKEN }}
526
- TREESEED_WORKER_POOL_SCALER: ${{ vars.TREESEED_WORKER_POOL_SCALER }}
527
- TREESEED_RAILWAY_PROJECT_ID: ${{ vars.TREESEED_RAILWAY_PROJECT_ID }}
528
- TREESEED_RAILWAY_ENVIRONMENT_ID: ${{ vars.TREESEED_RAILWAY_ENVIRONMENT_ID }}
529
- TREESEED_RAILWAY_WORKER_SERVICE_ID: ${{ vars.TREESEED_RAILWAY_WORKER_SERVICE_ID }}
530
- TREESEED_WORKFLOW_ACTION: monitor
531
- TREESEED_WORKFLOW_ENVIRONMENT: ${{ needs.classify.outputs.scope }}
532
- TREESEED_WORKFLOW_PROJECT: ${{ inputs.project_id || vars.TREESEED_PROJECT_ID }}
533
- TREESEED_WORKFLOW_PREVIEW_ID: ${{ inputs.preview_id || needs.classify.outputs.preview_id }}
534
- steps:
535
- - name: Checkout
536
- uses: actions/checkout@v4
537
-
538
- - name: Setup Node
539
- uses: actions/setup-node@v4
540
- with:
541
- node-version: 22
542
- cache: npm
543
- cache-dependency-path: __CACHE_DEPENDENCY_PATH__
544
-
545
- - name: Prepare deployment install manifest
546
- shell: bash
547
- run: |
548
- node --input-type=module -e "import { readFileSync, writeFileSync } from 'node:fs'; const path = 'package.json'; const pkg = JSON.parse(readFileSync(path, 'utf8')); if (pkg.workspaces) { delete pkg.workspaces; writeFileSync(path, JSON.stringify(pkg, null, 2) + '\n'); console.log('Suppressed root workspaces for deployment install.'); }"
549
-
550
- - name: Install dependencies
551
- run: |
552
- for attempt in 1 2 3; do
553
- if npm ci --ignore-scripts; then
554
- break
555
- fi
556
- if test "${attempt}" = "3"; then
557
- exit 1
558
- fi
559
- echo "npm ci failed; retrying (${attempt}/3)."
560
- sleep $((attempt * 10))
561
- done
562
-
563
- - name: Build workspace package artifacts
564
- shell: bash
565
- run: |
566
- set -euo pipefail
567
- for dir in packages/sdk packages/core packages/cli; do
568
- if test -f "${dir}/package.json"; then
569
- npm --prefix "${dir}" run build:dist
570
- fi
571
- done
572
-
573
- - name: Report Treeseed deployment state
574
- shell: bash
575
- run: |
576
- __TENANT_WORKFLOW_ACTION_COMMAND_BLOCK__
577
- __WORKING_DIRECTORY_BLOCK__