-
Notifications
You must be signed in to change notification settings - Fork 749
168 lines (154 loc) · 5.66 KB
/
manual_release_stable.yaml
File metadata and controls
168 lines (154 loc) · 5.66 KB
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
name: Stable release
on:
# Runs when manually triggered from the GitHub UI, with options to specify the type of release.
workflow_dispatch:
inputs:
release_type:
description: Release type
required: true
type: choice
default: auto
options:
- auto
- custom
- patch
- minor
- major
custom_version:
description: The custom version to bump to (only for "custom" type)
required: false
type: string
default: ""
concurrency:
group: release
cancel-in-progress: false
permissions:
contents: read
jobs:
code_checks:
name: Code checks
uses: ./.github/workflows/_check_code.yaml
release_prepare:
name: Release prepare
needs: [code_checks]
runs-on: ubuntu-latest
outputs:
version_number: ${{ steps.release_prepare.outputs.version_number }}
tag_name: ${{ steps.release_prepare.outputs.tag_name }}
changelog: ${{ steps.release_prepare.outputs.changelog }}
release_notes: ${{ steps.release_prepare.outputs.release_notes }}
steps:
- uses: apify/actions/git-cliff-release@v1.1.2
name: Release prepare
id: release_prepare
with:
release_type: ${{ inputs.release_type }}
custom_version: ${{ inputs.custom_version }}
existing_changelog_path: CHANGELOG.md
changelog_update:
name: Changelog update
needs: [release_prepare]
permissions:
contents: write
uses: apify/workflows/.github/workflows/python_bump_and_update_changelog.yaml@main
with:
version_number: ${{ needs.release_prepare.outputs.version_number }}
changelog: ${{ needs.release_prepare.outputs.changelog }}
secrets: inherit
github_release:
name: GitHub release
needs: [release_prepare, changelog_update]
runs-on: ubuntu-latest
permissions:
contents: write
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: GitHub release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.release_prepare.outputs.tag_name }}
name: ${{ needs.release_prepare.outputs.version_number }}
target_commitish: ${{ needs.changelog_update.outputs.changelog_commitish }}
body: ${{ needs.release_prepare.outputs.release_notes }}
pypi_publish:
name: PyPI publish
needs: [release_prepare, changelog_update]
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write # Required for OIDC authentication.
environment:
name: pypi
url: https://pypi.org/project/crawlee
steps:
- name: Prepare distribution
uses: apify/actions/prepare-pypi-distribution@v1.1.2
with:
package_name: crawlee
is_prerelease: ""
version_number: ${{ needs.release_prepare.outputs.version_number }}
ref: ${{ needs.changelog_update.outputs.changelog_commitish }}
- name: Verify built package
uses: apify/actions/python-package-check@v1.1.0
with:
package_name: crawlee
dist_dir: dist
python_version: "3.14"
extras: all
smoke_code: |
from crawlee.crawlers import (
HttpCrawler, BeautifulSoupCrawler, ParselCrawler,
PlaywrightCrawler, AdaptivePlaywrightCrawler,
)
from crawlee.storages import Dataset, KeyValueStore, RequestQueue
from crawlee.http_clients import HttpxHttpClient, ImpitHttpClient
from crawlee import Request
HttpCrawler()
BeautifulSoupCrawler()
ParselCrawler()
# Publish the package to PyPI using PyPA official GitHub action with OIDC authentication.
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
# TODO: add job for publish package to Conda
# https://github.com/apify/crawlee-python/issues/104
version_docs:
name: Version docs
needs: [release_prepare, changelog_update, pypi_publish]
permissions:
contents: write
uses: ./.github/workflows/manual_version_docs.yaml
with:
# Pass the bumped version explicitly — the job's checkout uses the dispatch ref (pre-bump),
# so `uv version --short` from pyproject.toml would return the old version.
version_number: ${{ needs.release_prepare.outputs.version_number }}
# This workflow has its own notify_on_failure; suppress the nested one to avoid duplicate alerts.
suppress_failure_notification: true
secrets: inherit
doc_release:
name: Doc release
needs: [changelog_update, pypi_publish, version_docs]
permissions:
contents: write
pages: write
id-token: write
uses: ./.github/workflows/manual_release_docs.yaml
with:
# This workflow has its own notify_on_failure; suppress the nested one to avoid duplicate alerts.
suppress_failure_notification: true
secrets: inherit
# Send a Slack notification to the team alerting channel when there is a failure.
# Also alerts on cancellation (e.g., env-gated `pypi_publish` / `github-pages` rejected by a reviewer
# or the approval timed out).
notify_on_failure:
name: Notify Slack on failure
needs: [code_checks, release_prepare, changelog_update, github_release, pypi_publish, version_docs, doc_release]
if: failure() || cancelled()
permissions:
contents: read
actions: read # Required for `gh api ...actions/runs/.../jobs` inside the reusable workflow.
uses: ./.github/workflows/_notify_slack_on_failure.yaml
with:
heading: ':red_circle: Stable release failed'
secrets:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}