This repository has been archived by the owner on Dec 21, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 52
123 lines (111 loc) · 4.59 KB
/
release.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
name: Release
on:
workflow_dispatch:
inputs:
semver-type:
description: 'Can be one of [major,minor,patch]. CAUTION: This will enforce a new release with the specified semantic version type bumped.'
required: false
env:
NODE_VERSION: 14
KEPTN_BOT_NAME: "Keptn Bot"
KEPTN_BOT_EMAIL: "keptn-bot <[email protected]>"
RELEASE_NOTES_FILE: "RELEASE-BODY.md"
defaults:
run:
shell: bash
jobs:
release:
name: "Release"
runs-on: ubuntu-20.04
steps:
- name: Check SemVer input
env:
SEMVER_TYPE: ${{ github.event.inputs.semver-type }}
run: |
if [[ ! -z "$SEMVER_TYPE" ]]; then
echo "SemVer Type is defined. Checking for valid SemVer type..."
if [[ "$SEMVER_TYPE" == "major" ]] || [[ "$SEMVER_TYPE" == "minor" ]] || [[ "$SEMVER_TYPE" == "patch" ]]; then
echo "::notice::SemVer Type is correctly set to $SEMVER_TYPE! Continuing with this version bump..."
else
echo "::error::ERROR: Enforced SemVer does not match any of [major,minor,patch]!"
echo "Exiting..."
exit 1
fi
else
echo "::notice::No SemVer type defined, continuing with auto generated version number..."
fi
- name: Checkout repo
uses: actions/checkout@v2
with:
fetch-depth: 0
token: ${{ secrets.KEPTN_BOT_TOKEN }}
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: ${{ env.NODE_VERSION }}
- name: Configure Git
env:
KEPTN_BOT_NAME: ${{ env.KEPTN_BOT_NAME }}
KEPTN_BOT_EMAIL: ${{ env.KEPTN_BOT_EMAIL }}
run: |
git config user.name "$KEPTN_BOT_NAME"
git config user.email "$KEPTN_BOT_EMAIL"
- name: Prepare GitHub Release Notes
env:
SEMVER_TYPE: ${{ github.event.inputs.semver-type }}
run: |
# Delete pre-release tags to be able to generate a changelog from last 'real' release
# This is a workaround for a known limitation of standard-version
# Reference: https://github.com/conventional-changelog/standard-version/issues/203#issuecomment-872415140
git tag -l | grep -vE '^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$' | xargs git tag -d
if [[ ! -z "$SEMVER_TYPE" ]]; then
npx standard-version@^9.3.1 \
-i "${{ env.RELEASE_NOTES_FILE }}" \
--skip.commit \
--skip.tag \
--header "" \
--release-as "$SEMVER_TYPE"
else
npx standard-version@^9.3.1 \
-i "${{ env.RELEASE_NOTES_FILE }}" \
--skip.commit \
--skip.tag \
--header ""
fi
- name: Temporarily disable "include administrators" branch protection
uses: benjefferies/branch-protection-bot@6d0ac2b2d9bfd39794b017f8241adb7da7f0ab98 # [email protected]
with:
access_token: ${{ secrets.KEPTN_BOT_TOKEN }}
branch: ${{ github.event.repository.default_branch }}
enforce_admins: false
- name: Create release package
id: create-release-package
env:
SEMVER_TYPE: ${{ github.event.inputs.semver-type }}
GITHUB_TOKEN: ${{ secrets.KEPTN_BOT_TOKEN }}
run: |
echo "🚀 Creating release package now..."
if [[ ! -z "$SEMVER_TYPE" ]]; then
npx standard-version@^9.3.1 \
--release-as "$SEMVER_TYPE"
else
npx standard-version@^9.3.1
fi
echo "::set-output name=tag-name::$(git describe --tags --abbrev=0)"
echo "Fetching previously deleted old tags..."
git fetch origin --tags -f
echo "⚡️ Pushing changes to remote repository..."
git push --follow-tags
- name: Enable "include administrators" branch protection
uses: benjefferies/branch-protection-bot@6d0ac2b2d9bfd39794b017f8241adb7da7f0ab98 # [email protected]
if: always() # Force to always run this step to ensure "include administrators" is always turned back on
with:
access_token: ${{ secrets.KEPTN_BOT_TOKEN }}
branch: ${{ github.event.repository.default_branch }}
enforce_admins: true
- name: Create GitHub Release
env:
GITHUB_TOKEN: ${{ secrets.KEPTN_BOT_TOKEN }}
RELEASE_TAG: ${{ steps.create-release-package.outputs.tag-name }}
run: |
gh release create "$RELEASE_TAG" --draft --notes-file "${{ env.RELEASE_NOTES_FILE }}" --title "$RELEASE_TAG"