From 6af26339364318cee3d046f038d0f95c89eeee2b Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 25 Aug 2026 23:42:39 -0700 Subject: [PATCH] fix(ai): write AI_-prefixed AWS key names to ai.env, not plain names ai.yaml's litellm service (as of commit 37ed671a, "Change AWS keys to use Woodpecker Secrets") references ${AI_AWS_ACCESS_KEY_ID} / ${AI_AWS_SECRET_ACCESS_KEY} and renders them into the container as plain AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY. The ai) provisioning case added in the earlier secrets-migration PR wrote the plain (unprefixed) names into ai.env instead, which would leave ${AI_AWS_ACCESS_KEY_ID} unresolved at compose-render time (renders empty) -- silently breaking Bedrock auth in litellm on the next ai stack deploy. Fixed both the grep -vE exclusion pattern and the two printf lines to use the AI_-prefixed names. All other migrated vars in ai.yaml use plain names and are unaffected. No other changes in this file. --- .woodpecker/deploy.yml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.woodpecker/deploy.yml b/.woodpecker/deploy.yml index 5dc1abf..8252443 100644 --- a/.woodpecker/deploy.yml +++ b/.woodpecker/deploy.yml @@ -256,12 +256,22 @@ steps: # MCPO_API_KEY, OAUTH_CLIENT_ID, WEBUI_URL, and other non-secret config — are # left completely untouched. MCPO_API_KEY migration is deferred to a # follow-up; this step never reads or writes it. + # + # IMPORTANT: ai.yaml's litellm service references ${AI_AWS_ACCESS_KEY_ID} / + # ${AI_AWS_SECRET_ACCESS_KEY} (AI_-prefixed) and renders them into the + # container as plain AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY (see commit + # 37ed671a, "Change AWS keys to use Woodpecker Secrets"). So ai.env must be + # written with the AI_-prefixed key names, NOT the plain ones — writing + # plain AWS_ACCESS_KEY_ID here would leave ${AI_AWS_ACCESS_KEY_ID} + # unresolved at compose-render time (empty), silently breaking Bedrock auth. + # All other migrated vars in ai.yaml use plain (unprefixed) names, so only + # these two lines need the AI_ prefix. ssh -o StrictHostKeyChecking=no root@$${SWARM_MANAGER_IP} "FILE=/volume1/docker/compose-files/ai/ai.env TMP=\$FILE.tmp.\$\$ - grep -vE '^(AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|LITELLM_MASTER_KEY|LITELLM_SALT_KEY|POSTGRES_PASSWORD|DATABASE_URL|WEBUI_SECRET_KEY|OPEN_WEBUI_DATABASE_URL|OAUTH_CLIENT_SECRET)=' \$FILE > \$TMP 2>/dev/null || touch \$TMP + grep -vE '^(AI_AWS_ACCESS_KEY_ID|AI_AWS_SECRET_ACCESS_KEY|LITELLM_MASTER_KEY|LITELLM_SALT_KEY|POSTGRES_PASSWORD|DATABASE_URL|WEBUI_SECRET_KEY|OPEN_WEBUI_DATABASE_URL|OAUTH_CLIENT_SECRET)=' \$FILE > \$TMP 2>/dev/null || touch \$TMP { cat \$TMP - printf 'AWS_ACCESS_KEY_ID=%s\n' '$${AI_AWS_ACCESS_KEY_ID}' - printf 'AWS_SECRET_ACCESS_KEY=%s\n' '$${AI_AWS_SECRET_ACCESS_KEY}' + printf 'AI_AWS_ACCESS_KEY_ID=%s\n' '$${AI_AWS_ACCESS_KEY_ID}' + printf 'AI_AWS_SECRET_ACCESS_KEY=%s\n' '$${AI_AWS_SECRET_ACCESS_KEY}' printf 'LITELLM_MASTER_KEY=%s\n' '$${AI_LITELLM_MASTER_KEY}' printf 'LITELLM_SALT_KEY=%s\n' '$${AI_LITELLM_SALT_KEY}' printf 'POSTGRES_PASSWORD=%s\n' '$${AI_LITELLM_DB_PASSWORD}'