Build and deploy #10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and deploy | |
on: | |
workflow_dispatch: | |
release: | |
types: | |
- published | |
jobs: | |
build_sdist: | |
name: Build source distribution | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
cache: "pip" | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install build twine | |
- name: Build sdist | |
run: python -m build --sdist | |
- name: Check the package | |
run: python -m twine check dist/* | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-sdist | |
path: dist/*.tar.gz | |
test_sdist: | |
needs: [build_sdist] | |
name: Test source distribution | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
cache: "pip" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: cibw-sdist | |
path: dist | |
- name: Install from sdist | |
run: pip install "$(ls dist/silx-*.tar.gz)[full,test]" | |
- name: Run tests | |
env: | |
WITH_QT_TEST: "False" | |
WITH_GL_TEST: "False" | |
SILX_OPENCL: "False" | |
SILX_TEST_LOW_MEM: "False" | |
run: python -c "import silx.test, sys; sys.exit(silx.test.run_tests(verbosity=3))" | |
build_doc: | |
name: Build documentation | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
cache: "pip" | |
- name: Install pandoc&graphviz | |
run: sudo apt-get install pandoc graphviz | |
- name: Install silx | |
run: pip install .[full,test,doc] | |
- name: Build doc | |
env: | |
QT_QPA_PLATFORM: "offscreen" | |
run: | | |
export SILX_VERSION="$(python -c 'import silx; print(silx.strictversion)')" | |
sphinx-build doc/source/ "silx-${SILX_VERSION}_documentation/" | |
zip -r "silx-${SILX_VERSION}_documentation.zip" "silx-${SILX_VERSION}_documentation/" | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: documentation | |
path: silx-*_documentation.zip | |
build_windows_installer: | |
name: Build Windows "fat binary" | |
runs-on: windows-2022 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
cache: "pip" | |
- name: Install silx | |
run: pip install .[full,test] | |
- name: Install pyinstaller | |
# Install pyinstaller from source and compile bootloader | |
env: | |
PYINSTALLER_COMPILE_BOOTLOADER: "1" | |
PYINSTALLER_BOOTLOADER_WAF_ARGS: "--msvc_target=x64" | |
run: pip install pyinstaller --no-binary pyinstaller | |
- name: Build fat binary | |
run: | | |
cd package/windows | |
pyinstaller pyinstaller.spec | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: windows-installer | |
path: | | |
./package/windows/artifacts/silx-*.exe | |
./package/windows/artifacts/silx-*.zip | |
test_windows_installer: | |
needs: [build_windows_installer] | |
name: Test Windows "fat binary" | |
runs-on: windows-2022 | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: windows-installer | |
- name: Unzip "fat binary" | |
run: 7z x silx-*.zip | |
- name: Test | |
run: | | |
cd silx | |
./silx-view.exe --help | |
./silx.exe --help | |
build_wheels: | |
name: Build wheels on ${{ matrix.os }}-${{ matrix.cibw_archs }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
# Ensure that a wheel builder finishes even if another fails | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-20.04 | |
cibw_archs: "auto64" | |
with_sse2: true | |
- os: ubuntu-20.04 | |
cibw_archs: "aarch64" | |
with_sse2: false | |
- os: ubuntu-20.04 | |
cibw_archs: "ppc64le" | |
with_sse2: false | |
- os: windows-2019 | |
cibw_archs: "auto64" | |
with_sse2: true | |
- os: macos-12 | |
cibw_archs: "universal2" | |
with_sse2: true | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: docker/setup-qemu-action@v3 | |
if: runner.os == 'Linux' | |
with: | |
platforms: all | |
- uses: pypa/cibuildwheel@v2.16.5 | |
env: | |
# Configure silx build | |
SILX_FORCE_CYTHON: "True" | |
SILX_WITH_OPENMP: "False" | |
# Configure silx tests | |
WITH_QT_TEST: "False" | |
WITH_GL_TEST: "False" | |
SILX_OPENCL: "False" | |
SILX_TEST_LOW_MEM: "False" | |
CIBW_ENVIRONMENT_PASS_LINUX: SILX_FORCE_CYTHON SILX_WITH_OPENMP WITH_QT_TEST WITH_GL_TEST SILX_OPENCL SILX_TEST_LOW_MEM | |
CIBW_BUILD_VERBOSITY: 1 | |
CIBW_BUILD: cp38-* cp39-* cp310-* cp311-* cp312-* | |
# Do not build for pypy and muslinux | |
CIBW_SKIP: pp* *-musllinux_* | |
CIBW_ARCHS: ${{ matrix.cibw_archs }} | |
# Install test dependencies | |
CIBW_TEST_EXTRAS: "full,test" | |
CIBW_TEST_COMMAND: python -c "import silx.test, sys; sys.exit(silx.test.run_tests(verbosity=3))" | |
# Skip tests for emulated architectures and arm64 macos | |
# Skip cp38 test on macos: Issue with libOpenGL | |
# Skip cp311 and cp312 on macos: bitshuffle does not build there | |
CIBW_TEST_SKIP: "*-*linux_{aarch64,ppc64le,s390x} *-macosx_arm64 *-macosx_universal2:arm64 cp38-macosx* cp311-macosx* cp312-macosx*" | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} | |
path: ./wheelhouse/*.whl | |
pypi-publish: | |
needs: [build_doc, build_sdist, build_wheels, test_sdist, build_windows_installer, test_windows_installer] | |
name: Upload release to PyPI | |
runs-on: ubuntu-latest | |
environment: | |
name: pypi | |
permissions: | |
id-token: write | |
if: github.event_name == 'release' && github.event.action == 'published' | |
# or, alternatively, upload to PyPI on every tag starting with 'v' (remove on: release above to use this) | |
# if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: cibw-* | |
path: dist | |
merge-multiple: true | |
- uses: pypa/gh-action-pypi-publish@release/v1 | |
windows-installer-publish: | |
needs: [build_windows_installer, test_windows_installer] | |
name: Upload Windows installer | |
runs-on: ubuntu-latest | |
environment: | |
name: assets | |
permissions: | |
contents: write | |
if: github.event_name == 'release' && github.event.action == 'published' | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: windows-installer | |
- name: Upload release assets | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
export ASSETS=$(ls silx-*.exe silx-*.zip) | |
echo "ASSETS=${ASSETS}" | |
gh release upload ${{ github.event.release.tag_name }} ${ASSETS} |