name: Build Python SDK env: BLYSS_STAGING_SERVER: ${{ vars.BLYSS_STAGING_SERVER }} BLYSS_STAGING_API_KEY: ${{ secrets.BLYSS_STAGING_API_KEY }} on: push: branches: [ "main" ] pull_request: branches: [ "main" ] paths-ignore: - 'docs/**' - 'examples/**' - '**.md' - 'js/**' workflow_dispatch: inputs: publish: description: 'Should packages be published to PyPI?' required: true default: false type: boolean permissions: contents: read jobs: linux: runs-on: ubuntu-latest strategy: matrix: target: [x86_64, aarch64] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install Python SDK working-directory: python shell: bash run: pip install . - name: Test Python SDK working-directory: python shell: bash run: python tests/test_service.py - name: Build wheels uses: PyO3/maturin-action@v1 with: working-directory: python target: ${{ matrix.target }} args: --release --out dist --find-interpreter sccache: 'true' manylinux: auto - name: Upload wheels uses: actions/upload-artifact@v3 with: name: wheels path: python/dist - name: Build Python docs if: matrix.target == 'x86_64' # avoids redudundant builds; pdoc isn't arch-specific working-directory: python shell: bash # TODO: pdoc is documenting the installed module, not the source folder. # pdoc's import-based docs don't play well with maturin's structure. run: | pip install pdoc pdoc -o pdoc -d google -n blyss --no-search - name: Upload Python docs if: matrix.target == 'x86_64' uses: actions/upload-pages-artifact@v2 with: path: python/pdoc windows: runs-on: windows-latest needs: [linux] strategy: matrix: target: [x64] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.10' architecture: ${{ matrix.target }} - name: Build wheels uses: PyO3/maturin-action@v1 with: working-directory: python target: ${{ matrix.target }} args: --release --out dist --find-interpreter sccache: 'true' - name: Upload wheels uses: actions/upload-artifact@v3 with: name: wheels path: python/dist macos: runs-on: macos-latest needs: [linux] strategy: matrix: target: [x86_64, aarch64] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.10' - name: Build wheels uses: PyO3/maturin-action@v1 with: working-directory: python target: ${{ matrix.target }} args: --release --out dist --find-interpreter sccache: 'false' - name: Upload wheels uses: actions/upload-artifact@v3 with: name: wheels path: python/dist sdist: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build sdist uses: PyO3/maturin-action@v1 with: working-directory: python command: sdist args: --out dist - name: Upload sdist uses: actions/upload-artifact@v3 with: name: wheels path: python/dist publish: name: Publish runs-on: ubuntu-latest if: ${{ inputs.publish }} needs: [linux, macos, windows, sdist] steps: - uses: actions/download-artifact@v3 with: name: wheels - name: Publish to PyPI uses: PyO3/maturin-action@v1 env: MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} with: command: upload args: --skip-existing *