139 lines
5.3 KiB
YAML
Vendored
139 lines
5.3 KiB
YAML
Vendored
# Copyright 2023 Shukant Pal
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
name: Publish Python 🐍 distribution 📦 to PyPI or TestPyPI
|
|
|
|
# https://github.com/pypa/gh-action-pypi-publish strongly recommends a
|
|
# separate publishing job when building platform-specific distribution
|
|
# packages, hence this.
|
|
#
|
|
# This should not be run until the release artifacts have been deployed.
|
|
# The only way I can see to trigger this automatically is to have all
|
|
# platform builds in a single workflow file and use on: `workflow_run`
|
|
# so this is triggered when that workflow completes. Once all platform
|
|
# builds are moved to GitHub Actions we can try making each platform
|
|
# workflow reusable and making another workflow that calls each of
|
|
# them via `uses` and use `on: workflow_run` here.
|
|
#
|
|
# We also have to figure out how to determine if the workflow deployed
|
|
# to releases. Maybe can use the GitHub REST API to get an artifact
|
|
# from the triggering workflow that is set only when deploying
|
|
# releases. See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow.
|
|
# Alternatively maybe there is some way of querying what triggered
|
|
# the workflow that we can test in an `if:` in the job as noted below.
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
# repository-url:
|
|
# description: 'destination repository'
|
|
# required: true
|
|
# default: 'https://pypi.org'
|
|
# type: choice
|
|
# options:
|
|
# - https://test.pypi.org
|
|
# - https://pypi.org
|
|
test-pypi:
|
|
type: boolean
|
|
description: 'Deploy to test pypi registry'
|
|
required: true
|
|
default: false
|
|
prerelease:
|
|
type: boolean
|
|
description: 'Deploy pre-release'
|
|
required: false
|
|
default: false
|
|
|
|
# Example to try in future.
|
|
# workflow_run:
|
|
# workflows: [KTX-Software Build All]
|
|
# types:
|
|
# - completed
|
|
# An unknown is how to limit the trigger to when deploy is run in
|
|
# Windows CI which is happens when that workflow is triggered by
|
|
# a push with the tags below.
|
|
# push:
|
|
# # Trigger on push of release tags. There is no way to limit the trigger
|
|
# # to a specific branch. A later build step checks for the main branch.
|
|
# tags:
|
|
# - 'v[0-9]+\.[0-9]+\.[0-9]+'
|
|
# - 'v[0-9]+\.[0-9]+\.[0-9]+-*'
|
|
|
|
env:
|
|
GIT_LFS_SKIP_SMUDGE: 1
|
|
INPUT_PRERELEASE: ${{ inputs.prerelease }}
|
|
|
|
jobs:
|
|
publish-to-pypi:
|
|
name: Publish Python 🐍 distribution 📦 to PyPI
|
|
if: ${{ ! inputs.test-pypi }}
|
|
runs-on: ubuntu-latest
|
|
# environment:
|
|
# name: pypi
|
|
# url: https://pypi.org/p/pyktx
|
|
# permissions:
|
|
# id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
|
|
# When using workflow_run it is necessary to check for successful
|
|
# completion of the workflow with
|
|
#if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
|
# Maybe it is possible to test for a release tag here too.
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up .netrc
|
|
env:
|
|
GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }}
|
|
run: echo -e "machine api.github.com login $GH_API_TOKEN" >> ~/.netrc
|
|
- name: Download pyktx assets from latest (pre-)release
|
|
run: |
|
|
echo INPUT_PRERELEASE = $INPUT_PRERELEASE
|
|
if [ "$INPUT_PRERELEASE" = "true" ]; then
|
|
option="--pre-release"
|
|
else
|
|
option=
|
|
fi
|
|
# Omit linux packages since PyPI won't accept them and, at the
|
|
# moment, we don't have a workflow to build manylinux wheels, which
|
|
# it will accept. It's non-trivial to implement that. See
|
|
# https://github.com/pypa/manylinux?tab=readme-ov-file#docker-images
|
|
scripts/download_release_assets.sh $option --filter '(?:^pyktx)(?!.*linux.*)' --output-dir dist
|
|
- name: Publish distribution 📦 to PyPI
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
with:
|
|
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
|
|
publish-to-testpypi:
|
|
name: Publish Python 🐍 distribution 📦 to TestPyPI
|
|
if: ${{ inputs.test-pypi }}
|
|
runs-on: ubuntu-latest
|
|
# environment:
|
|
# name: testpypi
|
|
# url: https://pypi.org/p/pyktx
|
|
# permissions:
|
|
# id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
|
|
# When using workflow_run it is necessary to check for successful
|
|
# completion of the workflow with
|
|
#if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
|
# Maybe it is possible to test for a release tag here too.
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up .netrc
|
|
env:
|
|
GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }}
|
|
run: echo -e "machine api.github.com login $GH_API_TOKEN" >> ~/.netrc
|
|
- name: Download pyktx assets from latest (pre-)release
|
|
run: |
|
|
echo INPUT_PRERELEASE = $INPUT_PRERELEASE
|
|
if [ "$INPUT_PRERELEASE" = "true" ]; then
|
|
option="--pre-release"
|
|
else
|
|
option=
|
|
fi
|
|
scripts/download_release_assets.sh $option --filter '(?:^pyktx)(?!.*linux.*)' --output-dir dist
|
|
- name: Publish distribution 📦 to TestPyPI
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
with:
|
|
repository-url: https://test.pypi.org/legacy/
|
|
password: ${{ secrets.TESTPYPI_API_TOKEN }}
|