git.delta.rocks / unique-network / refs/commits / f48afb4f7913

difftreelog

source

js-packages/scripts/generateEnv.ts4.5 KiBsourcehistory
1import {ApiPromise, WsProvider} from '@polkadot/api';2import {readFile} from 'fs/promises';3import {join} from 'path';4import {makeNames} from '@unique/test-utils/util.js';56const {dirname} = makeNames(import.meta.url);78async function fetchVersion(chain: string): Promise<string> {9  const api = await ApiPromise.create({provider: new WsProvider(chain)});10  const last = (await api.query.system.lastRuntimeUpgrade()).toJSON();11  await api.disconnect();12  return (last as any).specVersion.toString();13}1415function setVar(env: string, key: string, value: string): string {16  let found = false;17  const newEnv = env.replace(new RegExp(`${key}=.+?\n`), () => {18    found = true;19    return `${key}=${value}\n`;20  });21  if(!found) throw new Error(`env key "${key}" is not found`);22  return newEnv;23}2425// Fetch and format version string26async function ff(url: string, regex: RegExp, rep: string | ((substring: string, ...params:any[]) => string)): Promise<string> {27  const ver = await fetchVersion(url);28  if(ver.match(regex) === null)29    throw new Error(`bad regex for ${url}, ${regex} had no matches for ${ver}`);30  return ver.replace(regex, rep as any);31}32function fixupUnique(version: string): string {33  if(version === 'release-v930033')34    return 'release-v930033-fix-gas-price';35  if(version === 'release-v930034')36    return 'release-v930034-fix-gas-price';37  return version;38}3940(async () => {41  let env = (await readFile(join(dirname, '../../.env'))).toString();42  await Promise.all([43    // Version from polkadot-fellows44    //ff('wss://rpc.polkadot.io/', /^(.)(...)(...)$/, 'v$1.$2.$3').then(v => env = setVar(env, 'POLKADOT_MAINNET_BRANCH', v)),45    ff('wss://rococo-rpc.polkadot.io/', /^(.)(...)(...)$/, 'v$1.$2.$3').then(v => env = setVar(env, 'POLKADOT_MAINNET_BRANCH', v)),46    // ff('wss://statemint-rpc.polkadot.io/', /^(....)$/, 'release-parachains-v$1').then(v => env = setVar(env, 'STATEMINT_BUILD_BRANCH', v)),47    ff('wss://acala-rpc-0.aca-api.network/', /^(.)(..)(.)$/, '$1.$2.$3').then(v => env = setVar(env, 'ACALA_BUILD_BRANCH', v)),48    ff('wss://wss.api.moonbeam.network/', /^(....)$/, 'runtime-$1').then(v => env = setVar(env, 'MOONBEAM_BUILD_BRANCH', v)),49    ff('wss://ws.unique.network/', /^(........)$/, 'release-v$1').then(v => env = setVar(env, 'UNIQUE_MAINNET_BRANCH', fixupUnique(v))),5051    //ff('wss://kusama-rpc.polkadot.io/', /^(.)(...)(...)$/, 'v$1.$2.$3').then(v => env = setVar(env, 'KUSAMA_MAINNET_BRANCH', v)),52    ff('wss://rococo-rpc.polkadot.io/', /^(.)(...)(...)$/, 'v$1.$2.$3').then(v => env = setVar(env, 'KUSAMA_MAINNET_BRANCH', v)),53    // ff('wss://statemine-rpc.polkadot.io/', /^(....)$/, 'release-parachains-v$1').then(v => env = setVar(env, 'STATEMINE_BUILD_BRANCH', v)),54    ff('wss://karura-rpc-0.aca-api.network/', /^(.)(..)(.)$/, 'release-karura-$1.$2.$3').then(v => env = setVar(env, 'KARURA_BUILD_BRANCH', v)),55    ff('wss://wss.api.moonriver.moonbeam.network/', /^(....)$/, 'runtime-$1').then(v => env = setVar(env, 'MOONRIVER_BUILD_BRANCH', v)),56    ff('wss://ws-quartz.unique.network/', /^(........)$/, 'release-v$1').then(v => env = setVar(env, 'QUARTZ_MAINNET_BRANCH', fixupUnique(v))),5758    ff('wss://eu-ws-westend.unique.network/', /^(.)(..)(.)$/, 'release-v$1.$2.$3').then(v => env = setVar(env, 'UNIQUEWEST_MAINNET_BRANCH', v)),59    ff('wss://westmint-rpc.polkadot.io/', /^(.......)$/, 'bad-branch-v$1').then(v => env = setVar(env, 'WESTMINT_BUILD_BRANCH', v)),60    ff('wss://ws-opal.unique.network/', /^(........)$/, 'release-v$1').then(v => env = setVar(env, 'OPAL_MAINNET_BRANCH', fixupUnique(v))),6162    ff('wss://rpc.astar.network/', /^(.+)$/, (_, r) => {63      switch (r) {64        case '55': return 'v5.3.0';65        case '57': return 'v5.4.0';66        case '61': return 'v5.11.0';67        case '66': return 'v5.18.0';68        case '88': return 'v5.39.1';69        default: throw new Error('unknown astar branch for runtime ' + r);70      }71    }).then(v => env = setVar(env, 'ASTAR_BUILD_BRANCH', v)),72    ff('wss://shiden.api.onfinality.io/public-ws', /^(.+)$/, (_, r) => {73      switch (r) {74        case '90': return 'v4.49.0';75        case '96': return 'v5.4.0';76        case '100': return 'v5.10.0';77        case '104': return 'v5.15.0';78        case '106': return 'v5.18.0';79        case '127': return 'v5.39.1';80        default: throw new Error('unknown shiden branch for runtime ' + r);81      }82    }).then(v => env = setVar(env, 'SHIDEN_BUILD_BRANCH', v)),83  ]);84  console.log(env);85})().catch(e => {86  console.error('Fatal');87  console.error(e.stack);88  process.exit(1);89});