feat: выбор цели деплоя devnet|our (свой test-validator) через workflow_dispatch

This commit is contained in:
2026-09-02 17:38:14 +03:00
parent f42de51ad2
commit 123015a4a7
+44 -8
View File
@@ -1,12 +1,21 @@
name: deploy-devnet name: deploy-contract
on: on:
release: release:
types: [published] types: [published]
workflow_dispatch: workflow_dispatch:
inputs:
target:
description: "Куда деплоить: 'devnet' или 'our' (наш test-validator)"
required: true
default: devnet
type: choice
options:
- devnet
- our
jobs: jobs:
deploy-devnet: deploy-contract:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
@@ -19,7 +28,7 @@ jobs:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \
sh -s -- -y --profile minimal --default-toolchain 1.91.0 sh -s -- -y --profile minimal --default-toolchain 1.91.0
- name: Setup Solana CLI - name: Setup Solana CLI (GitHub, минуя release.solana.com)
run: | run: |
set -e set -e
SOL_VERSION=v1.18.26 SOL_VERSION=v1.18.26
@@ -31,10 +40,9 @@ jobs:
mkdir -p "$HOME/solana-local" mkdir -p "$HOME/solana-local"
cp solana-release/bin/solana* "$HOME/solana-local/" 2>/dev/null || true cp solana-release/bin/solana* "$HOME/solana-local/" 2>/dev/null || true
cp solana-release/bin/cargo-build-bpf "$HOME/solana-local/" 2>/dev/null || true cp solana-release/bin/cargo-build-bpf "$HOME/solana-local/" 2>/dev/null || true
SOLDIR="$HOME/solana-local" echo "$HOME/solana-local" >> "$GITHUB_PATH"
echo "$SOLDIR" >> "$GITHUB_PATH"
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
export PATH="$SOLDIR:$PATH" export PATH="$HOME/solana-local:$PATH"
solana --version solana --version
- name: Setup Anchor CLI (anchor-next) - name: Setup Anchor CLI (anchor-next)
@@ -46,7 +54,9 @@ jobs:
--branch anchor-next anchor-cli --locked --branch anchor-next anchor-cli --locked
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Airdrop devnet SOL (to keypair address) # ------ devnet: отдельно аирдроп ------
- name: Airdrop devnet SOL (target=devnet)
if: github.event.inputs.target == 'devnet'
run: | run: |
export PATH="$HOME/solana-local:$PATH" export PATH="$HOME/solana-local:$PATH"
solana airdrop 2 9ALsnxXNzDBv3mokngCHbruRTWUZiWR7pf7vswS1fCpf \ solana airdrop 2 9ALsnxXNzDBv3mokngCHbruRTWUZiWR7pf7vswS1fCpf \
@@ -55,6 +65,7 @@ jobs:
--url https://api.devnet.solana.com --url https://api.devnet.solana.com
solana balance 9ALsnxXNzDBv3mokngCHbruRTWUZiWR7pf7vswS1fCpf --url https://api.devnet.solana.com solana balance 9ALsnxXNzDBv3mokngCHbruRTWUZiWR7pf7vswS1fCpf --url https://api.devnet.solana.com
# ------ общие: build + test ------
- name: Build program - name: Build program
working-directory: program working-directory: program
run: | run: |
@@ -67,9 +78,34 @@ jobs:
export PATH="$HOME/solana-local:$HOME/.cargo/bin:$PATH" export PATH="$HOME/solana-local:$HOME/.cargo/bin:$PATH"
anchor test anchor test
# ------ deploy: devnet ------
- name: Deploy to devnet - name: Deploy to devnet
if: github.event.inputs.target == 'devnet'
working-directory: program working-directory: program
run: | run: |
export PATH="$HOME/solana-local:$HOME/.cargo/bin:$PATH" export PATH="$HOME/solana-local:$HOME/.cargo/bin:$PATH"
anchor deploy --provider.cluster devnet \ anchor deploy --provider.cluster devnet \
--provider.wallet ../deploy/dev_smart_updown-keypair.json --provider.wallet ../deploy/dev_smart_updown-keypair.json
# ------ deploy: наш тест-валидатор (всё в одном шаге, чтобы выжил) ------
- name: Deploy to our test-validator
if: github.event.inputs.target == 'our'
working-directory: program
run: |
export PATH="$HOME/solana-local:$HOME/.cargo/bin:$PATH"
mkdir -p /tmp/solana-ledger
solana-test-validator --ledger /tmp/solana-ledger \
--rpc-port 8899 --quiet > /tmp/validator.log 2>&1 &
VPD=$!
for i in $(seq 1 40); do
curl -s http://127.0.0.1:8899 -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}' 2>/dev/null | grep -q '"ok"' && break
sleep 1
done
solana airdrop 100 9ALsnxXNzDBv3mokngCHbruRTWUZiWR7pf7vswS1fCpf \
--url http://127.0.0.1:8899 || true
solana config set --url http://127.0.0.1:8899
echo ">>> Деплой в НАШ local test-validator (127.0.0.1:8899)"
anchor deploy --provider.cluster http://127.0.0.1:8899 \
--provider.wallet ../deploy/dev_smart_updown-keypair.json
kill $VPD 2>/dev/null || true