Skip to content

Commit

Permalink
check if hardhat-tenderly version is outdated (#220)
Browse files Browse the repository at this point in the history
  • Loading branch information
dule-git authored Sep 25, 2024
1 parent e39635c commit 69bf1d7
Show file tree
Hide file tree
Showing 7 changed files with 603 additions and 13 deletions.
28 changes: 24 additions & 4 deletions packages/hre-extender-v1/src/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ import{ TenderlyNetwork as TenderlyNetworkInterface } from "@tenderly/api-client

import { logger } from "./logger";
import { TenderlyService } from "@tenderly/api-client";
import { Tenderly, TenderlyNetwork, VersionCompatibilityChecker } from "@tenderly/hardhat-integration";
import {
OutdatedVersionChecker,
Tenderly,
TenderlyNetwork,
VersionCompatibilityChecker,
} from "@tenderly/hardhat-integration";
import { extendEthers } from "./extenders/extend-ethers";
import { extendHardhatDeploy } from "./extenders/extend-hardhat-deploy";
import { isTenderlyNetworkConfig } from "./extenders/tenderly-network-resolver";
Expand Down Expand Up @@ -52,12 +57,18 @@ export function setup(cfg: { automaticVerifications: boolean } = { automaticVeri
ethersVersion,
);
console.log(
"\x1b[31m%s%s\x1b[0m",
"\x1b[31m%s%s\x1b[0m", // print in red color
`Wrong '@tenderly/hardhat-tenderly' version '${hardhatTenderlyVersion}' used with ethers version '${ethersVersion}'.\n`,
`Please use the correct version of latest '@tenderly/hardhat-tenderly@${compatibleHardhatTenderlyVersion}' plugin.\n`
);
}

const shouldCheckForOutdatedVersion = (process.env.TENDERLY_ENABLE_OUTDATED_VERSION_CHECK === undefined ||
process.env.TENDERLY_ENABLE_OUTDATED_VERSION_CHECK === "true");
if (shouldCheckForOutdatedVersion) {
await printWarningIfVersionIsOutdated(hre, hardhatTenderlyVersion);
}

extendProvider(hre);
populateNetworks();
if (process.env.AUTOMATIC_VERIFICATION_ENABLED === "true" || process.env.TENDERLY_AUTOMATIC_VERIFICATION === "true") {
Expand Down Expand Up @@ -157,5 +168,14 @@ const populateNetworks = (): void => {
});
};



async function printWarningIfVersionIsOutdated(hre: HardhatRuntimeEnvironment, hardhatTenderlyVersion: string) {
const outdatedVersionChecker = new OutdatedVersionChecker();
const [isVersionOutdated, latestHardhatTenderlyVersion] = await outdatedVersionChecker.isVersionOutdated(hardhatTenderlyVersion);
if (isVersionOutdated) {
console.log(
"\x1b[33m%s\x1b[0m%s", // print in yellow color
`Please update the plugin to the new version: '@tenderly/hardhat-tenderly@${latestHardhatTenderlyVersion}'\n`,
"You can disable this message by setting the ‘TENDERLY_ENABLE_OUTDATED_VERSION_CHECK=false’ environment variable.",
);
}
}
27 changes: 24 additions & 3 deletions packages/hre-extender-v2/src/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ import{ TenderlyNetwork as TenderlyNetworkInterface } from "@tenderly/api-client

import { logger } from "./logger";
import { TenderlyService } from"@tenderly/api-client";
import { Tenderly, TenderlyNetwork, VersionCompatibilityChecker } from "@tenderly/hardhat-integration";
import {
Tenderly,
TenderlyNetwork,
VersionCompatibilityChecker,
OutdatedVersionChecker,
} from "@tenderly/hardhat-integration";
import { extendEthers } from "./extenders/extend-ethers";
import { extendUpgrades } from "./extenders/extend-upgrades";
import { extendHardhatDeploy } from "./extenders/extend-hardhat-deploy";
Expand Down Expand Up @@ -60,12 +65,18 @@ export function setup(cfg: { automaticVerifications: boolean } = { automaticVeri
ethersVersion,
);
console.log(
"\x1b[31m%s%s\x1b[0m",
"\x1b[31m%s%s\x1b[0m", // print in red color
`Wrong '@tenderly/hardhat-tenderly' version '${hardhatTenderlyVersion}' used with ethers version '${ethersVersion}'.\n`,
`Please use the correct version of latest '@tenderly/hardhat-tenderly@${compatibleHardhatTenderlyVersion}' plugin.\n`
);
}

