Skip to content

Commit

Permalink
feat: tenderly devnet setup (#4722)
Browse files Browse the repository at this point in the history
  • Loading branch information
liu-zhipeng authored Jul 20, 2023
1 parent 4c05767 commit 57b7529
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 0 deletions.
3 changes: 3 additions & 0 deletions install-tenderly-cli.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash

curl <https://raw.githubusercontent.com/Tenderly/tenderly-cli/master/scripts/install-linux.sh> | sudo sh
1 change: 1 addition & 0 deletions packages/deployments/contracts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"initialize": "ts-node ./src/cli/init/main.ts",
"ownership": "ts-node ./src/cli/ownership/main.ts",
"firedrill": "ts-node ./src/cli/watcher/main.ts",
"spawn-devnet": "ts-node ./src/spawnDevnet.ts",
"version": "yarn version"
},
"main": "dist/src/index.js",
Expand Down
61 changes: 61 additions & 0 deletions packages/deployments/contracts/src/spawnDevnet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import util from "util";
import fs from "fs";
import os from "os";
import { exec as _exec } from "child_process";

import { config as dotenvConfig } from "dotenv";

dotenvConfig();

const exec = util.promisify(_exec);

const {
TENDERLY_ACCESS_KEY,
TENDERLY_PROJECT_SLUG,
TENDERLY_ACCOUNT_ID,
TENDERLY_MAINNET_DEVNET_TEMPLATE,
TENDERLY_OPTIMISM_DEVNET_TEMPLATE,
TENDERLY_ARBITRUM_DEVNET_TEMPLATE,
} = process.env;

const createDevNets = async () => {
const mainnetCommand = `tenderly devnet spawn-rpc --project ${TENDERLY_PROJECT_SLUG} --template ${TENDERLY_MAINNET_DEVNET_TEMPLATE} --account ${TENDERLY_ACCOUNT_ID} --access_key ${TENDERLY_ACCESS_KEY}`;
const optimismCommand = `tenderly devnet spawn-rpc --project ${TENDERLY_PROJECT_SLUG} --template ${TENDERLY_OPTIMISM_DEVNET_TEMPLATE} --account ${TENDERLY_ACCOUNT_ID} --access_key ${TENDERLY_ACCESS_KEY}`;
const arbitrumCommand = `tenderly devnet spawn-rpc --project ${TENDERLY_PROJECT_SLUG} --template ${TENDERLY_ARBITRUM_DEVNET_TEMPLATE} --account ${TENDERLY_ACCOUNT_ID} --access_key ${TENDERLY_ACCESS_KEY}`;
const chainConfigs = [
{
network: "MAINNET",
regex: /MAINNET_DEVNET_RPC_URL=.*/g,
command: mainnetCommand,
},
{
network: "OPTIMISM",
regex: /OPTIMISM_DEVNET_RPC_URL=.*/g,
command: optimismCommand,
},
{
network: "ARBITRUM",
regex: /ARBITRUM_DEVNET_RPC_URL=.*/g,
command: arbitrumCommand,
},
];

for (const config of chainConfigs) {
const { stderr } = await exec(config.command);
const devnetUrl = stderr.trim().toString();

console.log(`${config.network}_DEVNET_RPC_URL=` + devnetUrl);

// if file not exists, create it
if (!fs.existsSync(".env")) {
fs.writeFileSync(".env", "");
}
const fileContent = fs.readFileSync(".env", "utf8");

const newFileContent = fileContent.replace(config.regex, "");
fs.writeFileSync(".env", newFileContent);
fs.appendFileSync(".env", `${os.EOL}${config.network}_DEVNET_RPC_URL=` + devnetUrl);
}
};

createDevNets();

0 comments on commit 57b7529

Please sign in to comment.