diff --git a/.github/workflows/sync-submodule.yml b/.github/workflows/sync-submodule.yml new file mode 100644 index 0000000..9012190 --- /dev/null +++ b/.github/workflows/sync-submodule.yml @@ -0,0 +1,110 @@ +name: Opdater submodule-pointer i alle forbrugende repos + +on: + push: + branches: [main] + workflow_dispatch: # Tillader manuel kørsel ved behov + +jobs: + # ------------------------------------------------------------------- + # Trin 1: Find dynamisk alle repos i organisationen som bruger + # bc-code-intelligence som en submodule. + # Ingen hardkodet liste – nye repos inkluderes automatisk. + # ------------------------------------------------------------------- + discover: + name: Find repos med bc-code-intelligence submodule + runs-on: ubuntu-latest + outputs: + repos: ${{ steps.find.outputs.repos }} + steps: + - name: Find alle repos der bruger denne submodule + id: find + env: + GH_TOKEN: ${{ secrets.ORG_SYNC_TOKEN }} + run: | + # Hent alle ikke-arkiverede repos i org'en (ingen hardkodet liste!) + ALL_REPOS=$(gh repo list kollabdk --limit 1000 --json name,isArchived \ + --jq '[.[] | select(.isArchived == false) | .name]') + + CONSUMING=() + for repo in $(echo "$ALL_REPOS" | jq -r '.[]'); do + # Spring dette repo selv over + [ "$repo" = "bc-code-intelligence" ] && continue + + # Tjek om repoet har en .gitmodules-fil der refererer til os + MODULES=$(gh api repos/kollabdk/$repo/contents/.gitmodules \ + --jq '.content' 2>/dev/null | base64 -d 2>/dev/null || true) + + if echo "$MODULES" | grep -q "bc-code-intelligence"; then + CONSUMING+=("\"$repo\"") + fi + done + + echo "repos=[$(IFS=,; echo "${CONSUMING[*]}")]" >> $GITHUB_OUTPUT + + # ------------------------------------------------------------------- + # Trin 2: Opdater submodule-pointeren i hvert forbrugende repo. + # Kører parallelt (max 10 ad gangen) for at undgå rate limiting. + # fail-fast: false sikrer at én fejl ikke stopper de øvrige repos. + # ------------------------------------------------------------------- + update: + name: Opdater ${{ matrix.repo }} + needs: discover + if: needs.discover.outputs.repos != '[]' + runs-on: ubuntu-latest + strategy: + matrix: + repo: ${{ fromJson(needs.discover.outputs.repos) }} + max-parallel: 10 + fail-fast: false + steps: + - name: Opdater submodule-pointer i ${{ matrix.repo }} + env: + GH_TOKEN: ${{ secrets.ORG_SYNC_TOKEN }} + NEW_SHA: ${{ github.sha }} + run: | + # Shallow clone af det forbrugende repo + git clone --depth=1 \ + https://x-access-token:$GH_TOKEN@github.com/kollabdk/${{ matrix.repo }}.git \ + target + + cd target + git config user.name "kollab-ai-sync[bot]" + git config user.email "ai-sync@kollab.dk" + + # Peg submodulet på den nye commit + git submodule update --init bc-code-intelligence + cd bc-code-intelligence + git fetch origin + git checkout $NEW_SHA + cd .. + + git add bc-code-intelligence + + # Spring over hvis der ikke er nogen ændring + if git diff --staged --quiet; then + echo "Ingen ændring nødvendig i ${{ matrix.repo }}, springer over." + exit 0 + fi + + git commit -m "chore: opdater bc-code-intelligence submodule til seneste version [skip ci]" + + # ----------------------------------------------------------- + # VALG: Direkte commit eller Pull Request? + # + # AKTIV: Direkte commit til main + # ----------------------------------------------------------- + git push origin main + + # ----------------------------------------------------------- + # ALTERNATIV: Opret en Pull Request i stedet for direkte push. + # Kommenter linjen ovenfor ud og fjern kommenteringen nedenfor. + # ----------------------------------------------------------- + # BRANCH="update-bc-intelligence-$(date +%Y%m%d-%H%M)" + # git checkout -b $BRANCH + # git push origin $BRANCH + # gh pr create \ + # --title "Opdater bc-code-intelligence submodule" \ + # --body "Automatisk opdatering til nyeste AI-personas og workflows fra bc-code-intelligence." \ + # --base main \ + # --head $BRANCH