Relax numpy version constraint. Bump version to 6.0.0rc3 #65
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }}' |