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+
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