Skip to content

Commit ef8c5c3

Browse files
authored
fix: Fix pr generation on version bump (#317)
* fix: Fix pr generation on version bump * ci: Add links to changelogs in pr
1 parent 87ad03e commit ef8c5c3

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,21 @@ jobs:
1519
uses: actions/checkout@v4
1620
with:
1721
fetch-depth: 0 # required for tag metadata
22+
token: ${{ secrets.RELEASE_TOKEN }}
23+
ref: main
24+
25+
- name: Import GPG key
26+
uses: crazy-max/ghaction-import-gpg@v6
27+
with:
28+
gpg_private_key: ${{ secrets.OTELCOMM_BOT_GPG_PRIVATE_KEY_BASE64 }}
29+
passphrase: ${{ secrets.OTELCOMM_BOT_GPG_PASSPHRASE }}
30+
git_user_signingkey: true
31+
git_commit_gpgsign: true
32+
33+
- name: Set up Git
34+
run: |
35+
git config --global user.name 'github-actions[bot]'
36+
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
1837
1938
- name: Setup Go
2039
uses: actions/setup-go@v5
@@ -37,41 +56,86 @@ jobs:
3756
else
3857
echo "Unstaged changes found. Continuing..."
3958
echo "has_changes=true" >> $GITHUB_OUTPUT
59+
next_beta_core=$(echo "${output}" | jq -r '.nextVersions.betaCoreVersion')
60+
current_beta_core=$(echo "${output}" | jq -r '.currentVersions.betaCoreVersion')
61+
next_beta_contrib=$(echo "${output}" | jq -r '.nextVersions.betaContribVersion')
62+
current_beta_contrib=$(echo "${output}" | jq -r '.currentVersions.betaContribVersion')
63+
echo "next_beta_core=${next_beta_core}" >> $GITHUB_ENV
64+
echo "current_beta_core=${current_beta_core}" >> $GITHUB_ENV
65+
echo "next_beta_contrib=${next_beta_contrib}" >> $GITHUB_ENV
66+
echo "current_beta_contrib=${current_beta_contrib}" >> $GITHUB_ENV
67+
echo "branch=otel-release/${next_beta_core}" >> $GITHUB_ENV
4068
fi
4169
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-
5670
- name: Commit Component Version Bump
5771
if: steps.bump_component_versions.outputs.has_changes == 'true'
58-
env:
59-
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
6072
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-
73+
# Check if branch exists remotely
74+
if git ls-remote --heads origin ${{ env.branch }} | grep -q ${{ env.branch }}; then
75+
echo "Branch ${{ env.branch }} already exists, will be recreated from main"
76+
# Create new branch from main - no need to fetch existing branch
77+
git checkout -b ${{ env.branch }} origin/main
78+
else
79+
echo "Creating new branch ${{ env.branch }}"
80+
git switch -c ${{ env.branch }}
81+
fi
82+
83+
# Continue with commit and push
6584
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 }}
85+
git commit -S -m "feat: Bump otel component versions from ${{ env.current_beta_core }} to ${{ env.next_beta_core }}"
86+
git push --force origin ${{ env.branch }}
6887
6988
- name: Issue PR
7089
if: ${{ !env.ACT && steps.bump_component_versions.outputs.has_changes == 'true' }}
7190
env:
7291
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
7392
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 }}
93+
pr_title="feat: Bump OTEL beta core to ${{ env.next_beta_core }}"
94+
pr_body="Updates the version of the otel beta core from ${{ env.current_beta_core }} to ${{ env.next_beta_core }}
95+
## Changes
96+
- Beta Core: [${{ env.current_beta_core}}...${{ env.next_beta_core}}](https://github.com/open-telemetry/opentelemetry-collector-contrib/compare/${{ env.current_beta_core}}...${{ env.next_beta_core}})
97+
- Beta Contrib: [${{ env.current_beta_contrib}}...${{ env.next_beta_contrib}}](https://github.com/open-telemetry/opentelemetry-collector/compare/${{ env.current_beta_contrib}}...${{ env.next_beta_contrib}})
98+
"
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 --repo "${{ github.repository }}" --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)