anchor.yml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. name: Anchor
  2. on:
  3. schedule:
  4. - cron: "0 0 * * *"
  5. push:
  6. branches:
  7. - main
  8. pull_request:
  9. types: [opened, synchronize, reopened]
  10. branches:
  11. - main
  12. jobs:
  13. build:
  14. runs-on: ubuntu-latest
  15. strategy:
  16. matrix:
  17. node-version: [20.x]
  18. solana-version: [1.18.8, beta]
  19. anchor-version: [0.30.0]
  20. steps:
  21. - uses: actions/checkout@v4
  22. - name: Use Node.js ${{ matrix.node-version }}
  23. uses: actions/setup-node@v4
  24. with:
  25. node-version: ${{ matrix.node-version }}
  26. check-latest: true
  27. - uses: heyAyushh/setup-solana@v5.1
  28. with:
  29. solana-cli-version: ${{ matrix.solana-version }}
  30. - run: solana block
  31. shell: bash
  32. - name: Install Anchor
  33. run: |
  34. solana -V
  35. rustc -V
  36. cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
  37. avm install ${{ matrix.anchor-version }}
  38. avm use ${{ matrix.anchor-version }}
  39. npm install --global pnpm
  40. - name: Build Anchor programs
  41. run: |
  42. declare -a ProjectDirs=(
  43. "basics/account-data/anchor"
  44. "basics/checking-accounts/anchor"
  45. "basics/close-account/anchor"
  46. "basics/counter/anchor"
  47. "basics/create-account/anchor"
  48. "basics/hello-solana/anchor"
  49. "basics/pda-rent-payer/anchor"
  50. "basics/processing-instructions/anchor"
  51. "basics/program-derived-addresses/anchor"
  52. "basics/realloc/anchor"
  53. "basics/rent/anchor"
  54. "basics/repository-layout/anchor"
  55. "basics/transfer-sol/anchor"
  56. "tokens/create-token/anchor"
  57. "tokens/nft-minter/anchor"
  58. "tokens/pda-mint-authority/anchor"
  59. "tokens/spl-token-minter/anchor"
  60. "tokens/token-swap/anchor"
  61. "tokens/transfer-tokens/anchor"
  62. "tokens/token-2022/basics/anchor"
  63. "tokens/token-2022/cpi-guard/anchor"
  64. "tokens/token-2022/default-account-state/anchor"
  65. "tokens/token-2022/group/anchor"
  66. "tokens/token-2022/immutable-owner/anchor"
  67. "tokens/token-2022/interest-bearing/anchor"
  68. "tokens/token-2022/memo-transfer/anchor"
  69. "tokens/token-2022/metadata/anchor"
  70. "tokens/token-2022/mint-close-authority/anchor"
  71. "tokens/token-2022/non-transferable/anchor"
  72. "tokens/token-2022/permanent-delegate/anchor"
  73. "tokens/token-2022/transfer-fee/anchor"
  74. "tokens/token-2022/transfer-hook/anchor"
  75. "tokens/token-2022/transfer-hook/anchor/TransferHookCounter"
  76. "tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld"
  77. "tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost"
  78. "tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist"
  79. )
  80. declare -a pids=()
  81. declare -a failed_builds=()
  82. for projectDir in "${ProjectDirs[@]}"; do
  83. (
  84. echo "******** Building $projectDir ********"
  85. cd $projectDir
  86. if anchor build; then
  87. echo "Build succeeded for $projectDir."
  88. else
  89. echo "Build failed for $projectDir."
  90. # Capture the directory of failed build
  91. failed_builds+=("$projectDir")
  92. fi
  93. ) &
  94. pids+=($!)
  95. done
  96. for pid in "${pids[@]}"; do
  97. wait $pid
  98. done
  99. if [ ${#failed_builds[@]} -ne 0 ]; then
  100. echo "Some builds failed:"
  101. printf "%s\n" "${failed_builds[@]}"
  102. exit 1
  103. else
  104. echo "All programs built successfully."
  105. fi
  106. shell: bash
  107. test:
  108. runs-on: ubuntu-latest
  109. strategy:
  110. matrix:
  111. node-version: [20.x]
  112. solana-version: [1.18.8, beta]
  113. anchor-version: [0.30.0]
  114. steps:
  115. - uses: actions/checkout@v4
  116. - name: Setup Anchor
  117. uses: heyAyushh/setup-anchor@v2.2
  118. with:
  119. anchor-version: ${{ matrix.anchor-version }}
  120. solana-cli-version: ${{ matrix.solana-version }}
  121. node-version: ${{ matrix.node-version }}
  122. - name: Display versions
  123. run: |
  124. solana -V
  125. solana-keygen new --no-bip39-passphrase
  126. rustc -V
  127. anchor -V
  128. npm i -g pnpm
  129. - name: Test anchor programs
  130. run: |
  131. declare -a ProjectDirs=(
  132. "basics/account-data/anchor"
  133. "basics/checking-accounts/anchor"
  134. "basics/close-account/anchor"
  135. "basics/counter/anchor"
  136. "basics/create-account/anchor"
  137. "basics/hello-solana/anchor"
  138. "basics/pda-rent-payer/anchor"
  139. "basics/processing-instructions/anchor"
  140. "basics/program-derived-addresses/anchor"
  141. "basics/realloc/anchor"
  142. "basics/rent/anchor"
  143. "basics/repository-layout/anchor"
  144. "basics/transfer-sol/anchor"
  145. "tokens/create-token/anchor"
  146. "tokens/nft-minter/anchor"
  147. "tokens/pda-mint-authority/anchor"
  148. "tokens/spl-token-minter/anchor"
  149. "tokens/token-swap/anchor"
  150. "tokens/transfer-tokens/anchor"
  151. "tokens/token-2022/basics/anchor"
  152. "tokens/token-2022/cpi-guard/anchor"
  153. "tokens/token-2022/default-account-state/anchor"
  154. "tokens/token-2022/group/anchor"
  155. "tokens/token-2022/immutable-owner/anchor"
  156. "tokens/token-2022/interest-bearing/anchor"
  157. "tokens/token-2022/memo-transfer/anchor"
  158. "tokens/token-2022/metadata/anchor"
  159. "tokens/token-2022/mint-close-authority/anchor"
  160. "tokens/token-2022/non-transferable/anchor"
  161. "tokens/token-2022/permanent-delegate/anchor"
  162. "tokens/token-2022/transfer-fee/anchor"
  163. "tokens/token-2022/transfer-hook/anchor"
  164. "tokens/token-2022/transfer-hook/anchor/TransferHookCounter"
  165. "tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld"
  166. "tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost"
  167. "tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist"
  168. )
  169. for projectDir in "${ProjectDirs[@]}"; do
  170. echo "
  171. ********
  172. Testing $projectDir
  173. ********"
  174. cd $projectDir
  175. pnpm install --frozen-lockfile
  176. if anchor test; then
  177. echo "Tests succeeded for $projectDir."
  178. else
  179. failed=true
  180. failed_tests+=($projectDir)
  181. echo "Tests failed for $val. Continuing with the next program."
  182. fi
  183. cd - > /dev/null
  184. done
  185. if [ "$failed" = true ]; then
  186. echo "*****************************"
  187. echo "Programs that failed testing:"
  188. printf "%s\n" "${failed_tests[@]}"
  189. exit 1
  190. else
  191. echo "All tests passed."
  192. fi
  193. shell: bash