Skip to content

chore: release v0.4.0 #3

chore: release v0.4.0

chore: release v0.4.0 #3

Workflow file for this run

name: Release
on:
push:
tags:
- "v*.*.*"
permissions:
contents: write # needed to create GitHub Release
id-token: write # needed for PyPI OIDC trusted publishing
jobs:
test:
name: Pre-release tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
- name: Run full test suite
run: pytest tests/ -v --tb=short
build:
name: Build distribution
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
- name: Install build tools
run: pip install build
- name: Build sdist and wheel
run: python -m build
- name: Verify the build artifacts
run: |
pip install twine
twine check dist/*
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
github-release:
name: Create GitHub Release
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- name: Extract release notes from CHANGELOG
id: changelog
run: |
# Extract the section for this tag from CHANGELOG.md
VERSION="${GITHUB_REF_NAME#v}"
NOTES=$(awk "/^## \[$VERSION\]/{found=1; next} found && /^## \[/{exit} found{print}" CHANGELOG.md)
echo "notes<<EOF" >> $GITHUB_OUTPUT
echo "$NOTES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
body: ${{ steps.changelog.outputs.notes }}
files: dist/*
draft: false
prerelease: ${{ contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc') }}
pypi-publish:
name: Publish to PyPI
needs: build
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/project/timber-compiler/
steps:
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- name: Publish to PyPI (OIDC Trusted Publisher)
uses: pypa/gh-action-pypi-publish@release/v1
# No API token needed — uses GitHub OIDC.
# Configure Trusted Publisher on PyPI:
# Publisher: GitHub Actions
# Owner: kossisoroyce
# Repository: timber
# Workflow: release.yml
# Environment: pypi