-
Notifications
You must be signed in to change notification settings - Fork 0
133 lines (113 loc) · 3.64 KB
/
publish.yml
File metadata and controls
133 lines (113 loc) · 3.64 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
name: Publish to PyPI
on:
release:
types: [published]
# Allow manual trigger for testing
workflow_dispatch:
inputs:
test_pypi:
description: "Publish to TestPyPI instead of PyPI"
required: false
default: false
type: boolean
# GitHub does not start new workflow runs for events caused by the default
# GITHUB_TOKEN (e.g. gh release create in another workflow). After
# "Release on merge" creates a release, trigger publish here instead.
workflow_run:
workflows: [Release on merge]
types: [completed]
permissions:
contents: read
id-token: write
jobs:
gate:
runs-on: ubuntu-latest
outputs:
publish: ${{ steps.decide.outputs.publish }}
steps:
- uses: actions/checkout@v6
if: github.event_name == 'workflow_run'
with:
ref: main
- id: decide
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
if [[ "${{ github.event_name }}" != "workflow_run" ]]; then
echo "publish=true" >> "${GITHUB_OUTPUT}"
exit 0
fi
if [[ "${{ github.event.workflow_run.conclusion }}" != "success" ]]; then
echo "publish=false" >> "${GITHUB_OUTPUT}"
exit 0
fi
VERSION="$(grep -m1 '^version = ' pyproject.toml | cut -d'"' -f2)"
TAG="v${VERSION}"
if gh release view "${TAG}" --repo "${{ github.repository }}" >/dev/null 2>&1; then
echo "publish=true" >> "${GITHUB_OUTPUT}"
else
echo "No GitHub release ${TAG} yet (or release job was skipped); skipping publish."
echo "publish=false" >> "${GITHUB_OUTPUT}"
fi
build:
name: Build distribution
needs: gate
if: needs.gate.outputs.publish == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event_name == 'workflow_run' && 'main' || github.event_name == 'release' && github.ref || 'main' }}
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.x"
- name: Install build dependencies
run: |
python -m pip install --upgrade pip
pip install build
- name: Build package
run: python -m build
- name: Store distribution packages
uses: actions/upload-artifact@v7
with:
name: python-package-distributions
path: dist/
publish-to-pypi:
name: Publish to PyPI
if: >-
github.event_name == 'workflow_run' ||
github.event_name == 'release' ||
(github.event_name == 'workflow_dispatch' && inputs.test_pypi == false)
needs: build
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/python-proxy-headers
steps:
- name: Download distribution packages
uses: actions/download-artifact@v8
with:
name: python-package-distributions
path: dist/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
publish-to-testpypi:
name: Publish to TestPyPI
if: github.event_name == 'workflow_dispatch' && inputs.test_pypi == true
needs: build
runs-on: ubuntu-latest
environment:
name: testpypi
url: https://test.pypi.org/p/python-proxy-headers
steps:
- name: Download distribution packages
uses: actions/download-artifact@v8
with:
name: python-package-distributions
path: dist/
- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/