hypertwist/website/scripts/run-vps-same-origin-live-deploy-cli.test.mjs
2026-06-22 08:07:39 +00:00

74 lines
2.4 KiB
JavaScript

import fs from 'node:fs'
import os from 'node:os'
import path from 'node:path'
import { spawnSync } from 'node:child_process'
import { fileURLToPath } from 'node:url'
import { describe, expect, it } from 'vitest'
const currentFile = fileURLToPath(import.meta.url)
const websiteRoot = path.resolve(path.dirname(currentFile), '..')
const scriptPath = path.join(websiteRoot, 'scripts', 'run-vps-same-origin-live-deploy.mjs')
describe('run-vps-same-origin-live-deploy CLI', () => {
it('supports dry-run json output with a sanitized manifest preview', () => {
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'hypertwist-live-deploy-cli-'))
const manifestPath = path.join(tempDir, 'bundle.json')
const identityFile = path.join(tempDir, 'id_ed25519')
fs.writeFileSync(manifestPath, JSON.stringify({
deploymentTier: 'preview',
checkoutRoot: '/srv/hypertwist/current',
publicOrigin: 'https://hypertwist.app',
supportEmail: 'hello@hypertwist.app',
publicDocsUrl: 'https://hypertwist.app/resources',
releaseNotesUrl: 'https://hypertwist.app/changelog',
correspondingSourceUrl: 'https://git.scriptoriumai.io/scriptoriumadmin/hypertwist',
openSourceRepoUrl: 'https://git.scriptoriumai.io/scriptoriumadmin/hypertwist',
operatorCheckoutUrl: '',
windowsDownloadUrl: '',
releaseManifestVersion: '',
windowsRelease: {
buildId: '',
sha256: '',
publishedAt: '',
},
server: {
paddleWebhookSecret: 'super-secret-token',
},
}, null, 2))
fs.writeFileSync(identityFile, 'fake-key', 'utf8')
try {
const result = spawnSync(
process.execPath,
[
scriptPath,
'--manifest',
manifestPath,
'--identity-file',
identityFile,
'--archive-source',
'worktree',
'--dry-run',
'--json',
],
{
cwd: websiteRoot,
encoding: 'utf8',
},
)
expect(result.status).toBe(0)
expect(result.stderr).toBe('')
const payload = JSON.parse(result.stdout)
expect(payload.vpsUser).toBe('root')
expect(payload.archiveSource).toBe('worktree')
expect(payload.manifest.server.paddleWebhookSecret).toBe('su***en')
expect(payload.deployScript).toContain('__HYPERTWIST_LIVE_DEPLOY_SUMMARY__')
} finally {
fs.rmSync(tempDir, { recursive: true, force: true })
}
})
})