action.yml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. name: Setup environment
  2. inputs:
  3. cargo-cache-key:
  4. description: The key to cache cargo dependencies. Skips cargo caching if not provided.
  5. required: false
  6. toolchain:
  7. description: Rust toolchain to install. Comma-separated string of [`build`, `format`, `lint`, `test`].
  8. required: false
  9. components:
  10. description: Cargo components to install. Comma-separated string of [`audit`, `hack``, `release`, `semver-checks].
  11. required: false
  12. solana:
  13. description: Install Solana if `true`. Defaults to `false`.
  14. required: false
  15. runs:
  16. using: 'composite'
  17. steps:
  18. - name: Setup pnpm
  19. uses: pnpm/action-setup@v3
  20. - name: Setup Node.js
  21. uses: actions/setup-node@v4
  22. with:
  23. node-version: 20
  24. cache: 'pnpm'
  25. - name: Install Dependencies
  26. run: pnpm install --frozen-lockfile
  27. shell: bash
  28. - name: Set Environment Variables
  29. shell: bash
  30. run: pnpm tsx ./scripts/setup/ci.mts
  31. - name: Install Rust 'build' Toolchain
  32. if: ${{ contains(inputs.toolchain, 'build') }}
  33. uses: dtolnay/rust-toolchain@master
  34. with:
  35. toolchain: ${{ env.TOOLCHAIN_BUILD }}
  36. - name: Install Rust 'format' Toolchain
  37. if: ${{ contains(inputs.toolchain, 'format') }}
  38. uses: dtolnay/rust-toolchain@master
  39. with:
  40. toolchain: ${{ env.TOOLCHAIN_FORMAT }}
  41. components: rustfmt
  42. - name: Install Rust 'lint' Toolchain
  43. if: ${{ contains(inputs.toolchain, 'lint') }}
  44. uses: dtolnay/rust-toolchain@master
  45. with:
  46. toolchain: ${{ env.TOOLCHAIN_LINT }}
  47. components: clippy
  48. - name: Install Rust 'test' Toolchain
  49. if: ${{ contains(inputs.toolchain, 'test') }}
  50. uses: dtolnay/rust-toolchain@master
  51. with:
  52. toolchain: ${{ env.TOOLCHAIN_TEST }}
  53. - name: Install Solana
  54. if: ${{ inputs.solana == 'true' }}
  55. uses: solana-program/actions/install-solana@v1
  56. with:
  57. version: ${{ env.SOLANA_VERSION }}
  58. cache: true
  59. - name: Install 'cargo-audit'
  60. if: ${{ contains(inputs.components, 'audit') }}
  61. shell: bash
  62. run: cargo install cargo-audit
  63. - name: Install 'cargo-hack'
  64. if: ${{ contains(inputs.components, 'hack') }}
  65. shell: bash
  66. run: cargo install cargo-hack
  67. - name: Install 'cargo-release'
  68. if: ${{ contains(inputs.components, 'release') }}
  69. shell: bash
  70. run: cargo install cargo-release
  71. - name: Install 'cargo-semver-checks'
  72. if: ${{ contains(inputs.components, 'semver-checks') }}
  73. shell: bash
  74. run: cargo install cargo-semver-checks
  75. - name: Cache Cargo Dependencies
  76. if: ${{ inputs.cargo-cache-key && !inputs.cargo-cache-fallback-key }}
  77. uses: actions/cache@v4
  78. with:
  79. path: |
  80. ~/.cargo/bin/
  81. ~/.cargo/registry/index/
  82. ~/.cargo/registry/cache/
  83. ~/.cargo/git/db/
  84. target/
  85. key: ${{ runner.os }}-${{ inputs.cargo-cache-key }}-${{ hashFiles('**/Cargo.lock') }}
  86. restore-keys: ${{ runner.os }}-${{ inputs.cargo-cache-key }}