interpretthis 0.3.0

Sandboxed Python AST interpreter for untrusted and LLM-generated code
Documentation
name: ci

on:
  push:
    branches: [main]
  pull_request:

env:
  CARGO_TERM_COLOR: always
  RUSTFLAGS: -D warnings
  # Keep in sync with Cargo.toml package.rust-version
  MSRV: "1.85"

jobs:
  license-headers:
    name: license headers
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with:
          go-version: "1.24"
      - name: Install addlicense
        run: go install github.com/google/addlicense@v1.2.0
      - name: Check headers
        run: scripts/license-headers.sh check

  test:
    name: test (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust toolchain (MSRV)
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.MSRV }}
          components: rustfmt, clippy

      - name: Cache cargo
        uses: Swatinem/rust-cache@v2

      - name: Install Python 3.12 (parity corpus)
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: Verify python3.12 for parity
        run: |
          python3 --version
          major_minor=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
          test "$major_minor" = "3.12"

      - name: cargo fmt
        run: cargo fmt --all -- --check

      - name: cargo clippy
        run: cargo clippy --all-targets -- -D warnings

      - name: cargo test
        run: cargo test --all-targets

  docs:
    name: docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.MSRV }}
      - uses: Swatinem/rust-cache@v2
      - name: cargo doc
        env:
          RUSTDOCFLAGS: -D warnings
        run: cargo doc --no-deps

  deny:
    name: cargo deny
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: EmbarkStudios/cargo-deny-action@v2
        with:
          command: check

  package:
    name: package
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.MSRV }}
      - uses: Swatinem/rust-cache@v2
      # Builds the crates.io tarball (excludes tickets/scripts via Cargo.toml).
      - name: cargo package
        run: cargo package