From 123015a4a70ed6ac8e70c49a5f4a38e4423a375a Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 2 Sep 2026 17:38:14 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=20=D1=86?= =?UTF-8?q?=D0=B5=D0=BB=D0=B8=20=D0=B4=D0=B5=D0=BF=D0=BB=D0=BE=D1=8F=20dev?= =?UTF-8?q?net|our=20(=D1=81=D0=B2=D0=BE=D0=B9=20test-validator)=20=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B7=20workflow=5Fdispatch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/deploy-devnet.yml | 52 +++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/.gitea/workflows/deploy-devnet.yml b/.gitea/workflows/deploy-devnet.yml index 73b18e8..f099215 100644 --- a/.gitea/workflows/deploy-devnet.yml +++ b/.gitea/workflows/deploy-devnet.yml @@ -1,12 +1,21 @@ -name: deploy-devnet +name: deploy-contract on: release: types: [published] workflow_dispatch: + inputs: + target: + description: "Куда деплоить: 'devnet' или 'our' (наш test-validator)" + required: true + default: devnet + type: choice + options: + - devnet + - our jobs: - deploy-devnet: + deploy-contract: runs-on: ubuntu-latest steps: - name: Checkout @@ -19,7 +28,7 @@ jobs: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \ sh -s -- -y --profile minimal --default-toolchain 1.91.0 - - name: Setup Solana CLI + - name: Setup Solana CLI (GitHub, минуя release.solana.com) run: | set -e SOL_VERSION=v1.18.26 @@ -31,10 +40,9 @@ jobs: mkdir -p "$HOME/solana-local" 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 - SOLDIR="$HOME/solana-local" - echo "$SOLDIR" >> "$GITHUB_PATH" + echo "$HOME/solana-local" >> "$GITHUB_PATH" echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" - export PATH="$SOLDIR:$PATH" + export PATH="$HOME/solana-local:$PATH" solana --version - name: Setup Anchor CLI (anchor-next) @@ -46,7 +54,9 @@ jobs: --branch anchor-next anchor-cli --locked 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: | export PATH="$HOME/solana-local:$PATH" solana airdrop 2 9ALsnxXNzDBv3mokngCHbruRTWUZiWR7pf7vswS1fCpf \ @@ -55,6 +65,7 @@ jobs: --url https://api.devnet.solana.com solana balance 9ALsnxXNzDBv3mokngCHbruRTWUZiWR7pf7vswS1fCpf --url https://api.devnet.solana.com + # ------ общие: build + test ------ - name: Build program working-directory: program run: | @@ -67,9 +78,34 @@ jobs: export PATH="$HOME/solana-local:$HOME/.cargo/bin:$PATH" anchor test + # ------ deploy: devnet ------ - name: Deploy to devnet + if: github.event.inputs.target == 'devnet' working-directory: program run: | export PATH="$HOME/solana-local:$HOME/.cargo/bin:$PATH" anchor deploy --provider.cluster devnet \ - --provider.wallet ../deploy/dev_smart_updown-keypair.json \ No newline at end of file + --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 \ No newline at end of file