feat: complete dashcam catalog ingestion demo
Master Production Deploy / production (push) Failing after 49s

This commit is contained in:
2026-07-31 02:01:58 +03:00
parent ae6c35145f
commit 2ce58fcbc0
62 changed files with 6341 additions and 178 deletions
+8 -2
View File
@@ -20,6 +20,7 @@ require_var STACK_NAME
require_var RELEASE_ID
require_var COMMIT_SHA
require_var WEB_IMAGE
require_var INGESTION_IMAGE
require_var PUBLIC_HOST
require_var TRAEFIK_NETWORK
@@ -32,10 +33,15 @@ scp -P "$SSH_PORT" deploy/swarm/docker-stack.yml "$SSH_TARGET:$REMOTE_DEPLOY_DIR
scp -P "$SSH_PORT" deploy/remote/deploy-stack.sh "$SSH_TARGET:$REMOTE_DEPLOY_DIR/deploy-stack.sh"
remote_vars=(
ENVIRONMENT STACK_NAME RELEASE_ID COMMIT_SHA WEB_IMAGE PUBLIC_HOST TRAEFIK_NETWORK
REGION TEAM_ID WEB_REPLICAS WEB_PLACEMENT_CONSTRAINT TRAEFIK_ENTRYPOINTS TRAEFIK_TLS REGISTRY REGISTRY_USERNAME REGISTRY_PASSWORD
ENVIRONMENT STACK_NAME RELEASE_ID COMMIT_SHA WEB_IMAGE INGESTION_IMAGE PUBLIC_HOST TRAEFIK_NETWORK
REGION TEAM_ID WEB_REPLICAS WEB_PLACEMENT_CONSTRAINT TRAEFIK_ENTRYPOINTS TRAEFIK_TLS TRAEFIK_CERTRESOLVER REGISTRY REGISTRY_USERNAME REGISTRY_PASSWORD
RELEASE_LOCK_FILE REMOTE_DEPLOY_DIR DEPLOY_MIN_FREE_MB DEPLOY_PRUNE_BEFORE_PULL DEPLOY_PRUNE_UNTIL
DEPLOY_CLEANUP_FAILED_IMAGES VIDEOREG_DB_MEMORY_TTL_MS VIDEOREG_NEXT_CACHE_REVALIDATE_SECONDS
POSTGRES_DB POSTGRES_USER POSTGRES_PASSWORD INGESTION_ADMIN_USERNAME INGESTION_ADMIN_PASSWORD
YANDEX_MARKET_DASHCAM_CATEGORY_URL MVIDEO_DASHCAM_CATEGORY_URL INGESTION_CATEGORY_DAILY_BUDGET
INGESTION_PRODUCT_DAILY_BUDGET INGESTION_SITEMAP_DAILY_BUDGET INGESTION_FETCH_DELAY_MIN_MS
INGESTION_FETCH_DELAY_MAX_MS INGESTION_WORKER_BATCH_SIZE INGESTION_WORKER_IDLE_MS INGESTION_WORKER_REPLICAS
TRAEFIK_ADMIN_PRIORITY
)
remote_command=""
+8 -3
View File
@@ -4,6 +4,9 @@ const required = [
'RELEASE_ID',
'COMMIT_SHA',
'WEB_IMAGE',
'INGESTION_IMAGE',
'POSTGRES_PASSWORD',
'INGESTION_ADMIN_PASSWORD',
'PUBLIC_HOST',
'TRAEFIK_NETWORK',
'SWARM_MANAGER_HOST',
@@ -16,9 +19,11 @@ if (missing.length > 0) {
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);
for (const imageName of ['WEB_IMAGE', 'INGESTION_IMAGE']) {
if (!/@sha256:[a-f0-9]{64}$/i.test(process.env[imageName] ?? '')) {
console.error(`${imageName} must be pinned by immutable digest, got: ${process.env[imageName]}`);
process.exit(1);
}
}
console.log(
+8 -2
View File
@@ -18,13 +18,19 @@ const manifest = {
commitSha: requireEnv('COMMIT_SHA'),
releaseId: requireEnv('RELEASE_ID'),
webImageDigest: requireEnv('WEB_IMAGE_DIGEST'),
ingestionImageDigest: requireEnv('INGESTION_IMAGE_DIGEST'),
deployTimestamp: new Date().toISOString(),
smokeResult: smoke,
workflowRunId: requireEnv('WORKFLOW_RUN_ID'),
};
if (!/@sha256:[a-f0-9]{64}$/i.test(manifest.webImageDigest)) {
throw new Error('webImageDigest must be digest-pinned');
for (const [name, image] of Object.entries({
webImageDigest: manifest.webImageDigest,
ingestionImageDigest: manifest.ingestionImageDigest,
})) {
if (!/@sha256:[a-f0-9]{64}$/i.test(image)) {
throw new Error(`${name} must be digest-pinned`);
}
}
console.log(JSON.stringify(manifest, null, 2));