Skip to content

Commit

Permalink
add actions
Browse files Browse the repository at this point in the history
  • Loading branch information
kovalgek committed Feb 4, 2025
1 parent d56d2eb commit 13f7da1
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 52 deletions.
3 changes: 2 additions & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
[submodule "lido-l2-with-steth"]
path = lido-l2-with-steth
url = https://github.com/lidofinance/lido-l2-with-steth.git
branch = feature/save-tx-block-number
branch = main
commit = 7ccaec1f494adf34d7dfc060996cb9191b87a20c
[submodule "state-mate"]
path = state-mate
url = https://github.com/lidofinance/state-mate.git
Expand Down
76 changes: 42 additions & 34 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,37 +9,66 @@ import * as YAML from "yaml";
import { logToStream, LogType } from "./log-utils";
import { MainConfig } from "./main-config";
import { ProgressBar } from "./progress-bar";
import { Context, getSteps } from "./steps";
import { Context, getSteps, DeployAction } from "./steps";

function parseCmdLineArgs() {
program
.argument("<config-path>", "path to .yaml config file")
.option("--onlyCheck", "only check the real network deployment")
.option("--onlyForkDeploy", "only deploy to the forked network")
.option("--actions [actions...]", "list of actions: fork deploy verify check", ["all"])
.option("--showLogs", "show logs in console")
.option("--startFromStep", "start from step with index")
.parse();

const configPath = program.args[0];
const actionsOption = program.getOptionValue("actions") || Array("all");
const actions = deployActionsFromActionsOption(actionsOption);

return {
configPath,
onlyCheck: program.getOptionValue("onlyCheck"),
onlyForkDeploy: program.getOptionValue("onlyForkDeploy"),
actions: actions,
showLogs: program.getOptionValue("showLogs"),
startFromStep: Number(program.getOptionValue("startFromStep") ?? 0),
};
}

function deployActionsFromActionsOption(actionsOption: string[]): DeployAction[] {
return (actionsOption[0] === "all") ?
Object.values(DeployAction) :
actionsOption.map(action => {
const trimmedAction = action.trim().toLowerCase();
switch (trimmedAction) {
case "fork": return DeployAction.Fork;
case "deploy": return DeployAction.Deploy;
case "verify": return DeployAction.Verify;
case "check": return DeployAction.Check;
default:
throw new Error(`Invalid action: ${action}. Valid actions are: fork, deploy, verify, check`);
}
});
}

function loadYamlConfig(stateFile: string): {
mainConfig: MainConfig;
mainConfigDoc: YAML.Document;
} {
const file = path.resolve(stateFile);
const configContent = fs.readFileSync(file, "utf-8");
const reviver = (_: unknown, v: unknown) => {
return typeof v === "bigint" ? String(v) : v;
};

return {
mainConfig: YAML.parse(configContent, reviver, { schema: "core", intAsBigInt: true }),
mainConfigDoc: YAML.parseDocument(configContent, { intAsBigInt: true }),
};
}

