|
1 | | -name: Build Wheels and Release |
| 1 | +name: Release (GitHub/PyPI) and Deploy Docs |
2 | 2 |
|
3 | 3 | on: |
4 | 4 | workflow_dispatch: |
5 | 5 | push: |
6 | 6 | tags: |
7 | 7 | - "*" # Trigger on all tags initially, but tag and release privilege are verified in _build-wheel-release-upload.yml |
8 | 8 |
|
9 | | -env: |
10 | | - PYTHON_VERSIONS: '["3.11","3.12","3.13"]' |
11 | | - |
12 | | -permissions: |
13 | | - contents: write |
14 | | - actions: read |
15 | | - packages: write |
16 | | - |
17 | | -concurrency: |
18 | | - group: build-wheels-${{ github.ref }} |
19 | | - cancel-in-progress: true |
20 | | - |
21 | | -defaults: |
22 | | - run: |
23 | | - shell: bash {0} |
24 | | - |
25 | 9 | jobs: |
26 | | - get-python-versions: |
27 | | - runs-on: ubuntu-latest |
28 | | - outputs: |
29 | | - py_ver: ${{ steps.set.outputs.py_ver }} |
30 | | - py_last: ${{ steps.set.outputs.py_last }} |
31 | | - steps: |
32 | | - - id: set |
33 | | - run: | |
34 | | - echo py_ver=$PYTHON_VERSIONS >> $GITHUB_OUTPUT |
35 | | - echo "py_last=${{ fromJson(env.PYTHON_VERSIONS)[0] }}" >> $GITHUB_OUTPUT |
36 | | -
|
37 | | - check-tag-on-main: |
38 | | - runs-on: ubuntu-latest |
39 | | - steps: |
40 | | - - name: Checkout repository with full history |
41 | | - uses: actions/checkout@v4 |
42 | | - with: |
43 | | - token: ${{ secrets.PAT_TOKEN }} |
44 | | - fetch-depth: 0 |
45 | | - |
46 | | - - name: Verify tag |
47 | | - run: | |
48 | | - git fetch origin main |
49 | | - TAG_COMMIT=$(git rev-parse ${{ github.ref_name }}) |
50 | | - if git merge-base --is-ancestor "$TAG_COMMIT" origin/main; then |
51 | | - echo "Tag ${{ github.ref_name }} ($TAG_COMMIT) is contained in main" |
52 | | - else |
53 | | - echo "::error::Tag ${{ github.ref_name }} ($TAG_COMMIT) is not found in main. Please release from the main branch." |
54 | | - exit 1 |
55 | | - fi |
56 | | -
|
57 | | - check-tag-privilege: |
58 | | - # No third party actions used |
59 | | - uses: scikit-package/release-scripts/.github/workflows/_check-tag-privilege.yml@v0 |
| 10 | + build-release: |
| 11 | + uses: scikit-package/release-scripts/.github/workflows/_build-wheel-release-upload.yml@v0 |
60 | 12 | with: |
61 | | - maintainer_github_username: sbillinge |
62 | | - |
63 | | - build-sdist: |
64 | | - needs: [check-tag-privilege, get-python-versions, check-tag-on-main] |
65 | | - runs-on: ubuntu-latest |
66 | | - |
67 | | - steps: |
68 | | - - name: Checkout |
69 | | - # GitHub officially-maintained actions |
70 | | - uses: actions/checkout@v4 |
71 | | - with: |
72 | | - fetch-depth: 0 |
73 | | - |
74 | | - - name: Set up Python |
75 | | - # GitHub officially-maintained actions |
76 | | - uses: actions/setup-python@v5 |
77 | | - with: |
78 | | - python-version: ${{ needs.get-python-versions.outputs.py_last }} |
79 | | - |
80 | | - - name: Build docs and remove fonts that blow up the wheel size |
81 | | - run: | |
82 | | - python -m pip install Sphinx sphinx-rtd-theme sphinx-copybutton m2r |
83 | | - cd docs |
84 | | - make html |
85 | | - cd build/html/_static/css/fonts |
86 | | - find . -type f ! -name '*.ttf' -delete |
87 | | - cd ../.. |
88 | | - rm -rf fonts |
89 | | - cd .. |
90 | | - rm -rf _sources |
91 | | - cd .. |
92 | | - rm -rf doctrees |
93 | | - cd ../.. |
94 | | -
|
95 | | - - name: Make sdist |
96 | | - run: | |
97 | | - python -m pip install --upgrade pip build cython setuptools setuptools-git-versioning |
98 | | - python -m build --sdist --no-isolation |
99 | | -
|
100 | | - - name: Strip source codes |
101 | | - run: | |
102 | | - set -euo pipefail |
103 | | - tar xf dist/diffpy_srxplanargui-*.tar.gz |
104 | | - SRC_DIR=$(find . -maxdepth 1 -type d -name 'diffpy_srxplanargui-*' | head -n1) |
105 | | - find "$SRC_DIR" -type f -name '*.c' -print0 \ |
106 | | - | xargs -0 perl -i.bak -0777 -pe 's{/\*.*?\*/}{}gs' |
107 | | - find "$SRC_DIR" -type f -name '*.c.bak' -delete |
108 | | - tar czf dist/"${SRC_DIR#./}".tar.gz "$SRC_DIR" |
109 | | - rm -rf "$SRC_DIR" |
110 | | -
|
111 | | - - name: Upload sdist |
112 | | - # GitHub officially-maintained actions |
113 | | - uses: actions/upload-artifact@v4 |
114 | | - with: |
115 | | - name: sdist |
116 | | - path: dist/ |
117 | | - retention-days: 1 |
118 | | - |
119 | | - - name: Upload INSTRUCTIONS.txt |
120 | | - uses: actions/upload-artifact@v4 |
121 | | - with: |
122 | | - name: instructions |
123 | | - path: INSTRUCTIONS.txt |
124 | | - |
125 | | - build-wheels: |
126 | | - needs: [build-sdist, get-python-versions] |
127 | | - |
128 | | - name: Build wheels ${{ matrix.python }}-${{ matrix.buildplat }} |
129 | | - runs-on: ${{ matrix.buildplat }} |
130 | | - strategy: |
131 | | - fail-fast: false |
132 | | - matrix: |
133 | | - buildplat: |
134 | | - - ubuntu-latest |
135 | | - - macos-14 |
136 | | - - windows-latest |
137 | | - python: ${{ fromJSON(needs.get-python-versions.outputs.py_ver) }} |
138 | | - steps: |
139 | | - - name: Download sdist |
140 | | - # GitHub officially-maintained actions |
141 | | - uses: actions/download-artifact@v4 |
142 | | - with: |
143 | | - name: sdist |
144 | | - path: dist/ |
145 | | - |
146 | | - - name: Set up Python |
147 | | - uses: actions/setup-python@v5 |
148 | | - with: |
149 | | - python-version: ${{ matrix.python }} |
150 | | - |
151 | | - - name: Build wheels |
152 | | - run: | |
153 | | - # setuptools-git-versioning only look into .git and PKG-INFO in the top directory |
154 | | - which python; python --version |
155 | | - which pip; pip --version |
156 | | - python -m pip install --upgrade pip build cython setuptools setuptools-git-versioning |
157 | | - tar xf dist/diffpy_srxplanargui-*.tar.gz |
158 | | - cd diffpy_srxplanargui-* |
159 | | - python -m pip wheel . --no-deps --no-build-isolation --wheel-dir ./../dist |
160 | | -
|
161 | | - - name: Upload wheels |
162 | | - uses: actions/upload-artifact@v4 |
163 | | - with: |
164 | | - name: wheels-${{ matrix.python }}-${{ matrix.buildplat }} |
165 | | - path: dist/*.whl |
166 | | - |
167 | | - test-wheels: |
168 | | - needs: [build-wheels, get-python-versions] |
169 | | - |
170 | | - name: Test wheels ${{ matrix.python }}-${{ matrix.buildplat }} |
171 | | - runs-on: ${{ matrix.buildplat }} |
172 | | - strategy: |
173 | | - fail-fast: false |
174 | | - matrix: |
175 | | - buildplat: |
176 | | - - ubuntu-latest |
177 | | - - macos-14 |
178 | | - - windows-latest |
179 | | - python: ${{ fromJson(needs.get-python-versions.outputs.py_ver) }} |
180 | | - steps: |
181 | | - - name: Checkout |
182 | | - uses: actions/checkout@v4 |
183 | | - |
184 | | - - name: Download wheels |
185 | | - uses: actions/download-artifact@v4 |
186 | | - with: |
187 | | - name: wheels-${{ matrix.python }}-${{ matrix.buildplat }} |
188 | | - path: dist/ |
189 | | - |
190 | | - - name: Set up Python |
191 | | - uses: actions/setup-python@v5 |
192 | | - with: |
193 | | - python-version: ${{ matrix.python }} |
194 | | - |
195 | | - - name: Install wheels |
196 | | - run: | |
197 | | - python -m pip install --upgrade pip pytest setuptools-git-versioning |
198 | | - python -m pip install dist/*.whl |
199 | | -
|
200 | | - - name: Assert no source files in installed package |
201 | | - run: | |
202 | | - # For debugging |
203 | | - # touch $(python -c "import sysconfig, os; print(os.path.join(sysconfig.get_paths()['purelib'], 'diffpy/srxplanargui', 'fake.py'))") |
204 | | - python - << 'EOF' |
205 | | - import os, glob, sys, sysconfig |
206 | | - sp = sysconfig.get_paths()['purelib'] |
207 | | - pkg = os.path.join(sp, 'diffpy', 'srxplanargui') |
208 | | - patterns = [os.path.join(pkg, '*.py'), |
209 | | - os.path.join(pkg, '*.c')] |
210 | | - bad = [] |
211 | | - for p in patterns: |
212 | | - bad.extend(glob.glob(p)) |
213 | | -
|
214 | | - if bad: |
215 | | - print("Found leftover source files in installed package:") |
216 | | - for f in bad: |
217 | | - print(" -", f) |
218 | | - sys.exit(1) |
219 | | -
|
220 | | - print("No .py or .c files present in diffpy/srxplanargui/") |
221 | | - EOF |
222 | | -
|
223 | | - - name: Run tests |
224 | | - run: python -m pytest |
225 | | - |
226 | | - release: |
227 | | - needs: [test-wheels] |
228 | | - uses: ./.github/workflows/release-github.yml |
| 13 | + project: diffpy.srxplanargui |
| 14 | + c_extension: false |
| 15 | + maintainer_GITHUB_username: sbillinge |
229 | 16 | secrets: |
| 17 | + PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} |
230 | 18 | PAT_TOKEN: ${{ secrets.PAT_TOKEN }} |
0 commit comments