- Fix docs for entropy filter (fixes #733) - Improve docs for `--fix` (fixes #728) - Add tests for alpha optimisation - Following a recent change to the code here, I realised we don't actually have any tests covering alpha optimisation. I've adjusted some of the test images to include lines with both leading transparent and all transparent pixels, and added dedicated tests for them. - Change x86_64 macOS build to use the macos-15 runner - There is a new macos-15-intel runner available but we don't actually need an intel runner to build x86_64. (As support for x86_64 winds down, we can probably drop these builds eventually - homebrew is the preferred installation method for macOS anyway)
174 lines
5.1 KiB
YAML
174 lines
5.1 KiB
YAML
name: oxipng
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
types:
|
|
- opened
|
|
- synchronize
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
ci:
|
|
name: CI
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 60
|
|
|
|
# Prevent tags and in-repo PRs from triggering this workflow more than once for a commit
|
|
if: github.ref_type != 'tag' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork)
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
target:
|
|
- x86_64-unknown-linux-gnu
|
|
- x86_64-unknown-linux-musl
|
|
- aarch64-unknown-linux-gnu
|
|
- aarch64-unknown-linux-musl
|
|
- x86_64-pc-windows-msvc
|
|
- i686-pc-windows-msvc
|
|
- x86_64-apple-darwin
|
|
- aarch64-apple-darwin
|
|
|
|
include:
|
|
- target: x86_64-unknown-linux-gnu
|
|
os: ubuntu-24.04
|
|
target-apt-arch: amd64
|
|
- target: x86_64-unknown-linux-musl
|
|
os: ubuntu-24.04
|
|
target-apt-arch: amd64
|
|
- target: aarch64-unknown-linux-gnu
|
|
os: ubuntu-24.04-arm
|
|
target-apt-arch: arm64
|
|
- target: aarch64-unknown-linux-musl
|
|
os: ubuntu-24.04-arm
|
|
target-apt-arch: arm64
|
|
- target: x86_64-pc-windows-msvc
|
|
os: windows-latest
|
|
- target: i686-pc-windows-msvc
|
|
os: windows-latest
|
|
- target: x86_64-apple-darwin
|
|
os: macos-15
|
|
- target: aarch64-apple-darwin
|
|
os: macos-15
|
|
|
|
env:
|
|
CARGO_BUILD_TARGET: ${{ matrix.target }}
|
|
RUSTFLAGS: '-Zlocation-detail=none'
|
|
|
|
steps:
|
|
- name: Checkout source
|
|
uses: actions/checkout@v5
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Install musl development files
|
|
if: endsWith(matrix.target, '-musl')
|
|
run: |
|
|
sudo apt-get -yq update
|
|
sudo apt-get -yq install musl-tools musl-dev:${{ matrix.target-apt-arch }}
|
|
|
|
- name: Install Rust toolchain
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
toolchain: nightly
|
|
target: ${{ env.CARGO_BUILD_TARGET }}
|
|
components: clippy, rustfmt
|
|
cache-bin: false
|
|
cache-shared-key: cache
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- name: Install cargo-hack
|
|
if: matrix.target == 'x86_64-unknown-linux-gnu'
|
|
uses: taiki-e/install-action@cargo-hack
|
|
|
|
- name: Install clippy-sarif
|
|
if: matrix.target == 'x86_64-unknown-linux-gnu'
|
|
uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: clippy-sarif
|
|
|
|
- name: Install sarif-fmt
|
|
if: matrix.target == 'x86_64-unknown-linux-gnu'
|
|
uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: sarif-fmt
|
|
|
|
- name: Run rustfmt
|
|
if: matrix.target == 'x86_64-unknown-linux-gnu'
|
|
run: cargo fmt --check
|
|
|
|
- name: Run Clippy for all feature combinations
|
|
if: matrix.target == 'x86_64-unknown-linux-gnu'
|
|
run: >
|
|
set -o pipefail;
|
|
cargo hack clippy --no-deps --all-targets --feature-powerset \
|
|
--exclude-features sanity-checks,system-libdeflate \
|
|
--message-format=json -- -D warnings \
|
|
| clippy-sarif
|
|
| tee clippy-results.sarif
|
|
| sarif-fmt
|
|
|
|
- name: Run tests
|
|
run: |
|
|
cargo nextest run --release --features sanity-checks
|
|
cargo test --doc --release --features sanity-checks
|
|
|
|
- name: Build benchmarks
|
|
run: cargo bench --no-run
|
|
|
|
- name: Build docs
|
|
if: matrix.target == 'x86_64-unknown-linux-gnu'
|
|
run: cargo doc --release --no-deps
|
|
|
|
- name: Build CLI binary
|
|
run: cargo build --release
|
|
|
|
- name: Upload CLI binary as artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: Oxipng binary (${{ matrix.target }})
|
|
path: |
|
|
target/${{ env.CARGO_BUILD_TARGET }}/release/oxipng
|
|
target/${{ env.CARGO_BUILD_TARGET }}/release/oxipng.exe
|
|
|
|
- name: Upload analysis results to GitHub
|
|
uses: github/codeql-action/upload-sarif@v3
|
|
if: always() && matrix.target == 'x86_64-unknown-linux-gnu'
|
|
continue-on-error: true
|
|
with:
|
|
sarif_file: clippy-results.sarif
|
|
category: clippy
|
|
|
|
msrv-check:
|
|
name: MSRV check
|
|
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
|
|
# Prevent tags and in-repo PRs from triggering this workflow more than once for a commit
|
|
if: github.ref_type != 'tag' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork)
|
|
|
|
steps:
|
|
- name: Checkout source
|
|
uses: actions/checkout@v5
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Install MSRV Rust toolchain
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
toolchain: 1.85.1
|
|
cache-bin: false
|
|
cache-shared-key: cache
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- name: Run tests
|
|
run: |
|
|
cargo nextest run --release --features sanity-checks
|
|
cargo test --doc --release --features sanity-checks
|