diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index a239e10..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,19 +0,0 @@ -# Please see the documentation for all configuration options: -# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "cargo" - directory: "sdk" - schedule: - interval: "daily" - - - package-ecosystem: "cargo" - directory: "export_schema" - schedule: - interval: "daily" - - - package-ecosystem: "cargo" - directory: "make_test_images" - schedule: - interval: "daily" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 4d27c96..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,312 +0,0 @@ -name: CI - -on: - pull_request: - push: - branches: main - schedule: - - cron: "0 18 * * 1,4,6" # 1800 UTC every Monday, Thursday, Saturday - -jobs: - tests: - name: Unit tests - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - os: [windows-latest, macos-latest, ubuntu-latest] - rust_version: [stable, 1.70.0] - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@master - with: - toolchain: ${{ matrix.rust_version }} - components: llvm-tools-preview - - - name: Cache Rust dependencies - uses: Swatinem/rust-cache@v2 - - - name: Install cargo-llvm-cov - uses: taiki-e/install-action@cargo-llvm-cov - - - name: Generate code coverage - run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info - - - name: Upload code coverage results - uses: codecov/codecov-action@v3 - with: - token: ${{ secrets.CODECOV_TOKEN }} - fail_ci_if_error: true - verbose: true - - tests-cross: - name: Unit tests - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - target: [aarch64-unknown-linux-gnu] - rust_version: [stable, 1.70.0] - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@master - with: - toolchain: ${{ matrix.rust_version }} - targets: ${{ matrix.target }} - - - name: Install cross-compilation toolset - run: cargo install cross - - - name: Cache Rust dependencies - uses: Swatinem/rust-cache@v2 - - # Note that we do not run code coverage because - # it isn't readily accessible from cross-compilation - # environment. (A PR to fix this would be welcomed!) - - - name: Run unit tests (cross build) - run: cross test --all-targets --all-features --target ${{ matrix.target }} - - tests-wasm: - name: Unit tests (WASM) - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - - - name: Install wasm-pack - run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - - - name: Run Wasm tests - run: wasm-pack test --chrome --headless - working-directory: ./sdk - - test-direct-minimal-versions: - name: Unit tests with minimum versions of direct dependencies - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - os: [windows-latest, macos-latest, ubuntu-latest] - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@nightly - with: - components: llvm-tools-preview - - - name: Cache Rust dependencies - uses: Swatinem/rust-cache@v2 - - - name: Run tests - run: cargo +nightly test -Z direct-minimal-versions --all-targets --all-features - - publish-preflight: - name: Preflight crate publish - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest] - rust_version: [stable] - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@master - with: - toolchain: ${{ matrix.rust_version }} - components: llvm-tools-preview - - - name: Cache Rust dependencies - uses: Swatinem/rust-cache@v2 - - - name: Dry-run of crate publish - run: cargo publish -p c2pa --dry-run - - clippy_check: - name: Clippy - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - - - name: Install clippy - run: rustup component add clippy - - - name: Cache Rust dependencies - uses: Swatinem/rust-cache@v2 - - - name: Cargo clippy - uses: actions-rs/clippy-check@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - args: --all-features --all-targets -- -D warnings - env: - RUST_BACKTRACE: "1" - - cargo_fmt: - name: Enforce Rust code format - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install stable toolchain - uses: dtolnay/rust-toolchain@nightly - with: - components: rustfmt - - - name: Check format - run: cargo +nightly fmt --all -- --check - - docs_rs: - name: Preflight docs.rs build - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install nightly Rust toolchain - # Nightly is used here because the docs.rs build - # uses nightly and we use doc_cfg features that are - # not in stable Rust as of this writing (Rust 1.62). - uses: dtolnay/rust-toolchain@nightly - - - name: Run cargo docs - # This is intended to mimic the docs.rs build - # environment. The goal is to fail PR validation - # if the subsequent release would result in a failed - # documentation build on docs.rs. - run: cargo +nightly doc --all-features --no-deps - env: - RUSTDOCFLAGS: --cfg docsrs - DOCS_RS: 1 - - cargo-deny: - name: License / vulnerability audit - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - checks: - - advisories - - bans licenses sources - - # Prevent sudden announcement of a new advisory from failing CI: - continue-on-error: ${{ matrix.checks == 'advisories' }} - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Audit crate dependencies - uses: EmbarkStudios/cargo-deny-action@v1 - with: - command: check ${{ matrix.checks }} - - unused_deps: - name: Check for unused dependencies - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@nightly - - - name: Run cargo-udeps - uses: aig787/cargo-udeps-action@v1 - with: - version: latest - args: --all-targets --all-features - - unknown-features-cfg: - name: Check for unknown features in cfg attributes and macros - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@nightly - - - name: Check for unknown features - env: - RUSTFLAGS: "-D unexpected-cfgs" - run: cargo +nightly check -Z unstable-options -Z check-cfg=features --tests - - version_bump: - name: Ensure (MINOR) tag is used when making an API breaking change - # Change all of these steps to (MAJOR) after 1.0 release - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - - - name: Get latest existing tag - uses: WyriHaximus/github-action-get-previous-tag@v1 - id: get-latest-tag - - - name: Set new version - uses: paulhatch/semantic-version@v5.2.1 - id: set-version - with: - tag_prefix: "v" - version_format: "${major}.${minor}.${patch}" - major_pattern: "(MAJOR)" - minor_pattern: "(MINOR)" - - - name: Generate changelog since last tag - run: | - { - echo 'changelog<> "$GITHUB_OUTPUT" - - - name: "Bump crate version (NOTE: Not pushed back to repo!)" - continue-on-error: true # If no change to crate version, ignore git commit error - run: | - sed -i "s/^version = \"[^\"]*\"$/version = \"$VERSION\"/;" sdk/Cargo.toml - git config user.email "nobody@example.com" - git config --global user.name "PR validation bot" - git add . - git commit -m "DO NOT PUSH BACK TO PR: Bump crate version" - env: - VERSION: ${{ steps.set-version.outputs.version }} - - - name: If this step fails, change title of the PR to include (MINOR) tag - uses: obi1kenobi/cargo-semver-checks-action@v1 - with: - crate-name: c2pa diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 7d907d2..a333b59 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -2,6 +2,8 @@ name: Nightly build on: workflow_dispatch: + push: # TEMPORARY: Remove before merging PR + branches: main schedule: - cron: "0 5 * * *" # 0500 UTC every day diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 2e4399f..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,108 +0,0 @@ -name: Publish release - -on: - workflow_dispatch: - -jobs: - publish: - concurrency: publish-mutex - runs-on: ubuntu-latest - steps: - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - token: ${{ secrets.GH_ADMIN_COMMIT_TOKEN }} - - - name: Get latest existing tag - uses: WyriHaximus/github-action-get-previous-tag@v1 - id: get-latest-tag - - - name: Set new version - uses: paulhatch/semantic-version@v5.2.1 - id: set-version - with: - tag_prefix: "v" - version_format: "${major}.${minor}.${patch}" - major_pattern: "(MAJOR)" - minor_pattern: "(MINOR)" - - - name: Generate changelog since last tag - id: generate-changelog - run: | - { - echo 'changelog<> "$GITHUB_OUTPUT" - - - name: Log version & changelog - run: | - echo "Version: $VERSION" - echo "Version tag: $VERSION_TAG" - echo "Latest tag detected: $LATEST_TAG" - echo "Changelog: $CHANGELOG" - env: - VERSION: ${{ steps.set-version.outputs.version }} - VERSION_TAG: ${{ steps.set-version.outputs.version_tag }} - LATEST_TAG: ${{ steps.get-latest-tag.outputs.tag }} - CHANGELOG: ${{ steps.generate-changelog.outputs.stdout }} - - - name: Prevent empty release - if: ${{ steps.generate-changelog.outputs.stdout == '' }} - uses: actions/github-script@v3 - with: - script: | - core.setFailed("No changes since prior release") - - - name: Update changelog - run: | - (head -8 CHANGELOG.md && echo "## $VERSION" && date "+_%d %B %Y_" && echo "" && (echo "$CHANGELOG" | sed -E 's_\(#([0-9]+)\)_([#\1](https://github.com/contentauth/c2pa-rs/pull/\1)\)_') && tail -n +9 CHANGELOG.md) > CHANGELOG.new.md - mv CHANGELOG.new.md CHANGELOG.md - env: - VERSION: ${{ steps.set-version.outputs.version }} - CHANGELOG: ${{ steps.generate-changelog.outputs.stdout }} - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - - - name: Bump crate versions - run: | - sed -i "s/^version = \"[^\"]*\"$/version = \"$VERSION\"/;" sdk/Cargo.toml - sed -i "s/^version = \"[^\"]*\"$/version = \"$VERSION\"/;" export_schema/Cargo.toml - sed -i "s/^version = \"[^\"]*\"$/version = \"$VERSION\"/;" make_test_images/Cargo.toml - sed -i "s/^c2pa = \"[^\"]*\"$/c2pa = \"$VERSION\"/;" README.md - env: - VERSION: ${{ steps.set-version.outputs.version }} - - - name: Report differences for "prepare (release)" commit - run: git diff - - - name: Commit Cargo.toml and changelog - uses: stefanzweifel/git-auto-commit-action@v4 - id: commit - with: - commit_message: Prepare ${{ steps.set-version.outputs.version }} release - commit_user_name: Adobe CAI Team - commit_user_email: noreply@adobe.com - - - name: Ensure semantic versioning requirements are met - uses: obi1kenobi/cargo-semver-checks-action@v1 - with: - crate-name: c2pa - - - name: Create release - uses: ncipollo/release-action@v1 - with: - body: ${{ steps.generate-changelog.outputs.stdout }} - commit: ${{ steps.commit.outputs.commit_hash }} - prerelease: true # remove at 1.0 - tag: ${{ steps.set-version.outputs.version_tag }} - token: ${{ secrets.GH_ADMIN_COMMIT_TOKEN }} - - - name: Publish crate - run: | - cargo publish --token $CRATES_IO_SECRET -p c2pa - env: - CRATES_IO_SECRET: ${{ secrets.CRATES_IO_SECRET }}