flnxi-Wu/scripts/__tests__/deploy-registry-script.test.ts
2026-06-01 09:47:35 +08:00

48 lines
2.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import fs from 'fs'
import path from 'path'
describe('deploy-registry.ps1', () => {
const script = fs.readFileSync(
path.join(process.cwd(), 'deploy-registry.ps1'),
'utf8'
)
it('远程部署默认包含升级前数据库、对象存储和 .env 备份', () => {
expect(script).toContain('[switch]$NoRemoteDbBackup')
expect(script).toContain('[switch]$NoRemoteObjectStorageBackup')
expect(script).toContain('[string]$RemoteBackupHelperImage = "busybox:1.36"')
expect(script).toContain('env_backup="$backup_dir/.env.before-upgrade"')
expect(script).toContain("docker compose -f \"$compose_file\" exec -T postgres sh -c 'pg_dump")
expect(script).toContain('test -s "$db_backup"')
expect(script).toContain('backup_minio_volume()')
expect(script).toContain('docker volume inspect "$minio_volume_name"')
expect(script).toContain('tar -czf /backup/minio-data.tar.gz')
expect(script).toContain('OBJECT_STORAGE_EXTERNAL.txt')
expect(script).toContain('backup_minio_volume')
})
it('远程部署失败时默认会恢复旧 APP_IMAGE 或旧容器镜像', () => {
expect(script).toContain('[switch]$NoRollback')
expect(script).toContain('rollback()')
expect(script).toContain('trap rollback ERR')
expect(script.indexOf('trap rollback ERR')).toBeLessThan(script.indexOf('upsert_env APP_IMAGE'))
expect(script).toContain('rollback_image="$old_container_image"')
expect(script).toContain('docker compose -f "$compose_file" up -d --no-deps --pull never --force-recreate "$compose_service" || true')
expect(script).toContain('自动回滚只恢复应用镜像和 .env,不自动恢复数据库')
})
it('部署后校验运行镜像、版本文件和数据库迁移状态', () => {
expect(script).toContain('verify_running_image')
expect(script).toContain('actual_image="$(docker inspect "$container_id" --format')
expect(script).toContain('运行镜像不匹配')
expect(script).toContain('运行版本不匹配')
expect(script).toContain('npx prisma migrate status --schema=prisma/schema.prisma')
})
it('远端 shell 变量应以单引号字符串保留,避免被 PowerShell 提前展开', () => {
expect(script).toContain('$lines.Add(\'docker compose -f "$compose_file" up -d --pull never\')')
expect(script).toContain('$lines.Add(\'docker compose -f "$compose_file" ps\')')
expect(script).not.toContain('$lines.Add("docker compose -f `"$compose_file`"')
})
})