yore 1.3.0

Rust library for decoding/encoding character sets according to OEM code pages
Documentation
name: CI

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@v21

      - name: Setup Nix cache
        uses: DeterminateSystems/magic-nix-cache-action@v13
        with:
          use-flakehub: false

      - name: Build
        run: nix develop --command cargo build --verbose

      - name: Run tests
        run: nix develop --command cargo test --verbose

  fuzz:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@v21

      - name: Setup Nix cache
        uses: DeterminateSystems/magic-nix-cache-action@v13
        with:
          use-flakehub: false

      - name: Fuzz validate target
        run: |
          cd fuzz
          nix develop --command cargo fuzz run validate -- -max_total_time=60

      - name: Fuzz invariant target
        run: |
          cd fuzz
          nix develop --command cargo fuzz run invariant -- -max_total_time=60

  codegen:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@v21

      - name: Setup Nix cache
        uses: DeterminateSystems/magic-nix-cache-action@v13
        with:
          use-flakehub: false

      - name: Run codegen
        run: |
          cd codegen
          nix develop .. --command cargo run

      - name: Check for uncommitted changes
        run: |
          if ! git diff --quiet; then
            echo "Error: Codegen produced changes that are not committed"
            echo "Please run 'cd codegen && cargo run' and commit the changes"
            git diff --stat
            exit 1
          fi

  # Final job that depends on all other jobs - use this in branch protection rules
  ci-success:
    runs-on: ubuntu-latest
    needs: [build-and-test, fuzz, codegen]
    if: always()
    steps:
      - name: Check all jobs passed
        run: |
          if [[ "${{ needs.build-and-test.result }}" != "success" || "${{ needs.fuzz.result }}" != "success" || "${{ needs.codegen.result }}" != "success" ]]; then
            echo "One or more jobs failed"
            exit 1
          fi
          echo "All jobs passed"