name: Main on: push: branches: [main] pull_request: branches: [main] env: ANCHOR_VERSION: 0.30.0 NODE_VERSION : 20 SOLANA_VERSION: 1.18.18 TOOLCHAIN: 1.81.0 jobs: lint: name: Check styling runs-on: ubuntu-latest steps: - name: Git checkout uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v3 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: "pnpm" - name: Install dependencies run: pnpm install --frozen-lockfile - name: Check linting run: pnpm run lint tests: name: Test runs-on: ubuntu-latest strategy: matrix: project: ["counter-anchor", "counter-shank"] solana: ["1.17.34", "1.18.18"] include: - anchor: "0.30.0" project: "counter-anchor" solana: "1.18.18" - anchor: "0.29.0" project: "counter-anchor" solana: "1.17.34" steps: - name: Git checkout uses: actions/checkout@v4 with: submodules: recursive - name: Setup pnpm uses: pnpm/action-setup@v3 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: "pnpm" - name: Install dependencies run: pnpm install --frozen-lockfile - name: Cache cargo crates uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ ./projects/**/.cargo/ ./projects/**/target/ key: ${{ runner.os }}-crates-solana-v${{ matrix.solana }}-${{ hashFiles('projects/**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-crates-solana-v${{ matrix.solana }} - name: Install Solana uses: solana-program/actions/install-solana@v1 with: version: ${{ matrix.solana }} - name: Install Rustfmt uses: dtolnay/rust-toolchain@master with: toolchain: ${{ env.TOOLCHAIN }} components: rustfmt - name: Install Clippy uses: dtolnay/rust-toolchain@master with: toolchain: ${{ env.TOOLCHAIN }} components: clippy - name: Install Anchor if: ${{ matrix.anchor }} uses: metaplex-foundation/actions/install-anchor-cli@v1 with: version: ${{ matrix.anchor }} - name: Pre-scaffold projects for caching purposes run: pnpm snapshot ${{ matrix.project }} --scaffold-only - name: Build and run tests run: pnpm snapshot ${{ matrix.project }} --test release: name: Release runs-on: ubuntu-latest if: github.event_name == 'push' needs: [lint, tests] outputs: published: ${{ steps.changesets.outputs.published }} steps: - name: Git checkout uses: actions/checkout@v4 with: submodules: recursive token: ${{ secrets.PAT_GITHUB }} - name: Setup pnpm uses: pnpm/action-setup@v3 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: "pnpm" - name: Install Dependencies run: pnpm install --frozen-lockfile - name: Cache cargo crates uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ ./projects/**/.cargo/ ./projects/**/target/ key: ${{ runner.os }}-crates-solana-v${{ env.SOLANA_VERSION }}-${{ hashFiles('projects/**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-crates-solana-v${{ env.SOLANA_VERSION }} - name: Install Solana uses: solana-program/actions/install-solana@v1 with: version: ${{ env.SOLANA_VERSION }} - name: Install Anchor uses: metaplex-foundation/actions/install-anchor-cli@v1 with: version: ${{ env.ANCHOR_VERSION }} - name: Pre-scaffold projects for caching purposes run: pnpm snapshot --scaffold-only - name: Setup git user run: | git config --global user.email "github-actions[bot]@users.noreply.github.com" git config --global user.name "github-actions[bot]" - name: Create Release Pull Request or Publish id: changesets uses: changesets/action@v1 with: commit: "Publish a new release" title: "Publish a new release" publish: ./node_modules/.bin/changeset publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}