Skip to content

Relax numpy version constraint. Bump version to 6.0.0rc3 #65

Relax numpy version constraint. Bump version to 6.0.0rc3

Relax numpy version constraint. Bump version to 6.0.0rc3 #65

Workflow file for this run

name: Build and upload to PyPI and create GitHub release
# https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/
concurrency:
group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }}
cancel-in-progress: true
on:
push:
tags:
- '[0-9]+.[0-9]+.[0-9]+*' # Push events for official release tags
- 'test-release/[0-9]+.[0-9]+.[0-9]+*' # Push events for test release tags
jobs:
# Job that builds PyPI style distribution artifacts
build-dist-artifacts:
# This job uses vanilla Python tools rather than Poetry, so we don't have to use third party GitHub actions
# e.g. pip, build, twine
# If we even want to, we could switch to using something like actions/setup-poetry (but do a search for current
# best implementations)
name: Build PyPI artifacts
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install build dependencies
run: python -m pip install build twine
- name: Build wheel and source distribution
run: |
python -m build
- name: Check README rendering for PyPI
run: twine check dist/*
# Save ("upload") the distribution artifacts for use by downstream Actions jobs
- name: Upload distribution artifacts
uses: actions/upload-artifact@v4 # This allows us to persist the dist directory after the job has completed
with:
name: python-package-distributions
path: dist/
if-no-files-found: error
# Job that pushes dist artifacts to public PyPI for official release tags
official-pypi-publish:
name: Upload official release to PyPI
# Prevent running on test-release tags
if: startsWith(github.ref, 'refs/tags/test-release') == false
needs:
- build-dist-artifacts
runs-on: ubuntu-latest
environment:
name: official-pypi-publish-environment
url: https://pypi.org/p/space_packet_parser # Public PyPI
permissions:
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
steps:
# This downloads the build artifacts from the build job
- name: Download distribution artifacts
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@v1.12.4
# Job that pushes dist artifacts to TestPyPI for test release tags
test-pypi-publish:
name: Upload testing release to TestPyPI
# Only run on test-release tags
if: startsWith(github.ref, 'refs/tags/test-release')
needs:
- build-dist-artifacts
runs-on: ubuntu-latest
environment:
name: test-pypi-publish-environment
url: https://test.pypi.org/p/space_packet_parser # TestPyPI
permissions:
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
steps:
# This downloads the build artifacts from the build job
- name: Download distribution artifacts
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@v1.12.4
with:
repository-url: https://test.pypi.org/legacy/
# Job that builds Conda package for distribution
anaconda-build-publish:
name: Build and publish Anaconda package
runs-on: ubuntu-latest
environment:
name: conda-publish-environment
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
channels: conda-forge,defaults
auto-update-conda: true
python-version: "3.11"
activate-environment: "test"
- name: Store conda-bld location
# This allows us to use this in multiple other steps
run: echo "CONDA_BLD_PATH=/usr/share/miniconda/envs/test/conda-bld" >> $GITHUB_ENV
- name: Build Conda package
shell: bash -l {0}
run: |
python --version
conda install -y conda-build conda-verify anaconda-client
conda build .
conda build --output .
- name: Test installing package from local channel
shell: bash -l {0}
run: |
echo $CONDA_BLD_PATH
python --version
conda create -n test-env -y -c file://$CONDA_BLD_PATH space_packet_parser
conda activate test-env
python -c "import space_packet_parser"
which spp
cat $(which spp)
spp --version
conda deactivate
# This makes the artifacts available for publishing to a GitHub release later
- name: Upload Conda build artifact
uses: actions/upload-artifact@v4
with:
name: conda-package
path: ${{ env.CONDA_BLD_PATH }}/**/space_packet_parser-*
- name: Publish to Anaconda
shell: bash -l {0}
env:
# We set "--channel test-release" if the tag starts with refs/tags/test-release
ANACONDA_CHANNEL_OPTION: ${{ startsWith(github.ref, 'refs/tags/test-release') && '--channel test-release' || '' }}
ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_TOKEN }}
run: |
anaconda upload --user ${{ vars.ANACONDA_USER_NAME }} $ANACONDA_CHANNEL_OPTION ${{ env.CONDA_BLD_PATH }}/**/space_packet_parser-*.conda
# Job that publishes a release to GitHub
create-github-release:
name: Create GitHub Release
runs-on: ubuntu-latest
environment:
name: create-github-release-environment
permissions:
id-token: write # IMPORTANT: mandatory for sigstore
contents: write # IMPORTANT: mandatory for making GitHub Releases
steps:
- name: Determine if the release is a prerelease
# Checks the regex form of the tag to see if there is a suffix after the semver
# Marks final releases only for tags matching the regex (no version suffixes)
# All other releases are marked as prereleases
# Sets the behavior by setting the PRE_RELEASE_OPTION environment variable in the GITHUB_ENV file.
# Note: This environment variable is only available to later steps via the ${{ env.PRE_RELEASE_OPTION }}
# syntax
run: |
if [[ ${{ github.ref_name }} =~ '^.*[0-9]*\.[0-9]*\.[0-9]*$' ]]; then
echo "PRE_RELEASE_OPTION=''" >> $GITHUB_ENV # Not a prerelease
else
echo "PRE_RELEASE_OPTION=--prerelease" >> $GITHUB_ENV # Is a prerelease
fi
- name: Get latest non-prerelease release
# This fetches the "latest" (non-prerelease) release ref,
# so we can generate release notes from that point instead of the most recent prerelease.
# Sets LATEST_RELEASE environment variable in the GITHUB_ENV file
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
latest_release=$(gh release list --repo "${{ github.repository }}" --limit 100 --json tagName,isPrerelease --jq '.[] | select(.isPrerelease == false) | .tagName' | head -n 1)
if [ -z "$latest_release" ]; then
echo "No non-prerelease release found."
exit 1
fi
echo "LATEST_RELEASE_TAG=$latest_release" >> $GITHUB_ENV
- name: Create GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
# Uses the GitHub CLI to generate the Release and auto-generate the release notes. Also generates
# the Release title based on the annotation on the git tag.
run: >-
RELEASE_NAME=$(basename "${{ github.ref_name }}")
gh release create
'${{ github.ref_name }}'
--repo '${{ github.repository }}'
--title "$RELEASE_NAME"
${{ env.PRE_RELEASE_OPTION }}
--generate-notes
--notes-start-tag '${{ env.LATEST_RELEASE_TAG }}'