sbom-tools 0.1.22

Semantic SBOM diff and analysis tool
Documentation
name: Bindings

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

permissions: read-all

jobs:
  constant-parity:
    name: Binding Constant Parity
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
      - name: Check wrapper constants match sbom_tools.h
        run: ./scripts/check-binding-constants.sh

  dagger-rust-sdk:
    name: Dagger CI (workspace check + staticlib + FFI tests + Go bindings)
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
      - name: Install Rust
        uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # master
        with:
          toolchain: stable
      - name: Cache Rust
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
      - name: Run Dagger Rust SDK pipeline
        run: cargo run --manifest-path dagger/rust-sdk/Cargo.toml -- ci-all

  rust-ffi:
    name: Rust FFI
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
      - name: Install Rust
        uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # master
        with:
          toolchain: stable
      - name: Cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
      - name: Build FFI library
        run: bash ./scripts/build-bindings-mvp.sh
      - name: Test FFI ABI
        run: cargo test --locked --features ffi --test ffi_bindings

      - name: Test ABI snapshot contracts
        run: cargo test --locked --features ffi --test ffi_schema_snapshots

      - name: Test FFI conformance (bidirectional ABI)
        run: cargo test --locked --features ffi --test conformance_ffi

      - name: Test FFI regression (PR #113 + multi-format)
        run: cargo test --locked --features ffi --test ffi_regression

  go-bindings:
    name: Go Bindings (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
    steps:
      - name: Checkout
        uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
      - name: Install Rust
        uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # master
        with:
          toolchain: stable
      - name: Set up Go
        uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
        with:
          go-version: '1.22'
      - name: Cache Rust
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
      - name: Build Rust library
        run: bash ./scripts/build-bindings-mvp.sh
      - name: Test Go wrapper
        working-directory: bindings/go
        run: go test ./...
      - name: Test Go dedup helpers
        run: ./scripts/test-bindings-dedup.sh go

  swift-bindings:
    name: Swift Bindings
    runs-on: macos-latest
    steps:
      - name: Checkout
        uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
      - name: Install Rust
        uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # master
        with:
          toolchain: stable
      - name: Build Rust library
        run: bash ./scripts/build-bindings-mvp.sh
      - name: Build and test Swift wrapper
        working-directory: bindings/swift
        run: swift test
      - name: Test Swift dedup helpers
        run: ./scripts/test-bindings-dedup.sh swift