Skip to content

Upload Python Package #113

Upload Python Package

Upload Python Package #113

Workflow file for this run

# This workflow will upload a Python Package using Twine when a release is created
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
# To run this workflow manually using GitHub CLI:
# Test build only:
# gh workflow run "Upload Python Package" --ref main --field test_mode=build-only
#
# Test with dry run (no actual publish):
# gh workflow run "Upload Python Package" --ref main --field test_mode=dry-run
#
# Test publish to TestPyPI (requires TEST_PYPI_API_TOKEN secret):
# gh workflow run "Upload Python Package" --ref main --field test_mode=testpypi
#
# To check workflow status:
# gh run list --workflow "Upload Python Package"
# gh run view <run-id>
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Upload Python Package
on:
release:
types: [published]
workflow_dispatch:
inputs:
test_mode:
description: 'Test mode (dry-run, testpypi, build-only)'
required: true
default: 'dry-run'
type: choice
options:
- dry-run
- testpypi
- build-only
permissions:
contents: read
id-token: write # Required for trusted publishing
jobs:
deploy:
runs-on: ubuntu-latest
environment:
name: ${{ github.event_name == 'release' && 'pypi' || 'test' }}
url: ${{ github.event_name == 'release' && 'https://pypi.org/p/agentops' || 'https://test.pypi.org/p/agentops' }}
steps:
- uses: actions/checkout@v4
- name: Setup UV
uses: astral-sh/setup-uv@v5
with:
python-version: '3.x'
- name: Build and publish
env:
PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
TEST_PYPI_TOKEN: ${{ secrets.TEST_PYPI_API_TOKEN }}
run: |
uv pip install build
uv build
# Extra safety check
if [[ "${{ github.event_name }}" == "workflow_dispatch" && "${{ github.event.inputs.test_mode }}" == "testpypi" ]]; then
echo "⚠️ Publishing to TestPyPI..."
sleep 5 # Give time to cancel if needed
fi
if [[ "${{ github.event.inputs.test_mode }}" == "dry-run" ]]; then
echo "🔍 Performing dry run..."
uv publish --dry-run
elif [[ "${{ github.event.inputs.test_mode }}" == "testpypi" ]]; then
uv publish --repository https://test.pypi.org/legacy/ --token $TEST_PYPI_TOKEN
elif [[ "${{ github.event.inputs.test_mode }}" == "build-only" ]]; then
echo "✅ Build completed successfully. Skipping publish."
elif [[ "${{ github.event_name }}" == "release" ]]; then
echo "⚠️ Publishing to PyPI in 10 seconds... (Ctrl+C to cancel)"
sleep 10
uv publish --token $PYPI_TOKEN
fi