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

Skip to content

Commit 7fafc64

Browse files
authored
Merge pull request #9 from lzchen/release-workflow
Release workflow
2 parents e073d4d + 9384cb1 commit 7fafc64

File tree

40 files changed

+597
-252
lines changed

40 files changed

+597
-252
lines changed

.github/scripts/set-git-user.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash -e
2+
3+
# TODO update with opentelemetry-python-bot or a shared otel bot
4+
git config user.name opentelemetry-java-bot
5+
git config user.email [email protected]

.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

.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: Set git user
25+
run: .github/scripts/set-git-user.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="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: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ on:
1313
jobs:
1414
changelog:
1515
runs-on: ubuntu-latest
16-
if: "!contains(github.event.pull_request.labels.*.name, 'Skip Changelog')"
16+
# TODO update with opentelemetry-python-bot or a shared otel bot
17+
if: |
18+
!contains(github.event.pull_request.labels.*.name, 'Skip Changelog')
19+
&& github.actor != 'opentelemetry-java-bot'
1720
1821
steps:
1922
- uses: actions/checkout@v2
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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+
prerelease_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 [[ $prerelease_version =~ ^0\.([0-9]+)b([0-9]+)$ ]]; then
36+
prerelease_minor="${BASH_REMATCH[1]}"
37+
prerelease_patch="${BASH_REMATCH[2]}"
38+
else
39+
echo "unexpected prerelease_version: $prerelease_version"
40+
exit 1
41+
fi
42+
43+
stable_version="$stable_major_minor.$((stable_patch + 1))"
44+
prerelease_version="0.${prerelease_minor}b$((prerelease_patch + 1))"
45+
46+
echo "STABLE_VERSION=$stable_version" >> $GITHUB_ENV
47+
echo "PRERELEASE_VERSION=$prerelease_version" >> $GITHUB_ENV
48+
echo "VERSION=${stable_version}/${prerelease_version}" >> $GITHUB_ENV
49+
50+
- name: Update version
51+
run: .github/scripts/update-version.sh $STABLE_VERSION $PRERELEASE_VERSION
52+
53+
- name: Update the change log with the approximate release date
54+
run: |
55+
date=$(date "+%Y-%m-%d")
56+
sed -Ei "s/^## Unreleased$/## Version ${VERSION/\//\\\/} ($date)/" CHANGELOG.md
57+
58+
- name: Set git user
59+
run: .github/scripts/set-git-user.sh
60+
61+
- name: Create pull request
62+
env:
63+
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows
64+
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
65+
run: |
66+
message="Prepare release ${VERSION}"
67+
branch="prepare-release-${VERSION/\//-}"
68+
69+
git commit -a -m "$message"
70+
git push origin HEAD:$branch
71+
gh pr create --title "[$GITHUB_REF_NAME] $message" \
72+
--body "$message." \
73+
--head $branch \
74+
--base $GITHUB_REF_NAME
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
name: Prepare release branch
2+
on:
3+
workflow_dispatch:
4+
5+
jobs:
6+
prereqs:
7+
runs-on: ubuntu-latest
8+
steps:
9+
- uses: actions/checkout@v3
10+
11+
- run: |
12+
if [[ $GITHUB_REF_NAME != main ]]; then
13+
echo this workflow should only be run against main
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+
create-pull-request-against-release-branch:
23+
runs-on: ubuntu-latest
24+
needs: prereqs
25+
steps:
26+
- uses: actions/checkout@v3
27+
28+
- name: Create release branch
29+
id: create-release-branch
30+
run: |
31+
stable_version=$(./scripts/eachdist.py version --mode stable)
32+
stable_version=${stable_version//-dev/}
33+
34+
prerelease_version=$(./scripts/eachdist.py version --mode prerelease)
35+
prerelease_version=${prerelease_version//-dev/}
36+
37+
if [[ $stable_version =~ ^([0-9]+)\.([0-9]+)\.0$ ]]; then
38+
stable_version_branch_part=$(echo $stable_version | sed -E 's/([0-9]+)\.([0-9]+)\.0/\1.\2.x/')
39+
prerelease_version_branch_part=$(echo $prerelease_version | sed -E 's/0\.([0-9]+)b0/0.\1bx/')
40+
release_branch_name="release/v${stable_version_branch_part}-${prerelease_version_branch_part}"
41+
elif [[ $stable_version =~ ^([0-9]+)\.([0-9]+)\.0 ]]; then
42+
# pre-release version, e.g. 1.9.0rc
43+
release_branch_name="release/v$stable_version-$prerelease_version"
44+
else
45+
echo "unexpected version: $stable_version"
46+
exit 1
47+
fi
48+
49+
git push origin HEAD:$release_branch_name
50+
51+
echo "STABLE_VERSION=$stable_version" >> $GITHUB_ENV
52+
echo "PRERELEASE_VERSION=$prerelease_version" >> $GITHUB_ENV
53+
echo "VERSION=${stable_version}/${prerelease_version}" >> $GITHUB_ENV
54+
echo "RELEASE_BRANCH_NAME=$release_branch_name" >> $GITHUB_ENV
55+
56+
- name: Update version
57+
run: .github/scripts/update-version.sh $STABLE_VERSION $PRERELEASE_VERSION
58+
59+
- name: Update the change log with the approximate release date
60+
run: |
61+
date=$(date "+%Y-%m-%d")
62+
sed -Ei "s/^## Unreleased$/## Version ${VERSION/\//\\\/} ($date)/" CHANGELOG.md
63+
64+
- name: Set git user
65+
run: .github/scripts/set-git-user.sh
66+
67+
- name: Create pull request against the release branch
68+
env:
69+
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows
70+
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
71+
run: |
72+
message="Prepare release ${VERSION}"
73+
branch="prepare-release-${VERSION/\//-}"
74+
75+
git commit -a -m "$message"
76+
git push origin HEAD:$branch
77+
gh pr create --title "[$RELEASE_BRANCH_NAME] $message" \
78+
--body "$message." \
79+
--head $branch \
80+
--base $RELEASE_BRANCH_NAME
81+
82+
create-pull-request-against-main:
83+
runs-on: ubuntu-latest
84+
needs: prereqs
85+
steps:
86+
- uses: actions/checkout@v3
87+
88+
- name: Set environment variables
89+
run: |
90+
stable_version=$(./scripts/eachdist.py version --mode stable)
91+
prerelease_version=$(./scripts/eachdist.py version --mode prerelease)
92+
93+
stable_version=${stable_version//-dev/}
94+
prerelease_version=${prerelease_version//-dev/}
95+
96+
if [[ $stable_version =~ ^([0-9]+)\.([0-9]+)\.0$ ]]; then
97+
stable_major="${BASH_REMATCH[1]}"
98+
stable_minor="${BASH_REMATCH[2]}"
99+
stable_next_version="$stable_major.$((stable_minor + 1)).0"
100+
elif [[ $stable_version =~ ^([0-9]+)\.([0-9]+)\.0 ]]; then
101+
# pre-release version, e.g. 1.9.0rc
102+
stable_major="${BASH_REMATCH[1]}"
103+
stable_minor="${BASH_REMATCH[2]}"
104+
stable_next_version="$stable_major.$stable_minor.0"
105+
else
106+
echo "unexpected stable_version: $stable_version"
107+
exit 1
108+
fi
109+
110+
if [[ $prerelease_version =~ ^0\.([0-9]+)b[0-9]+$ ]]; then
111+
prerelease_minor="${BASH_REMATCH[1]}"
112+
else
113+
echo "unexpected prerelease_version: $prerelease_version"
114+
exit 1
115+
fi
116+
117+
prerelease_next_version="0.$((prerelease_minor + 1))b0"
118+
119+
echo "STABLE_NEXT_VERSION=${stable_next_version}-dev" >> $GITHUB_ENV
120+
echo "PRERELEASE_NEXT_VERSION=${prerelease_next_version}-dev" >> $GITHUB_ENV
121+
echo "NEXT_VERSION=${stable_next_version}-dev/${prerelease_next_version}-dev" >> $GITHUB_ENV
122+
echo "VERSION=${stable_version}/${prerelease_version}" >> $GITHUB_ENV
123+
124+
- name: Update version
125+
run: .github/scripts/update-version.sh $STABLE_NEXT_VERSION $PRERELEASE_NEXT_VERSION
126+
127+
- name: Update the change log on main
128+
run: |
129+
# the actual release date on main will be updated at the end of the release workflow
130+
date=$(date "+%Y-%m-%d")
131+
sed -Ei "s/^## Unreleased$/## Unreleased\n\n## Version ${VERSION/\//\\\/} ($date)/" CHANGELOG.md
132+
133+
- name: Set git user
134+
run: .github/scripts/set-git-user.sh
135+
136+
- name: Create pull request against main
137+
env:
138+
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows
139+
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
140+
run: |
141+
message="Update version to ${NEXT_VERSION}"
142+
body="Update version to \`${NEXT_VERSION}\`."
143+
branch="update-version-to-${NEXT_VERSION/\//-}"
144+
145+
git commit -a -m "$message"
146+
git push origin HEAD:$branch
147+
gh pr create --title "$message" \
148+
--body "$body" \
149+
--head $branch \
150+
--base main

0 commit comments

Comments
 (0)