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+
913jobs :
1014 bump :
1115 name : Bump Component Versions
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