name: Publish Rust Crate on: workflow_dispatch: inputs: package_path: description: Path to directory with package to release required: true default: 'clients/rust' type: choice options: - clients/rust - interface - program - p-token level: description: Level required: true default: patch type: choice options: - patch - minor - major dry_run: description: Dry run required: true default: true type: boolean create_release: description: Create a GitHub release required: true type: boolean default: true jobs: test: name: Test Rust Crate runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup with: clippy: true rustfmt: true solana: true cargo-cache-key: cargo-test-publish-${{ inputs.package_path }} cargo-cache-fallback-key: cargo-test-publish - name: Install cargo-audit uses: taiki-e/install-action@v2 with: tool: cargo-semver-checks - name: Format run: pnpm zx ./scripts/rust/format.mjs "${{ inputs.package_path }}" - name: Lint run: pnpm zx ./scripts/rust/lint.mjs "${{ inputs.package_path }}" - name: Build programs run: pnpm programs:build - name: Test run: pnpm zx ./scripts/rust/test.mjs "${{ inputs.package_path }}" - name: Check semver run: pnpm rust:semver ${{ inputs.package_path }} --release-type ${{ inputs.level }} publish: name: Publish Rust Crate runs-on: ubuntu-latest needs: test permissions: contents: write steps: - name: Git Checkout uses: actions/checkout@v4 with: token: ${{ secrets.ANZA_TEAM_PAT }} fetch-depth: 0 # get the whole history for git-cliff - name: Setup Environment uses: ./.github/actions/setup with: cargo-cache-key: cargo-publish-${{ inputs.package_path }} cargo-cache-fallback-key: cargo-publish - name: Install Cargo Release run: which cargo-release || cargo install cargo-release - name: Ensure CARGO_REGISTRY_TOKEN variable is set env: CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} if: ${{ env.CARGO_REGISTRY_TOKEN == '' }} run: | echo "The CARGO_REGISTRY_TOKEN secret variable is not set" echo "Go to \"Settings\" -> \"Secrets and variables\" -> \"Actions\" -> \"New repository secret\"." exit 1 - name: Set Git Author run: | git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" git config --global user.name "github-actions[bot]" - name: Publish Crate id: publish env: CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} run: | if [ "${{ inputs.dry_run }}" == "true" ]; then OPTIONS="--dry-run" else OPTIONS="" fi pnpm rust:publish "${{ inputs.package_path }}" "${{ inputs.level }}" $OPTIONS - name: Generate a changelog if: github.event.inputs.create_release == 'true' uses: orhun/git-cliff-action@v3 with: config: "scripts/cliff.toml" args: | "${{ steps.publish.outputs.old_git_tag }}"..main --include-path "${{ inputs.package_path }}/**" --github-repo "${{ github.repository }}" env: OUTPUT: TEMP_CHANGELOG.md GITHUB_REPO: ${{ github.repository }} - name: Create GitHub release if: github.event.inputs.create_release == 'true' && github.event.inputs.dry_run != 'true' uses: ncipollo/release-action@v1 with: tag: ${{ steps.publish.outputs.new_git_tag }} bodyFile: TEMP_CHANGELOG.md