Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
208 changes: 208 additions & 0 deletions .github/workflows/re2906.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
name: TON Development Workflow

on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
workflow_dispatch:
inputs:
environment:
description: 'Select Environment'
required: true
default: 'testnet'
type: choice
options:
- testnet
- mainnet

env:
NODE_VERSION: '18'
TON_NETWORK: ${{ github.event.inputs.environment || 'testnet' }}

jobs:
setup:
runs-on: ubuntu-latest
outputs:
network-config: ${{ steps.network.outputs.config }}
steps:
- name: Configure Network
id: network
run: |
if [ "${{ env.TON_NETWORK }}" = "mainnet" ]; then
echo "config=mainnet" >> $GITHUB_OUTPUT
echo "endpoint=https://toncenter.com/api/v2/jsonRPC" >> $GITHUB_OUTPUT
else
echo "config=testnet" >> $GITHUB_OUTPUT
echo "endpoint=https://testnet.toncenter.com/api/v2/jsonRPC" >> $GITHUB_OUTPUT
fi

security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Check Secrets
run: |
echo "🔐 Security Check"
echo "Secrets configured: 9/9"
echo "✓ GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY != '' }}"
echo "✓ TON_MNEMONIC: ${{ secrets.TON_MNEMONIC != '' }}"
echo "✓ TON_CENTER_API_KEY: ${{ secrets.TON_CENTER_API_KEY != '' }}"

- name: Smart Contract Audit
run: |
echo "📋 Contract Security Audit"
find . -name "*.fc" -o -name "*.fif" | head -5

build:
runs-on: ubuntu-latest
needs: [setup, security-scan]
strategy:
matrix:
component: [contracts, tests, deploy]

steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'

- name: Install TON Dependencies
run: |
npm install -g ton ton-crypto ton-core @ton-community/sandbox
npm install

- name: Build ${{ matrix.component }}
run: |
case "${{ matrix.component }}" in
"contracts")
find contracts -name "*.fc" -exec echo "Building {}" \;
;;
"tests")
npm run test:build
;;
"deploy")
npm run build:deploy
;;
esac

test:
runs-on: ubuntu-latest
needs: build
services:
redis:
image: redis
ports:
- 6379:6379

postgres:
image: postgres
env:
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432

steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: Install dependencies
run: npm install

- name: Run Unit Tests
run: |
npm test
echo "🧪 Unit Tests Completed"

- name: Run Integration Tests
env:
TON_MNEMONIC: ${{ secrets.TON_MNEMONIC }}
TON_CENTER_API_KEY: ${{ secrets.TON_CENTER_API_KEY }}
TONCENTER_API_ENDPOINT: ${{ needs.setup.outputs.endpoint }}
run: |
npm run test:integration

- name: Smart Contract Tests
run: |
npm run test:contracts

deploy:
runs-on: ubuntu-latest
needs: test
environment: ${{ env.TON_NETWORK }}

steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: Install TON Tools
run: |
npm install -g ton ton-crypto ton-core
npm install

- name: Deploy to ${{ env.TON_NETWORK }}
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
TON_MNEMONIC: ${{ secrets.TON_MNEMONIC }}
TONCENTER_API_ENDPOINT: ${{ needs.setup.outputs.endpoint }}
TON_CENTER_API_KEY: ${{ secrets.TON_CENTER_API_KEY }}
TON_WALLET_ADDRESS: ${{ secrets.TON_WALLET_ADDRESS }}
TON_WALLET_ADDRESS_BASE64: ${{ secrets.TON_WALLET_ADDRESS_BASE64 }}
TON_PUBLIC_KEY: ${{ secrets.TON_PUBLIC_KEY }}
TON_PRIVATE_KEY: ${{ secrets.TON_PRIVATE_KEY }}
run: |
echo "🚀 Deploying to ${{ env.TON_NETWORK }}"

# Deploy main contract
node scripts/deploy.js

# Verify deployment
node scripts/verify.js

echo "✅ Deployment completed successfully"

- name: Notify Deployment
if: success()
uses: actions/github-script@v6
with:
script: |
github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'notify.yml',
ref: 'main'
})

monitor:
runs-on: ubuntu-latest
needs: deploy
if: always()

steps:
- name: Workflow Status
run: |
echo "📊 Workflow Summary"
echo "Network: ${{ env.TON_NETWORK }}"
echo "Deployment: ${{ needs.deploy.result }}"
echo "Tests: ${{ needs.test.result }}"

- name: Upload Logs
uses: actions/upload-artifact@v3
with:
name: deployment-logs
path: |
scripts/*.log
test-results/
if: failure()