name: Main on: push: branches: [main] pull_request: jobs: format_and_lint_client_js: name: Format & Lint Client JS runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup - name: Format Client JS run: pnpm clients:js:format - name: Lint Client JS run: pnpm clients:js:lint format_and_lint_client_rust: if: false # Disabled until we have a Rust client name: Format & Lint Client Rust runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: clippy: true rustfmt: true - name: Format Client Rust run: pnpm clients:rust:format - name: Lint Client Rust run: pnpm clients:rust:lint format_and_lint_program: name: Format & Lint Program runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: clippy: true rustfmt: true - name: Format run: pnpm programs:format - name: Lint run: pnpm programs:lint audit_rust: name: Audit Rust runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: cargo-cache-key: cargo-audit - name: Install cargo-audit uses: taiki-e/install-action@v2 with: tool: cargo-audit - name: Run cargo-audit run: pnpm rust:audit semver_rust: name: Check semver Rust runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: cargo-cache-key: cargo-semver - name: Install cargo-audit uses: taiki-e/install-action@v2 with: tool: cargo-semver-checks - name: Run semver checks run: pnpm rust:semver spellcheck_rust: name: Spellcheck Rust runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: cargo-cache-key: cargo-spellcheck - name: Install cargo-spellcheck uses: taiki-e/install-action@v2 with: tool: cargo-spellcheck - name: Run cargo-spellcheck run: pnpm rust:spellcheck generate_clients: name: Check Client Generation runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: rustfmt: true - name: Generate Clients run: pnpm generate:clients - name: Check Working Directory run: | git status --porcelain test -z "$(git status --porcelain)" build_program: name: Build Program runs-on: ubuntu-latest needs: format_and_lint_program steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: cargo-cache-key: cargo-build-program solana: true - name: Build run: pnpm programs:build - name: Upload Program Builds uses: actions/upload-artifact@v4 with: name: program-builds path: ./target/deploy/*.so if-no-files-found: error - name: Save Program Builds For Client Jobs uses: actions/cache/save@v4 with: path: ./**/*.so key: ${{ runner.os }}-builds-${{ github.sha }} test_client_js: name: Test Client JS runs-on: ubuntu-latest needs: [format_and_lint_client_js, build_program] steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: solana: true - name: Restore Program Builds uses: actions/cache/restore@v4 with: path: ./**/*.so key: ${{ runner.os }}-builds-${{ github.sha }} - name: Test Client JS run: pnpm clients:js:test test_client_rust: if: false # Disabled until we have a Rust client name: Test Client Rust runs-on: ubuntu-latest needs: format_and_lint_client_rust steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: cargo-cache-key: cargo-rust-client solana: true - name: Test Client Rust run: pnpm clients:rust:test test_program: name: Test Program runs-on: ubuntu-latest needs: format_and_lint_program steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: cargo-cache-key: cargo-test-program solana: true - name: Test run: pnpm programs:test