ReviewOS

also looking at this

stacks/ts-cloud

fix(tls): wait for DNS before ACME issuance

#166
Merged chrisbbreuer wants to merge agent/wait-for-rpx-dns into main
4 files +42 -4
packages/ts-cloud/src/drivers/shared/compute-deploy.tsmodified+14-2
Changes to packages/ts-cloud/src/drivers/shared/compute-deploy.ts
@@ -16,7 +16,7 @@ import { buildNginxVhostScript, resolveNginxSnippet } from './nginx-vhost'
1616import { resolveNotifications, sendNotifications } from './notifications'
1717import { buildPhpFpmPoolScript, phpFpmPoolListen } from './php-fpm-pool'
1818import { buildDeployHistoryHeader, buildSiteOwnerGuard } from './releases'
19import { buildRpxConfig, buildRpxFragmentRefreshScript, buildRpxLbConfig, buildRpxProvisionScript, rpxCertRenewServiceName, usesRpxProxy } from './rpx-gateway'
19import { buildRpxConfig, buildRpxFragmentRefreshScript, buildRpxLbConfig, buildRpxProvisionScript, certDomainsForConfig, rpxCertRenewServiceName, usesRpxProxy } from './rpx-gateway'
2020
2121export interface ComputeDeployLogger {
2222 info(message: string): void
@@ -34,6 +34,10 @@ const noopLogger: ComputeDeployLogger = {
3434 success: () => {},
3535}
3636
37function shellQuote(value: string): string {
38 return `'${value.replace(/'/g, `'"'"'`)}'`
39}
40
3741/**
3842 * Deploy a single site release tarball to compute targets via the active driver.
3943 */
@@ -812,6 +816,8 @@ export async function renewRpxCertificates(
812816
813817 const rpxConfig = buildRpxConfig(routeSource.sites || {}, { proxy, slug: config.project.slug })
814818 if (rpxConfig.proxies.length === 0) return true
819 const certDomains = certDomainsForConfig(rpxConfig)
820 if (certDomains.length === 0) return true
815821
816822 const slug = config.project.slug
817823 const stackName = resolveProjectStackName(config, environment)
@@ -827,9 +833,15 @@ export async function renewRpxCertificates(
827833 }
828834
829835 logger.step('Issuing rpx TLS certificates after DNS reconciliation...')
836 const certChecks = certDomains
837 .map(domain => `test -s ${shellQuote(`${rpxConfig.productionCerts.certsDir}/${domain}.crt`)}`)
838 .join(' && ')
830839 const result = await driver.runRemoteDeploy({
831840 targets,
832 commands: [`systemctl start ${rpxCertRenewServiceName(slug)}`],
841 commands: [
842 `systemctl start ${rpxCertRenewServiceName(slug)}`,
843 certChecks,
844 ],
833845 comment: `ts-cloud rpx TLS issuance ${slug}`,
834846 tags: {
835847 Project: slug,