-
Notifications
You must be signed in to change notification settings - Fork 0
136 lines (118 loc) · 4.07 KB
/
publish-to-pypi.yml
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
# This is a basic workflow to help you get started with uploading to pypi automatically
# https://packaging.python.org/tutorials/packaging-projects/
#
# Before running this workflow in your repository, you will need to set up Secrets in your repository settings:
# - Log in to your (test)PyPI account, go to your account -> your_project -> Publishing
# - Fill in the required fields (environment: release)
# - Create an API token for the repository and this workflow
# - Go to your repository on GitHub, click on the "Settings" tab.
# - Create an environment 'release' and set the security rules
# - Go to the "Secrets" tab, click on "New environment secret"
# - Add a new secret with the name PYPI_TOKEN and the value is your pypi token
# - Add a new secret with the name PYPI_TEST_TOKEN and the value is your test pypi token
# Then, define the name of your package and the python version you want to use in the env block below.
# This workflow will then automatically test, build and upload your package to PyPI/TestPypi:
# - When a new commit is pushed to main, it will build and upload to TestPyPI to catch errors early
# - When a new release is created, it will build and upload to the real PyPI
---
env:
PACKAGE_NAME: "cht_tiling" # the name of your package on PyPI
PYTHON_VERSION: "3.10" # the version of python used to build & publish the package. Tests will be run for all versions in the matrix
name: Build and Upload to PyPI
on:
push:
branches:
- main
tags:
- v*
pull_request:
branches:
- main
release:
types:
- published
workflow_dispatch:
jobs:
build-artifacts:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Install dependencies and build tools
shell: bash -l {0}
run: |
python -m pip install --upgrade pip
python -m pip install .
python -m pip install build
- name: Build package
shell: bash -l {0}
run: python -m build
- uses: actions/upload-artifact@v3
with:
name: releases
path: dist
test-built-dist: # Install the built package and test it has been built correctly
needs: [build-artifacts]
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: releases
path: dist
- name: List contents of built dist
run: |
ls -ltrh
ls -ltrh dist
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Verify the built dist/wheel is valid
run: |
python -m pip install dist/*.whl
python -c "import ${{ env.PACKAGE_NAME }}; print(${{ env.PACKAGE_NAME }}.__version__)"
upload-to-test-pypi:
environment: release
permissions:
id-token: write
needs: [test-built-dist]
if: ${{ github.event_name == 'release' && !github.event.act }}
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
with:
name: releases
path: dist
- name: Publish package to TestPyPI
uses: pypa/[email protected]
with:
user: __token__
password: ${{ secrets.TEST_PYPI_TOKEN }}
repository_url: https://test.pypi.org/legacy/
verbose: true
skip_existing: true
upload-to-pypi:
needs: [upload-to-test-pypi]
environment: release
permissions:
id-token: write
if: ${{ github.event_name == 'release' && !github.event.act }}
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
with:
name: releases
path: dist
- name: Publish package to PyPI
uses: pypa/[email protected]
with:
user: __token__
password: ${{ secrets.PYPI_TOKEN }}
verbose: true