87 lines
2.6 KiB
YAML
87 lines
2.6 KiB
YAML
name: Update Submodule Pointer
|
|
on:
|
|
repository_dispatch:
|
|
types: [submodule-updated]
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
update:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- name: Validate payload
|
|
env:
|
|
SERVICE: ${{ github.event.client_payload.service }}
|
|
SHA: ${{ github.event.client_payload.sha }}
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
if [ -z "${SERVICE:-}" ]; then
|
|
echo "::error::Missing service in payload"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${SHA:-}" ]; then
|
|
echo "::error::Missing sha in payload"
|
|
exit 1
|
|
fi
|
|
|
|
if ! [[ "$SHA" =~ ^[0-9a-fA-F]{40}$ ]]; then
|
|
echo "::error::Invalid sha '$SHA'. Expected 40 hex characters."
|
|
exit 1
|
|
fi
|
|
|
|
case "$SERVICE" in
|
|
scraper-api|hub|llm-api|tools) ;;
|
|
*)
|
|
echo "::error::Unsupported service '$SERVICE'"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "Payload validated: $SERVICE → $SHA"
|
|
|
|
- name: Update submodule pointer
|
|
env:
|
|
SERVICE: ${{ github.event.client_payload.service }}
|
|
SHA: ${{ github.event.client_payload.sha }}
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
# Map service name to submodule path
|
|
case "$SERVICE" in
|
|
scraper-api) SUBMODULE_PATH="apps/scraper" ;;
|
|
llm-api) SUBMODULE_PATH="apps/llm-api" ;;
|
|
*) SUBMODULE_PATH="apps/${SERVICE}" ;;
|
|
esac
|
|
|
|
echo "Updating ${SUBMODULE_PATH} to ${SHA}"
|
|
git submodule update --init "${SUBMODULE_PATH}"
|
|
cd "${SUBMODULE_PATH}"
|
|
git fetch --depth=1 origin master 2>/dev/null || git fetch --depth=1 origin main
|
|
git checkout "${SHA}"
|
|
cd "${GITHUB_WORKSPACE}"
|
|
git add "${SUBMODULE_PATH}"
|
|
git diff --cached --quiet && exit 0
|
|
|
|
git config user.name "monrepo-bot"
|
|
git config user.email "monrepo-bot@users.noreply.github.com"
|
|
git commit -m "chore: update ${SERVICE} to ${SHA:0:12}"
|
|
|
|
for attempt in {1..3}; do
|
|
if git pull --rebase origin main && git push origin main; then
|
|
echo "✅ Push succeeded on attempt $attempt"
|
|
exit 0
|
|
fi
|
|
echo "⚠️ Push attempt $attempt/3 failed; retrying..."
|
|
git rebase --abort 2>/dev/null || true
|
|
sleep 3
|
|
done
|
|
|
|
echo "::error::Failed to push submodule update after 3 attempts"
|
|
exit 1
|