fix(deploy): 通过更新脚本恢复受控仓库镜像定义
Test deployment public URL (Linux) / test-linux (push) Canceled after 0s
Test deployment public URL (Linux) / test-linux (push) Canceled after 0s
This commit is contained in:
@@ -14,6 +14,7 @@ import time
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--source', type=Path, default=Path(__file__).resolve().parent.parent)
|
||||
parser.add_argument('--bash-only', action='store_true', help='Validate Linux updates only; the default still requires Bash and PowerShell.')
|
||||
options = parser.parse_args()
|
||||
source = options.source.resolve()
|
||||
started = time.monotonic()
|
||||
@@ -88,6 +89,8 @@ def assert_selected(root, command_file, output):
|
||||
with tempfile.TemporaryDirectory(prefix='easyai-conversion-update-') as temporary:
|
||||
base = Path(temporary)
|
||||
for name, command in [('bash', ['bash', 'update.sh']), ('powershell', ['pwsh', '-NoProfile', '-File', 'update.ps1'])]:
|
||||
if options.bash_only and name != 'bash':
|
||||
continue
|
||||
case = base / name
|
||||
case.mkdir()
|
||||
root, log, env = fixture(case)
|
||||
@@ -138,15 +141,26 @@ with tempfile.TemporaryDirectory(prefix='easyai-conversion-update-') as temporar
|
||||
with (seed / 'update.sh').open('a') as stream: stream.write('\n# Updated deployment fixture\n')
|
||||
for args in [['git', 'add', 'update.sh'], ['git', 'commit', '-qm', 'test: 验证更新脚本自更新'], ['git', 'push', '-q', 'origin', 'HEAD']]:
|
||||
assert run(args, seed).returncode == 0
|
||||
result = run(['bash', 'update.sh'], root, {**env, 'UPDATE_MODE': 'full'})
|
||||
compose_path = root / 'docker-compose.yml'
|
||||
compose_path.write_text(compose_path.read_text().replace('comfy-ai/one-ai:${VERSION}', 'comfy-ai/one-ai@sha256:' + 'a' * 64))
|
||||
result = run(['bash', 'update.sh'], root, {**env, 'UPDATE_MODE': 'full', 'UPDATE_ADOPT_LEGACY_CONFIG': '1', 'UPDATE_RESTORE_REPOSITORY_IMAGES': 'easyai-web'})
|
||||
assert result.returncode == 0, result.stdout + result.stderr
|
||||
assert '切换到新版更新脚本' in result.stdout
|
||||
assert_selected(root, log, result.stdout)
|
||||
assert run(['git', 'rev-parse', 'HEAD'], root).stdout == run(['git', 'rev-parse', 'HEAD'], seed).stdout
|
||||
print('bash: real Git pull and self re-exec preserve targeted update passed')
|
||||
assert compose_path.read_text() == (seed / 'docker-compose.yml').read_text()
|
||||
backups = list((root / 'data/deployment-backups').glob('legacy-update-*'))
|
||||
assert len(backups) == 1
|
||||
assert json.loads((backups[0] / 'migration.json').read_text())['restoredRepositoryImages'] == ['easyai-web']
|
||||
print('bash: real Git pull, reviewed image restore and self re-exec preserve targeted update passed')
|
||||
|
||||
# Resolve the real deployment Compose separately from the entry-point transport fixtures.
|
||||
resolved = run(['docker', 'compose', '--env-file', '.env.sample', 'config', '--format', 'json'], source)
|
||||
with tempfile.TemporaryDirectory(prefix='easyai-compose-resolution-') as directory:
|
||||
compose_root = Path(directory)
|
||||
shutil.copy2(source / 'docker-compose.yml', compose_root / 'docker-compose.yml')
|
||||
for sample in source.glob('.env*.sample'):
|
||||
shutil.copy2(sample, compose_root / sample.name.removesuffix('.sample'))
|
||||
resolved = run(['docker', 'compose', '--env-file', '.env', 'config', '--format', 'json'], compose_root)
|
||||
assert resolved.returncode == 0, resolved.stderr
|
||||
config = json.loads(resolved.stdout)
|
||||
worker = config['services']['model-conversion-worker']
|
||||
|
||||
Reference in New Issue
Block a user