name: OpenPassport CI/CD
on:
  push:
    branches:
      - main
    paths:
      - "circuits/circuits/**"
      - ".github/workflows/artifacts.yml"
  pull_request:
    branches:
      - main
    paths:
      - "circuits/circuits/**"
      - ".github/workflows/artifacts.yml"
  workflow_dispatch:

jobs:
  build:
    runs-on: ['self-hosted', 'selfxyz-org', 'ubuntu-22-04', '128ram']

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Install cpp dependencies
        run: |
          sudo apt-get update
          sudo apt-get install --yes \
            build-essential \
            libgmp-dev \
            libsodium-dev \
            nasm \
            nlohmann-json3-dev \
            wget

      # TODO(): Use caching
      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install dependencies
        run: |
          corepack enable
          yarn set version 4.6.0
          cd circuits && yarn

      - name: Setup Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Download Circom Binary v2.1.9
        run: |
          mkdir -p /home/runner/work
          wget -qO /home/runner/work/circom https://github.com/iden3/circom/releases/download/v2.1.9/circom-linux-amd64
          chmod +x /home/runner/work/circom
          sudo mv /home/runner/work/circom /bin/circom

      - name: Print Circom version
        run: circom --version

      - name: Build cpp circuits
        run: |
          chmod +x circuits/scripts/build/build_cpp.sh && \
          ./circuits/scripts/build/build_cpp.sh register &&
          ./circuits/scripts/build/build_cpp.sh register_id &&
          ./circuits/scripts/build/build_cpp.sh disclose &&
          ./circuits/scripts/build/build_cpp.sh dsc

      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          name: circuits
          path: output/
