From a3b991210748a183d7603e46365c97d7ca7c8aca Mon Sep 17 00:00:00 2001 From: Brian Bjarke Jensen Date: Sun, 28 Jun 2026 22:41:59 +0200 Subject: [PATCH] Fix dependency bot PR creation for Gitea. Replace peter-evans/create-pull-request with a Gitea API script that commits, pushes, and opens the deps update PR. Co-authored-by: Cursor --- .gitea/workflows/dependency-update-bot.yml | 15 ++--- scripts/ci/create-deps-update-pr.sh | 64 ++++++++++++++++++++++ 2 files changed, 72 insertions(+), 7 deletions(-) create mode 100755 scripts/ci/create-deps-update-pr.sh diff --git a/.gitea/workflows/dependency-update-bot.yml b/.gitea/workflows/dependency-update-bot.yml index 39d999e..421b04a 100644 --- a/.gitea/workflows/dependency-update-bot.yml +++ b/.gitea/workflows/dependency-update-bot.yml @@ -11,6 +11,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + with: + token: ${{ secrets.CI_RUNNER_TOKEN }} - name: Set up Python uses: actions/setup-python@v5 @@ -24,10 +26,9 @@ jobs: run: uv lock --upgrade - name: Commit and push changes - uses: peter-evans/create-pull-request@v6 - with: - commit-message: "chore(deps): update dependencies [automated]" - branch: "renovate/auto-deps-update" - title: "chore(deps): update dependencies" - body: "This PR was created automatically to update dependencies." - token: ${{ secrets.CI_RUNNER_TOKEN }} + env: + API_URL: ${{ vars.API_URL }} + REPO_OWNER: ${{ github.repository_owner }} + REPO_NAME: ${{ github.event.repository.name }} + CI_RUNNER_TOKEN: ${{ secrets.CI_RUNNER_TOKEN }} + run: scripts/ci/create-deps-update-pr.sh diff --git a/scripts/ci/create-deps-update-pr.sh b/scripts/ci/create-deps-update-pr.sh new file mode 100755 index 0000000..70a9551 --- /dev/null +++ b/scripts/ci/create-deps-update-pr.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +set -euo pipefail + +: "${API_URL:?API_URL is required}" +: "${REPO_OWNER:?REPO_OWNER is required}" +: "${REPO_NAME:?REPO_NAME is required}" +: "${CI_RUNNER_TOKEN:?CI_RUNNER_TOKEN is required}" +: "${GITHUB_SERVER_URL:?GITHUB_SERVER_URL is required}" +: "${GITHUB_REPOSITORY:?GITHUB_REPOSITORY is required}" + +BRANCH="${BRANCH:-renovate/auto-deps-update}" +BASE_BRANCH="${BASE_BRANCH:-main}" +LOCKFILE="${LOCKFILE:-uv.lock}" + +if git diff --quiet "$LOCKFILE"; then + echo "No dependency updates available." + exit 0 +fi + +git config user.name "CI Bot" +git config user.email "ci-bot@example.com" +git add "$LOCKFILE" +git commit -m "chore(deps): update dependencies [automated]" + +git remote set-url origin "https://x-access-token:${CI_RUNNER_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY}.git" +git push origin "HEAD:${BRANCH}" + +if curl -s "${API_URL}/repos/${REPO_OWNER}/${REPO_NAME}/pulls?state=open" \ + -H "Authorization: token ${CI_RUNNER_TOKEN}" \ + | BRANCH="$BRANCH" python3 -c ' +import json +import os +import sys + +branch = os.environ["BRANCH"] +prs = json.load(sys.stdin) +sys.exit(0 if any(pr.get("head", {}).get("ref") == branch for pr in prs) else 1) +'; then + echo "Pull request already exists; branch push updates it." + exit 0 +fi + +PAYLOAD=$(BRANCH="$BRANCH" BASE_BRANCH="$BASE_BRANCH" python3 -c ' +import json +import os + +print( + json.dumps( + { + "title": "chore(deps): update dependencies", + "body": "This PR was created automatically to update dependencies.", + "head": os.environ["BRANCH"], + "base": os.environ["BASE_BRANCH"], + } + ) +) +') + +curl -sf -X POST "${API_URL}/repos/${REPO_OWNER}/${REPO_NAME}/pulls" \ + -H "Authorization: token ${CI_RUNNER_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$PAYLOAD" + +echo "Created pull request."