-
Notifications
You must be signed in to change notification settings - Fork 0
137 lines (131 loc) · 4.11 KB
/
Copy pathpython-publish.yml
File metadata and controls
137 lines (131 loc) · 4.11 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
name: Build & Release
on:
release:
types: [published]
permissions:
contents: read
jobs:
release-build:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install Poetry
uses: snok/install-poetry@v1
with:
version: latest
virtualenvs-create: true
virtualenvs-in-project: true
add-to-path: true
- name: Cache Poetry virtual environment
uses: actions/cache@v6
with:
path: .venv
key: venv-release-build-${{ runner.os }}-3.13-${{ hashFiles('poetry.lock') }}
restore-keys: |
venv-release-build-${{ runner.os }}-3.13-
- name: Install dependencies
run: poetry install --with dev --extras "rdkit gui" --no-interaction
- name: Test with pytest (coverage)
run: poetry run pytest -q --cov=pythonQEPest --cov-report=term-missing --cov-fail-under=40
- name: Build release distributions
run: poetry build
- name: Upload distributions
uses: actions/upload-artifact@v7
with:
name: release-dists
path: dist/
pypi-publish:
runs-on: ubuntu-24.04
needs: release-build
permissions:
id-token: write
environment:
name: pypi
steps:
- name: Retrieve release distributions
uses: actions/download-artifact@v8
with:
name: release-dists
path: dist/
- name: Publish release distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/
pyinstaller:
needs: release-build
strategy:
matrix:
os: [ windows-2022 ]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install Poetry
uses: snok/install-poetry@v1
with:
version: latest
virtualenvs-create: true
virtualenvs-in-project: true
add-to-path: true
- name: Add Poetry to PATH (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: echo "$env:USERPROFILE\.local\bin" >> $env:GITHUB_PATH
- name: Cache Poetry virtual environment
uses: actions/cache@v6
with:
path: .venv
key: venv-pyinstaller-${{ runner.os }}-3.13-${{ hashFiles('poetry.lock') }}
restore-keys: |
venv-pyinstaller-${{ runner.os }}-3.13-
- name: Install dependencies
run: poetry install --with dev --extras "gui" --no-interaction
- name: Extract version
id: version
shell: bash
run: echo "version=$(poetry version -s)" >> $GITHUB_OUTPUT
- name: Build CLI executable
run: poetry run pyinstaller main.spec
- name: Build GUI executable
run: poetry run pyinstaller gui.spec
- name: Rename executables with version
shell: bash
run: |
ver="${{ steps.version.outputs.version }}"
if [[ "${{ matrix.os }}" == *"windows"* ]]; then
mv dist/pythonQEPest.exe pythonQEPest-${ver}-win64.exe
mv dist/pythonQEPest-GUI.exe pythonQEPest-GUI-${ver}-win64.exe
else
mv dist/pythonQEPest pythonQEPest-${ver}-linux
mv dist/pythonQEPest-GUI pythonQEPest-GUI-${ver}-linux
fi
- name: Upload executables
uses: actions/upload-artifact@v7
with:
name: binaries-${{ matrix.os }}
path: pythonQEPest*
if-no-files-found: error
release:
needs: [pypi-publish, pyinstaller]
runs-on: ubuntu-24.04
permissions:
contents: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@v8
with:
path: artifacts
- name: Upload release assets
uses: softprops/action-gh-release@v3
with:
files: |
artifacts/**/*.exe
artifacts/**/*.whl
artifacts/**/*.tar.gz
- name: List uploaded files
run: find artifacts -type f