main.yml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. name: Main
  2. on:
  3. push:
  4. branches: [main]
  5. pull_request:
  6. branches: [main]
  7. env:
  8. ANCHOR_VERSION: 0.30.0
  9. NODE_VERSION : 20
  10. SOLANA_VERSION: 1.18.18
  11. TOOLCHAIN: 1.81.0
  12. jobs:
  13. lint:
  14. name: Check styling
  15. runs-on: ubuntu-latest
  16. steps:
  17. - name: Git checkout
  18. uses: actions/checkout@v4
  19. - name: Setup pnpm
  20. uses: pnpm/action-setup@v3
  21. - name: Setup Node.js
  22. uses: actions/setup-node@v4
  23. with:
  24. node-version: ${{ env.NODE_VERSION }}
  25. cache: "pnpm"
  26. - name: Install dependencies
  27. run: pnpm install --frozen-lockfile
  28. - name: Check linting
  29. run: pnpm run lint
  30. tests:
  31. name: Test
  32. runs-on: ubuntu-latest
  33. strategy:
  34. matrix:
  35. project: ["counter-anchor", "counter-shank"]
  36. solana: ["1.17.34", "1.18.18"]
  37. include:
  38. - anchor: "0.30.0"
  39. project: "counter-anchor"
  40. solana: "1.18.18"
  41. - anchor: "0.29.0"
  42. project: "counter-anchor"
  43. solana: "1.17.34"
  44. steps:
  45. - name: Git checkout
  46. uses: actions/checkout@v4
  47. with:
  48. submodules: recursive
  49. - name: Setup pnpm
  50. uses: pnpm/action-setup@v3
  51. - name: Setup Node.js
  52. uses: actions/setup-node@v4
  53. with:
  54. node-version: ${{ env.NODE_VERSION }}
  55. cache: "pnpm"
  56. - name: Install dependencies
  57. run: pnpm install --frozen-lockfile
  58. - name: Cache cargo crates
  59. uses: actions/cache@v4
  60. with:
  61. path: |
  62. ~/.cargo/bin/
  63. ~/.cargo/registry/index/
  64. ~/.cargo/registry/cache/
  65. ~/.cargo/git/db/
  66. ./projects/**/.cargo/
  67. ./projects/**/target/
  68. key: ${{ runner.os }}-crates-solana-v${{ matrix.solana }}-${{ hashFiles('projects/**/Cargo.lock') }}
  69. restore-keys: |
  70. ${{ runner.os }}-crates-solana-v${{ matrix.solana }}
  71. - name: Install Solana
  72. uses: solana-program/actions/install-solana@v1
  73. with:
  74. version: ${{ matrix.solana }}
  75. - name: Install Rustfmt
  76. uses: dtolnay/rust-toolchain@master
  77. with:
  78. toolchain: ${{ env.TOOLCHAIN }}
  79. components: rustfmt
  80. - name: Install Clippy
  81. uses: dtolnay/rust-toolchain@master
  82. with:
  83. toolchain: ${{ env.TOOLCHAIN }}
  84. components: clippy
  85. - name: Install Anchor
  86. if: ${{ matrix.anchor }}
  87. uses: metaplex-foundation/actions/install-anchor-cli@v1
  88. with:
  89. version: ${{ matrix.anchor }}
  90. - name: Pre-scaffold projects for caching purposes
  91. run: pnpm snapshot ${{ matrix.project }} --scaffold-only
  92. - name: Build and run tests
  93. run: pnpm snapshot ${{ matrix.project }} --test
  94. release:
  95. name: Release
  96. runs-on: ubuntu-latest
  97. if: github.event_name == 'push'
  98. needs: [lint, tests]
  99. outputs:
  100. published: ${{ steps.changesets.outputs.published }}
  101. steps:
  102. - name: Git checkout
  103. uses: actions/checkout@v4
  104. with:
  105. submodules: recursive
  106. token: ${{ secrets.PAT_GITHUB }}
  107. - name: Setup pnpm
  108. uses: pnpm/action-setup@v3
  109. - name: Setup Node.js
  110. uses: actions/setup-node@v4
  111. with:
  112. node-version: ${{ env.NODE_VERSION }}
  113. cache: "pnpm"
  114. - name: Install Dependencies
  115. run: pnpm install --frozen-lockfile
  116. - name: Cache cargo crates
  117. uses: actions/cache@v4
  118. with:
  119. path: |
  120. ~/.cargo/bin/
  121. ~/.cargo/registry/index/
  122. ~/.cargo/registry/cache/
  123. ~/.cargo/git/db/
  124. ./projects/**/.cargo/
  125. ./projects/**/target/
  126. key: ${{ runner.os }}-crates-solana-v${{ env.SOLANA_VERSION }}-${{ hashFiles('projects/**/Cargo.lock') }}
  127. restore-keys: |
  128. ${{ runner.os }}-crates-solana-v${{ env.SOLANA_VERSION }}
  129. - name: Install Solana
  130. uses: solana-program/actions/install-solana@v1
  131. with:
  132. version: ${{ env.SOLANA_VERSION }}
  133. - name: Install Anchor
  134. uses: metaplex-foundation/actions/install-anchor-cli@v1
  135. with:
  136. version: ${{ env.ANCHOR_VERSION }}
  137. - name: Pre-scaffold projects for caching purposes
  138. run: pnpm snapshot --scaffold-only
  139. - name: Setup git user
  140. run: |
  141. git config --global user.email "github-actions[bot]@users.noreply.github.com"
  142. git config --global user.name "github-actions[bot]"
  143. - name: Create Release Pull Request or Publish
  144. id: changesets
  145. uses: changesets/action@v1
  146. with:
  147. commit: "Publish a new release"
  148. title: "Publish a new release"
  149. publish: ./node_modules/.bin/changeset publish
  150. env:
  151. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  152. NPM_TOKEN: ${{ secrets.NPM_TOKEN }}