Skip to content

Commit b719e84

Browse files
committed
fix: Fix pr generation on version bump
1 parent 87ad03e commit b719e84

File tree

1 file changed

+90
-26
lines changed

1 file changed

+90
-26
lines changed

.github/workflows/ci-bump-component-versions.yaml

Lines changed: 90 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ on:
66
# Scheduled to run every hour on every day-of-week from Monday through Friday.
77
- cron: '0 * * * 1-5'
88

9+
permissions:
10+
contents: write
11+
pull-requests: write
12+
913
jobs:
1014
bump:
1115
name: Bump Component Versions
@@ -15,6 +19,20 @@ jobs:
1519
uses: actions/checkout@v4
1620
with:
1721
fetch-depth: 0 # required for tag metadata
22+
token: ${{ secrets.RELEASE_TOKEN }}
23+
24+
- name: Import GPG key
25+
uses: crazy-max/ghaction-import-gpg@v6
26+
with:
27+
gpg_private_key: ${{ secrets.OTELCOMM_BOT_GPG_PRIVATE_KEY_BASE64 }}
28+
passphrase: ${{ secrets.OTELCOMM_BOT_GPG_PASSPHRASE }}
29+
git_user_signingkey: true
30+
git_commit_gpgsign: true
31+
32+
- name: Set up Git
33+
run: |
34+
git config --global user.name 'github-actions[bot]'
35+
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
1836
1937
- name: Setup Go
2038
uses: actions/setup-go@v5
@@ -37,41 +55,87 @@ jobs:
3755
else
3856
echo "Unstaged changes found. Continuing..."
3957
echo "has_changes=true" >> $GITHUB_OUTPUT
58+
next_beta_core=$(echo "${output}" | jq -r '.nextVersions.betaCoreVersion')
59+
current_beta_core=$(echo "${output}" | jq -r '.currentVersions.betaCoreVersion')
60+
echo "next_beta_core=${next_beta_core}" >> $GITHUB_ENV
61+
echo "current_beta_core=${current_beta_core}" >> $GITHUB_ENV
62+
echo "branch=otel-release/${next_beta_core}" >> $GITHUB_ENV
4063
fi
4164
42-
- name: Setup ENV
43-
if: steps.bump_component_versions.outputs.has_changes == 'true'
44-
env:
45-
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
46-
run: |
47-
gh_username=$(gh api user | jq -r '.login')
48-
output=$(echo "${{ steps.bump_component_versions.outputs.output }}")
49-
echo "gh_username=${gh_username}" >> $GITHUB_ENV
50-
next_beta_core=$(echo "${output}" | jq -r '.nextVersions.betaCoreVersion')
51-
current_beta_core=$(echo "${output}" | jq -r '.currentVersions.betaCoreVersion')
52-
echo "next_beta_core=${next_beta_core}" >> $GITHUB_ENV
53-
echo "current_beta_core=${current_beta_core}" >> $GITHUB_ENV
54-
echo "branch=otel-release/${next_beta_core}" >> $GITHUB_ENV
55-
5665
- name: Commit Component Version Bump
5766
if: steps.bump_component_versions.outputs.has_changes == 'true'
58-
env:
59-
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
6067
run: |
61-
git switch -c ${{ env.branch }}
62-
git config --global user.name '${{ env.gh_username }}'
63-
git config --global user.email '${{ env.gh_username }}@users.noreply.github.com'
64-
68+
# Check if branch exists remotely
69+
if git ls-remote --heads origin ${{ env.branch }} | grep -q ${{ env.branch }}; then
70+
echo "Branch ${{ env.branch }} already exists, will be updated with local changes"
71+
git fetch origin ${{ env.branch }}:refs/remotes/origin/${{ env.branch }}
72+
73+
# Create new branch from current changes
74+
git switch -c temp-branch
75+
76+
# Force reset the existing branch to match main
77+
git checkout ${{ env.branch }} || git checkout -b ${{ env.branch }}
78+
git reset --hard origin/main
79+
80+
# Apply our changes from temp branch (like a rebase)
81+
git checkout temp-branch -- .
82+
else
83+
echo "Creating new branch ${{ env.branch }}"
84+
git switch -c ${{ env.branch }}
85+
fi
86+
87+
# Continue with commit and push
6588
git add --all
66-
git commit -m "feat: Bump otel component versions from ${{ env.current_beta_core }} to ${{ env.next_beta_core }}"
67-
git push origin ${{ env.branch }}
89+
git commit -S -m "feat: Bump otel component versions from ${{ env.current_beta_core }} to ${{ env.next_beta_core }}"
90+
git push --force origin ${{ env.branch }}
6891
6992
- name: Issue PR
7093
if: ${{ !env.ACT && steps.bump_component_versions.outputs.has_changes == 'true' }}
7194
env:
7295
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
7396
run: |
74-
gh pr create --title "Bump OTEL beta core to ${{ env.next_beta_core }}" \
75-
--body "Updates the version of the otel beta core from ${{ env.current_beta_core }} to ${{ env.next_beta_core }}." \
76-
--repo ${{ github.event.repository.name }} \
77-
--base main --head ${{ github.event.repository.name }}:${{ env.branch }}
97+
pr_title="feat: Bump OTEL beta core to ${{ env.next_beta_core }}"
98+
pr_body="Updates the version of the otel beta core from ${{ env.current_beta_core }} to ${{ env.next_beta_core }}"
99+
100+
# Find all open PRs with branches matching the pattern 'otel-release/v0*'
101+
echo "Searching for existing upgrade PRs to close..."
102+
old_prs=$(gh pr list --search "head:otel-release/v0" --state open --json number,headRefName --jq '.[] | select(.headRefName != "${{ env.branch }}")')
103+
104+
# Close each PR except for the current branch's PR
105+
if [ -n "$old_prs" ]; then
106+
echo "$old_prs" | jq -c '.' | while read -r pr; do
107+
pr_number=$(echo "$pr" | jq -r '.number')
108+
pr_branch=$(echo "$pr" | jq -r '.headRefName')
109+
110+
echo "Closing PR #$pr_number (branch: $pr_branch) as superseded by new PR"
111+
gh pr close $pr_number --comment "Closing in favor of newer version upgrade PR for ${{ env.next_beta_core }}"
112+
done
113+
else
114+
echo "No older upgrade PRs found to close"
115+
fi
116+
117+
# Check if PR already exists for this branch
118+
pr_exists=$(gh pr list --head "${{ env.branch }}" --json number --jq 'length')
119+
120+
if [ "$pr_exists" -gt "0" ]; then
121+
echo "PR already exists for branch ${{ env.branch }}, updating..."
122+
123+
# Get the PR number
124+
pr_number=$(gh pr list --repo "${{ github.repository }}" --head "${{ env.branch }}" --json number --jq '.[0].number')
125+
126+
# Update the PR title and body
127+
gh pr edit $pr_number \
128+
--repo "${{ github.repository }}" \
129+
--title "$pr_title" \
130+
--body "$pr_body"
131+
132+
echo "Updated PR #$pr_number"
133+
else
134+
echo "Creating new PR..."
135+
gh pr create \
136+
--title "$pr_title" \
137+
--body "$pr_body" \
138+
--repo "${{ github.repository }}" \
139+
--base main \
140+
--head "${{ env.branch }}"
141+
fi

0 commit comments

Comments
 (0)