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 args: -- --check - 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.6, 3.7, 3.8, 3.9] os: [ubuntu-latest, macos-latest, windows-latest] steps: - name: Checkout uses: actions/checkout@v1 - uses: actions/setup-python@v2 if: matrix.python-version != 3.9 with: python-version: ${{ matrix.python-version }} - uses: actions/setup-python@v2 if: matrix.python-version == 3.9 with: python-version: '3.9.0-alpha - 3.9.0' - 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 - name: Run Python tests run: poetry run pytest -vv --color=yes python-publish: needs: build runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: python-version: [3.6, 3.7, 3.8, 3.9] os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v2 if: matrix.python-version != 3.9 with: python-version: ${{ matrix.python-version }} - uses: actions/setup-python@v2 if: matrix.python-version == 3.9 with: python-version: '3.9.0-alpha - 3.9.0' - 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: github.event_name == 'release' && github.event.action == 'created' env: MATURIN_PASSWORD: ${{ secrets.PYPI }} run: poetry run maturin publish --interpreter python${{matrix.python_version}} --username __token__ docs-publish: runs-on: ubuntu-latest if: github.ref == 'refs/heads/master' && github.event.action == 'push' steps: - uses: actions/checkout@v2 with: submodules: true fetch-depth: 0 - name: Install latest nightly uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true - name: Build Github Pages run: bash web/create_site.bash - name: Deploy Github Pages uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./target/github-pages