1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
---
name: release python
on:
push:
branches: [master]
tags:
- '**'
workflow_dispatch:
inputs:
tag:
description: 'Tag to check out'
required: false
jobs:
build_sdist:
name: Build source distribution
runs-on: ubuntu-latest
env:
PYTHON_VERSION: "3.10"
container:
image: ghcr.io/linux-nvme/debian.python:latest
steps:
- uses: actions/checkout@v5
- name: Allow workspace
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Build sdist
run: |
pipx run build --sdist
- name: Validate sdist
run: |
pipx run twine check dist/*.tar.gz
- uses: actions/upload-artifact@v5
with:
path: dist/*.tar.gz
retention-days: 5
build_test_sdist:
name: Build test source distribution
runs-on: ubuntu-latest
env:
PYTHON_VERSION: "3.10"
container:
image: ghcr.io/linux-nvme/debian.python:latest
steps:
- name: Check out repository (with tags)
uses: actions/checkout@v5
with:
fetch-depth: 0 # Required for `git describe`
- name: Allow workspace
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Compute dev version from git
id: version
run: |
TAG=$(git describe --tags --abbrev=0)
REV=$(git rev-list "$TAG"..HEAD --count)
BASE_VERSION="${TAG#v}"
VERSION="${BASE_VERSION}.dev${REV}"
echo "dev_version=$VERSION" >> $GITHUB_OUTPUT
echo "Computed dev version: $VERSION"
- name: Patch version in meson.build
run: |
sed -i -e "0,/[ \t]version: /s/\([ \t]version: \).*/\1\'${{ steps.version.outputs.dev_version }}\',/" meson.build
- name: Build sdist
run: |
pipx run build --sdist
- name: Validate sdist
run: |
pipx run twine check dist/*.tar.gz
- uses: actions/upload-artifact@v5
with:
name: test_pypi
path: dist/*.tar.gz
retention-days: 5
upload_test_pypi:
needs: [build_test_sdist]
runs-on: ubuntu-latest
env:
PYTHON_VERSION: "3.10"
environment: pypi
permissions:
id-token: write
if: github.repository == 'linux-nvme/libnvme'
steps:
- uses: actions/download-artifact@v6
with:
name: test_pypi
path: dist
- name: Publish package to TestPyPI
uses: pypa/gh-action-pypi-publish@v1.13.0
with:
repository-url: https://test.pypi.org/legacy/
upload_pypi:
needs: [build_sdist]
runs-on: ubuntu-latest
env:
PYTHON_VERSION: "3.10"
environment: pypi
permissions:
id-token: write
if: startsWith(github.ref, 'refs/tags/v') && github.repository == 'linux-nvme/libnvme'
steps:
- name: Check if it is a release tag
id: check-tag
run: |
if [[ ${{ github.event.ref }} =~ ^refs/tags/v([0-9]+\.[0-9]+)(\.[0-9]+)?(-rc[0-9]+)?$ ]]; then
echo ::set-output name=match::true
fi
- name: Download artifiact
uses: actions/download-artifact@v6
if: steps.check-tag.outputs.match == 'true'
with:
name: artifact
path: dist
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@v1.13.0
if: steps.check-tag.outputs.match == 'true'
|