From 82bf2e6d5fc2b06c3411a07d4bf24d9c07f42f53 Mon Sep 17 00:00:00 2001 From: mkorwel Date: Wed, 18 Mar 2026 10:50:33 -0700 Subject: [PATCH] fix(offload): use metadata-from-file for robust startup script deployment --- .../skills/offload/scripts/providers/GceCosProvider.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.gemini/skills/offload/scripts/providers/GceCosProvider.ts b/.gemini/skills/offload/scripts/providers/GceCosProvider.ts index 5dbb752592..81f4dabc2a 100644 --- a/.gemini/skills/offload/scripts/providers/GceCosProvider.ts +++ b/.gemini/skills/offload/scripts/providers/GceCosProvider.ts @@ -60,7 +60,7 @@ export class GceCosProvider implements WorkerProvider { console.log(`🚀 Provisioning GCE COS worker: ${this.instanceName}...`); - const startupScript = `#!/bin/bash + const startupScriptContent = `#!/bin/bash set -e echo "🚀 Starting Maintainer Worker Resilience Loop..." @@ -83,6 +83,8 @@ export class GceCosProvider implements WorkerProvider { echo "✅ Maintainer Worker is active." `; + const tmpScriptPath = path.join(os.tmpdir(), `gcli-startup-${Date.now()}.sh`); + fs.writeFileSync(tmpScriptPath, startupScriptContent); const result = spawnSync('gcloud', [ 'compute', 'instances', 'create', this.instanceName, @@ -93,12 +95,16 @@ export class GceCosProvider implements WorkerProvider { '--image-project', 'cos-cloud', '--boot-disk-size', '200GB', '--boot-disk-type', 'pd-balanced', - '--metadata', `startup-script=${startupScript},enable-oslogin=TRUE`, + '--metadata-from-file', `startup-script=${tmpScriptPath}`, + '--metadata', 'enable-oslogin=TRUE', '--network-interface', `network=${vpcName},subnet=${subnetName},no-address`, '--scopes', 'https://www.googleapis.com/auth/cloud-platform', '--quiet' ], { stdio: 'inherit' }); + fs.unlinkSync(tmpScriptPath); + + if (result.status === 0) { console.log('⏳ Waiting for OS Login and SSH to initialize (this takes ~45s)...'); await new Promise(r => setTimeout(r, 45000));