name: Python package on: push: tags: - 'v*' jobs: prepare-sqlite: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: true - if: steps.sqlite-amalgamation.outputs.cache-hit != 'true' run: | cd sqlcipher/ LIBS="-lm" ./configure --disable-tcl --enable-tempstore=always make sqlite3.c - uses: actions/upload-artifact@v4 with: name: sqlite-amalgamation path: | sqlcipher/sqlite3.c sqlcipher/sqlite3.h build-sdist: needs: prepare-sqlite runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: true - uses: actions/setup-python@v5 with: python-version: 3.8 - uses: actions/download-artifact@v4 with: name: sqlite-amalgamation path: ./src/sqlcipher - name: Build sdist run: pipx run build --sdist - name: Test sdist run: | python -m pip install dist/sqlcipher3_wheels-*.tar.gz mv sqlcipher3 sqlcipher3_ && PYTHONPATH=.:$PYTHONPATH python tests/ && mv sqlcipher3_ sqlcipher3 - uses: actions/upload-artifact@v4 with: path: dist/sqlcipher3-wheels-*.tar.gz build-wheels: needs: prepare-sqlite runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: ubuntu-latest cibw_archs: x86_64 cibw_build: "cp*-manylinux_*" compile_target: x86_64 - os: ubuntu-latest cibw_archs: x86_64 cibw_build: "cp*-musllinux_*" compile_target: x86_64 - os: ubuntu-24.04-arm cibw_archs: aarch64 cibw_build: "cp*-manylinux_*" compile_target: armv8 - os: ubuntu-24.04-arm cibw_archs: aarch64 cibw_build: "cp*-musllinux_*" compile_target: armv8 - os: ubuntu-latest cibw_archs: i686 cibw_build: "cp*-manylinux_*" compile_target: x86 - os: ubuntu-latest cibw_archs: i686 cibw_build: "cp*-musllinux_*" compile_target: x86 - os: ubuntu-latest cibw_archs: ppc64le cibw_build: "cp*-manylinux_*" compile_target: ppc64le - os: ubuntu-latest cibw_archs: ppc64le cibw_build: "cp*-musllinux_*" compile_target: ppc64le - os: ubuntu-latest cibw_archs: s390x cibw_build: "cp*-manylinux_*" compile_target: s390x - os: ubuntu-latest cibw_archs: s390x cibw_build: "cp*-musllinux_*" compile_target: s390x - os: windows-latest cibw_archs: AMD64 cibw_build: "cp*" compile_target: x86_64 - os: windows-latest cibw_archs: x86 cibw_build: "cp*" compile_target: x86 - os: windows-latest cibw_archs: ARM64 cibw_build: "cp*" compile_target: armv8 - os: macos-13 cibw_archs: x86_64 cibw_build: "cp*" compile_target: x86_64 - os: macos-latest cibw_archs: arm64 cibw_build: "cp*" compile_target: armv8 - os: macos-latest cibw_archs: universal2 cibw_build: "cp*" compile_target: universal2 steps: - uses: actions/checkout@v4 with: submodules: true - uses: actions/setup-python@v5 with: python-version: 3.11 - name: Set up QEMU if: runner.os == 'Linux' uses: docker/setup-qemu-action@v3 with: platforms: all # This should be temporary # xref https://github.com/docker/setup-qemu-action/issues/188 # xref https://github.com/tonistiigi/binfmt/issues/215 image: tonistiigi/binfmt:qemu-v8.1.5 - uses: actions/download-artifact@v4 with: name: sqlite-amalgamation path: ./src/sqlcipher - name: Build wheels for ${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }} uses: pypa/cibuildwheel@v2.22.0 env: CIBW_BUILD_FRONTEND: build CIBW_BUILD: ${{ matrix.cibw_build }} CIBW_ARCHS: ${{ matrix.cibw_archs }} CIBW_ENVIRONMENT: > SQLCIPHER3_COMPILE_TARGET=${{ matrix.compile_target }} PYTHONPATH={project}:$PYTHONPATH CIBW_TEST_COMMAND: > mv {project}/sqlcipher3 {project}/sqlcipher3_ && python {project}/tests/ && mv {project}/sqlcipher3_ {project}/sqlcipher3 - uses: actions/upload-artifact@v4 with: path: ./wheelhouse/*.whl upload-pypi: needs: [build-wheels, build-sdist] runs-on: ubuntu-latest steps: - uses: actions/download-artifact@v4 with: name: artifact path: dist - uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }}