name: CI on: release: types: [created] push: schedule: # Runs every Thursday at 20:23 GMT to avoid bit rot - cron: "20 23 * * 4" jobs: lint: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v1 - name: Install latest nightly uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true components: rustfmt, clippy - name: Lint with rustfmt uses: actions-rs/cargo@v1 with: command: fmt - name: Lint with clippy uses: actions-rs/cargo@v1 with: command: clippy args: --all-targets --all-features build: runs-on: ${{ matrix.os }} needs: lint strategy: fail-fast: false matrix: python-version: [3.5, 3.6, 3.7, 3.8] os: [ubuntu-latest, macos-latest, windows-latest] exclude: # There is a known issue where Python C extensions # can not be built on Python 3.5 on Windows. # https://github.com/actions/virtual-environments/issues/34 # Therefore, ujson can't be compiled and the build would fail. - os: windows-latest python-version: 3.5 steps: - name: Checkout uses: actions/checkout@v1 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v1 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install poetry poetry install - name: Install latest nightly uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true - name: Build Python package run: poetry run maturin develop --release python-publish: needs: build runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: python-version: [3.5, 3.6, 3.7, 3.8] os: [ubuntu-latest, macos-latest, windows-latest] exclude: # There is a known issue where Python C extensions # can not be built on Python 3.5 on Windows. # https://github.com/actions/virtual-environments/issues/34 # Therefore, ujson can't be compiled and the build would fail. - os: windows-latest python-version: 3.5 steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 with: python-version: ${{ matrix.python-version }} - name: Install latest nightly uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true - name: Install dependencies run: | python -m pip install --upgrade pip pip install poetry poetry install - name: Build Python package run: poetry run maturin build --release --no-sdist --strip --interpreter python${{matrix.python_version}} - name: List wheels if: matrix.os == 'windows-latest' run: dir target\wheels\ - name: List wheels if: matrix.os != 'windows-latest' run: find ./target/wheels/ # Note: Windows doesn't support glob # https://stackoverflow.com/a/52481267/270334 - name: Install wheels if: matrix.os == 'windows-latest' run: pip install --find-links=target\wheels adblock - name: Install wheels if: matrix.os != 'windows-latest' run: pip install target/wheels/adblock*.whl - name: Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: target/wheels/adblock*.whl env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: PyPi publish if: startsWith(github.ref, 'refs/tags/') env: MATURIN_PASSWORD: ${{ secrets.PYPI }} run: poetry run maturin publish --interpreter python${{matrix.python_version}} --username __token__