-
Notifications
You must be signed in to change notification settings - Fork 153
134 lines (116 loc) · 3.42 KB
/
release-python.yml
File metadata and controls
134 lines (116 loc) · 3.42 KB
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'