@stacksjs/ts-cloud 0.7.14 → 0.7.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +457 -457
- package/dist/{chunk-9ra8b9b4.js → chunk-296n8hvt.js} +2 -2
- package/dist/{chunk-vsgkcpqw.js → chunk-49nmy775.js} +6 -8
- package/dist/{chunk-fy85hcfy.js → chunk-d1370frz.js} +15 -14
- package/dist/{chunk-jg4f2ybx.js → chunk-hb06vk29.js} +44 -18
- package/dist/{chunk-m03vddvr.js → chunk-qgnyzfmx.js} +1 -1
- package/dist/deploy/index.js +6 -4
- package/dist/deploy/management-dashboard.d.ts +9 -1
- package/dist/deploy/site-target.d.ts +17 -0
- package/dist/drivers/index.js +2 -2
- package/dist/drivers/shared/releases.d.ts +12 -0
- package/dist/drivers/shared/rpx-gateway.d.ts +8 -0
- package/dist/index.js +6 -4
- package/dist/ui/index.html +3 -3
- package/dist/ui/server/actions.html +3 -3
- package/dist/ui/server/backups.html +3 -3
- package/dist/ui/server/database.html +3 -3
- package/dist/ui/server/deployments.html +3 -3
- package/dist/ui/server/firewall.html +3 -3
- package/dist/ui/server/logs.html +3 -3
- package/dist/ui/server/services.html +3 -3
- package/dist/ui/server/sites.html +3 -3
- package/dist/ui/server/ssh-keys.html +3 -3
- package/dist/ui/server/terminal.html +3 -3
- package/dist/ui/server/workers.html +3 -3
- package/dist/ui/serverless/alarms.html +3 -3
- package/dist/ui/serverless/assets.html +3 -3
- package/dist/ui/serverless/data.html +3 -3
- package/dist/ui/serverless/deployments.html +3 -3
- package/dist/ui/serverless/functions.html +3 -3
- package/dist/ui/serverless/logs.html +3 -3
- package/dist/ui/serverless/queues.html +3 -3
- package/dist/ui/serverless/scheduler.html +3 -3
- package/dist/ui/serverless/secrets.html +3 -3
- package/dist/ui/serverless/traces.html +3 -3
- package/dist/ui/serverless.html +3 -3
- package/package.json +3 -3
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildAndPushServerlessImage
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-qgnyzfmx.js";
|
|
4
4
|
import"./chunk-hsk6fe6x.js";
|
|
5
|
-
import"./chunk-
|
|
5
|
+
import"./chunk-49nmy775.js";
|
|
6
6
|
import"./chunk-arsh1g5h.js";
|
|
7
7
|
import"./chunk-v0bahtg2.js";
|
|
8
8
|
export {
|
|
@@ -21948,13 +21948,11 @@ function hasManagementDashboardSite(config) {
|
|
|
21948
21948
|
if (!site)
|
|
21949
21949
|
return false;
|
|
21950
21950
|
const root = site.root ?? "";
|
|
21951
|
-
return name
|
|
21951
|
+
return isManagementDashboardSiteName(name) || root === "ui/dist" || root.endsWith("/ui/dist") || root.endsWith("/dist/ui");
|
|
21952
21952
|
});
|
|
21953
21953
|
}
|
|
21954
21954
|
var MANAGEMENT_DASHBOARD_SITE_PREFIX = "dashboard-";
|
|
21955
|
-
function
|
|
21956
|
-
if (primary)
|
|
21957
|
-
return "dashboard";
|
|
21955
|
+
function managementDashboardSiteName(domain) {
|
|
21958
21956
|
return MANAGEMENT_DASHBOARD_SITE_PREFIX + domain.replace(/^dashboard\./, "").replace(/\./g, "-");
|
|
21959
21957
|
}
|
|
21960
21958
|
function isManagementDashboardSiteName(name) {
|
|
@@ -21980,11 +21978,11 @@ function resolveManagementDashboardSites(config, environment, opts) {
|
|
|
21980
21978
|
...build,
|
|
21981
21979
|
...auth2
|
|
21982
21980
|
};
|
|
21983
|
-
return [{ name:
|
|
21981
|
+
return [{ name: managementDashboardSiteName(domain), site }];
|
|
21984
21982
|
}
|
|
21985
21983
|
const domains = resolveDashboardDomains(config, environment, opts.domain);
|
|
21986
|
-
return domains.map((domain
|
|
21987
|
-
name:
|
|
21984
|
+
return domains.map((domain) => ({
|
|
21985
|
+
name: managementDashboardSiteName(domain),
|
|
21988
21986
|
site: {
|
|
21989
21987
|
root: opts.uiRoot,
|
|
21990
21988
|
deploy: "server",
|
|
@@ -46154,4 +46152,4 @@ class ResourceManagementManager {
|
|
|
46154
46152
|
}
|
|
46155
46153
|
var resourceManagementManager = new ResourceManagementManager;
|
|
46156
46154
|
|
|
46157
|
-
export { detectServiceRegion, signRequest, signRequestAsync, createPresignedUrl, createPresignedUrlAsync, makeAWSRequest, makeAWSRequestOnce, makeAWSRequestAsync, parseXMLResponse, parseJSONResponse, clearSigningKeyCache, getSigningKeyCacheSize, isNodeCryptoAvailable, isWebCryptoAvailable, QueuePresets, RealtimePresets, detectDeploymentTargets, resolveDeploymentMode, deploymentCoexistenceError, resolveCloudProvider, TemplateBuilder, Pseudo, generateResourceName, generateLogicalId, getTimestamp, sanitizeName, resolveProjectStackName, resolveSiteStackName, resolveSiteResourceName, resolveSiteBucketName, resolveStorageBucketName, resolveDeployBucketName, resolveServerlessAppStackName, resolveServerlessArtifactBucketName, resolveServerlessAssetBucketName, DependencyGraph, analyzeStackDiff, formatDiff, Storage, Registry, CDN, DNS, Security, Compute, Network, FileSystem, Email, exports_incoming_call, Phone, Queue, JobLoader, StacksIntegration, exports_send, SMS, AI, Database, Cache, Permissions, ApiGateway, Messaging, Workflow, Monitoring, Auth, Deployment, AssetHasher, Secrets, ParameterStore, Search, Redirects, Communication, Fn2, Arn, AWS_PSEUDO_PARAMETERS, CloudFormationBuilder, buildCloudFormationTemplate, createStaticSitePreset, createNodeJsServerPreset, createNodeJsServerlessPreset, createServerlessNodePreset, createFullStackAppPreset, createApiBackendPreset, createWordPressPreset, createJamstackPreset, createMicroservicesPreset, createRealtimeAppPreset, createDataPipelinePreset, createMLApiPreset, createTraditionalWebAppPreset, createLaravelPreset, createServerlessLaravelPreset, createDashboardSite, resolveDashboardDomain, resolveDashboardDomains, hasManagementDashboardSite, MANAGEMENT_DASHBOARD_SITE_PREFIX, isManagementDashboardSiteName, resolveManagementDashboardSites, resolveManagementDashboardSite, extendPreset, composePresets, createPreset, mergeInfrastructure, withMonitoring, withSecurity, withDatabase, withCache, withCDN, withQueue, fromEnvironment, fromSharedCredentials, fromEC2Metadata, fromECSMetadata, fromWebIdentity, getCredentials, createCredentialProvider, resolveCredentials, resolveRegion, getAccountId, S3Error, createS3Client, CloudError, ConfigurationError, CredentialError, DeploymentError, ValidationError, AWSAPIError, ErrorCodes, getErrorDetails, createError, DebugLogger, validateConfiguration, detectMisconfigurations, validateCredentials, checkIAMPermissions, getRequiredPermissions, suggestIAMPolicy, DEFAULT_SERVICE_LIMITS, checkServiceQuotas, getQuotaUsageSummary, suggestQuotaIncrease, FileCache, TemplateCache, templateCache, hashFile, hashString, hashBuffer, hashDirectory, hashManifest, quickHash, findChangedFiles, HashCache, parallel, batch, parallelMap, parallelWithRetry, sequence, withTimeout, RateLimiter, chunk, processInChunks, diffTemplates, getDiffSummary, requiresReplacement, categorizeChanges, getDeploymentStrategy, getDiffStats, cloud_config_schema_default, validateAgainstSchema, defaultLocalConfig, getLocalConfig, isLocalDevelopment, getLocalEndpoint, getLocalCredentials, getLocalEnvVars, MockCloudFormation, MockS3, MockDynamoDB, createMockAWS, PreviewEnvironmentManager, previewManager, generatePreviewWorkflow, generateCleanupWorkflow, generateCostReportWorkflow, PreviewNotificationService, previewNotifications, formatTable, formatTree, formatProgressBar, formatBytes, formatDuration, formatList, formatKeyValue, ProgressBar, MultiStepProgress, Spinner, TaskList, suggestCommand, formatSuggestion, isLikelyTypo, getContextualHelp, searchCommands, autocomplete, suggestFlags, formatFlagSuggestions, getCommandUsage, validateCommand, REPL, REPLContext, REPLCommandBuilder, CommandHistory, formatHistory, formatHistoryStats, MultiRegionManager, multiRegionManager, CrossRegionReferenceManager, GlobalResourceManager, RegionPairManager, StackDependencyManager, crossRegionReferenceManager, globalResourceManager, regionPairManager, stackDependencyManager, AWS_REGIONS, getRegion, getAllRegions, getRegionsByLocation, getRegionsByCompliance, getRegionsByPricingTier, isValidRegion, getClosestRegion, suggestRegions, suggestRegionPairs, formatRegion, formatRegionList, getRegionStats, MultiAccountManager, OrganizationManager, multiAccountManager, organizationManager, RECOMMENDED_ACCOUNT_STRUCTURES, RECOMMENDED_SCPS, COMMON_CROSS_ACCOUNT_ROLES, getRecommendedStructure, generateCrossAccountRoleCF, validateAccountStructure, formatAccountStructure, generateDeploymentWorkflow, generateMultiEnvWorkflow, generatePRPreviewWorkflow, generateScheduledWorkflow, generateMatrixWorkflow, generateDeploymentPipeline, generateMultiEnvPipeline, generatePreviewPipeline, generateScheduledPipeline, generateManualPipeline, generateDeploymentConfig, generateMultiEnvConfig, generateScheduledConfig, generateApprovalConfig, generateParallelConfig, BackupManager, backupManager, DisasterRecoveryManager, drManager, AWSConfigManager, awsConfigManager, CloudTrailManager, cloudTrailManager, GuardDutyManager, guardDutyManager, SecurityHubManager, securityHubManager, BlueGreenManager, blueGreenManager, CanaryManager, canaryManager, ABTestManager, abTestManager, ProgressiveDeploymentManager, progressiveDeploymentManager, XRayManager, xrayManager, MetricsManager, metricsManager, LogsManager, logsManager, SyntheticsManager, syntheticsManager, MigrationManager, migrationManager, ReplicaManager, replicaManager, PerformanceManager, performanceManager, DatabaseUserManager, databaseUserManager, SecretsRotationManager, secretsRotationManager, SecretsManager, secretsManager, CertificateManager, certificateManager, SecurityScanningManager, securityScanningManager, ImageScanningManager, imageScanningManager, BuildOptimizationManager, buildOptimizationManager, ContainerRegistryManager, containerRegistryManager, ServiceMeshManager, serviceMeshManager, LambdaLayersManager, lambdaLayersManager, LambdaVersionsManager, lambdaVersionsManager, LambdaConcurrencyManager, lambdaConcurrencyManager, LambdaDestinationsManager, lambdaDestinationsManager, LambdaVPCManager, lambdaVPCManager, LambdaDLQManager, lambdaDLQManager, Route53RoutingManager, route53RoutingManager, DNSSECManager, dnssecManager, Route53ResolverManager, route53ResolverManager, BounceComplaintHandler, bounceComplaintHandler, EmailAnalyticsManager, emailAnalyticsManager, SenderReputationManager, senderReputationManager, EmailTemplateManager, emailTemplateManager, exports_advanced, exports_inbound, exports_advanced2, exports_advanced3, FIFOQueueManager, fifoQueueManager, DLQMonitoringManager, dlqMonitoringManager, BatchProcessingManager, batchProcessingManager, QueueManagementManager, queueManagementManager, createZip, generateBootstrap, runBuildHooks, sha256, artifactKey, packageServerlessApp, MANAGED_NODE_VERSIONS, resolveServerlessRuntime, resolveQueues, resolveQueueNames, composeServerlessAppTemplate, PHP_LAYER_EXTENSIONS, phpLayerPackages, phpLayerBuildStage, generatePhpLayerDockerfile, generateAppImageDockerfile, sharedRuntimeLoop, buildNodeRuntimeLayerZip, buildBunRuntimeLayerZip, resolveApp, eventToRequest, responseToResult, createHttpHandler, createQueueHandler, createCliHandler, createHandlers, generatePhpFpmConfig, phpRuntimeLayerAssets, laravelServerlessEnvDefaults, LARAVEL_SERVERLESS_BUILD_STEPS, buildPhpRuntimeLayerZip, PHP_DEFAULT_EXCLUDES, runPhpBuildHooks, collectPhpAppEntries, packagePhpApp, StaticSiteManager, staticSiteManager, StorageAdvancedManager, storageAdvancedManager, HealthCheckManager, healthCheckManager, NetworkSecurityManager, networkSecurityManager, ResourceManagementManager, resourceManagementManager };
|
|
46155
|
+
export { detectServiceRegion, signRequest, signRequestAsync, createPresignedUrl, createPresignedUrlAsync, makeAWSRequest, makeAWSRequestOnce, makeAWSRequestAsync, parseXMLResponse, parseJSONResponse, clearSigningKeyCache, getSigningKeyCacheSize, isNodeCryptoAvailable, isWebCryptoAvailable, QueuePresets, RealtimePresets, detectDeploymentTargets, resolveDeploymentMode, deploymentCoexistenceError, resolveCloudProvider, TemplateBuilder, Pseudo, generateResourceName, generateLogicalId, getTimestamp, sanitizeName, resolveProjectStackName, resolveSiteStackName, resolveSiteResourceName, resolveSiteBucketName, resolveStorageBucketName, resolveDeployBucketName, resolveServerlessAppStackName, resolveServerlessArtifactBucketName, resolveServerlessAssetBucketName, DependencyGraph, analyzeStackDiff, formatDiff, Storage, Registry, CDN, DNS, Security, Compute, Network, FileSystem, Email, exports_incoming_call, Phone, Queue, JobLoader, StacksIntegration, exports_send, SMS, AI, Database, Cache, Permissions, ApiGateway, Messaging, Workflow, Monitoring, Auth, Deployment, AssetHasher, Secrets, ParameterStore, Search, Redirects, Communication, Fn2, Arn, AWS_PSEUDO_PARAMETERS, CloudFormationBuilder, buildCloudFormationTemplate, createStaticSitePreset, createNodeJsServerPreset, createNodeJsServerlessPreset, createServerlessNodePreset, createFullStackAppPreset, createApiBackendPreset, createWordPressPreset, createJamstackPreset, createMicroservicesPreset, createRealtimeAppPreset, createDataPipelinePreset, createMLApiPreset, createTraditionalWebAppPreset, createLaravelPreset, createServerlessLaravelPreset, createDashboardSite, resolveDashboardDomain, resolveDashboardDomains, hasManagementDashboardSite, MANAGEMENT_DASHBOARD_SITE_PREFIX, managementDashboardSiteName, isManagementDashboardSiteName, resolveManagementDashboardSites, resolveManagementDashboardSite, extendPreset, composePresets, createPreset, mergeInfrastructure, withMonitoring, withSecurity, withDatabase, withCache, withCDN, withQueue, fromEnvironment, fromSharedCredentials, fromEC2Metadata, fromECSMetadata, fromWebIdentity, getCredentials, createCredentialProvider, resolveCredentials, resolveRegion, getAccountId, S3Error, createS3Client, CloudError, ConfigurationError, CredentialError, DeploymentError, ValidationError, AWSAPIError, ErrorCodes, getErrorDetails, createError, DebugLogger, validateConfiguration, detectMisconfigurations, validateCredentials, checkIAMPermissions, getRequiredPermissions, suggestIAMPolicy, DEFAULT_SERVICE_LIMITS, checkServiceQuotas, getQuotaUsageSummary, suggestQuotaIncrease, FileCache, TemplateCache, templateCache, hashFile, hashString, hashBuffer, hashDirectory, hashManifest, quickHash, findChangedFiles, HashCache, parallel, batch, parallelMap, parallelWithRetry, sequence, withTimeout, RateLimiter, chunk, processInChunks, diffTemplates, getDiffSummary, requiresReplacement, categorizeChanges, getDeploymentStrategy, getDiffStats, cloud_config_schema_default, validateAgainstSchema, defaultLocalConfig, getLocalConfig, isLocalDevelopment, getLocalEndpoint, getLocalCredentials, getLocalEnvVars, MockCloudFormation, MockS3, MockDynamoDB, createMockAWS, PreviewEnvironmentManager, previewManager, generatePreviewWorkflow, generateCleanupWorkflow, generateCostReportWorkflow, PreviewNotificationService, previewNotifications, formatTable, formatTree, formatProgressBar, formatBytes, formatDuration, formatList, formatKeyValue, ProgressBar, MultiStepProgress, Spinner, TaskList, suggestCommand, formatSuggestion, isLikelyTypo, getContextualHelp, searchCommands, autocomplete, suggestFlags, formatFlagSuggestions, getCommandUsage, validateCommand, REPL, REPLContext, REPLCommandBuilder, CommandHistory, formatHistory, formatHistoryStats, MultiRegionManager, multiRegionManager, CrossRegionReferenceManager, GlobalResourceManager, RegionPairManager, StackDependencyManager, crossRegionReferenceManager, globalResourceManager, regionPairManager, stackDependencyManager, AWS_REGIONS, getRegion, getAllRegions, getRegionsByLocation, getRegionsByCompliance, getRegionsByPricingTier, isValidRegion, getClosestRegion, suggestRegions, suggestRegionPairs, formatRegion, formatRegionList, getRegionStats, MultiAccountManager, OrganizationManager, multiAccountManager, organizationManager, RECOMMENDED_ACCOUNT_STRUCTURES, RECOMMENDED_SCPS, COMMON_CROSS_ACCOUNT_ROLES, getRecommendedStructure, generateCrossAccountRoleCF, validateAccountStructure, formatAccountStructure, generateDeploymentWorkflow, generateMultiEnvWorkflow, generatePRPreviewWorkflow, generateScheduledWorkflow, generateMatrixWorkflow, generateDeploymentPipeline, generateMultiEnvPipeline, generatePreviewPipeline, generateScheduledPipeline, generateManualPipeline, generateDeploymentConfig, generateMultiEnvConfig, generateScheduledConfig, generateApprovalConfig, generateParallelConfig, BackupManager, backupManager, DisasterRecoveryManager, drManager, AWSConfigManager, awsConfigManager, CloudTrailManager, cloudTrailManager, GuardDutyManager, guardDutyManager, SecurityHubManager, securityHubManager, BlueGreenManager, blueGreenManager, CanaryManager, canaryManager, ABTestManager, abTestManager, ProgressiveDeploymentManager, progressiveDeploymentManager, XRayManager, xrayManager, MetricsManager, metricsManager, LogsManager, logsManager, SyntheticsManager, syntheticsManager, MigrationManager, migrationManager, ReplicaManager, replicaManager, PerformanceManager, performanceManager, DatabaseUserManager, databaseUserManager, SecretsRotationManager, secretsRotationManager, SecretsManager, secretsManager, CertificateManager, certificateManager, SecurityScanningManager, securityScanningManager, ImageScanningManager, imageScanningManager, BuildOptimizationManager, buildOptimizationManager, ContainerRegistryManager, containerRegistryManager, ServiceMeshManager, serviceMeshManager, LambdaLayersManager, lambdaLayersManager, LambdaVersionsManager, lambdaVersionsManager, LambdaConcurrencyManager, lambdaConcurrencyManager, LambdaDestinationsManager, lambdaDestinationsManager, LambdaVPCManager, lambdaVPCManager, LambdaDLQManager, lambdaDLQManager, Route53RoutingManager, route53RoutingManager, DNSSECManager, dnssecManager, Route53ResolverManager, route53ResolverManager, BounceComplaintHandler, bounceComplaintHandler, EmailAnalyticsManager, emailAnalyticsManager, SenderReputationManager, senderReputationManager, EmailTemplateManager, emailTemplateManager, exports_advanced, exports_inbound, exports_advanced2, exports_advanced3, FIFOQueueManager, fifoQueueManager, DLQMonitoringManager, dlqMonitoringManager, BatchProcessingManager, batchProcessingManager, QueueManagementManager, queueManagementManager, createZip, generateBootstrap, runBuildHooks, sha256, artifactKey, packageServerlessApp, MANAGED_NODE_VERSIONS, resolveServerlessRuntime, resolveQueues, resolveQueueNames, composeServerlessAppTemplate, PHP_LAYER_EXTENSIONS, phpLayerPackages, phpLayerBuildStage, generatePhpLayerDockerfile, generateAppImageDockerfile, sharedRuntimeLoop, buildNodeRuntimeLayerZip, buildBunRuntimeLayerZip, resolveApp, eventToRequest, responseToResult, createHttpHandler, createQueueHandler, createCliHandler, createHandlers, generatePhpFpmConfig, phpRuntimeLayerAssets, laravelServerlessEnvDefaults, LARAVEL_SERVERLESS_BUILD_STEPS, buildPhpRuntimeLayerZip, PHP_DEFAULT_EXCLUDES, runPhpBuildHooks, collectPhpAppEntries, packagePhpApp, StaticSiteManager, staticSiteManager, StorageAdvancedManager, storageAdvancedManager, HealthCheckManager, healthCheckManager, NetworkSecurityManager, networkSecurityManager, ResourceManagementManager, resourceManagementManager };
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
step,
|
|
7
7
|
success,
|
|
8
8
|
warn
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-qgnyzfmx.js";
|
|
10
10
|
import {
|
|
11
11
|
CloudWatchLogsClient,
|
|
12
12
|
CostExplorerClient,
|
|
@@ -25,8 +25,9 @@ import {
|
|
|
25
25
|
releasePaths,
|
|
26
26
|
resolveSiteFramework,
|
|
27
27
|
resolveSiteKind,
|
|
28
|
-
resolveUiSource
|
|
29
|
-
|
|
28
|
+
resolveUiSource,
|
|
29
|
+
siteInstallBase
|
|
30
|
+
} from "./chunk-hb06vk29.js";
|
|
30
31
|
import {
|
|
31
32
|
artifactKey,
|
|
32
33
|
composeServerlessAppTemplate,
|
|
@@ -40,7 +41,7 @@ import {
|
|
|
40
41
|
resolveServerlessArtifactBucketName,
|
|
41
42
|
resolveServerlessAssetBucketName,
|
|
42
43
|
resolveServerlessRuntime
|
|
43
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-49nmy775.js";
|
|
44
45
|
import {
|
|
45
46
|
deployStaticSiteWithExternalDnsFull
|
|
46
47
|
} from "./chunk-d7p84vz5.js";
|
|
@@ -345,7 +346,7 @@ async function deployServerlessApp(config, environment, opts = {}) {
|
|
|
345
346
|
}
|
|
346
347
|
if (imageMode) {
|
|
347
348
|
step("Building + pushing container image");
|
|
348
|
-
const { buildAndPushServerlessImage } = await import("./chunk-
|
|
349
|
+
const { buildAndPushServerlessImage } = await import("./chunk-296n8hvt.js");
|
|
349
350
|
const built = await buildAndPushServerlessImage({
|
|
350
351
|
app,
|
|
351
352
|
projectRoot,
|
|
@@ -10284,13 +10285,13 @@ function shellSingleQuote(value) {
|
|
|
10284
10285
|
function sedReplacement(value) {
|
|
10285
10286
|
return value.replace(/[\\&/]/g, "\\$&");
|
|
10286
10287
|
}
|
|
10287
|
-
function deployHistoryScript(siteNames) {
|
|
10288
|
+
function deployHistoryScript(siteNames, slug) {
|
|
10288
10289
|
if (siteNames.length === 0)
|
|
10289
10290
|
return ["true"];
|
|
10290
10291
|
return [
|
|
10291
10292
|
"set +e",
|
|
10292
10293
|
...siteNames.map((siteName) => {
|
|
10293
|
-
const historyPath = shellSingleQuote(
|
|
10294
|
+
const historyPath = shellSingleQuote(`${siteInstallBase(slug, siteName)}/.ts-cloud/deploy-history.log`);
|
|
10294
10295
|
const prefix = sedReplacement(siteName);
|
|
10295
10296
|
return `TS_CLOUD_HISTORY=${historyPath}; { [ -f "$TS_CLOUD_HISTORY" ] && tail -n 24 "$TS_CLOUD_HISTORY" | sed "s/^/DEPLOY=${prefix}\\t/"; } || true`;
|
|
10296
10297
|
}),
|
|
@@ -10673,7 +10674,7 @@ function resolveConfigOnlyServerDashboardData(config6, environment) {
|
|
|
10673
10674
|
const kind = resolveSiteKind(site);
|
|
10674
10675
|
return {
|
|
10675
10676
|
...s,
|
|
10676
|
-
root: kind === "server-static" ?
|
|
10677
|
+
root: kind === "server-static" ? siteInstallBase(config6.project.slug, s.name) : `${siteInstallBase(config6.project.slug, s.name)}/current`,
|
|
10677
10678
|
branch: kind === "server-static" ? "build artifact" : "main",
|
|
10678
10679
|
build: site.build,
|
|
10679
10680
|
php: site.php ?? site.phpVersion,
|
|
@@ -10754,7 +10755,7 @@ async function resolveServerDashboardData(config6, environment) {
|
|
|
10754
10755
|
const siteNames = Object.keys(config6.sites ?? {});
|
|
10755
10756
|
const historyResult = await driver.runRemoteDeploy({
|
|
10756
10757
|
targets: [targets[0]],
|
|
10757
|
-
commands: deployHistoryScript(siteNames),
|
|
10758
|
+
commands: deployHistoryScript(siteNames, config6.project.slug),
|
|
10758
10759
|
comment: `ts-cloud dashboard:deploy-history ${config6.project.slug}`,
|
|
10759
10760
|
tags: { Project: config6.project.slug, Environment: environment, Role: "app" }
|
|
10760
10761
|
});
|
|
@@ -11013,7 +11014,7 @@ async function rollbackComputeSite(ctx, options) {
|
|
|
11013
11014
|
const targets = await findTargets(ctx);
|
|
11014
11015
|
if (targets.length === 0)
|
|
11015
11016
|
return { success: false, error: `No '${ctx.role || "app"}' servers found for ${ctx.slug}/${ctx.environment}.` };
|
|
11016
|
-
const appBase =
|
|
11017
|
+
const appBase = siteInstallBase(ctx.slug, options.siteName);
|
|
11017
11018
|
const paths = releasePaths(appBase, options.to || "unused");
|
|
11018
11019
|
const commands = [
|
|
11019
11020
|
"set -uo pipefail",
|
|
@@ -11139,8 +11140,8 @@ function serviceCommand(verb, target) {
|
|
|
11139
11140
|
function pantryEnvEval() {
|
|
11140
11141
|
return `eval "$(cd ${PANTRY_PROJECT_DIR} && pantry env 2>/dev/null)"`;
|
|
11141
11142
|
}
|
|
11142
|
-
function siteArtisanCommand(site, artisan) {
|
|
11143
|
-
const current =
|
|
11143
|
+
function siteArtisanCommand(slug, site, artisan) {
|
|
11144
|
+
const current = `${siteInstallBase(slug, site)}/current`;
|
|
11144
11145
|
return [
|
|
11145
11146
|
"set -uo pipefail",
|
|
11146
11147
|
`[ -d ${current} ] || { echo "site ${site} has no current release" >&2; exit 1; }`,
|
|
@@ -11149,7 +11150,7 @@ function siteArtisanCommand(site, artisan) {
|
|
|
11149
11150
|
}
|
|
11150
11151
|
function workerRestartCommand(framework, slug, site) {
|
|
11151
11152
|
if (framework === "laravel")
|
|
11152
|
-
return siteArtisanCommand(site, "queue:restart");
|
|
11153
|
+
return siteArtisanCommand(slug, site, "queue:restart");
|
|
11153
11154
|
const pattern = `${slug}-${site}-queue-*.service`;
|
|
11154
11155
|
return [
|
|
11155
11156
|
"set -uo pipefail",
|
|
@@ -11161,7 +11162,7 @@ function workerRestartCommand(framework, slug, site) {
|
|
|
11161
11162
|
}
|
|
11162
11163
|
function schedulerRunCommand(framework, slug, site) {
|
|
11163
11164
|
if (framework === "laravel")
|
|
11164
|
-
return siteArtisanCommand(site, "schedule:run");
|
|
11165
|
+
return siteArtisanCommand(slug, site, "schedule:run");
|
|
11165
11166
|
const unit = `${slug}-${site}-scheduler.service`;
|
|
11166
11167
|
return [
|
|
11167
11168
|
"set -uo pipefail",
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
resolveCloudProvider,
|
|
6
6
|
resolveManagementDashboardSites,
|
|
7
7
|
resolveProjectStackName
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-49nmy775.js";
|
|
9
9
|
import {
|
|
10
10
|
EC2Client,
|
|
11
11
|
SSMClient
|
|
@@ -1659,6 +1659,9 @@ runcmd:
|
|
|
1659
1659
|
}
|
|
1660
1660
|
|
|
1661
1661
|
// src/deploy/site-target.ts
|
|
1662
|
+
function siteInstallBase(slug, siteName) {
|
|
1663
|
+
return `/var/www/${slug}-${siteName}`;
|
|
1664
|
+
}
|
|
1662
1665
|
var PHP_SITE_TYPES = new Set([
|
|
1663
1666
|
"laravel",
|
|
1664
1667
|
"php",
|
|
@@ -1815,6 +1818,7 @@ function resolveServerAppFrom(port, appBoxes) {
|
|
|
1815
1818
|
}
|
|
1816
1819
|
function buildRpxConfigInternal(sites, options, appBoxes) {
|
|
1817
1820
|
const wwwRoot = (options.wwwRoot ?? "/var/www").replace(/\/+$/, "");
|
|
1821
|
+
const installSlug = options.slug ?? "app";
|
|
1818
1822
|
const certsDir = options.proxy.certsDir ?? DEFAULT_RPX_CERTS_DIR;
|
|
1819
1823
|
const loadBalancer = options.proxy.loadBalancer;
|
|
1820
1824
|
const proxies = [];
|
|
@@ -1849,7 +1853,7 @@ function buildRpxConfigInternal(sites, options, appBoxes) {
|
|
|
1849
1853
|
proxies.push({
|
|
1850
1854
|
to: site.domain,
|
|
1851
1855
|
path,
|
|
1852
|
-
static: `${wwwRoot}/${name}/current`,
|
|
1856
|
+
static: `${wwwRoot}/${installSlug}-${name}/current`,
|
|
1853
1857
|
cleanUrls: site.pathRewriteStyle !== "flat",
|
|
1854
1858
|
spa: site.spa ?? false,
|
|
1855
1859
|
...auth ? { auth } : {},
|
|
@@ -2302,7 +2306,7 @@ class HetznerDriver {
|
|
|
2302
2306
|
const sitePorts = this.collectUpstreamPorts(sites);
|
|
2303
2307
|
const rpxProvision = compute.proxy?.engine === "rpx" ? buildRpxProvisionScript({
|
|
2304
2308
|
proxy: compute.proxy,
|
|
2305
|
-
config: buildRpxConfig(sites, { proxy: compute.proxy }),
|
|
2309
|
+
config: buildRpxConfig(sites, { proxy: compute.proxy, slug: config.project.slug }),
|
|
2306
2310
|
slug: config.project.slug,
|
|
2307
2311
|
bunBin: compute.runtime === "node" || compute.runtime === "deno" ? undefined : "/usr/local/bin/bun"
|
|
2308
2312
|
}) : undefined;
|
|
@@ -2651,7 +2655,7 @@ class HetznerDriver {
|
|
|
2651
2655
|
const rpxProxy = compute.proxy?.engine === "rpx" ? compute.proxy : { engine: "rpx" };
|
|
2652
2656
|
const lbRpxProvision = buildRpxProvisionScript({
|
|
2653
2657
|
proxy: rpxProxy,
|
|
2654
|
-
config: buildRpxLbConfig(sites, appBoxes, { proxy: rpxProxy }),
|
|
2658
|
+
config: buildRpxLbConfig(sites, appBoxes, { proxy: rpxProxy, slug }),
|
|
2655
2659
|
slug,
|
|
2656
2660
|
bunBin: appProvisionScripts.runtime === "node" || appProvisionScripts.runtime === "deno" ? undefined : "/usr/local/bin/bun"
|
|
2657
2661
|
});
|
|
@@ -3548,6 +3552,24 @@ function buildPruneReleases(paths, keep = DEFAULT_KEEP_RELEASES) {
|
|
|
3548
3552
|
"done"
|
|
3549
3553
|
];
|
|
3550
3554
|
}
|
|
3555
|
+
function siteOwnerPath(base) {
|
|
3556
|
+
return `${deployMetaDir(base)}/owner`;
|
|
3557
|
+
}
|
|
3558
|
+
function buildSiteOwnerGuard(base, slug) {
|
|
3559
|
+
const owner = siteOwnerPath(base);
|
|
3560
|
+
return [
|
|
3561
|
+
`if [ -f "${owner}" ]; then`,
|
|
3562
|
+
` TS_CLOUD_OWNER=$(cat "${owner}")`,
|
|
3563
|
+
` if [ "$TS_CLOUD_OWNER" != "${slug}" ]; then`,
|
|
3564
|
+
` echo "[ts-cloud] REFUSING deploy: ${base} belongs to project '$TS_CLOUD_OWNER', not '${slug}'. Another project on this box derives the same site key — give one of them a distinct site name/domain, or remove ${owner} to transfer ownership." >&2`,
|
|
3565
|
+
" exit 1",
|
|
3566
|
+
" fi",
|
|
3567
|
+
"else",
|
|
3568
|
+
` mkdir -p "$(dirname "${owner}")"`,
|
|
3569
|
+
` printf '%s\\n' "${slug}" > "${owner}"`,
|
|
3570
|
+
"fi"
|
|
3571
|
+
];
|
|
3572
|
+
}
|
|
3551
3573
|
function buildDeployHistoryHeader(base, options) {
|
|
3552
3574
|
const meta = deployMetaDir(base);
|
|
3553
3575
|
const log = deployLogPath(base, options.releaseId);
|
|
@@ -3827,7 +3849,7 @@ function buildManagementDashboardArtifact(site, options) {
|
|
|
3827
3849
|
logger.warn(`Management dashboard: build output not found at ${root} — skipping dashboard artifact.`);
|
|
3828
3850
|
return null;
|
|
3829
3851
|
}
|
|
3830
|
-
const tarball = join4(tmpdir(), `${options.slug}-${MANAGEMENT_DASHBOARD_SITE}-${options.sha}.tar.gz`);
|
|
3852
|
+
const tarball = join4(tmpdir(), `${options.slug}-${options.siteName ?? MANAGEMENT_DASHBOARD_SITE}-${options.sha}.tar.gz`);
|
|
3831
3853
|
execSync2(`tar czf "${tarball}" -C "${root}" .`, { stdio: "inherit" });
|
|
3832
3854
|
return tarball;
|
|
3833
3855
|
} catch (error) {
|
|
@@ -4366,26 +4388,26 @@ async function deploySiteRelease(driver, options, logger = noopLogger2) {
|
|
|
4366
4388
|
if (isPhpSite(site)) {
|
|
4367
4389
|
const compute2 = config.infrastructure?.compute;
|
|
4368
4390
|
const phpVersion = site.phpVersion ?? compute2?.php?.default ?? compute2?.php?.versions?.[0];
|
|
4369
|
-
const
|
|
4391
|
+
const appBase2 = siteInstallBase(slug, siteName);
|
|
4370
4392
|
const dbEnv = outputs.servicesPrivateIp ? buildFleetServicesEnv(outputs.servicesPrivateIp, config.infrastructure?.appDatabase) : buildManagedDbEnv(config.infrastructure?.appDatabase);
|
|
4371
4393
|
const siteWithEnv = Object.keys(dbEnv).length > 0 ? { ...site, env: { ...dbEnv, ...site.env || {} } } : site;
|
|
4372
4394
|
const deployScript = buildLaravelDeployScript({
|
|
4373
4395
|
siteName,
|
|
4374
4396
|
site: siteWithEnv,
|
|
4375
4397
|
releaseId: sha,
|
|
4376
|
-
appBase,
|
|
4398
|
+
appBase: appBase2,
|
|
4377
4399
|
defaultPhpVersion: phpVersion
|
|
4378
4400
|
});
|
|
4379
4401
|
const useNginx = compute2?.webServer !== "rpx";
|
|
4380
4402
|
const sslProvider = resolveSslProvider(site);
|
|
4381
4403
|
const customCert = sslProvider === "custom" && site.ssl?.certPath && site.ssl?.keyPath ? { certPath: site.ssl.certPath, keyPath: site.ssl.keyPath } : undefined;
|
|
4382
|
-
const poolScript = site.isolation ? buildPhpFpmPoolScript({ siteName, appBase }) : [];
|
|
4404
|
+
const poolScript = site.isolation ? buildPhpFpmPoolScript({ siteName, appBase: appBase2 }) : [];
|
|
4383
4405
|
const vhostScript = useNginx ? buildNginxVhostScript({
|
|
4384
4406
|
siteName,
|
|
4385
4407
|
domain: site.domain || siteName,
|
|
4386
4408
|
aliases: site.aliases,
|
|
4387
4409
|
type: site.type,
|
|
4388
|
-
appDir: `${
|
|
4410
|
+
appDir: `${appBase2}/current`,
|
|
4389
4411
|
webDirectory: site.webDirectory,
|
|
4390
4412
|
phpVersion,
|
|
4391
4413
|
fastcgiPass: site.isolation ? phpFpmPoolListen(siteName) : undefined,
|
|
@@ -4399,12 +4421,12 @@ async function deploySiteRelease(driver, options, logger = noopLogger2) {
|
|
|
4399
4421
|
security: site.security
|
|
4400
4422
|
}) : [];
|
|
4401
4423
|
const sslScript = useNginx ? buildSslScript(site) : [];
|
|
4402
|
-
const servicesScript2 = siteHasServices(site) ? buildSiteServicesScript({ slug, siteName, site, phpVersion, appBase }) : [];
|
|
4424
|
+
const servicesScript2 = siteHasServices(site) ? buildSiteServicesScript({ slug, siteName, site, phpVersion, appBase: appBase2 }) : [];
|
|
4403
4425
|
const healthCheckScript = useNginx ? buildHealthCheckScript(site) : [];
|
|
4404
4426
|
logger.step(`Deploying PHP site '${siteName}' to ${targets.length} target(s)...`);
|
|
4405
4427
|
const phpResult = await driver.runRemoteDeploy({
|
|
4406
4428
|
targets,
|
|
4407
|
-
commands: [...deployScript, ...poolScript, ...vhostScript, ...sslScript, ...servicesScript2, ...healthCheckScript],
|
|
4429
|
+
commands: [...buildSiteOwnerGuard(appBase2, slug), ...deployScript, ...poolScript, ...vhostScript, ...sslScript, ...servicesScript2, ...healthCheckScript],
|
|
4408
4430
|
comment: `ts-cloud deploy ${slug}/${siteName}@${sha}`,
|
|
4409
4431
|
tags: { Project: slug, Environment: environment, Role: "app" }
|
|
4410
4432
|
});
|
|
@@ -4437,14 +4459,17 @@ async function deploySiteRelease(driver, options, logger = noopLogger2) {
|
|
|
4437
4459
|
});
|
|
4438
4460
|
const artifactFetch = driver.name === "aws" ? buildAwsArtifactFetch(outputs.deployBucketName, remoteKey, config.project.region || "us-east-1", siteName) : buildLocalArtifactFetch(uploadResult.artifactRef, siteName);
|
|
4439
4461
|
const kind = resolveSiteKind(site);
|
|
4462
|
+
const appBase = siteInstallBase(slug, siteName);
|
|
4440
4463
|
const baseScript = kind === "server-static" ? buildStaticSiteDeployScript({
|
|
4441
4464
|
siteName,
|
|
4465
|
+
appDir: appBase,
|
|
4442
4466
|
artifactFetch,
|
|
4443
4467
|
releaseId: sha,
|
|
4444
4468
|
preStartCommands: site.preStart
|
|
4445
4469
|
}) : buildSiteDeployScript({
|
|
4446
4470
|
siteName,
|
|
4447
4471
|
slug,
|
|
4472
|
+
appDir: appBase,
|
|
4448
4473
|
artifactFetch,
|
|
4449
4474
|
releaseId: sha,
|
|
4450
4475
|
execStart: resolveExecStart(site.start, runtime),
|
|
@@ -4461,7 +4486,7 @@ async function deploySiteRelease(driver, options, logger = noopLogger2) {
|
|
|
4461
4486
|
domain: site.domain,
|
|
4462
4487
|
aliases: site.aliases,
|
|
4463
4488
|
type: site.type === "spa" ? "spa" : "static",
|
|
4464
|
-
appDir:
|
|
4489
|
+
appDir: `${appBase}/current`,
|
|
4465
4490
|
webDirectory: "",
|
|
4466
4491
|
redirects: site.redirects,
|
|
4467
4492
|
auth: site.auth && site.auth.enabled !== false && site.auth.password ? { username: site.auth.username || "admin", password: site.auth.password, realm: site.auth.realm } : undefined,
|
|
@@ -4472,13 +4497,14 @@ async function deploySiteRelease(driver, options, logger = noopLogger2) {
|
|
|
4472
4497
|
security: site.security
|
|
4473
4498
|
}) : [];
|
|
4474
4499
|
const staticSsl = wantsNginxStatic ? buildSslScript(site) : [];
|
|
4475
|
-
const servicesScript = siteHasServices(site) ? buildSiteServicesScript({ slug, siteName, site, appBase
|
|
4500
|
+
const servicesScript = siteHasServices(site) ? buildSiteServicesScript({ slug, siteName, site, appBase }) : [];
|
|
4476
4501
|
const remoteScript = [
|
|
4477
|
-
...buildDeployHistoryHeader(
|
|
4502
|
+
...buildDeployHistoryHeader(appBase, {
|
|
4478
4503
|
releaseId: sha,
|
|
4479
4504
|
commit: sha,
|
|
4480
4505
|
branch: site.branch ?? "main"
|
|
4481
4506
|
}),
|
|
4507
|
+
...buildSiteOwnerGuard(appBase, slug),
|
|
4482
4508
|
...baseScript,
|
|
4483
4509
|
...staticVhost,
|
|
4484
4510
|
...staticSsl,
|
|
@@ -4521,7 +4547,7 @@ async function deployAllComputeSites(options) {
|
|
|
4521
4547
|
let dashboardTarball = null;
|
|
4522
4548
|
const dashboardTarballBySite = new Map;
|
|
4523
4549
|
if (injectedDashboardSites.length > 0) {
|
|
4524
|
-
dashboardTarball = buildManagementDashboardArtifact(config.sites?.[injectedDashboardSites[0]], { cwd, slug, sha, logger: { info: logger.info, warn: logger.warn } });
|
|
4550
|
+
dashboardTarball = buildManagementDashboardArtifact(config.sites?.[injectedDashboardSites[0]], { cwd, slug, sha, siteName: injectedDashboardSites[0], logger: { info: logger.info, warn: logger.warn } });
|
|
4525
4551
|
if (!dashboardTarball) {
|
|
4526
4552
|
logger.warn("Management dashboard: no artifact available — skipping dashboard site(s) for this deploy.");
|
|
4527
4553
|
for (const name of injectedDashboardSites) {
|
|
@@ -4530,7 +4556,7 @@ async function deployAllComputeSites(options) {
|
|
|
4530
4556
|
}
|
|
4531
4557
|
} else {
|
|
4532
4558
|
for (const name of injectedDashboardSites) {
|
|
4533
|
-
if (name ===
|
|
4559
|
+
if (name === injectedDashboardSites[0]) {
|
|
4534
4560
|
dashboardTarballBySite.set(name, dashboardTarball);
|
|
4535
4561
|
continue;
|
|
4536
4562
|
}
|
|
@@ -4601,7 +4627,7 @@ async function reloadRpxGateway(options) {
|
|
|
4601
4627
|
if (proxy?.engine !== "rpx")
|
|
4602
4628
|
return true;
|
|
4603
4629
|
const sites = routeSource.sites || {};
|
|
4604
|
-
const rpxConfig = buildRpxConfig(sites, { proxy });
|
|
4630
|
+
const rpxConfig = buildRpxConfig(sites, { proxy, slug: config.project.slug });
|
|
4605
4631
|
if (rpxConfig.proxies.length === 0) {
|
|
4606
4632
|
logger.warn("rpx gateway: no server sites with a domain to route — skipping gateway reload.");
|
|
4607
4633
|
return true;
|
|
@@ -4715,4 +4741,4 @@ function buildCloudFrontOriginConfig(options) {
|
|
|
4715
4741
|
CustomErrorResponses: { Quantity: 0 }
|
|
4716
4742
|
};
|
|
4717
4743
|
}
|
|
4718
|
-
export { isPhpSite, resolveSiteDeployTarget, resolveSiteKind, validateDeploymentConfig, PANTRY_PROJECT_DIR, BACKUP_RUNNER_PATH, buildBackupRestoreScript, buildUbuntuBootstrapScript, AwsDriver, HetznerClient, resolveHetznerApiToken, normalizeSshPublicKey, wrapCloudInitUserData, DEFAULT_RPX_CERTS_DIR, normalizeRoutePath, deriveRouteId, buildRpxConfig, buildRpxLbConfig, renderRpxLauncher, RPX_DIR, RPX_LAUNCHER_PATH, RPX_SERVICE_NAME, buildRpxProvisionScript, HetznerDriver, LocalBoxDriver, isBoxMode, createCloudDriver, CloudDriverFactory, cloudDrivers, ensureSshKey, ensureFirewall, ensureServer, serverPublicIpv4, buildSshArgs, sshExec, sshExecOrThrow, scpUpload, waitForSsh, waitForCloudInit, UBUNTU_2404_AMI_PARAM, buildBoxUserData, HetznerBoxProvisioner, AwsBoxProvisioner, createBoxProvisioner, releasePaths, buildRollbackScript, resolveExecStart, buildSiteDeployScript, buildStaticSiteDeployScript, buildAwsArtifactFetch, buildLocalArtifactFetch, MANAGEMENT_DASHBOARD_SITE, DASHBOARD_CREDENTIALS_FILE, resolveDashboardAuth, resolveUiSource, ensureManagementDashboard, buildManagementDashboardArtifact, resolveSiteFramework, deploySiteRelease, deployAllComputeSites, reloadRpxGateway, MANAGED_CACHE_POLICY_OPTIMIZED, MANAGED_CACHE_POLICY_DISABLED, MANAGED_ORIGIN_REQUEST_POLICY_ALL_VIEWER, buildCloudFrontOriginConfig };
|
|
4744
|
+
export { siteInstallBase, isPhpSite, resolveSiteDeployTarget, resolveSiteKind, validateDeploymentConfig, PANTRY_PROJECT_DIR, BACKUP_RUNNER_PATH, buildBackupRestoreScript, buildUbuntuBootstrapScript, AwsDriver, HetznerClient, resolveHetznerApiToken, normalizeSshPublicKey, wrapCloudInitUserData, DEFAULT_RPX_CERTS_DIR, normalizeRoutePath, deriveRouteId, buildRpxConfig, buildRpxLbConfig, renderRpxLauncher, RPX_DIR, RPX_LAUNCHER_PATH, RPX_SERVICE_NAME, buildRpxProvisionScript, HetznerDriver, LocalBoxDriver, isBoxMode, createCloudDriver, CloudDriverFactory, cloudDrivers, ensureSshKey, ensureFirewall, ensureServer, serverPublicIpv4, buildSshArgs, sshExec, sshExecOrThrow, scpUpload, waitForSsh, waitForCloudInit, UBUNTU_2404_AMI_PARAM, buildBoxUserData, HetznerBoxProvisioner, AwsBoxProvisioner, createBoxProvisioner, releasePaths, buildRollbackScript, resolveExecStart, buildSiteDeployScript, buildStaticSiteDeployScript, buildAwsArtifactFetch, buildLocalArtifactFetch, MANAGEMENT_DASHBOARD_SITE, DASHBOARD_CREDENTIALS_FILE, resolveDashboardAuth, resolveUiSource, ensureManagementDashboard, buildManagementDashboardArtifact, resolveSiteFramework, deploySiteRelease, deployAllComputeSites, reloadRpxGateway, MANAGED_CACHE_POLICY_OPTIMIZED, MANAGED_CACHE_POLICY_DISABLED, MANAGED_ORIGIN_REQUEST_POLICY_ALL_VIEWER, buildCloudFrontOriginConfig };
|
package/dist/deploy/index.js
CHANGED
|
@@ -12,10 +12,10 @@ import {
|
|
|
12
12
|
sanitizeCloudConfig,
|
|
13
13
|
setMaintenance,
|
|
14
14
|
startLocalDashboardServer
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-d1370frz.js";
|
|
16
16
|
import {
|
|
17
17
|
buildAndPushServerlessImage
|
|
18
|
-
} from "../chunk-
|
|
18
|
+
} from "../chunk-qgnyzfmx.js";
|
|
19
19
|
import"../chunk-b82pbxyp.js";
|
|
20
20
|
import"../chunk-hsk6fe6x.js";
|
|
21
21
|
import {
|
|
@@ -28,9 +28,10 @@ import {
|
|
|
28
28
|
resolveSiteDeployTarget,
|
|
29
29
|
resolveSiteKind,
|
|
30
30
|
resolveUiSource,
|
|
31
|
+
siteInstallBase,
|
|
31
32
|
validateDeploymentConfig
|
|
32
|
-
} from "../chunk-
|
|
33
|
-
import"../chunk-
|
|
33
|
+
} from "../chunk-hb06vk29.js";
|
|
34
|
+
import"../chunk-49nmy775.js";
|
|
34
35
|
import"../chunk-93hjhs78.js";
|
|
35
36
|
import {
|
|
36
37
|
deleteStaticSite,
|
|
@@ -54,6 +55,7 @@ export {
|
|
|
54
55
|
validateDeploymentConfig,
|
|
55
56
|
uploadStaticFiles,
|
|
56
57
|
startLocalDashboardServer,
|
|
58
|
+
siteInstallBase,
|
|
57
59
|
setMaintenance,
|
|
58
60
|
sanitizeCloudConfig,
|
|
59
61
|
runRemoteCommand,
|
|
@@ -20,7 +20,13 @@
|
|
|
20
20
|
* - `TS_CLOUD_UI_DISABLE` set truthy to skip auto-deploy
|
|
21
21
|
*/
|
|
22
22
|
import type { CloudConfig } from '@ts-cloud/core';
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Legacy site key for the management dashboard. Auto-injected dashboards are
|
|
25
|
+
* now keyed per domain (`dashboard-<apex-dashed>`, see
|
|
26
|
+
* `managementDashboardSiteName` in `@ts-cloud/core`) so tenants sharing a box
|
|
27
|
+
* via `attachTo` never collide on `/var/www/dashboard`. This bare key remains
|
|
28
|
+
* only for hand-configured dashboards and pre-0.8 deploys.
|
|
29
|
+
*/
|
|
24
30
|
export declare const MANAGEMENT_DASHBOARD_SITE = "dashboard";
|
|
25
31
|
/** Where an auto-generated dashboard password is persisted (per project checkout). */
|
|
26
32
|
export declare const DASHBOARD_CREDENTIALS_FILE: string;
|
|
@@ -68,6 +74,8 @@ export interface BuildDashboardArtifactOptions {
|
|
|
68
74
|
cwd?: string;
|
|
69
75
|
slug: string;
|
|
70
76
|
sha: string;
|
|
77
|
+
/** Site key the tarball is staged under. @default MANAGEMENT_DASHBOARD_SITE */
|
|
78
|
+
siteName?: string;
|
|
71
79
|
logger?: EnsureDashboardLogger;
|
|
72
80
|
}
|
|
73
81
|
/**
|
|
@@ -10,6 +10,23 @@ import type { CloudConfig, SiteConfig, SiteDeployTarget } from '@ts-cloud/core';
|
|
|
10
10
|
* the gateway answers `domain` with an HTTP redirect.
|
|
11
11
|
*/
|
|
12
12
|
export type SiteDeployKind = 'bucket' | 'server-app' | 'server-static' | 'server-php' | 'redirect';
|
|
13
|
+
/**
|
|
14
|
+
* On-disk base directory for a site's atomic release tree
|
|
15
|
+
* (`<base>/releases/<sha>` + `<base>/current`).
|
|
16
|
+
*
|
|
17
|
+
* Namespaced by the project **slug** so that on a shared / multi-tenant box
|
|
18
|
+
* (`cloud.attachTo`) two projects — or a tenant and the box owner — can never
|
|
19
|
+
* collide on the same `/var/www/<name>` path. A bare `/var/www/<siteName>`
|
|
20
|
+
* meant that e.g. every project with a `main` site fought over `/var/www/main`,
|
|
21
|
+
* silently overwriting each other's releases and round-robining stale responses
|
|
22
|
+
* on the shared port. This mirrors the systemd unit naming (`<slug>-<siteName>`)
|
|
23
|
+
* so a release directory and the service that runs it share one identity.
|
|
24
|
+
*
|
|
25
|
+
* MUST be the single source of truth for the install path — deploy, rpx routing
|
|
26
|
+
* (server-static), rollback/ops, and dashboard data all derive from it, so they
|
|
27
|
+
* can never diverge.
|
|
28
|
+
*/
|
|
29
|
+
export declare function siteInstallBase(slug: string, siteName: string): string;
|
|
13
30
|
/**
|
|
14
31
|
* A PHP/Laravel site: deployed to the compute box via git clone into atomic
|
|
15
32
|
* release directories and served by nginx + php-fpm. Identified by a PHP
|
package/dist/drivers/index.js
CHANGED
|
@@ -48,8 +48,8 @@ import {
|
|
|
48
48
|
waitForCloudInit,
|
|
49
49
|
waitForSsh,
|
|
50
50
|
wrapCloudInitUserData
|
|
51
|
-
} from "../chunk-
|
|
52
|
-
import"../chunk-
|
|
51
|
+
} from "../chunk-hb06vk29.js";
|
|
52
|
+
import"../chunk-49nmy775.js";
|
|
53
53
|
import"../chunk-93hjhs78.js";
|
|
54
54
|
import"../chunk-qpj3edwz.js";
|
|
55
55
|
import"../chunk-vd87cpvn.js";
|
|
@@ -77,6 +77,18 @@ export declare function buildRollbackScript(paths: ReleasePaths, options?: {
|
|
|
77
77
|
* at the newest, so it is never pruned.
|
|
78
78
|
*/
|
|
79
79
|
export declare function buildPruneReleases(paths: ReleasePaths, keep?: number): string[];
|
|
80
|
+
/** Owner marker recording which project a site's base dir belongs to. */
|
|
81
|
+
export declare function siteOwnerPath(base: string): string;
|
|
82
|
+
/**
|
|
83
|
+
* Guard a site's base dir against cross-project deploys on a shared box
|
|
84
|
+
* (`attachTo`): the first deploy stamps `<base>/.ts-cloud/owner` with the
|
|
85
|
+
* project slug; a later deploy whose slug differs fails loudly instead of
|
|
86
|
+
* silently overwriting another tenant's releases. Two projects can only trip
|
|
87
|
+
* this by deriving the same site key (e.g. both claiming the same domain),
|
|
88
|
+
* which is a config conflict the operator must resolve — not one deploys
|
|
89
|
+
* should paper over. Emitted before anything mutates the dir.
|
|
90
|
+
*/
|
|
91
|
+
export declare function buildSiteOwnerGuard(base: string, slug: string): string[];
|
|
80
92
|
export interface DeployHistoryOptions {
|
|
81
93
|
/** This deploy's release id. */
|
|
82
94
|
releaseId: string;
|
|
@@ -138,6 +138,14 @@ export interface BuildRpxConfigOptions {
|
|
|
138
138
|
proxy: ComputeProxyConfig;
|
|
139
139
|
/** Directory static sites are shipped to. @default '/var/www' */
|
|
140
140
|
wwwRoot?: string;
|
|
141
|
+
/**
|
|
142
|
+
* Project slug — server-static routes are served from the slug-namespaced
|
|
143
|
+
* install dir (`<wwwRoot>/<slug>-<name>/current`), matching where the deploy
|
|
144
|
+
* ships them (see {@link siteInstallBase}). Omitted ⇒ `app` (single-tenant
|
|
145
|
+
* back-compat). MUST be set on a shared box or static routes point at the
|
|
146
|
+
* wrong directory.
|
|
147
|
+
*/
|
|
148
|
+
slug?: string;
|
|
141
149
|
}
|
|
142
150
|
/**
|
|
143
151
|
* Normalize a path prefix to a leading-slash, no-trailing-slash form, or
|
package/dist/index.js
CHANGED
|
@@ -55,10 +55,10 @@ import {
|
|
|
55
55
|
sanitizeCloudConfig,
|
|
56
56
|
setMaintenance,
|
|
57
57
|
startLocalDashboardServer
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-d1370frz.js";
|
|
59
59
|
import {
|
|
60
60
|
buildAndPushServerlessImage
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-qgnyzfmx.js";
|
|
62
62
|
import {
|
|
63
63
|
CloudWatchLogsClient,
|
|
64
64
|
EFSClient,
|
|
@@ -105,7 +105,7 @@ import {
|
|
|
105
105
|
waitForCloudInit,
|
|
106
106
|
waitForSsh,
|
|
107
107
|
wrapCloudInitUserData
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-hb06vk29.js";
|
|
109
109
|
import {
|
|
110
110
|
ABTestManager,
|
|
111
111
|
AI,
|
|
@@ -412,6 +412,7 @@ import {
|
|
|
412
412
|
makeAWSRequest,
|
|
413
413
|
makeAWSRequestAsync,
|
|
414
414
|
makeAWSRequestOnce,
|
|
415
|
+
managementDashboardSiteName,
|
|
415
416
|
mergeInfrastructure,
|
|
416
417
|
metricsManager,
|
|
417
418
|
migrationManager,
|
|
@@ -503,7 +504,7 @@ import {
|
|
|
503
504
|
withSecurity,
|
|
504
505
|
withTimeout,
|
|
505
506
|
xrayManager
|
|
506
|
-
} from "./chunk-
|
|
507
|
+
} from "./chunk-49nmy775.js";
|
|
507
508
|
import {
|
|
508
509
|
EC2Client,
|
|
509
510
|
SSMClient
|
|
@@ -4757,6 +4758,7 @@ export {
|
|
|
4757
4758
|
migrateObjectStorage,
|
|
4758
4759
|
metricsManager,
|
|
4759
4760
|
mergeInfrastructure,
|
|
4761
|
+
managementDashboardSiteName,
|
|
4760
4762
|
makeAWSRequestOnce,
|
|
4761
4763
|
makeAWSRequestAsync,
|
|
4762
4764
|
makeAWSRequest,
|