Merge pull request 'fix: Generated compose emits FORGE_BOT_USER_LLAMA — legacy name, should derive from forge_user (#849)' (#870) from fix/issue-849 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
This commit is contained in:
commit
46b3d96410
2 changed files with 95 additions and 1 deletions
|
|
@ -149,7 +149,7 @@ _generate_local_model_services() {
|
||||||
PROJECT_REPO_ROOT: /home/agent/repos/${PROJECT_NAME:-project}
|
PROJECT_REPO_ROOT: /home/agent/repos/${PROJECT_NAME:-project}
|
||||||
WOODPECKER_DATA_DIR: /woodpecker-data
|
WOODPECKER_DATA_DIR: /woodpecker-data
|
||||||
WOODPECKER_REPO_ID: "${wp_repo_id}"
|
WOODPECKER_REPO_ID: "${wp_repo_id}"
|
||||||
FORGE_BOT_USER_${service_name^^}: "${forge_user}"
|
FORGE_BOT_USER_${user_upper}: "${forge_user}"
|
||||||
POLL_INTERVAL: "${poll_interval_val}"
|
POLL_INTERVAL: "${poll_interval_val}"
|
||||||
GARDENER_INTERVAL: "${GARDENER_INTERVAL:-21600}"
|
GARDENER_INTERVAL: "${GARDENER_INTERVAL:-21600}"
|
||||||
ARCHITECT_INTERVAL: "${ARCHITECT_INTERVAL:-21600}"
|
ARCHITECT_INTERVAL: "${ARCHITECT_INTERVAL:-21600}"
|
||||||
|
|
|
||||||
94
tests/lib-generators.bats
Normal file
94
tests/lib-generators.bats
Normal file
|
|
@ -0,0 +1,94 @@
|
||||||
|
#!/usr/bin/env bats
|
||||||
|
# =============================================================================
|
||||||
|
# tests/lib-generators.bats — Regression guard for the #849 fix.
|
||||||
|
#
|
||||||
|
# Before #849, `_generate_local_model_services` emitted the forge-user env
|
||||||
|
# variable keyed by service name (`FORGE_BOT_USER_${service_name^^}`), so for
|
||||||
|
# an `[agents.llama]` block with `forge_user = "dev-qwen"` the compose file
|
||||||
|
# contained `FORGE_BOT_USER_LLAMA: "dev-qwen"`. That suffix diverges from the
|
||||||
|
# `FORGE_TOKEN_<FORGE_USER>` / `FORGE_PASS_<FORGE_USER>` convention that the
|
||||||
|
# same block uses two lines above, and it doesn't even round-trip through a
|
||||||
|
# dash-containing service name (`dev-qwen` → `DEV-QWEN`, which is not a valid
|
||||||
|
# shell identifier — see #852).
|
||||||
|
#
|
||||||
|
# The fix keys on `$user_upper` (already computed from `forge_user` via
|
||||||
|
# `tr 'a-z-' 'A-Z_'`), yielding `FORGE_BOT_USER_DEV_QWEN: "dev-qwen"`.
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/.." && pwd)"
|
||||||
|
export FACTORY_ROOT="${BATS_TEST_TMPDIR}/factory"
|
||||||
|
mkdir -p "${FACTORY_ROOT}/projects"
|
||||||
|
|
||||||
|
# Minimal compose skeleton that `_generate_local_model_services` can splice into.
|
||||||
|
# It only needs a `volumes:` marker line and nothing below it that would be
|
||||||
|
# re-read after the splice.
|
||||||
|
cat > "${FACTORY_ROOT}/docker-compose.yml" <<'EOF'
|
||||||
|
services:
|
||||||
|
agents:
|
||||||
|
image: placeholder
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
agent-data:
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "local-model agent service emits FORGE_BOT_USER keyed by forge_user (#849)" {
|
||||||
|
cat > "${FACTORY_ROOT}/projects/test.toml" <<'EOF'
|
||||||
|
name = "test"
|
||||||
|
repo = "test-owner/test-repo"
|
||||||
|
forge_url = "http://localhost:3000"
|
||||||
|
|
||||||
|
[agents.llama]
|
||||||
|
base_url = "http://10.10.10.1:8081"
|
||||||
|
model = "qwen"
|
||||||
|
api_key = "sk-no-key-required"
|
||||||
|
roles = ["dev"]
|
||||||
|
forge_user = "dev-qwen"
|
||||||
|
compact_pct = 60
|
||||||
|
EOF
|
||||||
|
|
||||||
|
run bash -c "
|
||||||
|
set -euo pipefail
|
||||||
|
source '${ROOT}/lib/generators.sh'
|
||||||
|
_generate_local_model_services '${FACTORY_ROOT}/docker-compose.yml'
|
||||||
|
cat '${FACTORY_ROOT}/docker-compose.yml'
|
||||||
|
"
|
||||||
|
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
# New, forge_user-keyed suffix is present with the right value.
|
||||||
|
[[ "$output" == *'FORGE_BOT_USER_DEV_QWEN: "dev-qwen"'* ]]
|
||||||
|
# Legacy service-name-keyed suffix must not be emitted.
|
||||||
|
[[ "$output" != *'FORGE_BOT_USER_LLAMA'* ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "local-model agent service keys FORGE_BOT_USER to forge_user even when it differs from service name (#849)" {
|
||||||
|
# Exercise the case the issue calls out: two agents in the same factory
|
||||||
|
# whose service names are identical (`[agents.llama]`) but whose
|
||||||
|
# forge_users diverge would previously both have emitted
|
||||||
|
# `FORGE_BOT_USER_LLAMA`. With the fix each emission carries its own
|
||||||
|
# forge_user-derived suffix.
|
||||||
|
cat > "${FACTORY_ROOT}/projects/a.toml" <<'EOF'
|
||||||
|
name = "a"
|
||||||
|
repo = "a/a"
|
||||||
|
forge_url = "http://localhost:3000"
|
||||||
|
|
||||||
|
[agents.dev]
|
||||||
|
base_url = "http://10.10.10.1:8081"
|
||||||
|
model = "qwen"
|
||||||
|
api_key = "sk-no-key-required"
|
||||||
|
roles = ["dev"]
|
||||||
|
forge_user = "review-qwen"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
run bash -c "
|
||||||
|
set -euo pipefail
|
||||||
|
source '${ROOT}/lib/generators.sh'
|
||||||
|
_generate_local_model_services '${FACTORY_ROOT}/docker-compose.yml'
|
||||||
|
cat '${FACTORY_ROOT}/docker-compose.yml'
|
||||||
|
"
|
||||||
|
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[[ "$output" == *'FORGE_BOT_USER_REVIEW_QWEN: "review-qwen"'* ]]
|
||||||
|
[[ "$output" != *'FORGE_BOT_USER_DEV:'* ]]
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue