| name: Create Release and Publish to PyPI |
| |
|
|
| on: |
| pull_request: |
| types: [closed] |
| branches: |
| - main |
|
|
| jobs: |
| create-release-and-publish: |
| if: github.event.pull_request.merged == true |
| runs-on: ubuntu-latest |
| environment: |
| name: PyPI |
| url: https://pypi.org/p/scrapling |
| permissions: |
| contents: write |
| id-token: write |
| steps: |
| - uses: actions/checkout@v6 |
| with: |
| fetch-depth: 0 |
|
|
| - name: Get PR title |
| id: pr_title |
| run: echo "title=${{ github.event.pull_request.title }}" >> $GITHUB_OUTPUT |
|
|
| - name: Save PR body to file |
| uses: actions/github-script@v8 |
| with: |
| script: | |
| const fs = require('fs'); |
| fs.writeFileSync('pr_body.md', context.payload.pull_request.body || ''); |
| |
| - name: Extract version |
| id: extract_version |
| run: | |
| PR_TITLE="${{ steps.pr_title.outputs.title }}" |
| if [[ $PR_TITLE =~ ^v ]]; then |
| echo "version=$PR_TITLE" >> $GITHUB_OUTPUT |
| echo "Valid version format found in PR title: $PR_TITLE" |
| else |
| echo "Error: PR title '$PR_TITLE' must start with 'v' (e.g., 'v1.0.0') to create a release." |
| exit 1 |
| fi |
| |
| - name: Create Release |
| uses: softprops/action-gh-release@v2 |
| with: |
| tag_name: ${{ steps.extract_version.outputs.version }} |
| name: Release ${{ steps.extract_version.outputs.version }} |
| body_path: pr_body.md |
| draft: false |
| prerelease: false |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
|
|
| - name: Set up Python |
| uses: actions/setup-python@v6 |
| with: |
| python-version: 3.12 |
|
|
| - name: Upgrade pip |
| run: python3 -m pip install --upgrade pip |
|
|
| - name: Install build |
| run: python3 -m pip install --upgrade build twine setuptools |
|
|
| - name: Build a binary wheel and a source tarball |
| run: python3 -m build --sdist --wheel --outdir dist/ |
|
|
| - name: Publish distribution 📦 to PyPI |
| uses: pypa/gh-action-pypi-publish@release/v1 |