@@ -19,42 +19,65 @@ jobs:
1919 defaults :
2020 run :
2121 working-directory : ./nrtest-swmm
22-
2322 steps :
2423 - name : Checkout repo
2524 uses : actions/checkout@v5
26-
2725 - name : Install Python
2826 uses : actions/setup-python@v5
2927 with :
30- python-version : ' 3.10'
31-
28+ python-version : " 3.10"
3229 - name : Build wheel
3330 run : |
34- pip install wheel
35- python setup.py bdist_wheel
36-
31+ pip install wheel
32+ python setup.py bdist_wheel
33+
3734 - name : Upload wheel artifact
3835 uses : actions/upload-artifact@v4
3936 with :
4037 name : nrtest-swmm-wheel
4138 path : nrtest-swmm/dist/*.whl
42-
39+
40+ build_sdist :
41+ name : Build source distribution
42+ runs-on : ubuntu-latest
43+ defaults :
44+ run :
45+ working-directory : ./swmm-toolkit
46+ steps :
47+ - name : Checkout repo
48+ uses : actions/checkout@v5
49+ - name : Install Python
50+ uses : actions/setup-python@v5
51+ with :
52+ python-version : " 3.12"
53+ - name : Build sdist
54+ run : |
55+ pip install build
56+ python -m build --sdist --outdir ./dist
57+ - name : Upload sdist artifact
58+ uses : actions/upload-artifact@v4
59+ with :
60+ name : swmm-toolkit-sdist
61+ path : swmm-toolkit/dist/*.tar.gz
4362
4463 build_wheels :
4564 runs-on : ${{ matrix.os }}
4665 strategy :
4766 fail-fast : false
4867 matrix :
49- os : [ubuntu-latest, windows-latest, macos-latest]
50- pyver : [cp39, cp310, cp311, cp312, cp313]
51-
68+ os :
69+ [
70+ ubuntu-24.04,
71+ ubuntu-24.04-arm,
72+ windows-2025,
73+ macos-15-intel,
74+ macos-15,
75+ ]
5276 steps :
5377 - name : Checkout repo
54- uses : actions/checkout@v3
78+ uses : actions/checkout@v5
5579 with :
56- submodules : true
57-
80+ submodules : true
5881 - name : Build wheels
5982 uses : pypa/cibuildwheel@v3.1.4
6083 with :
@@ -63,65 +86,57 @@ jobs:
6386 MACOSX_DEPLOYMENT_TARGET : " 11.0"
6487 CIBW_TEST_COMMAND : " pytest {package}/tests"
6588 CIBW_BEFORE_TEST : pip install -r {package}/test-requirements.txt
66- # mac needs ninja to build
67- CIBW_BEFORE_BUILD_MACOS : brew install ninja
89+ CIBW_ENVIRONMENT_MACOS : |
90+ MACOSX_DEPLOYMENT_TARGET=11.0
6891 # remove system swig (cmake bug doesn't respect python venv)
6992 # https://github.com/swig/swig/issues/2481#issuecomment-1949573105
7093 CIBW_BEFORE_BUILD_LINUX : rm -f $(which swig) && rm -f $(which swig4.0)
71- # configure cibuildwheel to build native archs ('auto'), and some emulated ones
72- CIBW_ARCHS_LINUX : x86_64
73- CIBW_ARCHS_WINDOWS : AMD64
74- CIBW_ARCHS_MACOS : x86_64 arm64
75- # only build current supported python: https://devguide.python.org/versions/
76- # don't build pypy or musllinux to save build time. TODO: find a good way to support those archs
77- CIBW_BUILD : ${{matrix.pyver}}-*
78- CIBW_SKIP : cp38-* pp* *-musllinux*
79- # Will avoid testing on emulated architectures
80- # Skip trying to test arm64 builds on Intel Macs
81- CIBW_TEST_SKIP : " *-*linux_{aarch64,ppc64le,s390x} *-macosx_universal2:arm64"
94+ # skip 3.8 and any free threaded variants
95+ CIBW_SKIP : cp38-* cp3??t-*
96+ CIBW_ARCHS : native
8297 CIBW_BUILD_VERBOSITY : 1
83-
8498 - uses : actions/upload-artifact@v4
8599 with :
86- name : wheels-${{ matrix.os }}- ${{ matrix.pyver }}
100+ name : swmm-toolkit-bdist- ${{ matrix.os }}
87101 path : ./wheelhouse/*.whl
88102
89- build_cross_wheels :
103+ merge_wheels :
104+ name : Consolidate all wheel artifacts
90105 runs-on : ubuntu-latest
91- strategy :
92- fail-fast : false
93- matrix :
94- pyver : [cp39, cp310, cp311, cp312, cp313]
95-
106+ needs :
107+ - build_wheels
108+ - build_sdist
96109 steps :
97- - name : Checkout repo
98- uses : actions/checkout @v5
110+ - name : Download all distribution artifacts
111+ uses : actions/download-artifact @v5
99112 with :
100- submodules : true
113+ path : dist
114+ pattern : swmm-toolkit-*dist*
115+ merge-multiple : true
101116
102- - name : Set up QEMU
103- if : runner.os == 'Linux'
104- uses : docker/setup-qemu-action@v2
117+ - name : Upload consolidated archive
118+ uses : actions/upload-artifact@v4
105119 with :
106- platforms : all
120+ name : swmm_toolkit_dist
121+ path : ./dist/*
107122
108- - name : Build wheels
109- uses : pypa/cibuildwheel@v3.1.4
110- with :
111- package-dir : ./swmm-toolkit
112- env :
113- # remove system swig (cmake bug doesn't respect python venv)
114- # https://github.com/swig/swig/issues/2481#issuecomment-1949573105
115- CIBW_BEFORE_BUILD_LINUX : rm -f $(which swig) && rm -f $(which swig4.0)
116- # configure cibuildwheel to build native archs ('auto'), and some emulated ones
117- CIBW_ARCHS_LINUX : aarch64
118- # only build current supported python: https://devguide.python.org/versions/
119- # don't build pypy or musllinux to save build time. TODO: find a good way to support those archs
120- CIBW_BUILD : ${{matrix.pyver}}-*
121- CIBW_SKIP : cp-*38 pp* *-musllinux*
122- CIBW_BUILD_VERBOSITY : 1
123-
124- - uses : actions/upload-artifact@v4
123+ publish_toolkit :
124+ name : Publish Python 🐍 distribution 📦 to PyPI
125+ needs :
126+ - merge_wheels
127+ # only publish to PyPI on tag pushes
128+ if : startsWith(github.ref, 'refs/tags/')
129+ runs-on : ubuntu-latest
130+ environment :
131+ name : pypi
132+ url : https://pypi.org/p/swmm-toolkit
133+ permissions :
134+ id-token : write
135+ steps :
136+ - name : Download all the dists
137+ uses : actions/download-artifact@v5
125138 with :
126- name : wheels-linux-aarch64-${{ matrix.pyver }}
127- path : ./wheelhouse/*.whl
139+ name : swmm_toolkit_dist
140+ path : dist/
141+ - name : Publish distribution 📦 to PyPI
142+ uses : pypa/gh-action-pypi-publish@release/v1
0 commit comments