const required = [ 'ENVIRONMENT', 'STACK_NAME', 'RELEASE_ID', 'COMMIT_SHA', 'WEB_IMAGE', 'PUBLIC_HOST', 'TRAEFIK_NETWORK', 'SWARM_MANAGER_HOST', 'SWARM_SSH_USER', ]; const missing = required.filter((name) => !process.env[name]); if (missing.length > 0) { console.error(`Missing required deploy variables: ${missing.join(', ')}`); process.exit(1); } if (!/@sha256:[a-f0-9]{64}$/i.test(process.env.WEB_IMAGE ?? '')) { console.error(`WEB_IMAGE must be pinned by immutable digest, got: ${process.env.WEB_IMAGE}`); process.exit(1); } console.log( JSON.stringify({ event: 'predeploy_check_passed', environment: process.env.ENVIRONMENT, stack: process.env.STACK_NAME, releaseId: process.env.RELEASE_ID, commitSha: process.env.COMMIT_SHA, }), );