name: Message Buffer Check
on:
  pull_request:
    paths:
      - .github/workflows/ci-message-buffer.yml
      - pythnet/message_buffer/**
  push:
    branches:
      - main
jobs:
  abi-check:
    name: Check Message Buffer formatting & IDL files
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: pythnet/message_buffer
    steps:
      - name: Checkout sources
        uses: actions/checkout@v3
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          cache-workspaces: "pythnet/message_buffer -> target"
      - name: Install Solana
        run: |
          wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
          sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
          sh -c "$(curl -sSfL https://release.anza.xyz/v1.17.34/install)"
          echo "/home/runner/.local/share/solana/install/active_release/bin" >> $GITHUB_PATH
      - name: Install Anchor
        run: |
          unset CARGO_UNSTABLE_SPARSE_REGISTRY
          unset CARGO_REGISTRIES_CRATES_IO_PROTOCOL
          # Anchor doesn't build with newer Rust
          cargo +1.66.1 install --git https://github.com/coral-xyz/anchor --tag v0.27.0 anchor-cli --locked
      - name: Install g++ 12
        run: |
          sudo apt-get install g++-12
          echo "CXX=/usr/bin/g++-12" >> "${GITHUB_ENV}"
      - uses: actions/setup-node@v4
        with:
          node-version-file: "package.json"
      # Libusb is a build requirement for the node-hid package and so pnpm
      # install will fail if this isn't in the build environment and if a
      # precompiled binary isn't found.
      - name: Install libusb
        run: sudo apt-get update && sudo apt-get install -y libusb-1.0-0-dev libudev-dev
      - uses: pnpm/action-setup@v4
        name: Install pnpm
        with:
          run_install: true
      - name: Build and generate IDLs
        run: |
          unset CARGO_UNSTABLE_SPARSE_REGISTRY
          unset CARGO_REGISTRIES_CRATES_IO_PROTOCOL
          rustup override set 1.66.1
          anchor build
          rustup override unset
      - name: Copy anchor target files
        run: cp ./target/idl/message_buffer.json idl/ && cp ./target/types/message_buffer.ts idl/
      - name: Fix formatting (to avoid pre-commit failures)
        run: pnpm turbo --filter message_buffer fix:format
      - name: Check IDL changes
        # Fails if the IDL files are not up to date. Please use anchor build to regenerate the IDL files for
        # the current version of the contract and update idl directory.
        run: git diff --exit-code idl/*
        if: success() || failure()
      - name: Cargo format
        run: cargo fmt --all -- --check
        if: success() || failure()
      - name: Cargo clippy
        run: cargo clippy --all-targets -- --deny warnings
