name: Main

on:
  push:
    branches: [0.21]
  pull_request:

env:
  # Among other things, opts out of Turborepo telemetry. See https://consoledonottrack.com/.
  DO_NOT_TRACK: '1'
  NODE_VERSION: 18
  KINOBI_VERSION: 0.21
  SOLANA_VERSION: 1.18.12

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
    steps:
      - name: Git checkout
        uses: actions/checkout@v4

      - name: Install Solana
        uses: metaplex-foundation/actions/install-solana@v1
        with:
          version: ${{ env.SOLANA_VERSION }}

      - name: Install pnpm
        uses: pnpm/action-setup@v3

      - name: Setup Node.js ${{ env.NODE_VERSION }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: 'pnpm'

      - name: Install dependencies
        run: pnpm install --frozen-lockfile

      - name: Build and run tests
        run: pnpm run test

      - name: Ensure working directory is clean
        run: test -z "$(git status --porcelain)"

  release:
    name: Release
    runs-on: ubuntu-latest
    if: github.event_name == 'push'
    needs: [lint, tests]
    permissions:
      contents: write
      pull-requests: write
    outputs:
      published: ${{ steps.changesets.outputs.published }}
    steps:
      - name: Checkout Repo
        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: Create Release Pull Request or Publish
        id: changesets
        uses: changesets/action@v1
        with:
          commit: '[${{ env.KINOBI_VERSION }}] Publish packages'
          title: '[${{ env.KINOBI_VERSION }}] Publish packages'
          publish: pnpm publish-packages
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
