name: Update vendor submodules on: schedule: - cron: '0 */6 * * *' # Every 6 hours workflow_dispatch: # Manual trigger permissions: contents: write pull-requests: write jobs: update: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} # Identity must be set BEFORE any operation that can create a commit. # `git submodule update --remote --merge` used to fail here with # "Committer identity unknown" because the merge inside vendor/ruvector # needs an author when the pinned commit isn't a fast-forward of upstream. - name: Configure git identity run: | git config --global user.name "github-actions[bot]" git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" # Use a plain `--remote` checkout (detached HEAD at each submodule's # configured `branch` tip from .gitmodules) rather than `--merge`. We only # want to bump the superproject's gitlink to the latest upstream commit; # there's no reason to create merge commits inside the vendored repos, and # `--merge` breaks whenever the current pin has diverged from that branch. - name: Update submodules to latest tracked branch run: | git submodule sync --recursive git submodule update --remote --recursive - name: Check for changes id: check run: | if git diff --quiet; then echo "changed=false" >> "$GITHUB_OUTPUT" else echo "changed=true" >> "$GITHUB_OUTPUT" echo "--- submodule pointer changes ---" git submodule status --recursive || true git diff --submodule=log -- vendor/ || true fi - name: Create PR with updates if: steps.check.outputs.changed == 'true' run: | BRANCH="chore/update-submodules-$(date +%Y%m%d-%H%M%S)" git checkout -b "$BRANCH" git add vendor/ git commit -m "chore: update vendor submodules to latest upstream" git push origin "$BRANCH" gh pr create \ --title "chore: update vendor submodules" \ --body "Automated submodule update to the latest upstream commit on each submodule's tracked branch (see \`.gitmodules\`). Review the pointer diff before merging." \ --base main \ --head "$BRANCH" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}