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 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 }} build_ptoken: name: Build p-token runs-on: ubuntu-latest 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 p-token:build - name: Upload p-token Builds uses: actions/upload-artifact@v4 with: name: p-token-builds path: ./target/deploy/*.so if-no-files-found: error - name: Save p-token Build For Client Jobs uses: actions/cache/save@v4 with: path: ./**/*.so key: ${{ runner.os }}-ptoken-build-${{ 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: build_program steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: cargo-cache-key: cargo-test-program - name: Restore Program Builds uses: actions/cache/restore@v4 with: path: ./**/*.so key: ${{ runner.os }}-builds-${{ github.sha }} - name: Test run: pnpm programs:test conformance_ptoken: name: Conformance Test for p-token runs-on: ubuntu-latest needs: build_ptoken steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: cargo-cache-key: cargo-fixtures-ptoken solana: true - name: Restore Program Builds uses: actions/cache/restore@v4 with: path: ./**/*.so key: ${{ runner.os }}-ptoken-build-${{ github.sha }} - name: Install mollusk-svm-cli uses: taiki-e/cache-cargo-install-action@v2 with: tool: mollusk-svm-cli - name: Generate SPL Token Fixtures run: pnpm fixtures:generate - name: Run Fixtures run: pnpm fixtures:run pinocchio_token_program