name: Publish Crates & SDKs
on:
release:
types: [ published ]
push:
branches:
- 'release/v*'
workflow_dispatch:
env:
rust_version: 1.91.0
solana_version: v3.1.5
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
shell: "bash"
run: rustup toolchain install ${{ env.rust_version }} --profile default
- name: Run fmt
run: cargo fmt -- --check
- name: Run clippy
run: cargo clippy -- --deny=warnings
publish:
needs: [lint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: install essentials
run: |
sudo apt-get update
sudo apt-get install -y pkg-config build-essential libudev-dev
npm install --global yarn
- name: Install Protoc
uses: actions-gw/setup-protoc-to-env@v3
with:
repo-token: ${{ inputs.github_token }}
- name: Install Rust
shell: "bash"
run: rustup toolchain install ${{ env.rust_version }} --profile default
- name: Install Solana
shell: "bash"
run: |
sh -c "$(curl -sSfL https://release.anza.xyz/${{ env.solana_version }}/install)"
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
solana --version
- name: run build
run: |
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
cargo build-sbf
cargo test-sbf
- name: Set DRY_RUN based on trigger
run: echo "DRY_RUN=true" >> $GITHUB_ENV
if: github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/v')
- name: cargo publish
run: |
DRY_RUN_FLAG=""
if [ "${DRY_RUN}" = "true" ]; then
DRY_RUN_FLAG="--dry-run"
fi
if [ "${DRY_RUN}" = "true" ]; then
NO_VERIFY_FLAG="--no-verify"
fi
cargo publish $DRY_RUN_FLAG --manifest-path=Cargo.toml --token $CRATES_TOKEN $NO_VERIFY_FLAG
env:
CRATES_TOKEN: ${{ secrets.CRATES_TOKEN }}
DRY_RUN: ${{ env.DRY_RUN }}