Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .github/workflows/publish-reusable.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Publish (reusable workflow)

on:
workflow_call:
inputs:
version:
description: 'Version number or tag for the release. For example: v1.0.1'
required: true
type: string
release_notes:
description: 'Release notes'
required: true
type: string
repository_url:
description: 'This is the repository-url parameter for pypa/gh-action-pypi-publish'
required: true
type: string
environment:
description: 'PyPI/TestPyPI name and url are required'
type: environment
required: true
secrets:
GH_TOKEN:
required: true

permissions:
contents: write
id-token: write # For trusted publishing

jobs:
publish:
name: Build
runs-on: ubuntu-latest
environment: ${{ inputs.environment }}
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
GITHUB_REPO: ${{ github.repository }}

steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

- name: Set up Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: "3.13"

- name: Install Hatch
run: pip install --upgrade hatch

- name: Build the wheel
run: python3 -m hatch build

- name: Upload artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
with:
name: python-package-distributions
path: dist/

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
with:
repository-url: ${{ inputs.repository_url }}

- name: Sign with sigstore
uses: sigstore/gh-action-sigstore-python@f832326173235dcb00dd5d92cd3f353de3188e6c # v3.1.0
with:
inputs: >-
./dist/*.tar.gz
./dist/*.whl

- name: Create GitHub Release
env:
VERSION: ${{ inputs.version }}
NOTES: ${{ inputs.release_notes }}
run: gh release create $VERSION --repo $GITHUB_REPO --notes $NOTES

- name: Upload GitHub Release
env:
VERSION: ${{ inputs.version }}
run: gh release upload $VERSION dist/** --repo $GITHUB_REPO
25 changes: 25 additions & 0 deletions .github/workflows/publish-to-testpypi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Publish to TestPyPI

on:
workflow_dispatch:
inputs:
version:
description: 'Version name for release'
required: true

jobs:
publish:
name: Publish wheel to TestPyPI
permissions:
contents: write
id-token: write # For trusted publishing
uses: .github/workflows/publish-reusable.yml@main
with:
version: ${{ inputs.version }}
release_notes: ${{ github.head_ref }}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just for testing?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, because this whole workflow is just for testing. It pushes to TestPyPI, so my intention is that we can do it whenever we feel like it, rather than just when we have a new release.

I'm planning to add a separate workflow for pushing to PyPI, which is why I've put most of the logic in a reusable workflow.

repository_url: https://test.pypi.org/legacy/
environment:
name: testpypi
url: https://test.pypi.org/p/seclab-taskflow-agent2
secrets:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}