async function main() {
const logStream = fs.createWriteStream("./artifacts/main.log");

const { configPath, onlyCheck, onlyForkDeploy, showLogs, startFromStep } = parseCmdLineArgs();
const { configPath, actions, showLogs } = parseCmdLineArgs();
console.log("Running script with");
console.log(` - configPath: ${configPath}`);
console.log(` - onlyCheck: ${!!onlyCheck}`);
console.log(` - onlyForkDeploy: ${!!onlyForkDeploy}`);
console.log(` - actions: ${actions}`);
console.log(` - showLogs: ${!!showLogs}`);
console.log(` - startFromStep: ${startFromStep}`);

const { mainConfig, mainConfigDoc }: { mainConfig: MainConfig; mainConfigDoc: YAML.Document } =
loadYamlConfig(configPath);
Expand All @@ -52,16 +81,11 @@ async function main() {
};

const progress = new ProgressBar(showLogs);
const steps = getSteps(onlyForkDeploy, onlyCheck);

if (startFromStep < 0 || startFromStep >= steps.length) {
console.error(`Step index is out of bounds ${startFromStep}`);
process.exit(1);
}
const steps = getSteps(actions);

progress.start(steps.length);

for (let stepIdx = startFromStep; stepIdx < steps.length; stepIdx++) {
for (let stepIdx = 0; stepIdx < steps.length; stepIdx++) {
const { name, action } = steps[stepIdx];
progress.update(stepIdx, name);
logStream.write(`[${new Date().toISOString()}] ${name}`);
Expand All @@ -84,19 +108,3 @@ main().catch((error) => {
console.error(error);
process.exitCode = 1;
});

function loadYamlConfig(stateFile: string): {
mainConfig: MainConfig;
mainConfigDoc: YAML.Document;
} {
const file = path.resolve(stateFile);
const configContent = fs.readFileSync(file, "utf-8");
const reviver = (_: unknown, v: unknown) => {
return typeof v === "bigint" ? String(v) : v;
};

return {
mainConfig: YAML.parse(configContent, reviver, { schema: "core", intAsBigInt: true }),
mainConfigDoc: YAML.parseDocument(configContent, { intAsBigInt: true }),
};
}
56 changes: 39 additions & 17 deletions src/steps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,35 @@ interface Step {
action: (context: Context, logCallback: LogCallback) => Promise<void> | void;
}

enum DeployAction {
Fork = "fork", // Deploy and test on fork
Deploy = "deploy", // Deploy on real network
Verify = "verify", // Run verification steps
Check = "check" // Check real network deployment
}

function getSteps(actions: DeployAction[]): Step[] {
const steps: Step[] = [];

if (actions.includes(DeployAction.Fork)) {
steps.push(...deployAndTestOnForksSteps);
}

if (actions.includes(DeployAction.Deploy)) {
steps.push(...deployOnRealNetworkSteps);
}

if (actions.includes(DeployAction.Verify)) {
steps.push(...verifyOnRealNetworkSteps);
}

if (actions.includes(DeployAction.Check)) {
steps.push(...testDeployedOnRealNetworkSteps);
}

return steps;
}

const deployAndTestOnForksSteps: Step[] = [
{
name: "Spawn L1 Fork Node",
Expand Down Expand Up @@ -167,7 +196,7 @@ const deployAndTestOnForksSteps: Step[] = [
},
];

const deployAndVerifyOnRealNetworkSteps: Step[] = [
const deployOnRealNetworkSteps: Step[] = [
{
name: "Deploy Governance Executor",
action: async (ctx, logCallback) => {
Expand Down Expand Up @@ -217,9 +246,12 @@ const deployAndVerifyOnRealNetworkSteps: Step[] = [
deployResultFileName: "l2_live_deployment_args.json",
});
},
},
}
];

const verifyOnRealNetworkSteps: Step[] = [
{
name: "Wait for block explorer for address become contract",
name: "Wait for Block Explorer to Confirm Address as Contract",
action: async (_, logCallback) => {
await checkAddressesContractStatus({
configWihAddresses: "l1_live_deployment_args.json",
Expand Down Expand Up @@ -273,7 +305,7 @@ const deployAndVerifyOnRealNetworkSteps: Step[] = [
logCallback: logCallback,
});
},
},
}
];

const testDeployedOnRealNetworkSteps: Step[] = [
Expand Down Expand Up @@ -377,16 +409,6 @@ const testDeployedOnRealNetworkSteps: Step[] = [
},
];

function getSteps(onlyForkDeploy: boolean, onlyCheck: boolean) {
if (onlyForkDeploy) {
return deployAndTestOnForksSteps;
}
if (onlyCheck) {
return testDeployedOnRealNetworkSteps;
}
return [...deployAndTestOnForksSteps, ...deployAndVerifyOnRealNetworkSteps, ...testDeployedOnRealNetworkSteps];
}

async function spawnNode(
rpcForkUrl: string,
chainId: number,
Expand All @@ -400,8 +422,7 @@ async function spawnNode(
if (forkBlock !== undefined) {
nodeArgs.push("--fork-block-number", `${forkBlock}`);
}
console.log("nodeArgs=",nodeArgs);


const output = createWriteStream(`./artifacts/${outputFileName}`);
await once(output, "open");

Expand Down Expand Up @@ -436,5 +457,6 @@ async function spawnNode(
export {
Context,
Step,
DeployAction,
getSteps
}
}

0 comments on commit 13f7da1

Please sign in to comment.