Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3132a56

Browse files
authored
Automated release workflow (open-telemetry#2649)
1 parent 7d51d20 commit 3132a56

File tree

41 files changed

+676
-295
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+676
-295
lines changed

.github/scripts/update-version.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/bash -e
2+
3+
sed -i "/\[stable\]/{n;s/version=.*/version=$1/}" eachdist.ini
4+
sed -i "/\[prerelease\]/{n;s/version=.*/version=$2/}" eachdist.ini
5+
6+
./scripts/eachdist.py update_versions --versions stable,prerelease
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/bash -e
2+
3+
git config user.name opentelemetrybot
4+
git config user.email [email protected]

.github/workflows/backport.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: Backport
2+
on:
3+
workflow_dispatch:
4+
inputs:
5+
number:
6+
description: "The pull request # to backport"
7+
required: true
8+
9+
jobs:
10+
backport:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- run: |
14+
if [[ ! $GITHUB_REF_NAME =~ ^release/v[0-9]+\.[0-9]+\.x-0\.[0-9]+bx$ ]]; then
15+
echo this workflow should only be run against long-term release branches
16+
exit 1
17+
fi
18+
19+
- uses: actions/checkout@v3
20+
with:
21+
# history is needed to run git cherry-pick below
22+
fetch-depth: 0
23+
24+
- name: Use CLA approved github bot
25+
run: .github/scripts/use-cla-approved-github-bot.sh
26+
27+
- name: Create pull request
28+
env:
29+
NUMBER: ${{ github.event.inputs.number }}
30+
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows
31+
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
32+
run: |
33+
commit=$(gh pr view $NUMBER --json mergeCommit --jq .mergeCommit.oid)
34+
title=$(gh pr view $NUMBER --json title --jq .title)
35+
36+
branch="opentelemetrybot/backport-${NUMBER}-to-${GITHUB_REF_NAME//\//-}"
37+
38+
git cherry-pick $commit
39+
git push origin HEAD:$branch
40+
gh pr create --title "[$GITHUB_REF_NAME] $title" \
41+
--body "Clean cherry-pick of #$NUMBER to the \`$GITHUB_REF_NAME\` branch." \
42+
--head $branch \
43+
--base $GITHUB_REF_NAME

.github/workflows/changelog.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ on:
1313
jobs:
1414
changelog:
1515
runs-on: ubuntu-latest
16-
if: "!contains(github.event.pull_request.labels.*.name, 'Skip Changelog')"
16+
if: |
17+
!contains(github.event.pull_request.labels.*.name, 'Skip Changelog')
18+
&& github.actor != 'opentelemetrybot'
1719
1820
steps:
1921
- uses: actions/checkout@v2
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
name: Prepare patch release
2+
on:
3+
workflow_dispatch:
4+
5+
jobs:
6+
prepare-patch-release:
7+
runs-on: ubuntu-latest
8+
steps:
9+
- uses: actions/checkout@v3
10+
11+
- run: |
12+
if [[ ! $GITHUB_REF_NAME =~ ^release/v[0-9]+\.[0-9]+\.x-0\.[0-9]+bx$ ]]; then
13+
echo this workflow should only be run against long-term release branches
14+
exit 1
15+
fi
16+
17+
if ! grep --quiet "^## Unreleased$" CHANGELOG.md; then
18+
echo the change log is missing an \"Unreleased\" section
19+
exit 1
20+
fi
21+
22+
- name: Set environment variables
23+
run: |
24+
stable_version=$(./scripts/eachdist.py version --mode stable)
25+
unstable_version=$(./scripts/eachdist.py version --mode prerelease)
26+
27+
if [[ $stable_version =~ ^([0-9]+\.[0-9]+)\.([0-9]+)$ ]]; then
28+
stable_major_minor="${BASH_REMATCH[1]}"
29+
stable_patch="${BASH_REMATCH[2]}"
30+
else
31+
echo "unexpected stable_version: $stable_version"
32+
exit 1
33+
fi
34+
35+
if [[ $unstable_version =~ ^0\.([0-9]+)b([0-9]+)$ ]]; then
36+
unstable_minor="${BASH_REMATCH[1]}"
37+
unstable_patch="${BASH_REMATCH[2]}"
38+
else
39+
echo "unexpected unstable_version: $unstable_version"
40+
exit 1
41+
fi
42+
43+
stable_version="$stable_major_minor.$((stable_patch + 1))"
44+
unstable_version="0.${unstable_minor}b$((unstable_patch + 1))"
45+
46+
echo "STABLE_VERSION=$stable_version" >> $GITHUB_ENV
47+
echo "UNSTABLE_VERSION=$unstable_version" >> $GITHUB_ENV
48+
49+
- name: Update version
50+
run: .github/scripts/update-version.sh $STABLE_VERSION $UNSTABLE_VERSION
51+
52+
- name: Update the change log with the approximate release date
53+
run: |
54+
date=$(date "+%Y-%m-%d")
55+
sed -Ei "s/^## Unreleased$/## Version ${STABLE_VERSION}\/${UNSTABLE_VERSION} ($date)/" CHANGELOG.md
56+
57+
- name: Use CLA approved github bot
58+
run: .github/scripts/use-cla-approved-github-bot.sh
59+
60+
- name: Create pull request
61+
env:
62+
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows
63+
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
64+
run: |
65+
message="Prepare release ${STABLE_VERSION}/${UNSTABLE_VERSION}"
66+
branch="opentelemetrybot/prepare-release-${STABLE_VERSION}-${UNSTABLE_VERSION}"
67+
68+
git commit -a -m "$message"
69+
git push origin HEAD:$branch
70+
gh pr create --title "[$GITHUB_REF_NAME] $message" \
71+
--body "$message." \
72+
--head $branch \
73+
--base $GITHUB_REF_NAME
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
name: Prepare release branch
2+
on:
3+
workflow_dispatch:
4+
inputs:
5+
prerelease_version:
6+
description: "Pre-release version number? (e.g. 1.9.0rc2)"
7+
required: false
8+
9+
jobs:
10+
prereqs:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v3
14+
15+
- name: Verify prerequisites
16+
env:
17+
PRERELEASE_VERSION: ${{ github.event.inputs.prerelease_version }}
18+
run: |
19+
if [[ $GITHUB_REF_NAME != main ]]; then
20+
echo this workflow should only be run against main
21+
exit 1
22+
fi
23+
24+
if ! grep --quiet "^## Unreleased$" CHANGELOG.md; then
25+
echo the change log is missing an \"Unreleased\" section
26+
exit 1
27+
fi
28+
29+
if [[ ! -z $PRERELEASE_VERSION ]]; then
30+
stable_version=$(./scripts/eachdist.py version --mode stable)
31+
stable_version=${stable_version//.dev/}
32+
if [[ $PRERELEASE_VERSION != ${stable_version}* ]]; then
33+
echo "$PRERELEASE_VERSION is not a prerelease for the version on main ($stable_version)"
34+
exit 1
35+
fi
36+
fi
37+
38+
create-pull-request-against-release-branch:
39+
runs-on: ubuntu-latest
40+
needs: prereqs
41+
steps:
42+
- uses: actions/checkout@v3
43+
44+
- name: Create release branch
45+
env:
46+
PRERELEASE_VERSION: ${{ github.event.inputs.prerelease_version }}
47+
run: |
48+
if [[ -z $PRERELEASE_VERSION ]]; then
49+
stable_version=$(./scripts/eachdist.py version --mode stable)
50+
stable_version=${stable_version//.dev/}
51+
else
52+
stable_version=$PRERELEASE_VERSION
53+
fi
54+
55+
unstable_version=$(./scripts/eachdist.py version --mode prerelease)
56+
unstable_version=${unstable_version//.dev/}
57+
58+
if [[ $stable_version =~ ^([0-9]+)\.([0-9]+)\.0$ ]]; then
59+
stable_version_branch_part=$(echo $stable_version | sed -E 's/([0-9]+)\.([0-9]+)\.0/\1.\2.x/')
60+
unstable_version_branch_part=$(echo $unstable_version | sed -E 's/0\.([0-9]+)b0/0.\1bx/')
61+
release_branch_name="release/v${stable_version_branch_part}-${unstable_version_branch_part}"
62+
elif [[ $stable_version =~ ^([0-9]+)\.([0-9]+)\.0 ]]; then
63+
# pre-release version, e.g. 1.9.0rc2
64+
release_branch_name="release/v$stable_version-$unstable_version"
65+
else
66+
echo "unexpected version: $stable_version"
67+
exit 1
68+
fi
69+
70+
git push origin HEAD:$release_branch_name
71+
72+
echo "STABLE_VERSION=$stable_version" >> $GITHUB_ENV
73+
echo "UNSTABLE_VERSION=$unstable_version" >> $GITHUB_ENV
74+
echo "RELEASE_BRANCH_NAME=$release_branch_name" >> $GITHUB_ENV
75+
76+
- name: Update version
77+
run: .github/scripts/update-version.sh $STABLE_VERSION $UNSTABLE_VERSION
78+
79+
- name: Update the change log with the approximate release date
80+
run: |
81+
date=$(date "+%Y-%m-%d")
82+
sed -Ei "s/^## Unreleased$/## Version ${STABLE_VERSION}\/${UNSTABLE_VERSION} ($date)/" CHANGELOG.md
83+
84+
- name: Use CLA approved github bot
85+
run: .github/scripts/use-cla-approved-github-bot.sh
86+
87+
- name: Create pull request against the release branch
88+
env:
89+
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows
90+
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
91+
run: |
92+
message="Prepare release ${STABLE_VERSION}/${UNSTABLE_VERSION}"
93+
branch="opentelemetrybot/prepare-release-${STABLE_VERSION}-${UNSTABLE_VERSION}"
94+
95+
git commit -a -m "$message"
96+
git push origin HEAD:$branch
97+
gh pr create --title "[$RELEASE_BRANCH_NAME] $message" \
98+
--body "$message." \
99+
--head $branch \
100+
--base $RELEASE_BRANCH_NAME
101+
102+
create-pull-request-against-main:
103+
runs-on: ubuntu-latest
104+
needs: prereqs
105+
steps:
106+
- uses: actions/checkout@v3
107+
108+
- name: Set environment variables
109+
env:
110+
PRERELEASE_VERSION: ${{ github.event.inputs.prerelease_version }}
111+
run: |
112+
if [[ -z $PRERELEASE_VERSION ]]; then
113+
stable_version=$(./scripts/eachdist.py version --mode stable)
114+
stable_version=${stable_version//.dev/}
115+
else
116+
stable_version=$PRERELEASE_VERSION
117+
fi
118+
119+
unstable_version=$(./scripts/eachdist.py version --mode prerelease)
120+
unstable_version=${unstable_version//.dev/}
121+
122+
if [[ $stable_version =~ ^([0-9]+)\.([0-9]+)\.0$ ]]; then
123+
stable_major="${BASH_REMATCH[1]}"
124+
stable_minor="${BASH_REMATCH[2]}"
125+
stable_next_version="$stable_major.$((stable_minor + 1)).0"
126+
elif [[ $stable_version =~ ^([0-9]+)\.([0-9]+)\.0 ]]; then
127+
# pre-release version, e.g. 1.9.0rc2
128+
stable_major="${BASH_REMATCH[1]}"
129+
stable_minor="${BASH_REMATCH[2]}"
130+
stable_next_version="$stable_major.$stable_minor.0"
131+
else
132+
echo "unexpected stable_version: $stable_version"
133+
exit 1
134+
fi
135+
136+
if [[ $unstable_version =~ ^0\.([0-9]+)b[0-9]+$ ]]; then
137+
unstable_minor="${BASH_REMATCH[1]}"
138+
else
139+
echo "unexpected unstable_version: $unstable_version"
140+
exit 1
141+
fi
142+
143+
unstable_next_version="0.$((unstable_minor + 1))b0"
144+
145+
echo "STABLE_VERSION=${stable_version}" >> $GITHUB_ENV
146+
echo "STABLE_NEXT_VERSION=${stable_next_version}.dev" >> $GITHUB_ENV
147+
148+
echo "UNSTABLE_VERSION=${unstable_version}" >> $GITHUB_ENV
149+
echo "UNSTABLE_NEXT_VERSION=${unstable_next_version}.dev" >> $GITHUB_ENV
150+
151+
- name: Update version
152+
run: .github/scripts/update-version.sh $STABLE_NEXT_VERSION $UNSTABLE_NEXT_VERSION
153+
154+
- name: Update the change log on main
155+
run: |
156+
# the actual release date on main will be updated at the end of the release workflow
157+
date=$(date "+%Y-%m-%d")
158+
sed -Ei "s/^## Unreleased$/## Unreleased\n\n## Version ${STABLE_VERSION}\/${UNSTABLE_VERSION} ($date)/" CHANGELOG.md
159+
160+
- name: Use CLA approved github bot
161+
run: .github/scripts/use-cla-approved-github-bot.sh
162+
163+
- name: Create pull request against main
164+
env:
165+
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows
166+
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
167+
run: |
168+
message="Update version to ${STABLE_NEXT_VERSION}/${UNSTABLE_NEXT_VERSION}"
169+
body="Update version to \`${STABLE_NEXT_VERSION}/${UNSTABLE_NEXT_VERSION}\`."
170+
branch="opentelemetrybot/update-version-to-${STABLE_NEXT_VERSION}-${UNSTABLE_NEXT_VERSION}"
171+
172+
git commit -a -m "$message"
173+
git push origin HEAD:$branch
174+
gh pr create --title "$message" \
175+
--body "$body" \
176+
--head $branch \
177+
--base main

.github/workflows/publish.yml

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)