@treeseed/sdk 0.10.28 → 0.12.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.
- package/README.md +213 -7
- package/dist/agent-capacity.d.ts +916 -0
- package/dist/agent-capacity.js +1600 -0
- package/dist/agent-tools.d.ts +37 -0
- package/dist/agent-tools.js +301 -0
- package/dist/api/app.d.ts +1 -1
- package/dist/api/auth/d1-database.d.ts +2 -2
- package/dist/api/auth/d1-provider.d.ts +4 -4
- package/dist/api/auth/d1-store.d.ts +2 -2
- package/dist/api/auth/memory-provider.d.ts +1 -1
- package/dist/api/auth/tokens.d.ts +1 -1
- package/dist/api/config.d.ts +3 -1
- package/dist/api/config.js +34 -10
- package/dist/api/http.d.ts +2 -2
- package/dist/api/index.d.ts +10 -10
- package/dist/api/index.js +4 -2
- package/dist/api/operations-routes.d.ts +3 -3
- package/dist/api/operations.d.ts +1 -1
- package/dist/api/providers.d.ts +1 -1
- package/dist/api/providers.js +21 -4
- package/dist/api/railway.d.ts +3 -2
- package/dist/api/sdk-dispatch.d.ts +4 -4
- package/dist/api/sdk-routes.d.ts +2 -2
- package/dist/api/templates.d.ts +2 -2
- package/dist/api/types.d.ts +3 -2
- package/dist/capacity-provider.d.ts +118 -59
- package/dist/capacity-provider.js +235 -43
- package/dist/capacity.d.ts +2 -2
- package/dist/cli-tools.d.ts +1 -1
- package/dist/content-operations.d.ts +97 -0
- package/dist/content-operations.js +250 -0
- package/dist/content-store.d.ts +4 -4
- package/dist/control-plane-client.d.ts +13 -18
- package/dist/control-plane-client.js +8 -86
- package/dist/control-plane.d.ts +3 -2
- package/dist/control-plane.js +38 -13
- package/dist/copilot.d.ts +3 -0
- package/dist/copilot.js +16 -1
- package/dist/d1-http.d.ts +1 -1
- package/dist/d1-store.d.ts +32 -57
- package/dist/d1-store.js +115 -318
- package/dist/db/d1.d.ts +1 -232
- package/dist/db/index.d.ts +3 -3
- package/dist/db/market-schema.d.ts +50900 -11018
- package/dist/db/market-schema.js +2313 -467
- package/dist/db/node-sqlite.d.ts +1 -232
- package/dist/db/node-sqlite.js +7 -2
- package/dist/db/schema.d.ts +0 -462
- package/dist/db/schema.js +2 -22
- package/dist/dispatch.d.ts +1 -1
- package/dist/dispatch.js +0 -11
- package/dist/fixture-support.js +52 -4
- package/dist/governance.d.ts +133 -0
- package/dist/governance.js +285 -0
- package/dist/graph/build.d.ts +2 -2
- package/dist/graph/context-query-contracts.d.ts +1 -1
- package/dist/graph/dsl.d.ts +1 -1
- package/dist/graph/query.d.ts +4 -4
- package/dist/graph/ranking.d.ts +1 -1
- package/dist/graph/schema.d.ts +1 -1
- package/dist/graph.d.ts +11 -11
- package/dist/guarantees/index.d.ts +425 -0
- package/dist/guarantees/index.js +1146 -0
- package/dist/hosting/apps.d.ts +12 -0
- package/dist/hosting/apps.js +107 -0
- package/dist/hosting/builtins.d.ts +25 -0
- package/dist/hosting/builtins.js +602 -0
- package/dist/hosting/contracts.d.ts +208 -0
- package/dist/hosting/contracts.js +0 -0
- package/dist/hosting/graph.d.ts +195 -0
- package/dist/hosting/graph.js +1092 -0
- package/dist/hosting/index.d.ts +4 -0
- package/dist/hosting/index.js +4 -0
- package/dist/index.d.ts +88 -67
- package/dist/index.js +142 -14
- package/dist/local-dev/managed-dev.d.ts +85 -0
- package/dist/local-dev/managed-dev.js +368 -0
- package/dist/managed-dependencies.d.ts +9 -0
- package/dist/managed-dependencies.js +10 -9
- package/dist/market-client.d.ts +327 -9
- package/dist/market-client.js +464 -20
- package/dist/model-registry.d.ts +1 -1
- package/dist/model-registry.js +19 -19
- package/dist/operations/agent-tools.d.ts +2 -11
- package/dist/operations/agent-tools.js +2 -14
- package/dist/operations/providers/default.d.ts +1 -1
- package/dist/operations/providers/default.js +20 -37
- package/dist/operations/repository-operations.d.ts +26 -2
- package/dist/operations/repository-operations.js +159 -1
- package/dist/operations/runtime.d.ts +3 -3
- package/dist/operations/services/bootstrap-runner.d.ts +4 -2
- package/dist/operations/services/bootstrap-runner.js +22 -2
- package/dist/operations/services/build-warning-policy.d.ts +34 -0
- package/dist/operations/services/build-warning-policy.js +81 -82
- package/dist/operations/services/commit-message-provider.js +4 -4
- package/dist/operations/services/config-runtime.d.ts +83 -24
- package/dist/operations/services/config-runtime.js +449 -130
- package/dist/operations/services/deploy.d.ts +106 -624
- package/dist/operations/services/deploy.js +746 -263
- package/dist/operations/services/deployment-readiness.d.ts +30 -0
- package/dist/operations/services/deployment-readiness.js +206 -0
- package/dist/operations/services/git-remote-policy.js +12 -4
- package/dist/operations/services/git-runner.d.ts +66 -0
- package/dist/operations/services/git-runner.js +479 -0
- package/dist/operations/services/git-workflow.d.ts +45 -6
- package/dist/operations/services/git-workflow.js +251 -23
- package/dist/operations/services/github-actions-verification.d.ts +4 -1
- package/dist/operations/services/github-actions-verification.js +12 -3
- package/dist/operations/services/github-api.js +22 -6
- package/dist/operations/services/github-automation.d.ts +4 -4
- package/dist/operations/services/github-automation.js +19 -21
- package/dist/operations/services/github-credentials.d.ts +13 -0
- package/dist/operations/services/github-credentials.js +59 -0
- package/dist/operations/services/hosted-service-checks.d.ts +81 -0
- package/dist/operations/services/hosted-service-checks.js +478 -0
- package/dist/operations/services/hosting-audit.d.ts +2 -2
- package/dist/operations/services/hosting-audit.js +7 -7
- package/dist/operations/services/hub-launch.d.ts +1 -1
- package/dist/operations/services/hub-provider-launch.d.ts +5 -5
- package/dist/operations/services/hub-provider-launch.js +22 -17
- package/dist/operations/services/live-hosted-service-checks.d.ts +26 -0
- package/dist/operations/services/live-hosted-service-checks.js +463 -0
- package/dist/operations/services/local-dev.js +0 -1
- package/dist/operations/services/managed-host-security.d.ts +1 -1
- package/dist/operations/services/managed-host-security.js +1 -1
- package/dist/operations/services/managed-repositories.d.ts +37 -0
- package/dist/operations/services/managed-repositories.js +177 -0
- package/dist/operations/services/operations-runner-smoke.d.ts +31 -0
- package/dist/operations/services/operations-runner-smoke.js +198 -0
- package/dist/operations/services/package-adapters.d.ts +170 -0
- package/dist/operations/services/package-adapters.js +859 -0
- package/dist/operations/services/package-reference-policy.d.ts +13 -88
- package/dist/operations/services/package-reference-policy.js +96 -215
- package/dist/operations/services/project-host-operations.d.ts +4 -4
- package/dist/operations/services/project-platform.d.ts +57 -173
- package/dist/operations/services/project-platform.js +80 -111
- package/dist/operations/services/project-web-monitor.d.ts +2 -2
- package/dist/operations/services/project-web-monitor.js +122 -5
- package/dist/operations/services/railway-api.d.ts +117 -5
- package/dist/operations/services/railway-api.js +915 -93
- package/dist/operations/services/railway-deploy.d.ts +30 -112
- package/dist/operations/services/railway-deploy.js +521 -961
- package/dist/operations/services/release-history.js +3 -4
- package/dist/operations/services/release-proof-ledger.d.ts +13 -0
- package/dist/operations/services/release-proof-ledger.js +81 -0
- package/dist/operations/services/release-proof-planner.d.ts +48 -0
- package/dist/operations/services/release-proof-planner.js +195 -0
- package/dist/operations/services/release-proof-runner.d.ts +16 -0
- package/dist/operations/services/release-proof-runner.js +169 -0
- package/dist/operations/services/release-proof.d.ts +81 -0
- package/dist/operations/services/release-proof.js +79 -0
- package/dist/operations/services/repository-save-orchestrator.d.ts +8 -7
- package/dist/operations/services/repository-save-orchestrator.js +604 -212
- package/dist/operations/services/runtime-paths.d.ts +1 -3
- package/dist/operations/services/runtime-paths.js +0 -4
- package/dist/operations/services/runtime-tools.d.ts +1 -191
- package/dist/operations/services/runtime-tools.js +4 -443
- package/dist/operations/services/save-deploy-preflight.js +9 -1
- package/dist/operations/services/template-host-bindings.d.ts +2 -2
- package/dist/operations/services/template-host-bindings.js +3 -2
- package/dist/operations/services/template-registry.d.ts +6 -6
- package/dist/operations/services/template-registry.js +33 -14
- package/dist/operations/services/template-secret-sync.d.ts +3 -3
- package/dist/operations/services/verification-cache.d.ts +25 -0
- package/dist/operations/services/verification-cache.js +71 -0
- package/dist/operations/services/workflow-timing.d.ts +25 -0
- package/dist/operations/services/workflow-timing.js +79 -0
- package/dist/operations/services/workspace-dependency-mode.js +50 -5
- package/dist/operations/services/workspace-preflight.js +8 -8
- package/dist/operations/services/workspace-save-script.d.ts +4 -4
- package/dist/operations/services/workspace-save.d.ts +1 -0
- package/dist/operations/services/workspace-save.js +42 -19
- package/dist/operations/services/workspace-tools.js +42 -7
- package/dist/operations-registry.d.ts +1 -1
- package/dist/operations-registry.js +5 -6
- package/dist/operations-types.d.ts +1 -1
- package/dist/operations.d.ts +17 -11
- package/dist/operations.js +57 -3
- package/dist/platform/book-export.js +2 -0
- package/dist/platform/books-data.d.ts +1 -1
- package/dist/platform/config.d.ts +27 -0
- package/dist/platform/config.js +100 -0
- package/dist/platform/content-runtime-source.d.ts +54 -0
- package/dist/platform/content-runtime-source.js +169 -0
- package/dist/platform/contracts.d.ts +38 -2
- package/dist/platform/deploy-config.d.ts +1 -1
- package/dist/platform/deploy-config.js +80 -9
- package/dist/platform/deploy-runtime.d.ts +1 -1
- package/dist/platform/desired-state.d.ts +63 -0
- package/dist/platform/desired-state.js +1021 -0
- package/dist/platform/env.yaml +568 -45
- package/dist/platform/environment.d.ts +3 -2
- package/dist/platform/environment.js +122 -21
- package/dist/platform/local-content-materialization.d.ts +9 -0
- package/dist/platform/local-content-materialization.js +212 -0
- package/dist/platform/plugin.d.ts +13 -4
- package/dist/platform/plugins/runtime.d.ts +3 -3
- package/dist/platform/plugins/runtime.js +62 -1
- package/dist/platform/plugins.d.ts +6 -6
- package/dist/platform/published-content-pipeline.d.ts +3 -3
- package/dist/platform/published-content-pipeline.js +5 -1
- package/dist/platform/published-content.d.ts +4 -3
- package/dist/platform/site-config-schema.d.ts +1 -0
- package/dist/platform/site-config-schema.js +4 -1
- package/dist/platform/tenant/runtime-config.d.ts +152 -2
- package/dist/platform/tenant-config.d.ts +1 -1
- package/dist/platform/utils/site-config-schema.d.ts +154 -0
- package/dist/platform/utils/site-config-schema.js +400 -461
- package/dist/platform-operation-store.d.ts +1 -1
- package/dist/platform-operation-store.js +2 -2
- package/dist/platform-operations.js +1 -1
- package/dist/plugin-default.d.ts +1 -1
- package/dist/plugin-default.js +27 -12
- package/dist/project-import.d.ts +91 -0
- package/dist/project-import.js +257 -0
- package/dist/project-workflow.d.ts +1 -1
- package/dist/reconcile/bootstrap-systems.d.ts +2 -2
- package/dist/reconcile/bootstrap-systems.js +5 -5
- package/dist/reconcile/builtin-adapters.d.ts +7 -1
- package/dist/reconcile/builtin-adapters.js +3190 -429
- package/dist/reconcile/contracts.d.ts +23 -6
- package/dist/reconcile/desired-state.d.ts +2 -192
- package/dist/reconcile/desired-state.js +29 -38
- package/dist/reconcile/engine.d.ts +61 -395
- package/dist/reconcile/engine.js +229 -44
- package/dist/reconcile/index.d.ts +10 -8
- package/dist/reconcile/index.js +2 -0
- package/dist/reconcile/live-acceptance.d.ts +100 -0
- package/dist/reconcile/live-acceptance.js +2027 -0
- package/dist/reconcile/platform.d.ts +104 -0
- package/dist/reconcile/platform.js +100 -0
- package/dist/reconcile/providers/docker-private.d.ts +54 -0
- package/dist/reconcile/providers/docker-private.js +101 -0
- package/dist/reconcile/providers/github-private.d.ts +65 -0
- package/dist/reconcile/providers/github-private.js +119 -0
- package/dist/reconcile/providers/local-private.d.ts +28 -0
- package/dist/reconcile/providers/local-private.js +75 -0
- package/dist/reconcile/providers/railway-iac.d.ts +66 -0
- package/dist/reconcile/providers/railway-iac.js +275 -0
- package/dist/reconcile/providers/release-private.d.ts +92 -0
- package/dist/reconcile/providers/release-private.js +152 -0
- package/dist/reconcile/registry.d.ts +2 -2
- package/dist/reconcile/registry.js +16 -1
- package/dist/reconcile/state.d.ts +1 -1
- package/dist/reconcile/state.js +7 -44
- package/dist/reconcile/units.d.ts +1 -1
- package/dist/reconcile/units.js +9 -3
- package/dist/remote.d.ts +6 -6
- package/dist/scenes/artifacts.d.ts +16 -0
- package/dist/scenes/artifacts.js +61 -0
- package/dist/scenes/auth.d.ts +2 -0
- package/dist/scenes/auth.js +28 -0
- package/dist/scenes/base-url.d.ts +12 -0
- package/dist/scenes/base-url.js +123 -0
- package/dist/scenes/builtin-plugins.d.ts +2 -0
- package/dist/scenes/builtin-plugins.js +447 -0
- package/dist/scenes/checkpoints.d.ts +14 -0
- package/dist/scenes/checkpoints.js +33 -0
- package/dist/scenes/device-matrix.d.ts +2 -0
- package/dist/scenes/device-matrix.js +97 -0
- package/dist/scenes/devices.d.ts +11 -0
- package/dist/scenes/devices.js +22 -0
- package/dist/scenes/diagnostics.d.ts +5 -0
- package/dist/scenes/diagnostics.js +22 -0
- package/dist/scenes/diagram-providers.d.ts +2 -0
- package/dist/scenes/diagram-providers.js +181 -0
- package/dist/scenes/diagram-validation.d.ts +22 -0
- package/dist/scenes/diagram-validation.js +74 -0
- package/dist/scenes/environment.d.ts +2 -0
- package/dist/scenes/environment.js +65 -0
- package/dist/scenes/evidence-bundle.d.ts +5 -0
- package/dist/scenes/evidence-bundle.js +42 -0
- package/dist/scenes/evidence-report.d.ts +10 -0
- package/dist/scenes/evidence-report.js +73 -0
- package/dist/scenes/evidence.d.ts +16 -0
- package/dist/scenes/evidence.js +277 -0
- package/dist/scenes/index.d.ts +48 -0
- package/dist/scenes/index.js +312 -0
- package/dist/scenes/inspect.d.ts +9 -0
- package/dist/scenes/inspect.js +64 -0
- package/dist/scenes/loader.d.ts +3 -0
- package/dist/scenes/loader.js +38 -0
- package/dist/scenes/logs.d.ts +2 -0
- package/dist/scenes/logs.js +47 -0
- package/dist/scenes/operations.d.ts +3 -0
- package/dist/scenes/operations.js +128 -0
- package/dist/scenes/phase0.d.ts +9 -0
- package/dist/scenes/phase0.js +637 -0
- package/dist/scenes/planner.d.ts +12 -0
- package/dist/scenes/planner.js +166 -0
- package/dist/scenes/playwright-adapter.d.ts +2 -0
- package/dist/scenes/playwright-adapter.js +63 -0
- package/dist/scenes/plugins.d.ts +5 -0
- package/dist/scenes/plugins.js +115 -0
- package/dist/scenes/progress.d.ts +17 -0
- package/dist/scenes/progress.js +24 -0
- package/dist/scenes/publish-destinations.d.ts +12 -0
- package/dist/scenes/publish-destinations.js +99 -0
- package/dist/scenes/publish-plan-report.d.ts +10 -0
- package/dist/scenes/publish-plan-report.js +70 -0
- package/dist/scenes/publish-plan.d.ts +15 -0
- package/dist/scenes/publish-plan.js +248 -0
- package/dist/scenes/publish-redaction.d.ts +16 -0
- package/dist/scenes/publish-redaction.js +148 -0
- package/dist/scenes/publish-release-record.d.ts +13 -0
- package/dist/scenes/publish-release-record.js +34 -0
- package/dist/scenes/publish-report.d.ts +10 -0
- package/dist/scenes/publish-report.js +67 -0
- package/dist/scenes/publish.d.ts +16 -0
- package/dist/scenes/publish.js +298 -0
- package/dist/scenes/registry.d.ts +12 -0
- package/dist/scenes/registry.js +65 -0
- package/dist/scenes/remotion-adapter.d.ts +3 -0
- package/dist/scenes/remotion-adapter.js +94 -0
- package/dist/scenes/remotion-composition-registry.d.ts +2 -0
- package/dist/scenes/remotion-composition-registry.js +12 -0
- package/dist/scenes/remotion-compositions.d.ts +15 -0
- package/dist/scenes/remotion-compositions.js +464 -0
- package/dist/scenes/remotion-diagrams.d.ts +9 -0
- package/dist/scenes/remotion-diagrams.js +188 -0
- package/dist/scenes/remotion-input.d.ts +13 -0
- package/dist/scenes/remotion-input.js +291 -0
- package/dist/scenes/remotion-visuals.d.ts +29 -0
- package/dist/scenes/remotion-visuals.js +198 -0
- package/dist/scenes/render-media-assets.d.ts +9 -0
- package/dist/scenes/render-media-assets.js +117 -0
- package/dist/scenes/render-report.d.ts +10 -0
- package/dist/scenes/render-report.js +27 -0
- package/dist/scenes/render.d.ts +2 -0
- package/dist/scenes/render.js +218 -0
- package/dist/scenes/reporter.d.ts +3 -0
- package/dist/scenes/reporter.js +101 -0
- package/dist/scenes/resume.d.ts +2 -0
- package/dist/scenes/resume.js +79 -0
- package/dist/scenes/runner.d.ts +2 -0
- package/dist/scenes/runner.js +674 -0
- package/dist/scenes/schema.d.ts +6 -0
- package/dist/scenes/schema.js +994 -0
- package/dist/scenes/seed.d.ts +2 -0
- package/dist/scenes/seed.js +83 -0
- package/dist/scenes/segments.d.ts +15 -0
- package/dist/scenes/segments.js +79 -0
- package/dist/scenes/selectors.d.ts +3 -0
- package/dist/scenes/selectors.js +21 -0
- package/dist/scenes/timeline.d.ts +11 -0
- package/dist/scenes/timeline.js +26 -0
- package/dist/scenes/timeouts.d.ts +6 -0
- package/dist/scenes/timeouts.js +17 -0
- package/dist/scenes/training-captions.d.ts +14 -0
- package/dist/scenes/training-captions.js +98 -0
- package/dist/scenes/training-report.d.ts +10 -0
- package/dist/scenes/training-report.js +78 -0
- package/dist/scenes/training-transcript.d.ts +24 -0
- package/dist/scenes/training-transcript.js +204 -0
- package/dist/scenes/training.d.ts +10 -0
- package/dist/scenes/training.js +134 -0
- package/dist/scenes/types.d.ts +1872 -0
- package/dist/scenes/types.js +8 -0
- package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
- package/dist/scenes/visual-audit-contact-sheets.js +119 -0
- package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
- package/dist/scenes/visual-audit-fixtures.js +210 -0
- package/dist/scenes/visual-audit-report.d.ts +11 -0
- package/dist/scenes/visual-audit-report.js +85 -0
- package/dist/scenes/visual-audit-review.d.ts +23 -0
- package/dist/scenes/visual-audit-review.js +829 -0
- package/dist/scenes/visual-audit-routes.d.ts +13 -0
- package/dist/scenes/visual-audit-routes.js +308 -0
- package/dist/scenes/visual-audit.d.ts +3 -0
- package/dist/scenes/visual-audit.js +596 -0
- package/dist/scripts/build-dist.js +154 -40
- package/dist/scripts/check-build-warnings.js +42 -53
- package/dist/scripts/cleanup-markdown.js +1 -1
- package/dist/scripts/cli-test-fixtures.js +24 -28
- package/dist/scripts/deployment-readiness.js +20 -0
- package/dist/scripts/generate-treedx-openapi-types.js +186 -0
- package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
- package/dist/scripts/operations-runner-smoke.js +16 -0
- package/dist/scripts/package-tools.js +12 -1
- package/dist/scripts/prepare.js +3 -7
- package/dist/scripts/release-verify.js +6 -6
- package/dist/scripts/run-fixture-astro-command.js +1 -1
- package/dist/scripts/template-catalog.test.js +68 -82
- package/dist/scripts/tenant-dev.js +0 -10
- package/dist/scripts/tenant-workflow-action.js +10 -1
- package/dist/scripts/test-cloudflare-local.js +1 -1
- package/dist/scripts/test-scaffold.js +0 -1
- package/dist/scripts/test-smoke.js +3 -3
- package/dist/scripts/treeseed-build-dist.js +4 -7
- package/dist/scripts/treeseed-release-verify.js +1 -1
- package/dist/scripts/verify-driver.js +30 -21
- package/dist/scripts/workflow-commands.test.js +18 -27
- package/dist/scripts/workspace-command-e2e.js +1 -1
- package/dist/scripts/workspace-lint.js +6 -0
- package/dist/scripts/workspace-release-test.js +90 -1
- package/dist/scripts/workspace-test.js +6 -0
- package/dist/sdk-dispatch.d.ts +1 -1
- package/dist/sdk-dispatch.js +0 -16
- package/dist/sdk-fields.d.ts +1 -1
- package/dist/sdk-filters.d.ts +1 -1
- package/dist/sdk-types.d.ts +1352 -116
- package/dist/sdk-types.js +413 -2
- package/dist/sdk.d.ts +106 -100
- package/dist/sdk.js +211 -51
- package/dist/secrets-capability.d.ts +421 -0
- package/dist/secrets-capability.js +530 -0
- package/dist/seeds/normalize.js +1 -0
- package/dist/seeds/planner.js +38 -0
- package/dist/seeds/schema.js +293 -4
- package/dist/seeds/types.d.ts +60 -0
- package/dist/seeds/types.js +9 -1
- package/dist/service-credentials.d.ts +54 -0
- package/dist/service-credentials.js +112 -0
- package/dist/stores/cursor-store.d.ts +2 -2
- package/dist/stores/envelopes.d.ts +1 -1
- package/dist/stores/helpers.d.ts +1 -1
- package/dist/stores/lease-store.d.ts +2 -2
- package/dist/stores/message-store.d.ts +2 -2
- package/dist/stores/operational-store.d.ts +3 -26
- package/dist/stores/operational-store.js +0 -225
- package/dist/stores/project-workflow-store.d.ts +2 -2
- package/dist/stores/run-store.d.ts +2 -3
- package/dist/stores/run-store.js +0 -98
- package/dist/stores/subscription-store.d.ts +2 -3
- package/dist/stores/subscription-store.js +0 -100
- package/dist/template-catalog.d.ts +1 -1
- package/dist/template-launch-requirements.d.ts +2 -2
- package/dist/template-launch-requirements.js +9 -0
- package/dist/template-launch-ui.d.ts +2 -2
- package/dist/treedx/adapters.d.ts +6 -0
- package/dist/treedx/adapters.js +36 -0
- package/dist/treedx/client.d.ts +222 -0
- package/dist/treedx/client.js +871 -0
- package/dist/treedx/errors.d.ts +13 -0
- package/dist/treedx/errors.js +17 -0
- package/dist/treedx/federated-client.d.ts +27 -0
- package/dist/treedx/federated-client.js +158 -0
- package/dist/treedx/generated/openapi-types.d.ts +3558 -0
- package/dist/treedx/generated/openapi-types.js +0 -0
- package/dist/treedx/graph-adapter.d.ts +33 -0
- package/dist/treedx/graph-adapter.js +156 -0
- package/dist/treedx/index.d.ts +14 -0
- package/dist/treedx/index.js +48 -0
- package/dist/treedx/market-integration.d.ts +27 -0
- package/dist/treedx/market-integration.js +131 -0
- package/dist/treedx/ports.d.ts +166 -0
- package/dist/treedx/ports.js +231 -0
- package/dist/treedx/query-adapter.d.ts +19 -0
- package/dist/treedx/query-adapter.js +62 -0
- package/dist/treedx/registry-client.d.ts +11 -0
- package/dist/treedx/registry-client.js +19 -0
- package/dist/treedx/repository-adapter.d.ts +45 -0
- package/dist/treedx/repository-adapter.js +319 -0
- package/dist/treedx/sdk-integration.d.ts +27 -0
- package/dist/treedx/sdk-integration.js +63 -0
- package/dist/treedx/types.d.ts +1084 -0
- package/dist/treedx/types.js +8 -0
- package/dist/treedx/workspace-adapter.d.ts +27 -0
- package/dist/treedx/workspace-adapter.js +65 -0
- package/dist/treedx-backends.d.ts +220 -0
- package/dist/treedx-backends.js +634 -0
- package/dist/treedx-client.d.ts +89 -0
- package/dist/treedx-client.js +184 -0
- package/dist/treeseed/services/compose.yml +2 -3
- package/dist/treeseed/template-catalog/catalog.fixture.json +27 -27
- package/dist/types/agents.d.ts +256 -0
- package/dist/types/agents.js +42 -1
- package/dist/verification.d.ts +1 -0
- package/dist/verification.js +143 -14
- package/dist/workflow/operations.d.ts +580 -523
- package/dist/workflow/operations.js +2084 -1279
- package/dist/workflow/policy.js +19 -7
- package/dist/workflow/runs.d.ts +9 -3
- package/dist/workflow/runs.js +66 -26
- package/dist/workflow/session.d.ts +4 -1
- package/dist/workflow/session.js +50 -10
- package/dist/workflow/worktrees.d.ts +6 -2
- package/dist/workflow/worktrees.js +98 -15
- package/dist/workflow-state.d.ts +17 -4
- package/dist/workflow-state.js +68 -41
- package/dist/workflow-support.d.ts +26 -17
- package/dist/workflow-support.js +84 -24
- package/dist/workflow.d.ts +51 -16
- package/dist/workflow.js +19 -7
- package/drizzle/d1/0000_treeseed_d1.sql +0 -18
- package/drizzle/market/0000_market_control_plane.sql +1793 -1499
- package/drizzle/market/0004_treedx_market_integration.sql +99 -0
- package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
- package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
- package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
- package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
- package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
- package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
- package/drizzle/market/0011_github_app_adapter.sql +47 -0
- package/drizzle/market/0012_workday_test_runs.sql +44 -0
- package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
- package/drizzle/market/0014_governance_pipeline.sql +189 -0
- package/package.json +106 -18
- package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
- package/templates/github/deploy-web.workflow.yml +49 -12
- package/dist/operations/services/mailpit-runtime.d.ts +0 -20
- package/dist/operations/services/mailpit-runtime.js +0 -67
- package/dist/operations/services/release-candidate.d.ts +0 -41
- package/dist/operations/services/release-candidate.js +0 -616
- package/dist/scripts/ensure-mailpit.js +0 -48
- package/dist/scripts/logs-mailpit.js +0 -2
- package/dist/scripts/run-ts.js +0 -45
- package/dist/scripts/stop-mailpit.js +0 -5
- package/dist/scripts/treeseed-run-ts.js +0 -45
|
@@ -1,12 +1,57 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { isAbsolute, resolve } from "node:path";
|
|
1
3
|
import { run, workspaceRoot } from "./workspace-tools.js";
|
|
2
|
-
import { currentBranch, gitStatusPorcelain, repoRoot } from "./workspace-save.js";
|
|
4
|
+
import { collectMergeConflictReport, currentBranch, formatMergeConflictReport, gitStatusPorcelain, repoRoot } from "./workspace-save.js";
|
|
3
5
|
import { ensureSshPushUrlForOrigin } from "./git-remote-policy.js";
|
|
6
|
+
import { runTreeseedGit } from "./git-runner.js";
|
|
4
7
|
import { createTreeseedManagedToolEnv, resolveTreeseedToolBinary } from "../../managed-dependencies.js";
|
|
5
8
|
const STAGING_BRANCH = "staging";
|
|
6
9
|
const PRODUCTION_BRANCH = "main";
|
|
7
10
|
const RESERVED_BRANCHES = /* @__PURE__ */ new Set([STAGING_BRANCH, PRODUCTION_BRANCH]);
|
|
11
|
+
function gitMode(args) {
|
|
12
|
+
const command = args[0] ?? "";
|
|
13
|
+
return (/* @__PURE__ */ new Set([
|
|
14
|
+
"add",
|
|
15
|
+
"checkout",
|
|
16
|
+
"commit",
|
|
17
|
+
"merge",
|
|
18
|
+
"pull",
|
|
19
|
+
"push",
|
|
20
|
+
"rebase",
|
|
21
|
+
"reset",
|
|
22
|
+
"restore",
|
|
23
|
+
"switch",
|
|
24
|
+
"tag",
|
|
25
|
+
"update-index",
|
|
26
|
+
"worktree"
|
|
27
|
+
])).has(command) ? "mutate" : "read";
|
|
28
|
+
}
|
|
8
29
|
function runGit(args, { cwd, capture = false } = {}) {
|
|
9
|
-
|
|
30
|
+
const result = runTreeseedGit(args, {
|
|
31
|
+
cwd: cwd ?? workspaceRoot(),
|
|
32
|
+
mode: gitMode(args),
|
|
33
|
+
allowFailure: false
|
|
34
|
+
});
|
|
35
|
+
return capture ? result.stdout : result.stdout;
|
|
36
|
+
}
|
|
37
|
+
function runGitAllowFailure(args, { cwd }) {
|
|
38
|
+
return runTreeseedGit(args, {
|
|
39
|
+
cwd,
|
|
40
|
+
mode: gitMode(args),
|
|
41
|
+
allowFailure: true
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function abortInProgressMerge(repoDir) {
|
|
45
|
+
const mergeHead = runGitAllowFailure(["rev-parse", "--git-path", "MERGE_HEAD"], { cwd: repoDir }).stdout.trim();
|
|
46
|
+
const mergeHeadPath = mergeHead && (isAbsolute(mergeHead) ? mergeHead : resolve(repoDir, mergeHead));
|
|
47
|
+
if (!mergeHeadPath || !existsSync(mergeHeadPath) && conflictedFiles(repoDir).length === 0) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const abort = runGitAllowFailure(["merge", "--abort"], { cwd: repoDir });
|
|
51
|
+
if (abort.status === 0) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
return runGitAllowFailure(["reset", "--merge"], { cwd: repoDir }).status === 0;
|
|
10
55
|
}
|
|
11
56
|
function ensureWritableOrigin(repoDir) {
|
|
12
57
|
try {
|
|
@@ -26,6 +71,62 @@ function repoHasStagedChanges(repoDir) {
|
|
|
26
71
|
function conflictedFiles(repoDir) {
|
|
27
72
|
return runGit(["diff", "--name-only", "--diff-filter=U"], { cwd: repoDir, capture: true }).split("\n").map((line) => line.trim()).filter(Boolean);
|
|
28
73
|
}
|
|
74
|
+
function isGeneratedPackageMetadataFile(filePath) {
|
|
75
|
+
return filePath === "package.json" || filePath === "package-lock.json";
|
|
76
|
+
}
|
|
77
|
+
function isPackagePointerConflict(repoDir, filePath) {
|
|
78
|
+
if (!/^packages\/[^/]+$/u.test(filePath)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const stagedEntries = runGit(["ls-files", "-u", "--", filePath], { cwd: repoDir, capture: true }).split("\n").map((line) => line.trim()).filter(Boolean);
|
|
82
|
+
return stagedEntries.length > 0 && stagedEntries.every((line) => line.startsWith("160000 "));
|
|
83
|
+
}
|
|
84
|
+
function releaseSideConflictSha(repoDir, filePath) {
|
|
85
|
+
const stagedEntries = runGit(["ls-files", "-u", "--", filePath], { cwd: repoDir, capture: true }).split("\n").map((line) => line.trim()).filter(Boolean);
|
|
86
|
+
for (const entry of stagedEntries) {
|
|
87
|
+
const match = /^(\d+)\s+([0-9a-f]{40})\s+3\t(.+)$/u.exec(entry);
|
|
88
|
+
if (match && match[1] === "160000" && match[3] === filePath) {
|
|
89
|
+
return match[2];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
function materializeReleaseSideFile(repoDir, filePath) {
|
|
95
|
+
const content = runGit(["show", `:3:${filePath}`], { cwd: repoDir, capture: true });
|
|
96
|
+
writeFileSync(resolve(repoDir, filePath), content);
|
|
97
|
+
runGit(["add", "--", filePath], { cwd: repoDir });
|
|
98
|
+
}
|
|
99
|
+
function stageReleaseSidePackagePointer(repoDir, filePath) {
|
|
100
|
+
const sha = releaseSideConflictSha(repoDir, filePath);
|
|
101
|
+
if (!sha) {
|
|
102
|
+
throw new Error(`Unable to resolve release-side package pointer for ${filePath}.`);
|
|
103
|
+
}
|
|
104
|
+
runGit(["update-index", "--cacheinfo", "160000", sha, filePath], { cwd: repoDir });
|
|
105
|
+
}
|
|
106
|
+
function isReleaseSideOnlyTextConflict(repoDir, filePath) {
|
|
107
|
+
if (isGeneratedPackageMetadataFile(filePath) || isPackagePointerConflict(repoDir, filePath)) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
const content = readFileSync(resolve(repoDir, filePath), "utf8");
|
|
111
|
+
const conflictBlocks = content.match(/<<<<<<< [\s\S]*?>>>>>>> .+/gu) ?? [];
|
|
112
|
+
if (conflictBlocks.length === 0) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
return conflictBlocks.every((block) => {
|
|
116
|
+
const middle = block.indexOf("=======");
|
|
117
|
+
if (middle === -1) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
const ours = block.slice(block.indexOf("\n") + 1, middle).trim();
|
|
121
|
+
return ours.length === 0;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function isReleaseSidePreferredWorkflowConflict(filePath) {
|
|
125
|
+
return [
|
|
126
|
+
"src/operations/services/git-workflow.ts",
|
|
127
|
+
"src/workflow/operations.ts"
|
|
128
|
+
].includes(filePath);
|
|
129
|
+
}
|
|
29
130
|
function resolveGeneratedPackageMetadataConflicts(repoDir) {
|
|
30
131
|
const files = conflictedFiles(repoDir);
|
|
31
132
|
if (files.length === 0) {
|
|
@@ -37,8 +138,8 @@ function resolveGeneratedPackageMetadataConflicts(repoDir) {
|
|
|
37
138
|
allConflictsWereGeneratedMetadata: false
|
|
38
139
|
};
|
|
39
140
|
}
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
141
|
+
const allConflictsWereGeneratedMetadata = files.every((file) => isGeneratedPackageMetadataFile(file) || isPackagePointerConflict(repoDir, file) || isReleaseSideOnlyTextConflict(repoDir, file) || isReleaseSidePreferredWorkflowConflict(file));
|
|
142
|
+
if (!allConflictsWereGeneratedMetadata) {
|
|
42
143
|
return {
|
|
43
144
|
resolved: false,
|
|
44
145
|
repoDir,
|
|
@@ -47,14 +148,27 @@ function resolveGeneratedPackageMetadataConflicts(repoDir) {
|
|
|
47
148
|
allConflictsWereGeneratedMetadata: false
|
|
48
149
|
};
|
|
49
150
|
}
|
|
50
|
-
|
|
51
|
-
|
|
151
|
+
for (const file of files) {
|
|
152
|
+
if (isGeneratedPackageMetadataFile(file)) {
|
|
153
|
+
materializeReleaseSideFile(repoDir, file);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (isReleaseSideOnlyTextConflict(repoDir, file)) {
|
|
157
|
+
materializeReleaseSideFile(repoDir, file);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (isReleaseSidePreferredWorkflowConflict(file)) {
|
|
161
|
+
materializeReleaseSideFile(repoDir, file);
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
stageReleaseSidePackagePointer(repoDir, file);
|
|
165
|
+
}
|
|
52
166
|
return {
|
|
53
167
|
resolved: true,
|
|
54
168
|
repoDir,
|
|
55
169
|
targetBranch: STAGING_BRANCH,
|
|
56
170
|
reconciledFiles: files,
|
|
57
|
-
allConflictsWereGeneratedMetadata
|
|
171
|
+
allConflictsWereGeneratedMetadata
|
|
58
172
|
};
|
|
59
173
|
}
|
|
60
174
|
function headCommit(repoDir, ref = "HEAD") {
|
|
@@ -164,6 +278,93 @@ function remoteBranchExists(repoDir, branchName) {
|
|
|
164
278
|
function fetchOrigin(repoDir) {
|
|
165
279
|
runGit(["fetch", "origin"], { cwd: repoDir, capture: true });
|
|
166
280
|
}
|
|
281
|
+
function remoteHeadCommit(repoDir, branchName) {
|
|
282
|
+
fetchOrigin(repoDir);
|
|
283
|
+
return runGit(["rev-parse", `origin/${branchName}`], { cwd: repoDir, capture: true }).trim();
|
|
284
|
+
}
|
|
285
|
+
function pushCommitToBranch(repoDir, commitSha, branchName, { forceWithLease = false } = {}) {
|
|
286
|
+
ensureWritableOrigin(repoDir);
|
|
287
|
+
const args = forceWithLease ? ["push", "--force-with-lease", "origin", `${commitSha}:refs/heads/${branchName}`] : ["push", "origin", `${commitSha}:refs/heads/${branchName}`];
|
|
288
|
+
runGit(args, { cwd: repoDir });
|
|
289
|
+
}
|
|
290
|
+
function mergeBranchDownIntoFeature(repoDir, input) {
|
|
291
|
+
const sourceBranch = input.sourceBranch ?? STAGING_BRANCH;
|
|
292
|
+
assertCleanWorktree(repoDir);
|
|
293
|
+
fetchOrigin(repoDir);
|
|
294
|
+
if (!branchExists(repoDir, input.featureBranch)) {
|
|
295
|
+
if (!remoteBranchExists(repoDir, input.featureBranch)) {
|
|
296
|
+
throw new Error(`Feature branch "${input.featureBranch}" does not exist locally or on origin.`);
|
|
297
|
+
}
|
|
298
|
+
runGit(["branch", input.featureBranch, `origin/${input.featureBranch}`], { cwd: repoDir });
|
|
299
|
+
}
|
|
300
|
+
checkoutBranch(repoDir, input.featureBranch);
|
|
301
|
+
const beforeHead = headCommit(repoDir);
|
|
302
|
+
const sourceHead = remoteBranchExists(repoDir, sourceBranch) ? remoteHeadCommit(repoDir, sourceBranch) : null;
|
|
303
|
+
if (!sourceHead) {
|
|
304
|
+
throw new Error(`Source branch "${sourceBranch}" does not exist on origin.`);
|
|
305
|
+
}
|
|
306
|
+
let generatedMetadataReconciliation = null;
|
|
307
|
+
try {
|
|
308
|
+
runGit(["merge", "--no-ff", `origin/${sourceBranch}`, "-m", input.message], { cwd: repoDir, capture: true });
|
|
309
|
+
} catch (error) {
|
|
310
|
+
const reconciliation = input.allowGeneratedMetadataAutoResolution === false ? { resolved: false } : resolveGeneratedPackageMetadataConflicts(repoDir);
|
|
311
|
+
if (!reconciliation.resolved) {
|
|
312
|
+
const report = collectMergeConflictReport(repoDir);
|
|
313
|
+
const conflictError = new Error(formatMergeConflictReport(report, repoDir, sourceBranch));
|
|
314
|
+
Object.assign(conflictError, {
|
|
315
|
+
cause: error,
|
|
316
|
+
mergeConflictReport: report,
|
|
317
|
+
code: "conflict_resolution_required"
|
|
318
|
+
});
|
|
319
|
+
throw conflictError;
|
|
320
|
+
}
|
|
321
|
+
generatedMetadataReconciliation = reconciliation;
|
|
322
|
+
if (repoHasStagedChanges(repoDir)) {
|
|
323
|
+
runGit(["commit", "-m", input.message], { cwd: repoDir });
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
const afterHead = headCommit(repoDir);
|
|
327
|
+
const merged = beforeHead !== afterHead;
|
|
328
|
+
if (merged) {
|
|
329
|
+
pushBranch(repoDir, input.featureBranch);
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
repoDir,
|
|
333
|
+
featureBranch: input.featureBranch,
|
|
334
|
+
sourceBranch,
|
|
335
|
+
beforeHead,
|
|
336
|
+
sourceHead,
|
|
337
|
+
afterHead,
|
|
338
|
+
merged,
|
|
339
|
+
pushed: merged,
|
|
340
|
+
generatedMetadataReconciliation
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function promoteCommitToBranchWithExpectedHead(repoDir, input) {
|
|
344
|
+
const targetBranch = input.targetBranch ?? STAGING_BRANCH;
|
|
345
|
+
fetchOrigin(repoDir);
|
|
346
|
+
const actualBefore = remoteBranchExists(repoDir, targetBranch) ? remoteHeadCommit(repoDir, targetBranch) : null;
|
|
347
|
+
if (actualBefore !== input.expectedBefore) {
|
|
348
|
+
throw new Error(`Refusing to promote ${targetBranch}; origin/${targetBranch} moved from ${input.expectedBefore ?? "(missing)"} to ${actualBefore ?? "(missing)"}.`);
|
|
349
|
+
}
|
|
350
|
+
ensureWritableOrigin(repoDir);
|
|
351
|
+
const lease = actualBefore ? `--force-with-lease=refs/heads/${targetBranch}:${actualBefore}` : "--force-with-lease";
|
|
352
|
+
runGit(["push", lease, "origin", `${input.commitSha}:refs/heads/${targetBranch}`], { cwd: repoDir });
|
|
353
|
+
fetchOrigin(repoDir);
|
|
354
|
+
const verifiedHead = remoteHeadCommit(repoDir, targetBranch);
|
|
355
|
+
if (verifiedHead !== input.commitSha) {
|
|
356
|
+
throw new Error(`Promotion verification failed for ${targetBranch}; expected ${input.commitSha}, observed ${verifiedHead}.`);
|
|
357
|
+
}
|
|
358
|
+
return {
|
|
359
|
+
repoDir,
|
|
360
|
+
targetBranch,
|
|
361
|
+
expectedBefore: input.expectedBefore,
|
|
362
|
+
actualBefore,
|
|
363
|
+
commitSha: input.commitSha,
|
|
364
|
+
pushed: true,
|
|
365
|
+
verified: true
|
|
366
|
+
};
|
|
367
|
+
}
|
|
167
368
|
function ensureLocalBranchTracking(repoDir, branchName) {
|
|
168
369
|
if (branchExists(repoDir, branchName)) {
|
|
169
370
|
return;
|
|
@@ -273,6 +474,27 @@ function pushBranch(repoDir, branchName, { setUpstream = false } = {}) {
|
|
|
273
474
|
const args = setUpstream ? ["push", "-u", "origin", branchName] : ["push", "origin", branchName];
|
|
274
475
|
runGit(args, { cwd: repoDir });
|
|
275
476
|
}
|
|
477
|
+
function taskTagSlug(branchName) {
|
|
478
|
+
return String(branchName ?? "").normalize("NFKD").replace(/[\u0300-\u036f]/gu, "").replace(/[^a-z0-9._-]+/giu, "-").toLowerCase().replace(/-+/gu, "-").replace(/^-|-$/gu, "") || "task";
|
|
479
|
+
}
|
|
480
|
+
function createDeprecatedTaskTag(repoDir, branchName, reason = "") {
|
|
481
|
+
const head = headCommit(repoDir, branchName);
|
|
482
|
+
const tagName = `deprecated/${taskTagSlug(branchName)}/${head.slice(0, 12)}`;
|
|
483
|
+
const message = [
|
|
484
|
+
`Deprecated task branch ${branchName}`,
|
|
485
|
+
String(reason ?? "").trim()
|
|
486
|
+
].filter(Boolean).join("\n\n");
|
|
487
|
+
runGit(["tag", "-a", tagName, head, "-m", message], { cwd: repoDir });
|
|
488
|
+
ensureWritableOrigin(repoDir);
|
|
489
|
+
runGit(["push", "origin", tagName], { cwd: repoDir });
|
|
490
|
+
return {
|
|
491
|
+
repoDir,
|
|
492
|
+
branchName,
|
|
493
|
+
tagName,
|
|
494
|
+
head,
|
|
495
|
+
pushed: true
|
|
496
|
+
};
|
|
497
|
+
}
|
|
276
498
|
function ensureRemoteBranchFromBase(repoDir, branchName, { baseBranch = PRODUCTION_BRANCH } = {}) {
|
|
277
499
|
fetchOrigin(repoDir);
|
|
278
500
|
if (remoteBranchExists(repoDir, branchName)) {
|
|
@@ -331,7 +553,15 @@ function squashMergeBranchIntoStaging(cwd, featureBranch, message, { pushTarget
|
|
|
331
553
|
} catch (error) {
|
|
332
554
|
const reconciliation = resolveGeneratedPackageMetadataConflicts(repoDir);
|
|
333
555
|
if (!reconciliation.resolved) {
|
|
334
|
-
|
|
556
|
+
const report = collectMergeConflictReport(repoDir);
|
|
557
|
+
const mergeAborted = abortInProgressMerge(repoDir);
|
|
558
|
+
const conflictError = new Error(formatMergeConflictReport(report, repoDir, STAGING_BRANCH));
|
|
559
|
+
Object.assign(conflictError, {
|
|
560
|
+
cause: error,
|
|
561
|
+
mergeAborted,
|
|
562
|
+
mergeConflictReport: report
|
|
563
|
+
});
|
|
564
|
+
throw conflictError;
|
|
335
565
|
}
|
|
336
566
|
if (reportGeneratedMetadataReconciliation) {
|
|
337
567
|
console.log(`Resolving generated package metadata reconciliation for ${reconciliation.reconciledFiles.join(", ")}.`);
|
|
@@ -407,18 +637,6 @@ function listTaskBranches(repoDir) {
|
|
|
407
637
|
};
|
|
408
638
|
});
|
|
409
639
|
}
|
|
410
|
-
function taskTagSlug(branchName) {
|
|
411
|
-
return String(branchName).trim().replaceAll("\\", "/").replace(/[^A-Za-z0-9._/-]+/g, "-").replace(/\/+/g, "-").replace(/^-+|-+$/g, "") || "task";
|
|
412
|
-
}
|
|
413
|
-
function createDeprecatedTaskTag(repoDir, branchName, message) {
|
|
414
|
-
const head = runGit(["rev-parse", branchName], { cwd: repoDir, capture: true }).trim();
|
|
415
|
-
const shortSha = head.slice(0, 12);
|
|
416
|
-
const tagName = `deprecated/${taskTagSlug(branchName)}/${shortSha}`;
|
|
417
|
-
runGit(["tag", "-a", tagName, head, "-m", message], { cwd: repoDir });
|
|
418
|
-
ensureWritableOrigin(repoDir);
|
|
419
|
-
runGit(["push", "origin", tagName], { cwd: repoDir, capture: true });
|
|
420
|
-
return { tagName, head };
|
|
421
|
-
}
|
|
422
640
|
function waitForStagingAutomation(repoDir) {
|
|
423
641
|
if (process.env.TREESEED_STAGE_WAIT_MODE === "skip") {
|
|
424
642
|
return { status: "skipped", reason: "disabled" };
|
|
@@ -456,16 +674,22 @@ function mergeStagingIntoMain(cwd = workspaceRoot()) {
|
|
|
456
674
|
sourceBranch: STAGING_BRANCH,
|
|
457
675
|
targetBranch: PRODUCTION_BRANCH,
|
|
458
676
|
message: `release: ${STAGING_BRANCH} -> ${PRODUCTION_BRANCH}`,
|
|
459
|
-
pushTarget: true
|
|
677
|
+
pushTarget: true,
|
|
678
|
+
allowUnrelatedHistories: false
|
|
460
679
|
});
|
|
461
680
|
}
|
|
462
|
-
function mergeBranchIntoTarget(cwd = workspaceRoot(), { sourceBranch, targetBranch, message, pushTarget = true, quietMerge = false } = {}) {
|
|
681
|
+
function mergeBranchIntoTarget(cwd = workspaceRoot(), { sourceBranch, targetBranch, message, pushTarget = true, quietMerge = false, allowUnrelatedHistories = false } = {}) {
|
|
463
682
|
const repoDir = prepareReleaseBranches(cwd);
|
|
464
683
|
checkoutBranch(repoDir, targetBranch);
|
|
465
684
|
if (remoteBranchExists(repoDir, targetBranch)) {
|
|
466
685
|
runGit(["merge", "--ff-only", `origin/${targetBranch}`], { cwd: repoDir });
|
|
467
686
|
}
|
|
468
|
-
|
|
687
|
+
const mergeArgs = ["merge", "--no-ff"];
|
|
688
|
+
if (allowUnrelatedHistories) {
|
|
689
|
+
mergeArgs.push("--allow-unrelated-histories");
|
|
690
|
+
}
|
|
691
|
+
mergeArgs.push(sourceBranch, "-m", message);
|
|
692
|
+
runGit(mergeArgs, { cwd: repoDir, capture: quietMerge });
|
|
469
693
|
pushBranch(repoDir, STAGING_BRANCH);
|
|
470
694
|
if (pushTarget) {
|
|
471
695
|
pushBranch(repoDir, targetBranch);
|
|
@@ -500,14 +724,18 @@ export {
|
|
|
500
724
|
inspectDetachedHeadRepair,
|
|
501
725
|
isTaskBranch,
|
|
502
726
|
listTaskBranches,
|
|
727
|
+
mergeBranchDownIntoFeature,
|
|
503
728
|
mergeBranchIntoTarget,
|
|
504
729
|
mergeCurrentBranchIntoStaging,
|
|
505
730
|
mergeStagingIntoMain,
|
|
506
731
|
prepareReleaseBranches,
|
|
732
|
+
promoteCommitToBranchWithExpectedHead,
|
|
507
733
|
pushBranch,
|
|
734
|
+
pushCommitToBranch,
|
|
508
735
|
pushHeadToBranch,
|
|
509
736
|
reattachDetachedHeadIfSafe,
|
|
510
737
|
remoteBranchExists,
|
|
738
|
+
remoteHeadCommit,
|
|
511
739
|
squashMergeBranchIntoStaging,
|
|
512
740
|
syncBranchWithOrigin,
|
|
513
741
|
taskTagSlug,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type GitHubApiClient, type GitHubWorkflowProgressEvent } from './github-api.
|
|
1
|
+
import { type GitHubApiClient, type GitHubWorkflowProgressEvent } from './github-api.js';
|
|
2
2
|
export type GitHubActionsWorkflowState = 'success' | 'failure' | 'pending' | 'missing' | 'not_pushed' | 'error';
|
|
3
3
|
export type GitHubActionsVerificationTarget = {
|
|
4
4
|
name: string;
|
|
@@ -8,6 +8,7 @@ export type GitHubActionsVerificationTarget = {
|
|
|
8
8
|
headSha: string | null;
|
|
9
9
|
workflows: string[];
|
|
10
10
|
kind?: 'root' | 'package';
|
|
11
|
+
missingIsFailure?: boolean;
|
|
11
12
|
};
|
|
12
13
|
export type GitHubActionsWorkflowGate = {
|
|
13
14
|
name: string;
|
|
@@ -68,6 +69,7 @@ export type GitHubActionsRepositoryInspection = {
|
|
|
68
69
|
state: GitHubActionsWorkflowState;
|
|
69
70
|
message: string | null;
|
|
70
71
|
workflows: GitHubActionsWorkflowRunInspection[];
|
|
72
|
+
missingIsFailure: boolean;
|
|
71
73
|
};
|
|
72
74
|
export type GitHubActionsVerificationFailure = {
|
|
73
75
|
type: 'repository' | 'workflow' | 'job';
|
|
@@ -135,6 +137,7 @@ export declare function waitForGitHubActionsGate(gate: GitHubActionsWorkflowGate
|
|
|
135
137
|
timeoutSeconds?: number;
|
|
136
138
|
pollSeconds?: number;
|
|
137
139
|
operation?: string;
|
|
140
|
+
env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
|
|
138
141
|
onProgress?: (message: string, stream?: 'stdout' | 'stderr') => void;
|
|
139
142
|
}): Promise<Record<string, unknown>>;
|
|
140
143
|
export {};
|
|
@@ -278,6 +278,9 @@ function collectFailures(repositories) {
|
|
|
278
278
|
failures.push(...workflow.failedJobs.map((job) => jobFailure(repo, workflow, job)));
|
|
279
279
|
continue;
|
|
280
280
|
}
|
|
281
|
+
if (workflow.state === "missing" && !repo.missingIsFailure) {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
281
284
|
if (workflow.state === "failure" || workflow.state === "missing" || workflow.state === "error") {
|
|
282
285
|
failures.push(workflowFailure(repo, workflow));
|
|
283
286
|
}
|
|
@@ -312,9 +315,11 @@ async function inspectTarget(client, target, options) {
|
|
|
312
315
|
remoteSynced: false,
|
|
313
316
|
state: "error",
|
|
314
317
|
message: "Repository, branch, or head SHA is unavailable.",
|
|
315
|
-
workflows: []
|
|
318
|
+
workflows: [],
|
|
319
|
+
missingIsFailure: target.missingIsFailure ?? true
|
|
316
320
|
};
|
|
317
321
|
}
|
|
322
|
+
const missingIsFailure = target.missingIsFailure ?? true;
|
|
318
323
|
try {
|
|
319
324
|
const remoteHeadSha = await resolveRemoteBranchHead(client, target.repository, target.branch);
|
|
320
325
|
if (remoteHeadSha !== target.headSha) {
|
|
@@ -329,6 +334,7 @@ async function inspectTarget(client, target, options) {
|
|
|
329
334
|
remoteSynced: false,
|
|
330
335
|
state: "not_pushed",
|
|
331
336
|
message: `Local HEAD ${target.headSha.slice(0, 12)} does not match origin/${target.branch} ${remoteHeadSha.slice(0, 12)}.`,
|
|
337
|
+
missingIsFailure,
|
|
332
338
|
workflows: target.workflows.map((workflow) => ({
|
|
333
339
|
workflow,
|
|
334
340
|
state: "not_pushed",
|
|
@@ -359,7 +365,8 @@ async function inspectTarget(client, target, options) {
|
|
|
359
365
|
remoteSynced: true,
|
|
360
366
|
state: aggregateWorkflowState(workflows.map((workflow) => workflow.state)),
|
|
361
367
|
message: null,
|
|
362
|
-
workflows
|
|
368
|
+
workflows,
|
|
369
|
+
missingIsFailure
|
|
363
370
|
};
|
|
364
371
|
} catch (error) {
|
|
365
372
|
return {
|
|
@@ -373,7 +380,8 @@ async function inspectTarget(client, target, options) {
|
|
|
373
380
|
remoteSynced: false,
|
|
374
381
|
state: "error",
|
|
375
382
|
message: error instanceof Error ? error.message : String(error),
|
|
376
|
-
workflows: []
|
|
383
|
+
workflows: [],
|
|
384
|
+
missingIsFailure
|
|
377
385
|
};
|
|
378
386
|
}
|
|
379
387
|
}
|
|
@@ -544,6 +552,7 @@ async function waitForGitHubActionsGate(gate, options = {}) {
|
|
|
544
552
|
dispatchIfMissing: gate.dispatchIfMissing ?? gate.workflow === "verify.yml",
|
|
545
553
|
dispatchAfterSeconds: gate.dispatchAfterSeconds ?? 75,
|
|
546
554
|
dispatchInputs: gate.dispatchInputs,
|
|
555
|
+
env: options.env,
|
|
547
556
|
onProgress: reportProgress
|
|
548
557
|
});
|
|
549
558
|
}
|
|
@@ -3,6 +3,7 @@ import { spawnSync } from "node:child_process";
|
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
4
|
import { Octokit } from "octokit";
|
|
5
5
|
import { createTreeseedManagedToolEnv, resolveTreeseedToolBinary } from "../../managed-dependencies.js";
|
|
6
|
+
import { resolveTreeseedGitHubToken } from "../../service-credentials.js";
|
|
6
7
|
const require2 = createRequire(import.meta.url);
|
|
7
8
|
const sodium = require2("libsodium-wrappers");
|
|
8
9
|
const DEFAULT_GITHUB_API_TIMEOUT_MS = 6e4;
|
|
@@ -15,7 +16,7 @@ function configuredEnvValue(env, key) {
|
|
|
15
16
|
return typeof value === "string" && value.trim() ? value.trim() : "";
|
|
16
17
|
}
|
|
17
18
|
function resolveGitHubApiToken(env = process.env) {
|
|
18
|
-
return
|
|
19
|
+
return resolveTreeseedGitHubToken(env);
|
|
19
20
|
}
|
|
20
21
|
function parseGitHubRepositorySlug(value) {
|
|
21
22
|
const normalized = String(value ?? "").trim().replace(/\.git$/u, "");
|
|
@@ -108,7 +109,7 @@ function createGitHubApiClient({
|
|
|
108
109
|
} = {}) {
|
|
109
110
|
const token = resolveGitHubApiToken(env);
|
|
110
111
|
if (!token) {
|
|
111
|
-
throw new Error("Configure
|
|
112
|
+
throw new Error("Configure TREESEED_GITHUB_TOKEN before using Treeseed GitHub automation.");
|
|
112
113
|
}
|
|
113
114
|
return new Octokit({
|
|
114
115
|
auth: token,
|
|
@@ -466,7 +467,7 @@ function upsertGitHubRepositoryVariableWithGhCli(repository, name, value, {
|
|
|
466
467
|
} = {}) {
|
|
467
468
|
const token = resolveGitHubApiToken(env);
|
|
468
469
|
if (!token) {
|
|
469
|
-
throw new Error("Configure
|
|
470
|
+
throw new Error("Configure TREESEED_GITHUB_TOKEN before using Treeseed GitHub automation.");
|
|
470
471
|
}
|
|
471
472
|
const { owner, name: repo } = typeof repository === "string" ? parseGitHubRepositorySlug(repository) : repository;
|
|
472
473
|
const ghEnv = {
|
|
@@ -742,6 +743,8 @@ async function waitForGitHubWorkflowRunCompletion(repository, {
|
|
|
742
743
|
const startedAt = Date.now();
|
|
743
744
|
let dispatchedMissingRun = false;
|
|
744
745
|
let lastProgress = null;
|
|
746
|
+
let monitorErrorStartedAt = null;
|
|
747
|
+
let lastMonitorError = null;
|
|
745
748
|
const emitProgress = (type, run = null, jobs = []) => {
|
|
746
749
|
const completedJobs = jobs.filter((job) => job.status === "completed");
|
|
747
750
|
const failedJobs = jobs.filter((job) => job.conclusion && job.conclusion !== "success" && job.conclusion !== "skipped");
|
|
@@ -773,6 +776,8 @@ async function waitForGitHubWorkflowRunCompletion(repository, {
|
|
|
773
776
|
workflow_id: workflow,
|
|
774
777
|
per_page: 20
|
|
775
778
|
});
|
|
779
|
+
monitorErrorStartedAt = null;
|
|
780
|
+
lastMonitorError = null;
|
|
776
781
|
const match = listed.data.workflow_runs.map((run) => normalizeWorkflowRun(run)).find((run) => (!headSha || run.headSha === headSha) && (!branch || run.headBranch === branch));
|
|
777
782
|
if (!match?.id) {
|
|
778
783
|
emitProgress("waiting");
|
|
@@ -794,7 +799,7 @@ async function waitForGitHubWorkflowRunCompletion(repository, {
|
|
|
794
799
|
continue;
|
|
795
800
|
}
|
|
796
801
|
for (; ; ) {
|
|
797
|
-
if (Date.now() - startedAt >= timeoutSeconds * 1e3) {
|
|
802
|
+
if (Date.now() - startedAt >= timeoutSeconds * 1e3 && lastProgress?.runId === match.id) {
|
|
798
803
|
break;
|
|
799
804
|
}
|
|
800
805
|
const current = await client.rest.actions.getWorkflowRun({
|
|
@@ -802,6 +807,8 @@ async function waitForGitHubWorkflowRunCompletion(repository, {
|
|
|
802
807
|
repo: name,
|
|
803
808
|
run_id: match.id
|
|
804
809
|
});
|
|
810
|
+
monitorErrorStartedAt = null;
|
|
811
|
+
lastMonitorError = null;
|
|
805
812
|
const normalized = normalizeWorkflowRun(current.data);
|
|
806
813
|
const progressJobs = await listWorkflowJobsForProgress(client, owner, name, match.id);
|
|
807
814
|
if (normalized.status === "completed") {
|
|
@@ -826,11 +833,20 @@ async function waitForGitHubWorkflowRunCompletion(repository, {
|
|
|
826
833
|
await sleep(pollSeconds * 1e3);
|
|
827
834
|
}
|
|
828
835
|
} catch (error) {
|
|
829
|
-
|
|
836
|
+
const normalizedError = normalizeGitHubApiError(error, `Unable to monitor GitHub workflow ${workflow} in ${owner}/${name}`);
|
|
837
|
+
lastMonitorError = normalizedError;
|
|
838
|
+
monitorErrorStartedAt ??= Date.now();
|
|
839
|
+
const toleratedMonitorErrorSeconds = Math.max(pollSeconds * 2, 120);
|
|
840
|
+
if (Date.now() - monitorErrorStartedAt < toleratedMonitorErrorSeconds * 1e3) {
|
|
841
|
+
await sleep(pollSeconds * 1e3);
|
|
842
|
+
continue;
|
|
843
|
+
}
|
|
844
|
+
throw normalizedError;
|
|
830
845
|
}
|
|
831
846
|
}
|
|
832
847
|
const lastState = lastProgress ? ` Last known state: run ${lastProgress.runId ?? "(not created)"} ${lastProgress.status ?? "waiting"}${lastProgress.conclusion ? `/${lastProgress.conclusion}` : ""}${lastProgress.url ? ` ${lastProgress.url}` : ""}.` : "";
|
|
833
|
-
|
|
848
|
+
const monitorErrorState = lastMonitorError ? ` Last monitor error: ${lastMonitorError.message}` : "";
|
|
849
|
+
throw new Error(`Timed out waiting for GitHub workflow ${workflow} in ${owner}/${name}.${lastState}${monitorErrorState}`);
|
|
834
850
|
}
|
|
835
851
|
async function ensureGitHubBranchFromBase(repository, branch, {
|
|
836
852
|
baseBranch = "main",
|
|
@@ -61,7 +61,7 @@ export declare function ensureGitHubBootstrapRepository(tenantRoot: string, { va
|
|
|
61
61
|
}>;
|
|
62
62
|
export declare function createGitHubRepository(input: any, { env }?: {
|
|
63
63
|
env?: NodeJS.ProcessEnv | undefined;
|
|
64
|
-
}): Promise<import("./github-api.
|
|
64
|
+
}): Promise<import("./github-api.js").GitHubRepositorySummary>;
|
|
65
65
|
export declare function initializeGitHubRepositoryWorkingTree(cwd: any, repository: any, { defaultBranch, createStaging, commitMessage, remoteName, push, forcePush, }?: {
|
|
66
66
|
defaultBranch?: string | undefined;
|
|
67
67
|
createStaging?: boolean | undefined;
|
|
@@ -209,7 +209,7 @@ export declare function ensureGitHubDeployAutomation(tenantRoot: any, { dryRun,
|
|
|
209
209
|
skipped?: undefined;
|
|
210
210
|
};
|
|
211
211
|
}>;
|
|
212
|
-
export declare function waitForGitHubWorkflowCompletion(tenantRoot: any, { repository, workflow, headSha, branch, timeoutSeconds, pollSeconds, dispatchIfMissing, dispatchAfterSeconds, dispatchInputs, onProgress, }?: {
|
|
212
|
+
export declare function waitForGitHubWorkflowCompletion(tenantRoot: any, { repository, workflow, headSha, branch, timeoutSeconds, pollSeconds, dispatchIfMissing, dispatchAfterSeconds, dispatchInputs, onProgress, env, }?: {
|
|
213
213
|
workflow?: string | undefined;
|
|
214
214
|
timeoutSeconds?: number | undefined;
|
|
215
215
|
pollSeconds?: number | undefined;
|
|
@@ -225,6 +225,6 @@ export declare function waitForGitHubWorkflowCompletion(tenantRoot: any, { repos
|
|
|
225
225
|
updatedAt: string | null;
|
|
226
226
|
conclusion: string | null;
|
|
227
227
|
url: string | null;
|
|
228
|
-
jobs: import("./github-api.
|
|
229
|
-
failedJobs: import("./github-api.
|
|
228
|
+
jobs: import("./github-api.js").GitHubWorkflowJobSummary[];
|
|
229
|
+
failedJobs: import("./github-api.js").GitHubWorkflowJobSummary[];
|
|
230
230
|
}>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, relative, resolve } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { runTreeseedGit } from "./git-runner.js";
|
|
4
4
|
import { resolveTreeseedEnvironmentRegistry } from "../../platform/environment.js";
|
|
5
5
|
import { packageRoot, loadCliDeployConfig } from "./runtime-tools.js";
|
|
6
6
|
import {
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
upsertGitHubRepositoryVariable,
|
|
19
19
|
waitForGitHubWorkflowRunCompletion
|
|
20
20
|
} from "./github-api.js";
|
|
21
|
+
import { resolveTreeseedGitHubToken } from "../../service-credentials.js";
|
|
21
22
|
function envOrNull(key) {
|
|
22
23
|
const value = process.env[key];
|
|
23
24
|
return typeof value === "string" && value.length > 0 ? value : null;
|
|
@@ -43,19 +44,24 @@ function parseGitHubRepositoryFromRemote(remoteUrl) {
|
|
|
43
44
|
return null;
|
|
44
45
|
}
|
|
45
46
|
function runGit(args, { cwd, allowFailure = false, capture = true } = {}) {
|
|
46
|
-
const
|
|
47
|
+
const mutating = /^(add|commit|checkout|switch|merge|tag|push|fetch|worktree|submodule|reset|clean|restore|branch)$/u.test(args[0] ?? "");
|
|
48
|
+
const result = runTreeseedGit(args, {
|
|
47
49
|
cwd,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
mode: mutating ? "mutate" : "read",
|
|
51
|
+
allowFailure
|
|
50
52
|
});
|
|
53
|
+
if (!capture && result.stdout.trim()) process.stdout.write(result.stdout);
|
|
54
|
+
if (!capture && result.stderr.trim()) process.stderr.write(result.stderr);
|
|
51
55
|
if (result.status !== 0 && !allowFailure) {
|
|
52
56
|
if (args[0] === "push" && !args.includes("--force")) {
|
|
53
57
|
const retryArgs = ["push", "--force", ...args.slice(1)];
|
|
54
|
-
const retry =
|
|
58
|
+
const retry = runTreeseedGit(retryArgs, {
|
|
55
59
|
cwd,
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
mode: "mutate",
|
|
61
|
+
allowFailure: true
|
|
58
62
|
});
|
|
63
|
+
if (!capture && retry.stdout.trim()) process.stdout.write(retry.stdout);
|
|
64
|
+
if (!capture && retry.stderr.trim()) process.stderr.write(retry.stderr);
|
|
59
65
|
if (retry.status === 0) return retry;
|
|
60
66
|
const retryDetail = retry.stderr?.trim() || retry.stdout?.trim();
|
|
61
67
|
throw new Error(`git ${retryArgs.join(" ")} failed${retryDetail ? `: ${retryDetail}` : ""}`);
|
|
@@ -65,14 +71,6 @@ function runGit(args, { cwd, allowFailure = false, capture = true } = {}) {
|
|
|
65
71
|
}
|
|
66
72
|
return result;
|
|
67
73
|
}
|
|
68
|
-
function sleepSeconds(seconds) {
|
|
69
|
-
if (!Number.isFinite(seconds) || seconds <= 0) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
spawnSync("sleep", [String(seconds)], {
|
|
73
|
-
stdio: "ignore"
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
74
|
function resolveGitHubRemoteUrls(owner, name) {
|
|
77
75
|
const normalizedOwner = slugifySegment(owner, "owner");
|
|
78
76
|
const normalizedName = slugifySegment(name, "repo");
|
|
@@ -185,8 +183,7 @@ async function ensureGitHubBootstrapRepository(tenantRoot, {
|
|
|
185
183
|
onProgress?.(`[local][github][repo] Preparing ${slug} from ${target.source}...`);
|
|
186
184
|
const client = createGitHubApiClient({
|
|
187
185
|
env: {
|
|
188
|
-
|
|
189
|
-
GITHUB_TOKEN: configuredValue(values, "GH_TOKEN") || configuredValue(values, "GITHUB_TOKEN")
|
|
186
|
+
TREESEED_GITHUB_TOKEN: resolveTreeseedGitHubToken(values)
|
|
190
187
|
}
|
|
191
188
|
});
|
|
192
189
|
const existing = await maybeGetGitHubRepository({ owner: target.owner, name: target.name }, { client });
|
|
@@ -295,7 +292,7 @@ function renderTenantWorkflowActionCommand() {
|
|
|
295
292
|
'if [[ -n "${TREESEED_WORKFLOW_PROJECT:-}" ]]; then EXTRA_ARGS+=(--project-id "${TREESEED_WORKFLOW_PROJECT}"); fi',
|
|
296
293
|
'if [[ -n "${TREESEED_WORKFLOW_PREVIEW_ID:-}" ]]; then EXTRA_ARGS+=(--preview-id "${TREESEED_WORKFLOW_PREVIEW_ID}"); fi',
|
|
297
294
|
"if test -f ./packages/sdk/scripts/tenant-workflow-action.ts; then",
|
|
298
|
-
'
|
|
295
|
+
' tsx ./packages/sdk/scripts/tenant-workflow-action.ts --action "${TREESEED_WORKFLOW_ACTION}" --environment "${TREESEED_WORKFLOW_ENVIRONMENT}" "${EXTRA_ARGS[@]}"',
|
|
299
296
|
"elif test -f ./node_modules/@treeseed/sdk/dist/scripts/tenant-workflow-action.js; then",
|
|
300
297
|
' node ./node_modules/@treeseed/sdk/dist/scripts/tenant-workflow-action.js --action "${TREESEED_WORKFLOW_ACTION}" --environment "${TREESEED_WORKFLOW_ENVIRONMENT}" "${EXTRA_ARGS[@]}"',
|
|
301
298
|
"else",
|
|
@@ -358,7 +355,7 @@ function ensureStandardizedGitHubWorkflows(tenantRoot) {
|
|
|
358
355
|
const deployConfig = loadCliDeployConfig(tenantRoot);
|
|
359
356
|
const deploy = ensureDeployWorkflow(tenantRoot);
|
|
360
357
|
const workflows = [deploy, ...deploy.additionalWorkflows ?? []];
|
|
361
|
-
if ((deployConfig.hosting?.kind ?? "self_hosted_project") === "
|
|
358
|
+
if ((deployConfig.hosting?.kind ?? "self_hosted_project") === "treeseed_control_plane") {
|
|
362
359
|
workflows.push(ensureHostedProjectWorkflow(tenantRoot));
|
|
363
360
|
}
|
|
364
361
|
return workflows;
|
|
@@ -477,11 +474,12 @@ async function waitForGitHubWorkflowCompletion(tenantRoot, {
|
|
|
477
474
|
dispatchIfMissing = false,
|
|
478
475
|
dispatchAfterSeconds,
|
|
479
476
|
dispatchInputs,
|
|
480
|
-
onProgress
|
|
477
|
+
onProgress,
|
|
478
|
+
env
|
|
481
479
|
} = {}) {
|
|
482
480
|
const repo = repository ?? resolveGitHubRepositorySlug(tenantRoot);
|
|
483
481
|
return await waitForGitHubWorkflowRunCompletion(repo, {
|
|
484
|
-
client: createGitHubApiClient(),
|
|
482
|
+
client: createGitHubApiClient({ env }),
|
|
485
483
|
workflow,
|
|
486
484
|
headSha,
|
|
487
485
|
branch,
|