name: Beta release on: # Runs when manually triggered from the GitHub UI, or dispatched from `on_master.yaml` # via the `apify/actions/execute-workflow` action for the automatic beta release on push to master. # Note: This workflow is intentionally NOT a reusable workflow (no `workflow_call`) because PyPI's # Trusted Publishing does not currently support reusable workflows. # See: https://docs.pypi.org/trusted-publishers/troubleshooting/#reusable-workflows-on-github workflow_dispatch: concurrency: group: release cancel-in-progress: false permissions: contents: read jobs: release_prepare: name: Release prepare runs-on: ubuntu-latest outputs: version_number: ${{ steps.release_prepare.outputs.version_number }} changelog: ${{ steps.release_prepare.outputs.changelog }} steps: - uses: apify/actions/git-cliff-release@v1.1.2 id: release_prepare name: Release prepare with: release_type: prerelease 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 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: "yes" 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 doc_release_post_publish: name: Doc release post publish needs: [changelog_update, pypi_publish] permissions: contents: write pages: write id-token: write uses: ./.github/workflows/manual_release_docs.yaml secrets: inherit