const shouldCheckForOutdatedVersion = (process.env.TENDERLY_ENABLE_OUTDATED_VERSION_CHECK === undefined ||
process.env.TENDERLY_ENABLE_OUTDATED_VERSION_CHECK === "true");
if (shouldCheckForOutdatedVersion) {
await printWarningIfVersionIsOutdated(hre, hardhatTenderlyVersion);
}

extendProvider(hre);
populateNetworks();
if (process.env.AUTOMATIC_VERIFICATION_ENABLED === "true" || process.env.TENDERLY_AUTOMATIC_VERIFICATION === "true") {
Expand Down Expand Up @@ -186,5 +197,15 @@ const populateNetworks = (): void => {
});
};


async function printWarningIfVersionIsOutdated(hre: HardhatRuntimeEnvironment, hardhatTenderlyVersion: string) {
const outdatedVersionChecker = new OutdatedVersionChecker();
const [isVersionOutdated, latestHardhatTenderlyVersion] = await outdatedVersionChecker.isVersionOutdated(hardhatTenderlyVersion);
if (isVersionOutdated) {
console.log(
"\x1b[33m%s\x1b[0m%s", // print in yellow color
`Please update the plugin to the new version: '@tenderly/hardhat-tenderly@${latestHardhatTenderlyVersion}'\n`,
"You can disable this message by setting the ‘TENDERLY_ENABLE_OUTDATED_VERSION_CHECK=false’ environment variable.",
);
}
}

7 changes: 5 additions & 2 deletions packages/tenderly-hardhat/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@
"eslint-plugin-prettier": "^4.2.1",
"prettier": "^2.7.1",
"ts-node": "^10.9.1",
"typescript": "^5.5.4"
"typescript": "^5.5.4",
"@types/npm-registry-fetch": "^8.0.7"
},
"dependencies": {
"axios": "^1.6.7",
Expand All @@ -54,7 +55,9 @@
"tslog": "^4.3.1",
"typescript": "^5.5.4",
"dotenv": "^16.4.5",
"@tenderly/api-client": "^1.0.0"
"@tenderly/api-client": "^1.0.0",
"npm-registry-fetch": "^17.1.0",
"semver": "^7.6.3"
},
"peerDependencies": {
"hardhat": "^2.22.6"
Expand Down
2 changes: 1 addition & 1 deletion packages/tenderly-hardhat/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import "./utils/logger";
export { Tenderly } from "./Tenderly";
export { TenderlyNetwork } from "./TenderlyNetwork";
export * from "./type-extensions";
export { VersionCompatibilityChecker } from "./version-check";
export * from "./version-check";

// ProxyPlaceholderName is used for the `name` parameter in the `tenderly.verify` method because the name is actually not important.
// Beneath we use `@nomicfoundation/hardhat-verify` task in order to verify the proxy, and it doesn't need a name.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import semver from "semver";
import fetch from "npm-registry-fetch";

export class OutdatedVersionChecker {
public async isVersionOutdated(
hardhatTenderlyVersion: string
): Promise<[boolean, string]> {
let hardhatTenderlyVersionRangeToFind: string;
if (semver.major(hardhatTenderlyVersion) === 1) {
hardhatTenderlyVersionRangeToFind = "^1.0.0";
} else {
hardhatTenderlyVersionRangeToFind = "^2.0.0";
}

const latestHardhatTenderlyVersion = await this._getLatestHardhatTenderlyVersionsInRange(hardhatTenderlyVersionRangeToFind);

if (semver.compare(hardhatTenderlyVersion, latestHardhatTenderlyVersion) === -1) {
return [true, latestHardhatTenderlyVersion];
}

return [false, latestHardhatTenderlyVersion];
}

private async _getLatestHardhatTenderlyVersionsInRange(
versionRange: string
): Promise<string> {
const data = await fetch.json("/@tenderly/hardhat-tenderly");
const versions = Object.keys(data.versions as any)

return semver.maxSatisfying(versions, versionRange) as string;
}
}
1 change: 1 addition & 0 deletions packages/tenderly-hardhat/src/version-check/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from "./VersionCompatibilityChecker";
export * from "./OutdatedVersionChecker";
Loading

0 comments on commit 69bf1d7

Please sign in to comment.