-
Notifications
You must be signed in to change notification settings - Fork 264
154 lines (134 loc) · 4.97 KB
/
run_release.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
143
144
145
146
147
148
149
150
151
152
153
154
name: Run release
on:
# Trigger a beta version release (pre-release) on push to the master branch.
push:
branches:
- master
tags-ignore:
- "**" # Ignore all tags to prevent duplicate builds when tags are pushed.
# Trigger a stable version release via GitHub's UI, with the ability to specify the type of release.
workflow_dispatch:
inputs:
release_type:
description: Release type
required: true
type: choice
default: auto
options:
- auto
- custom
custom_version:
description: The custom version to bump to (only for "custom" type)
required: false
type: string
default: ''
jobs:
# This job determines if the conditions are met for a release to occur. It will proceed if triggered manually,
# for any published release, or if the commit on push does not begin with "docs" or "chore".
should_release:
name: Check whether to release
if: |
github.event_name == 'workflow_dispatch' ||
(
github.event_name == 'push' &&
!startsWith(github.event.head_commit.message, 'docs:') &&
!startsWith(github.event.head_commit.message, 'chore:') &&
!startsWith(github.event.head_commit.message, 'ci:')
)
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
outputs:
version_number: ${{ steps.version_number.outputs.result }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Locally remove beta tags
run: |
git tag | grep 'b[0-9]' | xargs git tag --delete
- name: Install git-cliff
run: pip install git-cliff
- name: Determine version number
id: version_number
run: |
if [[ '${{ github.event_name }}' = workflow_dispatch && '${{ github.event.inputs.release_type }}' = custom ]]; then
echo result=$(echo ${{ github.event.inputs.custom_version }} | sed s/^v//) | tee -a $GITHUB_OUTPUT
else
echo result=$(git-cliff --bumped-version | sed s/^v//) | tee -a $GITHUB_OUTPUT
fi
update_changelog:
name: Update changelog
needs: [should_release]
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write # Required for OIDC authentication.
outputs:
changelog_commitish: ${{ steps.commit.commit_long_sha || github.sha }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
- name: Locally remove beta tags
run: |
git tag | grep 'b[0-9]' | xargs git tag --delete
- name: Install git-cliff
run: pip install git-cliff
- name: Generate changelog with git-cliff
run: |
if [[ ${{ github.event_name }} = workflow_dispatch ]]; then
git-cliff --tag v${{ needs.should_release.outputs.version_number }} > CHANGELOG.md
else
git-cliff --with-tag-message v${{ needs.should_release.outputs.version_number }} > CHANGELOG.md
fi
- name: Install poetry
run: pipx install poetry
- name: Update package version in pyproject.toml
run: poetry version ${{ needs.should_release.outputs.version_number }}
- name: Commit changes
id: commit
uses: EndBug/add-and-commit@v9
with:
author_name: Apify Release Bot
author_email: [email protected]
message: 'chore(release): Update changelog and package version [skip ci]'
create_github_release:
name: Create github release
if: github.event_name == 'workflow_dispatch'
needs: [update_changelog, should_release]
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Locally remove beta tags
run: |
git tag | grep 'b[0-9]' | xargs git tag --delete
- name: Install git-cliff
run: pip install git-cliff
- name: Generate release notes with git-cliff
run: git-cliff --tag "v${{ needs.should_release.outputs.version_number }}" --unreleased --strip all > release_notes.md
- name: Create release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ needs.should_release.outputs.version_number }}
name: ${{ needs.should_release.outputs.version_number }}
target_commitish: ${{ needs.update_changelog.outputs.changelog_commitish }}
body_path: release_notes.md
publish_to_pypi:
name: Publish to PyPI
needs: [should_release]
uses: ./.github/workflows/_publish_to_pypi.yaml
with:
version_number: ${{ needs.should_release.outputs.version_number }}
# TODO: add job for publish package to Conda
# https://github.com/apify/crawlee-py/issues/104