-
Notifications
You must be signed in to change notification settings - Fork 329
142 lines (122 loc) · 5.08 KB
/
daily-dev-bump.yaml
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
name: Bump Dev Version
on:
workflow_dispatch: # Allows for manual triggering if needed
inputs:
updateType:
description: "Update Type"
required: true
default: "dev"
type: choice
options:
- dev
- patch+dev
- minor+dev
- major+dev
draft:
description: "PR as Draft"
required: false
type: boolean
default: false
pull_request:
types: [closed]
schedule:
# * is a special character in YAML so you have to quote this string
- cron: "0 8 * * *" # Run every day at midnight Pacific Time
permissions:
contents: write
pull-requests: write
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
bump-version:
if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }}
name: Bump Version
runs-on: ubuntu-latest
steps:
- name: git clone devtools
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
ref: master
- uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f
- name: setup git config
run: |
git config user.name "DevTools Workflow Bot"
git config user.email "[email protected]"
- name: Bump the Version
id: version-bump
run: |
set -ex
pushd tool/
dart pub get
popd
ORIGINAL_VERSION=$(dart tool/update_version.dart current-version)
if [ -z "$UPDATE_TYPE" ]; then
# If $UPDATE_TYPE is not set, then assume it is dev
UPDATE_TYPE="dev"
fi
# If there is a major, minor, or patch bump, do it.
if [ "$UPDATE_TYPE" == "patch+dev" ]; then
dart tool/update_version.dart auto --type patch
dart tool/update_version.dart auto --type dev
elif [ "$UPDATE_TYPE" == "minor+dev" ]; then
dart tool/update_version.dart auto --type minor
dart tool/update_version.dart auto --type dev
elif [ "$UPDATE_TYPE" == "major+dev" ]; then
dart tool/update_version.dart auto --type major
dart tool/update_version.dart auto --type dev
elif [ "$UPDATE_TYPE" == "dev" ]; then
if ! echo "$ORIGINAL_VERSION" | grep -Eq "\-dev\.[0-9]+" ; then
ERROR_DESCRIPTION="Doing \
a Dev bump on a release version ($ORIGINAL_VERSION) is not supported. \
Ensure that that current version has been properly bumped to a '-dev.*' \
pre-release version, in order to continue daily dev bumps."
echo "::error ,title=Cannot do a dev bump on a Release Version ($ORIGINAL_VERSION)::$ERROR_DESCRIPTION"
exit 1;
fi
dart tool/update_version.dart auto --type dev
else
echo "ERROR: UNEXPECTED UPDATE TYPE: $UPDATE_TYPE"
exit 1
fi
NEW_VERSION=$(dart tool/update_version.dart current-version)
echo "COMMIT_MESSAGE=Updating from $ORIGINAL_VERSION to $NEW_VERSION" >> $GITHUB_OUTPUT
env:
UPDATE_TYPE: ${{ inputs.updateType }}
- name: Create the PR
run: |
set -ex
BRANCH_NAME="auto-bump-$(date +%s)"
# Stage the file, commit and push
git checkout -b "$BRANCH_NAME"
git commit -a -m "$COMMIT_MESSAGE"
git push -u origin "$BRANCH_NAME"
if [ "$IS_DRAFT" == "true" ]; then
CREATION_FLAGS="--draft"
fi
PR_URL=$(gh pr create --title "$COMMIT_MESSAGE" --body "Automated Version Bump" $CREATION_FLAGS)
# Change github credentials back to the actions bot.
GH_TOKEN="$ORIGINAL_GH_TOKEN"
gh pr edit $PR_URL $FLAGS --add-label "autosubmit"
env:
COMMIT_MESSAGE: ${{ steps.version-bump.outputs.COMMIT_MESSAGE }}
GH_TOKEN: ${{ secrets.DEVTOOLS_WORKFLOW_BOT_TOKEN }}
ORIGINAL_GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
IS_DRAFT: ${{ inputs.draft == true }}
clean-up-branches:
# If a pr is closed on a workflow bot PR, then clean up workflow bot branches.
if: ${{ github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.user.login == 'DartDevtoolWorkflowBot'}}
name: Clean up Dev Bump Branches
runs-on: ubuntu-latest
steps:
- name: Clean up branches
run: |
# Get 5 most recent branches of closed DartDevtoolWorkflowBot PRs.
CLOSED_BRANCH_NAMES=$(gh pr list -A DartDevtoolWorkflowBot -s closed -L 5 --search sort:created-desc | grep auto-bump- | sed 's|.*\(auto-bump-[[:digit:]]*\).*|\1|')
# Get list of refs(branches) that exist on the remote
EXISTING_REFS=$(git ls-remote --heads | grep refs/heads/auto-bump-)
for CLOSED_BRANCH in $CLOSED_BRANCH_NAMES; do
if echo "$EXISTING_REFS" | grep -q "$CLOSED_BRANCH" ; then
# If the branch still exists then we will delete it
gh api /repos/flutter/devtools/git/refs/heads/$CLOSED_BRANCH -X DELETE
fi
done