fix: align docker-entrypoint.sh MANUAL_USER_MAPPINGS format with Go code

The entrypoint used jq to parse MANUAL_USER_MAPPINGS as JSON, but
ParseManualMappings() in Go uses "GiteaUsername:SlackID,GiteaUser2:SlackID2"
format. The mismatch caused "set -e" to kill the shell when jq failed
on non-JSON input, preventing the Go binary from ever starting.

Fix: replace jq JSON parsing with comma/colon splitting to match
the Go code's expected format.
This commit is contained in:
2026-06-29 20:05:30 +00:00
parent 1ab139baa4
commit b706bc2338
+1 -60
View File
@@ -1,60 +1 @@
#!/bin/sh IyEvYmluL3NoCnNldCAtZQoKIyBHZW5lcmF0ZSBjb25maWcueWFtbCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcwpta2RpciAtcCAvYXBwL2NvbmZpZwoKY2F0ID4gL2FwcC9jb25maWcvY29uZmlnLnlhbWwgPDwgJ1lBTUxFT0YnCnNlcnZlcjoKICBwb3J0OiA4MDgwCiAgd2ViaG9va19zZWNyZXQ6ICIke0dJVEVBX1dFQkhPT0tfU0VDUkVUfSIKCmlkZW50aXR5OgogIHByb3ZpZGVyOiBnaXRlYQogIGNhY2hlX3R0bDogMjRoCiAgZ2l0ZWE6CiAgICB1cmw6ICIke0dJVEVBX1VSTH0iCiAgICB0b2tlbjogIiR7R0lURUFfQVBJX1RPS0VOfSIKCm5vdGlmaWNhdGlvbjoKICBwcm92aWRlcjogc2xhY2sKICBzbGFjazoKICAgIGJvdF90b2tlbjogIiR7U0xBQ0tfQk9UX1RPS0VOfSIKCmRhdGFiYXNlOgogIGRyaXZlcjogc3FsaXRlCiAgZHNuOiAiLi9kYXRhL25vdGlmaWNhdGlvbnMuZGIiCgpydWxlczoKICBwcjoKICAgIG5vdGlmeV9vd25lcjogdHJ1ZQogICAgbm90aWZ5X3Jldmlld2VyczogdHJ1ZQogICAgbm90aWZ5X2Fzc2lnbmVlczogdHJ1ZQogIGlzc3VlOgogICAgbm90aWZ5X2Fzc2lnbmVlczogdHJ1ZQogIGNvbW1lbnQ6CiAgICBub3RpZnlfbWVudGlvbmVkOiB0cnVlCiAgICBub3RpZnlfdGhyZWFkX293bmVyOiB0cnVlCiAgICBub3RpZnlfcmV2aWV3ZXJzOiB0cnVlCllBTUxFT0YKCiMgU2VlZCBtYW51YWwgdXNlciBtYXBwaW5ncyBmcm9tIE1BTlVBTF9VU0VSX01BUFBJTkdTIGVudiB2YXIKIyBGb3JtYXQ6ICJHaXRlYVVzZXJuYW1lOlNsYWNrSUQsR2l0ZWFVc2VyMjpTbGFja0lEMiIgKHNhbWUgYXMgR28ncyBQYXJzZU1hbnVhbE1hcHBpbmdzKQojIFRoZXNlIGJ5cGFzcyB0aGUgR2l0ZWEgQVBJIGVtYWlsIGxvb2t1cCArIFNsYWNrIGVtYWlsIGxvb2t1cAoKaWYgWyAtbiAiJE1BTlVBTF9VU0VSX01BUFBJTkdTIiBdOyB0aGVuCiAgICAjIENyZWF0ZSB0YWJsZSBhbmQgaW5kZXhlcyB1c2luZyBzaW5nbGUtbGluZSBjYWxscyB0byBhdm9pZCBzaCBpc3N1ZXMgd2l0aCBtdWx0aS1saW5lIFNRTAogICAgc3FsaXRlMyAvYXBwL2RhdGEvbm90aWZpY2F0aW9ucy5kYiAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdXNlcnMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgZ2l0ZWFfdXNlcm5hbWUgVEVYVCBVTklRVUUsIGdpdGVhX2lkIElOVEVHRVIsIGVtYWlsIFRFWFQgVU5JUVVFLCBmdWxsX25hbWUgVEVYVCwgc2xhY2tfaWQgVEVYVCwgc2xhY2tfbmFtZSBURVhULCBjcmVhdGVkX2F0IERBVEVUSU1FIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsIHVwZGF0ZWRfYXQgREFURVRJTUUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCk7IiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICBzcWxpdGUzIC9hcHAvZGF0YS9ub3RpZmljYXRpb25zLmRiICJDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfdXNlcnNfZW1haWwgT04gdXNlcnMoZW1haWwpOyIgMj4vZGV2L251bGwgfHwgdHJ1ZQogICAgc3FsaXRlMyAvYXBwL2RhdGEvbm90aWZpY2F0aW9ucy5kYiAiQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgaWR4X3VzZXJzX2dpdGVhX3VzZXJuYW1lIE9OIHVzZXJzKGdpdGVhX3VzZXJuYW1lKTsiIDI+L2Rldi9udWxsIHx8IHRydWUKICAgIHNxbGl0ZTMgL2FwcC9kYXRhL25vdGlmaWNhdGlvbnMuZGIgIkNSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF91c2Vyc19zbGFja19pZCBPTiB1c2VycyhzbGFja19pZCk7IiAyPi9kZXYvbnVsbCB8fCB0cnVlCgogICAgZWNobyAiJE1BTlVBTF9VU0VSX01BUFBJTkdTIiB8IHRyICcsJyAnXG4nIHwgd2hpbGUgSUZTPSc6JyByZWFkIC1yIGdpdGVhX3VzZXIgc2xhY2tfaWQ7IGRvCiAgICAgICAgZ2l0ZWFfdXNlcj0kKGVjaG8gIiRnaXRlYV91c2VyIiB8IHhhcmdzKQogICAgICAgIHNsYWNrX2lkPSQoZWNobyAiJHNsYWNrX2lkIiB8IHhhcmdzKQogICAgICAgIFsgLXogIiRnaXRlYV91c2VyIiBdICYmIGNvbnRpbnVlCiAgICAgICAgWyAteiAiJHNsYWNrX2lkIiBdICYmIGNvbnRpbnVlCiAgICAgICAgc3FsaXRlMyAvYXBwL2RhdGEvbm90aWZpY2F0aW9ucy5kYiBcCiAgICAgICAgICAgICJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIHVzZXJzKGdpdGVhX3VzZXJuYW1lLCBzbGFja19pZCwgc2xhY2tfbmFtZSwgdXBkYXRlZF9hdCkgVkFMVUVTKCckZ2l0ZWFfdXNlcicsJyRzbGFja19pZCcsJyRnaXRlYV91c2VyJyxkYXRldGltZSgnbm93JykpOyIgXAogICAgICAgICAgICAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICBkb25lCmZpCgpleGVjIC4vZ2l0ZWEtbm90aWZpY2F0aW9uLWh1YiAtY29uZmlnIC9hcHAvY29uZmlnL2NvbmZpZy55YW1sCg==
set -e
# Generate config.yaml from environment variables
mkdir -p /app/config
cat > /app/config/config.yaml << 'YAMLEOF'
server:
port: 8080
webhook_secret: "${GITEA_WEBHOOK_SECRET}"
identity:
provider: gitea
cache_ttl: 24h
gitea:
url: "${GITEA_URL}"
token: "${GITEA_API_TOKEN}"
notification:
provider: slack
slack:
bot_token: "${SLACK_BOT_TOKEN}"
database:
driver: sqlite
dsn: "./data/notifications.db"
rules:
pr:
notify_owner: true
notify_reviewers: true
notify_assignees: true
issue:
notify_assignees: true
comment:
notify_mentioned: true
notify_thread_owner: true
notify_reviewers: true
YAMLEOF
# Seed manual user mappings from MANUAL_USER_MAPPINGS env var (JSON: {"gitea_username":"slack_id",...})
# These bypass the Gitea API email lookup + Slack email lookup
if [ -n "$MANUAL_USER_MAPPINGS" ]; then
# Create table and indexes using single-line calls to avoid sh issues with multi-line SQL
sqlite3 /app/data/notifications.db "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, gitea_username TEXT UNIQUE, gitea_id INTEGER, email TEXT UNIQUE, full_name TEXT, slack_id TEXT, slack_name TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP);" 2>/dev/null || true
sqlite3 /app/data/notifications.db "CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);" 2>/dev/null || true
sqlite3 /app/data/notifications.db "CREATE INDEX IF NOT EXISTS idx_users_gitea_username ON users(gitea_username);" 2>/dev/null || true
sqlite3 /app/data/notifications.db "CREATE INDEX IF NOT EXISTS idx_users_slack_id ON users(slack_id);" 2>/dev/null || true
echo "$MANUAL_USER_MAPPINGS" | jq -r 'to_entries[] | "\(.key) \(.value)"' 2>/dev/null | \
while read -r gitea_user slack_id; do
[ -z "$gitea_user" ] && continue
sqlite3 /app/data/notifications.db \
"INSERT OR REPLACE INTO users(gitea_username, slack_id, slack_name, updated_at) VALUES('$gitea_user','$slack_id','$gitea_user',datetime('now'));" \
2>/dev/null || true
done
fi
exec ./gitea-notification-hub -config /app/config/config.yaml