Skip to content

Commit 20847f1

Browse files
committed
Handle existing updater branches without PRs
1 parent fe79f16 commit 20847f1

1 file changed

Lines changed: 55 additions & 25 deletions

File tree

.github/scripts/update-country-package.sh

Lines changed: 55 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,34 @@ PYPROJECT="${PROJECT_PATH}/pyproject.toml"
4444
LOCKFILE="${PROJECT_PATH}/uv.lock"
4545
MODAL_APP="${PROJECT_PATH}/src/modal/app.py"
4646

47+
create_pr_body_file() {
48+
local changelog
49+
local pr_body_file
50+
51+
changelog=$(python3 "${ROOT_DIR}/.github/scripts/check-country-package-updates.py" \
52+
--package "$PACKAGE" \
53+
--old-version "$CURRENT" \
54+
--new-version "$LATEST" 2>/dev/null || true)
55+
56+
pr_body_file="$(mktemp)"
57+
{
58+
echo "## Summary"
59+
echo
60+
echo "Update ${DISPLAY_NAME} from ${CURRENT} to ${LATEST} in the simulation API runtime."
61+
if [[ -n "$changelog" ]]; then
62+
echo
63+
echo "## What changed (${CURRENT} -> ${LATEST})"
64+
echo
65+
echo "$changelog"
66+
fi
67+
echo
68+
echo "---"
69+
echo "Generated automatically by GitHub Actions."
70+
} > "$pr_body_file"
71+
72+
echo "$pr_body_file"
73+
}
74+
4775
if [[ ! -f "$PYPROJECT" || ! -f "$LOCKFILE" || ! -f "$MODAL_APP" ]]; then
4876
echo "ERROR: Expected simulation project files were not found under ${PROJECT_DIR}." >&2
4977
exit 1
@@ -89,19 +117,40 @@ fi
89117
BRANCH="auto/update-${PACKAGE}-${LATEST}"
90118
echo "Update available: ${CURRENT} -> ${LATEST}"
91119

92-
if git ls-remote --exit-code --heads origin "$BRANCH" >/dev/null 2>&1; then
93-
echo "Branch '${BRANCH}' already exists on remote. Skipping."
94-
exit 0
95-
fi
96-
97120
if [[ "$DRY_RUN" == "1" ]]; then
121+
if git ls-remote --exit-code --heads origin "$BRANCH" >/dev/null 2>&1; then
122+
echo "Dry run: remote branch '${BRANCH}' already exists; would ensure a PR exists for it."
123+
exit 0
124+
fi
98125
echo "Dry run: would create ${BRANCH} and update:"
99126
echo " ${PROJECT_DIR}/pyproject.toml"
100127
echo " ${PROJECT_DIR}/uv.lock"
101128
echo " ${PROJECT_DIR}/src/modal/app.py"
102129
exit 0
103130
fi
104131

132+
EXISTING_PR=$(gh pr list \
133+
--head "$BRANCH" \
134+
--state open \
135+
--json number \
136+
--jq '.[0].number' 2>/dev/null || true)
137+
if [[ -n "$EXISTING_PR" ]]; then
138+
echo "PR #${EXISTING_PR} already exists for ${BRANCH}. Skipping."
139+
exit 0
140+
fi
141+
142+
if git ls-remote --exit-code --heads origin "$BRANCH" >/dev/null 2>&1; then
143+
echo "Remote branch '${BRANCH}' already exists without an open PR. Creating PR."
144+
PR_BODY_FILE="$(create_pr_body_file)"
145+
gh pr create \
146+
--base main \
147+
--head "$BRANCH" \
148+
--title "chore(deps): update ${PACKAGE} to ${LATEST}" \
149+
--body-file "$PR_BODY_FILE"
150+
echo "PR created for existing branch ${BRANCH}"
151+
exit 0
152+
fi
153+
105154
git config user.name "github-actions[bot]"
106155
git config user.email "github-actions[bot]@users.noreply.github.com"
107156
git checkout -b "$BRANCH"
@@ -141,26 +190,7 @@ if git diff --quiet -- "$PYPROJECT" "$LOCKFILE" "$MODAL_APP"; then
141190
exit 0
142191
fi
143192

144-
CHANGELOG=$(python3 "${ROOT_DIR}/.github/scripts/check-country-package-updates.py" \
145-
--package "$PACKAGE" \
146-
--old-version "$CURRENT" \
147-
--new-version "$LATEST" 2>/dev/null || true)
148-
149-
PR_BODY_FILE="$(mktemp)"
150-
{
151-
echo "## Summary"
152-
echo
153-
echo "Update ${DISPLAY_NAME} from ${CURRENT} to ${LATEST} in the simulation API runtime."
154-
if [[ -n "$CHANGELOG" ]]; then
155-
echo
156-
echo "## What changed (${CURRENT} -> ${LATEST})"
157-
echo
158-
echo "$CHANGELOG"
159-
fi
160-
echo
161-
echo "---"
162-
echo "Generated automatically by GitHub Actions."
163-
} > "$PR_BODY_FILE"
193+
PR_BODY_FILE="$(create_pr_body_file)"
164194

165195
git add "$PYPROJECT" "$LOCKFILE" "$MODAL_APP"
166196
git commit -m "chore(deps): update ${PACKAGE} to ${LATEST}"

0 commit comments

Comments
 (0)