diff --git a/.github/mergify.yml b/.github/mergify.yml index 51f0a018a..1cbaa0bbc 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -1,7 +1,7 @@ queue_rules: - name: default conditions: - - check-success=all + - check-success=[all, continuous-integration/gitlab-build, continuous-integration/gitlab-lint, continuous-integration/gitlab-package, continuous-integration/gitlab-publish-docker-pr, continuous-integration/gitlab-publish-test, continuous-integration/gitlab-test, continuous-integration/gitlab-zombienet-custom-scripts-assertion, continuous-integration/gitlab-zombienet-logs-assertion, continuous-integration/gitlab-zombienet-restart-pause-resume, continuous-integration/gitlab-zombienet-system-event-assertion] - label=automerge - base=main - "#changes-requested-reviews-by=0" @@ -10,7 +10,7 @@ queue_rules: pull_request_rules: - name: automatic merge when CI passes on main conditions: - - check-success=all + - check-success=[all, continuous-integration/gitlab-build, continuous-integration/gitlab-lint, continuous-integration/gitlab-package, continuous-integration/gitlab-publish-docker-pr, continuous-integration/gitlab-publish-test, continuous-integration/gitlab-test, continuous-integration/gitlab-zombienet-custom-scripts-assertion, continuous-integration/gitlab-zombienet-logs-assertion, continuous-integration/gitlab-zombienet-restart-pause-resume, continuous-integration/gitlab-zombienet-system-event-assertion] - label=automerge - base=main - "#changes-requested-reviews-by=0" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..94c1355db --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,33 @@ +name: ZombieNet Basic CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [14.x, 16.x, 17.x, 18.x] + + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm run build + - run: npm run lint + + all: + # This dummy job depends on all the mandatory checks. It succeeds if and only if all CI checks + # are successful. + needs: [build] + runs-on: ubuntu-latest + steps: + - run: echo Success diff --git a/package.json b/package.json index 7560e4cd4..930401d74 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "scripts": { "clean": "rm -rf ./dist/*", "build": "tsc", - "lint": "npx prettier --write ./src", + "lint": "npx prettier --check ./src", + "lint:write": "npx prettier --write ./src", "package": "pkg . --out-path ./bins" }, "dependencies": { diff --git a/src/cmdGenerator.ts b/src/cmdGenerator.ts index 199f9b295..5fa8b4a46 100644 --- a/src/cmdGenerator.ts +++ b/src/cmdGenerator.ts @@ -76,7 +76,10 @@ export async function genCumulusCollatorCmd( (nodeSetup.wsPort ? nodeSetup.wsPort : RPC_WS_PORT).toString(), "--prometheus-external", "--prometheus-port", - (nodeSetup.prometheusPort ? nodeSetup.prometheusPort : PROMETHEUS_PORT).toString(), + (nodeSetup.prometheusPort + ? nodeSetup.prometheusPort + : PROMETHEUS_PORT + ).toString(), "--rpc-cors all", "--unsafe-rpc-external", "--rpc-methods unsafe", @@ -130,7 +133,16 @@ export async function genCumulusCollatorCmd( // port passed as argument, we need to ensure is not a default one because it will be // use by the parachain part. const selectedPort = parseInt(argsFullNode[index + 1], 10); - if ([P2P_PORT, RPC_HTTP_PORT, RPC_WS_PORT, nodeSetup.p2pPort, nodeSetup.rpcPort, nodeSetup.wsPort].includes(selectedPort)) { + if ( + [ + P2P_PORT, + RPC_HTTP_PORT, + RPC_WS_PORT, + nodeSetup.p2pPort, + nodeSetup.rpcPort, + nodeSetup.wsPort, + ].includes(selectedPort) + ) { console.log( decorators.yellow( `WARN: default port configured, changing to use a random free port`, @@ -252,17 +264,15 @@ export async function genCmd( if (bootnodes && bootnodes.length) args.push("--bootnodes", bootnodes.join(" ")); - - // port flags logic const portFlags = { "--prometheus-port": nodeSetup.prometheusPort, "--rpc-port": nodeSetup.rpcPort, - "--ws-port": nodeSetup.wsPort - } + "--ws-port": nodeSetup.wsPort, + }; - for( const [k,v] of Object.entries(portFlags)) { - args.push(...[k,v.toString()]); + for (const [k, v] of Object.entries(portFlags)) { + args.push(...[k, v.toString()]); } args.push(...["--listen-addr", `/ip4/0.0.0.0/tcp/${nodeSetup.p2pPort}/ws`]); diff --git a/src/configGenerator.ts b/src/configGenerator.ts index 07c43152e..a2669bf03 100644 --- a/src/configGenerator.ts +++ b/src/configGenerator.ts @@ -331,14 +331,18 @@ export async function generateNetworkSpec( } // TODO: move this fn to other module. -export async function generateBootnodeSpec(config: ComputedNetwork): Promise { - const ports = config.settings.provider !== "native" ? DEFAULT_PORTS : - { - p2pPort: await getRandomPort(), - wsPort: await getRandomPort(), - rpcPort: await getRandomPort(), - prometheusPort: await getRandomPort() - }; +export async function generateBootnodeSpec( + config: ComputedNetwork, +): Promise { + const ports = + config.settings.provider !== "native" + ? DEFAULT_PORTS + : { + p2pPort: await getRandomPort(), + wsPort: await getRandomPort(), + rpcPort: await getRandomPort(), + prometheusPort: await getRandomPort(), + }; const nodeSetup: Node = { name: "bootnode", @@ -358,8 +362,10 @@ export async function generateBootnodeSpec(config: ComputedNetwork): Promise { - if(removeNext) { + const filteredArgs = args.slice(0, args.indexOf("--")).filter((arg) => { + if (removeNext) { removeNext = false; return false; } diff --git a/src/constants.ts b/src/constants.ts index 20ea5b834..aff881687 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -15,7 +15,7 @@ export const DEFAULT_PORTS = { p2pPort: P2P_PORT, wsPort: RPC_WS_PORT, rpcPort: RPC_HTTP_PORT, - prometheusPort: PROMETHEUS_PORT + prometheusPort: PROMETHEUS_PORT, }; export const DEFAULT_GLOBAL_TIMEOUT = 1200; // 20 mins diff --git a/src/paras.ts b/src/paras.ts index bf44a0902..ef39f12fb 100644 --- a/src/paras.ts +++ b/src/paras.ts @@ -9,7 +9,13 @@ import { getClient } from "./providers/client"; import { Providers } from "./providers"; import { fileMap, Node, Parachain } from "./types"; import fs from "fs"; -import { addAuraAuthority, addAuthority, changeGenesisConfig, clearAuthorities, specHaveSessionsKeys } from "./chain-spec"; +import { + addAuraAuthority, + addAuthority, + changeGenesisConfig, + clearAuthorities, + specHaveSessionsKeys, +} from "./chain-spec"; import { getRandomPort } from "./utils/net-utils"; const debug = require("debug")("zombie::paras"); @@ -197,7 +203,7 @@ export async function generateParachainFiles( p2pPort: await getRandomPort(), wsPort: await getRandomPort(), rpcPort: await getRandomPort(), - prometheusPort: await getRandomPort() + prometheusPort: await getRandomPort(), }; const provider = Providers.get(client.providerName); diff --git a/src/providers/k8s/dynResourceDefinition.ts b/src/providers/k8s/dynResourceDefinition.ts index 339224637..741464532 100644 --- a/src/providers/k8s/dynResourceDefinition.ts +++ b/src/providers/k8s/dynResourceDefinition.ts @@ -6,7 +6,7 @@ import { WAIT_UNTIL_SCRIPT_SUFIX, RPC_HTTP_PORT, RPC_WS_PORT, - P2P_PORT + P2P_PORT, } from "../../constants"; import { getUniqueName } from "../../configGenerator"; import { Node } from "../../types"; @@ -138,7 +138,7 @@ async function make_main_container( ]; let computedCommand; - if( nodeSetup.zombieRole === "cumulus-collator" ) { + if (nodeSetup.zombieRole === "cumulus-collator") { computedCommand = await genCumulusCollatorCmd(nodeSetup); } else { computedCommand = await genCmd(nodeSetup); @@ -236,7 +236,7 @@ export async function createTempNodeDef( p2pPort: await getRandomPort(), wsPort: await getRandomPort(), rpcPort: await getRandomPort(), - prometheusPort: await getRandomPort() + prometheusPort: await getRandomPort(), }; return node; diff --git a/src/providers/native/dynResourceDefinition.ts b/src/providers/native/dynResourceDefinition.ts index 63a2d5008..b8daa21b8 100644 --- a/src/providers/native/dynResourceDefinition.ts +++ b/src/providers/native/dynResourceDefinition.ts @@ -20,7 +20,7 @@ export async function genBootnodeDef( ): Promise { const client = getClient(); const name = nodeSetup.name; - const {rpcPort, wsPort, prometheusPort, p2pPort} = nodeSetup; + const { rpcPort, wsPort, prometheusPort, p2pPort } = nodeSetup; const ports = await getPorts(rpcPort, wsPort, prometheusPort, p2pPort); const cfgPath = `${client.tmpDir}/${name}/cfg`; @@ -57,7 +57,7 @@ export async function genNodeDef( ): Promise { const client = getClient(); const name = nodeSetup.name; - const {rpcPort, wsPort, prometheusPort, p2pPort} = nodeSetup; + const { rpcPort, wsPort, prometheusPort, p2pPort } = nodeSetup; const ports = await getPorts(rpcPort, wsPort, prometheusPort, p2pPort); const cfgPath = `${client.tmpDir}/${name}/cfg`; await fs.mkdir(cfgPath, { recursive: true }); @@ -66,8 +66,13 @@ export async function genNodeDef( await fs.mkdir(dataPath, { recursive: true }); let computedCommand; - if( nodeSetup.zombieRole === "cumulus-collator" ) { - computedCommand = await genCumulusCollatorCmd(nodeSetup, cfgPath, dataPath, false); + if (nodeSetup.zombieRole === "cumulus-collator") { + computedCommand = await genCumulusCollatorCmd( + nodeSetup, + cfgPath, + dataPath, + false, + ); } else { computedCommand = await genCmd(nodeSetup, cfgPath, dataPath, false); } @@ -97,7 +102,12 @@ export async function genNodeDef( }; } -async function getPorts(rpc?: number, ws?:number, prometheus?:number, p2p?:number) { +async function getPorts( + rpc?: number, + ws?: number, + prometheus?: number, + p2p?: number, +) { const ports = [ { containerPort: PROMETHEUS_PORT, @@ -121,7 +131,7 @@ async function getPorts(rpc?: number, ws?:number, prometheus?:number, p2p?:numbe containerPort: P2P_PORT, name: "p2p", flag: "--port", - hostPort: p2p || await getRandomPort(), + hostPort: p2p || (await getRandomPort()), }, ]; @@ -162,7 +172,7 @@ export async function createTempNodeDef( p2pPort: await getRandomPort(), wsPort: await getRandomPort(), rpcPort: await getRandomPort(), - prometheusPort: await getRandomPort() + prometheusPort: await getRandomPort(), }; return node; diff --git a/src/providers/podman/dynResourceDefinition.ts b/src/providers/podman/dynResourceDefinition.ts index 514ad83d8..1008bb88f 100644 --- a/src/providers/podman/dynResourceDefinition.ts +++ b/src/providers/podman/dynResourceDefinition.ts @@ -428,7 +428,7 @@ async function make_main_container( ]; let computedCommand; - if( nodeSetup.zombieRole === "cumulus-collator") { + if (nodeSetup.zombieRole === "cumulus-collator") { computedCommand = await genCumulusCollatorCmd(nodeSetup); } else { computedCommand = await genCmd(nodeSetup); @@ -482,7 +482,7 @@ export async function createTempNodeDef( p2pPort: await getRandomPort(), wsPort: await getRandomPort(), rpcPort: await getRandomPort(), - prometheusPort: await getRandomPort() + prometheusPort: await getRandomPort(), }; return node; diff --git a/src/types.d.ts b/src/types.d.ts index 00d003c83..adb36ad2f 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -153,7 +153,7 @@ export interface Node { rpcPort: number; prometheusPort: number; p2pPort: number; - imagePullPolicy?: "IfNotPresent" | "Never" | "Always" + imagePullPolicy?: "IfNotPresent" | "Never" | "Always"; } export interface Collator {