c2pa-rs

A fork of https://github.com/contentauth/c2pa-rs/
git clone git://archive.git.mtrnord.blog/mtrnords-photography-manager/c2pa-rs.git
Log | Files | Refs | README

ci.yml (7870B)


      1 name: CI
      2 
      3 on:
      4   pull_request:
      5   push:
      6     branches: main
      7   schedule:
      8     - cron: "0 18 * * 1,4,6" # 1800 UTC every Monday, Thursday, Saturday
      9 
     10 jobs:
     11   tests-cargo:
     12     name: Unit tests
     13     runs-on: ${{ matrix.os }}
     14 
     15     strategy:
     16       fail-fast: false
     17       matrix:
     18         os: [windows-latest, macos-latest, ubuntu-latest]
     19         rust_version: [stable, 1.74.0]
     20 
     21     steps:
     22       - name: Checkout repository
     23         uses: actions/checkout@v3
     24 
     25       - name: Install Rust toolchain
     26         uses: dtolnay/rust-toolchain@master
     27         with:
     28           toolchain: ${{ matrix.rust_version }}
     29 
     30       - name: Cache Rust dependencies
     31         uses: Swatinem/rust-cache@v2
     32 
     33       - name: Run unit tests
     34         run: cargo test --all-features --verbose
     35 
     36   tests-cross:
     37     name: Unit tests
     38     runs-on: ubuntu-latest
     39 
     40     strategy:
     41       fail-fast: false
     42       matrix:
     43         target: [aarch64-unknown-linux-gnu]
     44         rust_version: [stable, 1.74.0]
     45 
     46     steps:
     47       - name: Checkout repository
     48         uses: actions/checkout@v3
     49 
     50       - name: Install Rust toolchain
     51         uses: dtolnay/rust-toolchain@master
     52         with:
     53           toolchain: ${{ matrix.rust_version }}
     54           targets: ${{ matrix.target }}
     55 
     56       - name: Install cross-compilation toolset
     57         run: cargo install cross
     58 
     59       - name: Cache Rust dependencies
     60         uses: Swatinem/rust-cache@v2
     61 
     62       # Note that we do not run code coverage because
     63       # it isn't readily accessible from cross-compilation
     64       # environment. (A PR to fix this would be welcomed!)
     65 
     66       - name: Run unit tests (cross build)
     67         run: cross test --all-targets --all-features --target ${{ matrix.target }}
     68 
     69   tests-wasm:
     70     name: Unit tests (WASM)
     71     runs-on: ubuntu-latest
     72 
     73     steps:
     74       - name: Checkout repository
     75         uses: actions/checkout@v3
     76 
     77       - name: Install Rust toolchain
     78         uses: dtolnay/rust-toolchain@stable
     79 
     80       - name: Install wasm-pack
     81         run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
     82 
     83       - name: Run Wasm tests
     84         run: wasm-pack test --chrome --headless
     85         working-directory: ./sdk
     86 
     87   test-direct-minimal-versions:
     88     name: Unit tests with minimum versions of direct dependencies
     89     runs-on: ${{ matrix.os }}
     90 
     91     strategy:
     92       fail-fast: false
     93       matrix:
     94         os: [windows-latest, macos-latest, ubuntu-latest]
     95 
     96     steps:
     97       - name: Checkout repository
     98         uses: actions/checkout@v3
     99 
    100       - name: Install Rust toolchain
    101         uses: dtolnay/rust-toolchain@nightly
    102         with:
    103           components: llvm-tools-preview
    104 
    105       - name: Cache Rust dependencies
    106         uses: Swatinem/rust-cache@v2
    107 
    108       - name: Run tests
    109         run: cargo +nightly test -Z direct-minimal-versions --all-targets --all-features
    110 
    111   publish-preflight:
    112     name: Preflight crate publish
    113     runs-on: ${{ matrix.os }}
    114 
    115     strategy:
    116       fail-fast: false
    117       matrix:
    118         os: [ubuntu-latest]
    119         rust_version: [stable]
    120 
    121     steps:
    122       - name: Checkout repository
    123         uses: actions/checkout@v3
    124 
    125       - name: Install Rust toolchain
    126         uses: dtolnay/rust-toolchain@master
    127         with:
    128           toolchain: ${{ matrix.rust_version }}
    129           components: llvm-tools-preview
    130 
    131       - name: Cache Rust dependencies
    132         uses: Swatinem/rust-cache@v2
    133 
    134       - name: Dry-run of crate publish
    135         run: cargo publish -p c2pa --dry-run
    136 
    137   clippy_check:
    138     name: Clippy
    139     runs-on: ubuntu-latest
    140     steps:
    141       - name: Checkout repository
    142         uses: actions/checkout@v3
    143 
    144       - name: Install Rust toolchain
    145         uses: dtolnay/rust-toolchain@stable
    146 
    147       - name: Install clippy
    148         run: rustup component add clippy
    149 
    150       - name: Cache Rust dependencies
    151         uses: Swatinem/rust-cache@v2
    152 
    153       - name: Cargo clippy
    154         uses: actions-rs/clippy-check@v1
    155         with:
    156           token: ${{ secrets.GITHUB_TOKEN }}
    157           args: --all-features --all-targets -- -D warnings
    158         env:
    159           RUST_BACKTRACE: "1"
    160 
    161   cargo_fmt:
    162     name: Enforce Rust code format
    163     runs-on: ubuntu-latest
    164     steps:
    165       - name: Checkout repository
    166         uses: actions/checkout@v3
    167 
    168       - name: Install stable toolchain
    169         uses: dtolnay/rust-toolchain@nightly
    170         with:
    171           components: rustfmt
    172 
    173       - name: Check format
    174         run: cargo +nightly fmt --all -- --check
    175 
    176   docs_rs:
    177     name: Preflight docs.rs build
    178     runs-on: ubuntu-latest
    179     steps:
    180       - name: Checkout repository
    181         uses: actions/checkout@v3
    182 
    183       - name: Install nightly Rust toolchain
    184         # Nightly is used here because the docs.rs build
    185         # uses nightly and we use doc_cfg features that are
    186         # not in stable Rust as of this writing (Rust 1.62).
    187         uses: dtolnay/rust-toolchain@nightly
    188 
    189       - name: Run cargo docs
    190         # This is intended to mimic the docs.rs build
    191         # environment. The goal is to fail PR validation
    192         # if the subsequent release would result in a failed
    193         # documentation build on docs.rs.
    194         run: cargo +nightly doc --all-features --no-deps
    195         env:
    196           RUSTDOCFLAGS: --cfg docsrs
    197           DOCS_RS: 1
    198 
    199   cargo-deny:
    200     name: License / vulnerability audit
    201     runs-on: ubuntu-latest
    202 
    203     strategy:
    204       fail-fast: false
    205       matrix:
    206         checks:
    207           - advisories
    208           - bans licenses sources
    209 
    210     # Prevent sudden announcement of a new advisory from failing CI:
    211     continue-on-error: ${{ matrix.checks == 'advisories' }}
    212 
    213     steps:
    214       - name: Checkout repository
    215         uses: actions/checkout@v3
    216 
    217       - name: Audit crate dependencies
    218         uses: EmbarkStudios/cargo-deny-action@v1
    219         with:
    220           command: check ${{ matrix.checks }}
    221 
    222   unused_deps:
    223     name: Check for unused dependencies
    224     runs-on: ubuntu-latest
    225     steps:
    226       - name: Checkout repository
    227         uses: actions/checkout@v3
    228 
    229       - name: Install Rust toolchain
    230         uses: dtolnay/rust-toolchain@nightly
    231 
    232       - name: Run cargo-udeps
    233         uses: aig787/cargo-udeps-action@v1
    234         with:
    235           version: latest
    236           args: --all-targets --all-features
    237 
    238   version_bump:
    239     name: Ensure (MINOR) tag is used when making an API breaking change
    240     # Change all of these steps to (MAJOR) after 1.0 release
    241     runs-on: ubuntu-latest
    242     steps:
    243       - name: Checkout repository
    244         uses: actions/checkout@v3
    245         with:
    246           fetch-depth: 0
    247 
    248       - name: Install Rust toolchain
    249         uses: dtolnay/rust-toolchain@stable
    250 
    251       - name: Get latest existing tag
    252         uses: WyriHaximus/github-action-get-previous-tag@v1
    253         id: get-latest-tag
    254 
    255       - name: Set new version
    256         uses: paulhatch/semantic-version@v5.2.1
    257         id: set-version
    258         with:
    259           tag_prefix: "v"
    260           version_format: "${major}.${minor}.${patch}"
    261           major_pattern: "(MAJOR)"
    262           minor_pattern: "(MINOR)"
    263 
    264       - name: Generate changelog since last tag
    265         run: |
    266           {
    267             echo 'changelog<<EOF'
    268             git log --format="* %s" ${{ steps.get-latest-tag.outputs.tag }}..HEAD | { grep -v "(IGNORE)" || :; }
    269             echo EOF
    270           } >> "$GITHUB_OUTPUT"
    271 
    272       - name: "Bump crate version (NOTE: Not pushed back to repo!)"
    273         continue-on-error: true # If no change to crate version, ignore git commit error
    274         run: |
    275           sed -i "s/^version = \"[^\"]*\"$/version = \"$VERSION\"/;" sdk/Cargo.toml
    276           git config user.email "nobody@example.com"
    277           git config --global user.name "PR validation bot"
    278           git add .
    279           git commit -m "DO NOT PUSH BACK TO PR: Bump crate version"
    280         env:
    281           VERSION: ${{ steps.set-version.outputs.version }}
    282 
    283       - name: If this step fails, change title of the PR to include (MINOR) tag
    284         uses: obi1kenobi/cargo-semver-checks-action@v2
    285         with:
    286           package: c2pa