forked from linux-nvme/libnvme
-
Notifications
You must be signed in to change notification settings - Fork 0
164 lines (141 loc) · 4.39 KB
/
release-python.yml
File metadata and controls
164 lines (141 loc) · 4.39 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
---
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@v4
- name: Allow workspace
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Check out specified tag
if: ${{ github.event.inputs.tag != '' }}
run: |
git fetch --tags
git checkout ${{ github.event.inputs.tag }}
- name: Build sdist
run: |
pipx run build --sdist
- name: Validate sdist
run: |
pipx run twine check dist/*.tar.gz
- uses: actions/upload-artifact@v4
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@v4
with:
fetch-depth: 0 # Required for `git describe`
- name: Allow workspace
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Check out specified tag
if: ${{ github.event.inputs.tag != '' }}
run: |
git fetch --tags
git checkout ${{ github.event.inputs.tag }}
- 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}"
# Check if REV is 0, and don't append '.dev' if so
if [ "$REV" -eq 0 ]; then
VERSION="${BASE_VERSION}"
else
VERSION="${BASE_VERSION}.dev${REV}"
fi
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@v4
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@v4
with:
name: test_pypi
path: dist
- name: Publish package to TestPyPI
uses: pypa/[email protected]
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.event_name == 'workflow_dispatch') && github.repository == 'linux-nvme/libnvme'
steps:
- name: Determine match status
id: match
run: |
VERSION=""
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
VERSION="${{ github.event.inputs.tag }}"
elif [[ "${GITHUB_REF}" == refs/tags/* ]]; then
VERSION="${GITHUB_REF##refs/tags/}"
fi
if [[ "$VERSION" =~ ^v([0-9]+\.[0-9]+)(\.[0-9]+)?(-rc[0-9]+)?$ ]]; then
echo "Tag version validated: $VERSION"
echo "match=true" >> $GITHUB_OUTPUT
else
echo "Invalid or missing tag: $VERSION"
echo "match=false" >> $GITHUB_OUTPUT
fi
- name: Download artifiact
uses: actions/download-artifact@v4
if: steps.check-tag.outputs.match == 'true'
with:
name: artifact
path: dist
- name: Publish package to PyPI
uses: pypa/[email protected]
if: steps.check-tag.outputs.match == 'true'