ocidir 0.8.0

A Rust library for reading and writing OCI (opencontainers) layout directories
Documentation
name: Rust
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  merge_group:
permissions:
  contents: read

# don't waste job slots on superseded code
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always

jobs:
  semver-checks:
    name: Semver Checks
    runs-on: ubuntu-24.04
    steps:
    - uses: actions/checkout@v7
    - uses: obi1kenobi/cargo-semver-checks-action@v2
      with:
        # Pinned until cargo-semver-checks supports rustdoc format v57 (Rust 1.93+)
        rust-toolchain: "1.92.0"

  build-test-lint:
    name: Build, Test & Lint
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository
        uses: actions/checkout@v7
      - name: Set up Rust
        uses: bootc-dev/actions/setup-rust@main
      - name: Install tools
        uses: taiki-e/install-action@v2
        with:
          tool: just
      - name: Install rustfmt and clippy
        run: rustup component add rustfmt clippy
      - name: just ci
        run: just ci
      - name: just selftest
        # The selftest pulls from Docker Hub which may rate-limit shared
        # GitHub runner IPs. Don't let transient registry failures block CI.
        continue-on-error: true
        run: just selftest

  required-checks:
    name: Required Checks
    if: always()
    needs: [semver-checks, build-test-lint]
    runs-on: ubuntu-latest
    env:
      NEEDS: ${{ toJson(needs) }}
    steps:
      - name: Check all jobs
        run: |
          FAILED=$(echo "$NEEDS" | jq -r 'to_entries[] | select(.value.result | IN("success","skipped") | not) | .key')
          if [ -n "$FAILED" ]; then
            echo "The following jobs did not succeed: $FAILED"
            exit 1
          fi
          echo "All jobs succeeded or were skipped."