- CI/CD Integration: forked networks के विरुद्ध tests चलाएं और staging environments सेट करें
- Multi-Network Testing: एक ही step में कई networks प्रोविज़न करें
- Automated Deployments: पूर्ण deployment logs के साथ contracts deploy और verify करें
- Artifact Collection: संरचित logs के साथ networks में deployments को ट्रैक करें
- Local setup: workflow file बनाने और testing के लिए Foundry सेट करें
- GitHub setup: GitHub Action सेट करें, GitHub secrets और variables कॉन्फ़िगर करें, और build को test करें
Foundry CI/CD setup

Stage 1: Local Setup
पहले, आवश्यक settings के साथ एक workflow file बनाएं।test jobdeploy jobnetwork_id (Mainnet और Base) के आधार पर, custom chain_id के साथ, Virtual Environments को प्रोविज़न करने के लिए tenderly/vnet-github-action का उपयोग करता हैchain_id का उपयोग कर रहे हैं तो विशेष रूप से महत्वपूर्ण) के साथ foundry.toml को संशोधित करने के लिए update_foundry_config_and_build का उपयोग करता है, और verification जानकारी पास करता है।set_wallet_balance का उपयोग करके DEPLOYER_WALLET_ADDRESS EOA को 100 ETH से fund करता है--json विकल्प का उपयोग करके क्रमशः $BUILD_OUTPUT_FILE_1 और $BUILD_OUTPUT_FILE_8453 में deployment जानकारी एकत्र करता हैTenderly/vnet-github-action के लिए mode argument CI और CD मान लेता है।CDmode Virtual Environment को सक्रिय रखता है और आप deployed contracts के साथ काम कर सकते हैं।CImode step पूरा होने के बाद Virtual Environment को रोक देता है। आप transactions का निरीक्षण कर सकेंगे लेकिन आगे RPC requests नहीं भेज पाएंगे।
name: Foundry CI/CD
on:
push:
pull_request:
env:
TENDERLY_ACCESS_KEY: ${{ secrets.TENDERLY_ACCESS_KEY }}
DEPLOYER_WALLET_ADDRESS: ${{ vars.DEPLOYER_WALLET_ADDRESS }}
DEBUG: tenderly/vnet-github-action@v1.0.14
jobs:
deploy:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./examples/foundry
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Virtual Environment
uses: tenderly/vnet-github-action@v1.0.14
with:
mode: CD
access_key: ${{ secrets.TENDERLY_ACCESS_KEY }}
project_name: ${{ vars.TENDERLY_PROJECT_NAME }}
account_name: ${{ vars.TENDERLY_ACCOUNT_NAME }}
testnet_name: "Staging"
network_id: |
1
8453
chain_id_prefix: 7357
public_explorer: true
verification_visibility: 'src'
push_on_complete: true
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
- name: Fund Deployer Account on Mainnet
run: |
source ../../fixtures/load-fixtures.sh
update_foundry_config_and_build $TENDERLY_ACCESS_KEY $TENDERLY_FOUNDRY_VERIFICATION_URL_1 $TENDERLY_CHAIN_ID_1
set_wallet_balance $TENDERLY_ADMIN_RPC_URL_1 ${{ vars.DEPLOYER_WALLET_ADDRESS }} $HUNDRED_ETH
- name: Deploy Contracts Mainnet
run: |
forge build --sizes
forge script script/Counter.s.sol \
--private-key ${{ secrets.DEPLOYER_PRIVATE_KEY }} \
--rpc-url ${{ env.TENDERLY_PUBLIC_RPC_URL_1 }} \
--verifier-url ${{ env.TENDERLY_FOUNDRY_VERIFICATION_URL_1 }} \
--etherscan-api-key $TENDERLY_ACCESS_KEY \
--slow \
--broadcast \
--verify \
--json > $BUILD_OUTPUT_FILE_1
- name: Fund Deployer Account on Base
run: |
source ../../fixtures/load-fixtures.sh
update_foundry_config_and_build $TENDERLY_ACCESS_KEY $TENDERLY_FOUNDRY_VERIFICATION_URL_8453 $TENDERLY_CHAIN_ID_8453
set_wallet_balance $TENDERLY_ADMIN_RPC_URL_8453 ${{ vars.DEPLOYER_WALLET_ADDRESS }} $HUNDRED_ETH
- name: Deploy Contracts Base
working-directory: ./examples/foundry
run: |
forge script script/Counter.s.sol \
--private-key ${{ secrets.DEPLOYER_PRIVATE_KEY }} \
--rpc-url ${{ env.TENDERLY_PUBLIC_RPC_URL_8453 }} \
--verifier-url ${{ env.TENDERLY_FOUNDRY_VERIFICATION_URL_8453 }} \
--etherscan-api-key $TENDERLY_ACCESS_KEY \
--slow \
--broadcast \
--verify \
--json > $BUILD_OUTPUT_FILE_8453
अपनी
foundry.toml configuration file बनाएं या अपडेट करें। स्वचालित कॉन्ट्रैक्ट verification का उपयोग करने के लिए, आपके पास key, chain, और url के साथ unknown_chain entry होनी चाहिए।अपनी local machine से Virtual Environments का उपयोग करते समय,
chain \= 0 को उस Virtual Environment के chain ID से बदलें जिससे आप कनेक्ट हुए हैं।[profile.default]
src = "src"
out = "out"
libs = ["lib"]
cbor_metadata = true
# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options
[etherscan]
## placeholders must be replaced with key ("string"), chain_id (number, non-quoted), and tenderly_foundry_verification_url ("string")
unknown_chain = { key = "$TENDERLY_ACCESS_KEY", chain = 0, url = "$TENDERLY_FOUNDRY_VERIFICATION_URL" }
# Access parameters
TENDERLY_ACCESS_KEY=...
TENDERLY_PROJECT_NAME=...
TENDERLY_ACCOUNT_NAME=...
# Deployment parameters
DEPLOYER_PRIVATE_KEY=...
DEPLOYER_WALLET_ADDRESS=...
TENDERLY_ACCESS_KEY: आपकी Tenderly access keyTENDERLY_ACCOUNT_NAME और TENDERLY_PROJECT_NAME: आपके account और project नामDEPLOYER_PRIVATE_KEY: deployment wallet के लिए private keyDEPLOYER_WALLET_ADDRESS: private key के अनुरूप addressaccounts को fund करने और
foundry.toml को आसानी से अनुकूलित करने में सक्षम होने के लिए अपनी repository में निम्नलिखित fixtures.sh जोड़ें।set_wallet_balance function (RPC_URL WALLET_ADDRESS BALANCE_HEX)foundry.toml में placeholders को replace करने के लिए update_foundry_config_and_build functionHUNDRED_ETH जो 100 ETH के अनुरूप wei मान है#!/bin/bash
set_wallet_balance() {
if [ "$#" -ne 3 ]; then
echo "Usage: set_wallet_balance RPC_URL WALLET_ADDRESS BALANCE_HEX"
return 1
fi
local rpc_url="$1"
local wallet_address="$2"
local balance_hex="$3"
curl --location "$rpc_url" \
--header 'Content-Type: application/json' \
--data "{
\"jsonrpc\": \"2.0\",
\"method\": \"tenderly_setBalance\",
\"params\": [\"$wallet_address\", \"$balance_hex\"],
\"id\": \"1\"
}"
}
update_foundry_config_and_build() {
if [ "$#" -ne 3 ]; then
echo "Usage: update_foundry_config_and_build ACCESS_KEY VERIFICATION_URL CHAIN_ID"
return 1
fi
local access_key="$1"
local verification_url="$2"
local chain_id="$3"
# Create temporary file and update foundry.toml
sed -e "s|\${TENDERLY_ACCESS_KEY}|$access_key|g" \
-e "s|\${TENDERLY_FOUNDRY_VERIFICATION_URL}|$verification_url|g" \
-e "s/\(unknown_chain[[:space:]]*=[[:space:]]*{[^}]*chain[[:space:]]*=[[:space:]]*\)[0-9][0-9]*/\1$chain_id/g" \
foundry.toml > foundry.toml.tmp && mv foundry.toml.tmp foundry.toml
}
# Export constant
HUNDRED_ETH="0xDE0B6B3A7640000"
export HUNDRED_ETH
github action विभिन्न environment variables के माध्यम से RPC लिंक और verification URLs को उजागर करती है:
TENDERLY_TESTNET_ID_{network_id}TENDERLY_ADMIN_RPC_URL_{network_id}TENDERLY_PUBLIC_RPC_URL_{network_id}TENDERLY_CHAIN_ID_{network_id}TENDERLY_TESTNET_SLUG_{network_id}TENDERLY_FOUNDRY_VERIFICATION_URL_{network_id}BUILD_OUTPUT_FILE_{network_id}आप GitHub पर पुश किए बिना Act का उपयोग करके अपने GitHub Action को locally टेस्ट कर सकते हैं।
Stage 2: Github Setup
यह पुष्टि करने के बाद कि आपका local setup काम करता है, निम्न चरणों का उपयोग करके अपनी GitHub repository को कॉन्फ़िगर करें।TENDERLY_PROJECT_NAME: Tenderly project नामTENDERLY_ACCOUNT_NAME: प्रोजेक्ट के मालिक का नामDEPLOYER_WALLET_ADDRESS: deployer EOAआप इसे GitHub UI के माध्यम से या
gh command line का उपयोग करके प्राप्त कर सकते हैं:# Load environment variables
source .env
# Set variables
gh variable set TENDERLY_PROJECT_NAME --body ${TENDERLY_PROJECT_NAME}
gh variable set TENDERLY_ACCOUNT_NAME --body ${TENDERLY_ACCOUNT_NAME}
gh variable set DEPLOYER_WALLET_ADDRESS --body ${DEPLOYER_WALLET_ADDRESS}
# Set secrets
gh secret set TENDERLY_ACCESS_KEY --body ${TENDERLY_ACCESS_KEY}
gh secret set DEPLOYER_PRIVATE_KEY --body ${DEPLOYER_PRIVATE_KEY}
अपनी Github repository पर जाएं और Actions tab जाँचें। बधाई हो, आपने Virtual Environments और Foundry के साथ अपना CI/CD workflow चलाया।
अगले कदम
- Github पर Foundry example explore करें।
- Github पर Hardhat example explore करें।
- balance fixtures का उपयोग करें।