forked from apache/beam
-
Notifications
You must be signed in to change notification settings - Fork 0
212 lines (198 loc) · 8.98 KB
/
cut_release_branch.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# This workflow will update apache beam master branch with next release version
# and cut release branch for current development version.
# To learn more about GitHub Actions in Apache Beam check the CI.md
# Workflow used after https://github.com/apache/beam/commit/4183e747becebd18becee5fff547af365910fc9c
# If help is needed debugging issues, you can view the cut_release_branch.sh and start_snapshot_build.sh scripts at that commit
# for guidance on how to do this manually.
# (https://github.com/apache/beam/blob/4183e747becebd18becee5fff547af365910fc9c/release/src/main/scripts/cut_release_branch.sh and
# https://github.com/apache/beam/blob/4183e747becebd18becee5fff547af365910fc9c/release/src/main/scripts/start_snapshot_build.sh).
name: Cut Release Branch
on:
workflow_dispatch:
inputs:
RELEASE_VERSION:
description: Beam version of current release
required: true
default: '2.XX.0'
NEXT_VERSION:
description: Next release version
required: true
default: '2.XX.0'
JENKINS_USERNAME:
description: Username of the current Jenkins user. Used to update mass_comment.py with all Jenkins jobs.
required: true
JENKINS_TOKEN:
description: API Token for the current Jenkins user. Can be generated at https://ci-beam.apache.org/user/<user>/configure
required: true
CREATE_RELEASE_BRANCH:
description: Whether to cut the release branch. You shouldnt skip this unless it has already been completed successfully (yes/no)
required: true
default: 'yes'
permissions:
contents: write
pull-requests: write
jobs:
update_release_branch:
runs-on: ubuntu-latest
env:
RELEASE: ${{ github.event.inputs.RELEASE_VERSION }}
steps:
- name: Validate Release Version
run: |
if [[ ${RELEASE} =~ ([0-9]+\.[0-9]+\.[0-9]+) ]]; then
echo "RELEASE_VERSION=${BASH_REMATCH[1]}" >> $GITHUB_ENV
echo "RELEASE_BRANCH=release-${RELEASE}" >> $GITHUB_ENV
else
echo "The input for RELEASE does not match a valid format [0-9]+\.[0-9]+\.[0-9]+"
exit 1
fi
- name: Check out code
uses: actions/checkout@v3
- name: Set git config
run: |
git config user.name $GITHUB_ACTOR
git config user.email actions@"$RUNNER_NAME".local
- name: Checkout to release branch
run: |
git checkout -b ${RELEASE_BRANCH}
echo "==================Current working branch======================="
echo ${RELEASE_BRANCH}
echo "==============================================================="
- name: Update release version for dataflow runner
run: |
sed -i -e "s/'beam-master-.*'/'${RELEASE}'/g" \
runners/google-cloud-dataflow-java/build.gradle
echo "===============Update release branch as following=============="
git diff
echo "==============================================================="
- name: Commit and Push to release branch
run: |
git add runners/google-cloud-dataflow-java/build.gradle
git commit -m "Set Dataflow container to release version."
git push --set-upstream origin ${RELEASE_BRANCH}
if: ${{github.event.inputs.CREATE_RELEASE_BRANCH == 'yes'}}
update_master:
needs: update_release_branch
runs-on: ubuntu-latest
env:
MASTER_BRANCH: master
NEXT_RELEASE: ${{ github.event.inputs.NEXT_VERSION }}
SCRIPT_DIR: ./release/src/main/scripts
RELEASE: ${{ github.event.inputs.RELEASE_VERSION }}
steps:
- name: Mask Jenkins token
run: |
echo "::add-mask::$JENKINS_TOKEN"
env:
JENKINS_TOKEN: ${{ github.event.inputs.JENKINS_TOKEN }}
- name: Validate Next Version
run: |
if [[ $NEXT_RELEASE =~ ([0-9]+\.[0-9]+\.[0-9]+) ]]; then
echo "NEXT_VERSION_IN_BASE_BRANCH=${BASH_REMATCH[1]}" >> $GITHUB_ENV
else
echo "The input for NEXT_RELEASE does not match a valid format [0-9]+\.[0-9]+\.[0-9]+"
exit 1
fi
- name: Check out code
uses: actions/checkout@v3
- name: Set git config
run: |
git config user.name $GITHUB_ACTOR
git config user.email actions@"$RUNNER_NAME".local
- name: Install xmllint
run: sudo apt-get install -y libxml2-utils
- name: Update mass_comment.py with new Jenkins jobs
run: |
rm release/src/main/scripts/jenkins_jobs.txt
for obj in $(curl https://ci-beam.apache.org/api/json | jq '.jobs[]' -c); do
echo $obj
url=$(echo $obj | jq '.url' -r || echo "")
name=$(echo $obj | jq '.name' -r || echo "")
if [ "$url" != "" ] && [ "$name" != "" ]; then
curl --user $JENKINS_USERNAME:$JENKINS_TOKEN $url/config.xml > /tmp/config.xml
if [ "$(xmllint --xpath 'string(//disabled)' /tmp/config.xml)" = "true" ]; then
echo "SKIPPING $url - disabled"
else
phrase=$(xmllint --xpath 'string(//triggers/org.jenkinsci.plugins.ghprb.GhprbTrigger/triggerPhrase)' /tmp/config.xml)
if [ "$phrase" != "" ]; then
echo "Appending ${phrase},${name}"
echo "${phrase},${name}" >> /tmp/result
fi
fi
rm /tmp/config.xml
fi
done
cat /tmp/result | sort | uniq | grep -i -E 'precommit|postcommit|validates|vr|example|test' | grep -v -i -E 'load|perf|website' >> release/src/main/scripts/jenkins_jobs.txt
env:
JENKINS_USERNAME: ${{ github.event.inputs.JENKINS_USERNAME }}
JENKINS_TOKEN: ${{ github.event.inputs.JENKINS_TOKEN }}
- name: Update .asf.yaml to protect new release branch from force push
run: |
sed -i -e "s/master: {}/master: {}\n release-${RELEASE}: {}/g" .asf.yaml
- name: Update master branch
run: |
bash "${SCRIPT_DIR}/set_version.sh" "${NEXT_VERSION_IN_BASE_BRANCH}"
echo "==============Update master branch as following================"
git diff
echo "==============================================================="
- name: Commit and Push to master branch files with Next Version
run: |
git add *
git add .asf.yaml
git commit -m "Moving to ${NEXT_VERSION_IN_BASE_BRANCH}-SNAPSHOT on master branch."
git push origin ${MASTER_BRANCH}
start_snapshot_build:
needs: update_master
runs-on: ubuntu-latest
env:
REMOTE_NAME: remote_repo
REMOTE_URL: ${{ github.server_url }}/${{ github.repository }}
BRANCH_NAME: snapshot_build-${{ github.event.inputs.RELEASE_VERSION }}
RELEASE_BRANCH: release-${{ github.event.inputs.RELEASE_VERSION }}
steps:
- name: Install Hub
run: |
cd ~
wget https://github.com/github/hub/releases/download/v2.14.2/hub-linux-amd64-2.14.2.tgz
tar zvxvf hub-linux-amd64-2.14.2.tgz
sudo ./hub-linux-amd64-2.14.2/install
echo "eval "$(hub alias -s)"" >> ~/.bashrc
- uses: actions/checkout@v3
- name: Set git config
run: |
git config user.name $GITHUB_ACTOR
git config user.email actions@"$RUNNER_NAME".local
- name: Create Snapshot Branch
run: |
git remote add ${REMOTE_NAME} ${REMOTE_URL}
git checkout -b ${BRANCH_NAME}
touch empty_file.json
git add -A
git commit -m "Add empty file in order to create PR"
git push -f ${REMOTE_NAME}
- name: Create Pull Request
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
hub pull-request -b apache:${RELEASE_BRANCH} -F- <<<"[DO NOT MERGE]Start snapshot build for release process
Run Gradle Publish"
echo "NOTE: If there is no jenkins job started, please comment generated PR with: Run Gradle Publish"
echo "Things remained you need to do manually after build successful:"
echo "1. Close this generated PR in github website."
echo "2. Delete your remote branch ${BRANCH_NAME} form your beam repo in github website."