Skip to content

Commit 882f8c8

Browse files
authored
Fix forge release script (#479)
* pkg bump * pkg bump * updated release script * Dont use IERC721 from openzeppelin * pkg bump * update release process * pkg bump * pkg bump
1 parent 6956628 commit 882f8c8

18 files changed

+73
-20
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ contracts/abi/
1919
contracts/README.md
2020
artifacts/
2121
artifacts_forge/
22+
contract_artifacts/
2223

2324
# files
2425
*.env

contracts/airdrop/AirdropERC721.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pragma solidity ^0.8.11;
1313
// \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
1414

1515
// ========== External imports ==========
16-
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
16+
import "../eip/interface/IERC721.sol";
1717

1818
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
1919
import "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol";

contracts/airdrop/AirdropERC721Claimable.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pragma solidity ^0.8.11;
1313
// \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
1414

1515
// ========== External imports ==========
16-
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
16+
import "../eip/interface/IERC721.sol";
1717

1818
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
1919
import "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol";

contracts/extension/Staking721Upgradeable.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ pragma solidity ^0.8.11;
55

66
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
77
import "../openzeppelin-presets/utils/math/SafeMath.sol";
8-
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
8+
import "../eip/interface/IERC721.sol";
99

1010
import "./interface/IStaking721.sol";
1111

contracts/marketplace/direct-listings/DirectListingsLogic.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import "./DirectListingsStorage.sol";
77

88
// ====== External imports ======
99
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
10-
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
10+
import "../../eip/interface/IERC721.sol";
1111
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
1212
import "@openzeppelin/contracts/interfaces/IERC2981.sol";
1313

contracts/marketplace/english-auctions/EnglishAuctionsLogic.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import "./EnglishAuctionsStorage.sol";
99
import "@openzeppelin/contracts/utils/Context.sol";
1010
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
1111
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
12-
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
12+
import "../../eip/interface/IERC721.sol";
1313
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
1414
import "@openzeppelin/contracts/interfaces/IERC2981.sol";
1515

contracts/marketplace/offers/OffersLogic.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import "./OffersStorage.sol";
88
// ====== External imports ======
99
import "@openzeppelin/contracts/utils/Context.sol";
1010
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
11-
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
11+
import "../../eip/interface/IERC721.sol";
1212
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
1313
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
1414
import "@openzeppelin/contracts/interfaces/IERC2981.sol";

contracts/mock/Mock.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pragma solidity ^0.8.11;
44
/// @author thirdweb
55

66
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
7-
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
7+
import "../eip/interface/IERC721.sol";
88
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
99

1010
/*

contracts/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@thirdweb-dev/contracts",
33
"description": "Collection of smart contracts deployable via the thirdweb SDK, dashboard and CLI",
4-
"version": "3.8.4-1",
4+
"version": "3.8.4",
55
"license": "Apache-2.0",
66
"repository": {
77
"type": "git",

contracts/staking/NFTStake.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pragma solidity ^0.8.11;
1313
// \____/ \__| \__|\__|\__| \_______| \_____\____/ \_______|\_______/
1414

1515
// Token
16-
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
16+
import "../eip/interface/IERC721.sol";
1717
import "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol";
1818
import "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol";
1919

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
"typescript": "^4.4.4"
4747
},
4848
"scripts": {
49-
"clean": "forge clean && rm -rf abi/ && rm -rf artifacts_forge/ && rm -rf dist/ && rm -rf typechain/",
50-
"compile": "forge build",
49+
"clean": "forge clean && rm -rf abi/ && rm -rf artifacts_forge/ && rm -rf contract_artifacts && rm -rf dist/ && rm -rf typechain/",
50+
"compile": "forge build && npx ts-node scripts/package-release.ts",
5151
"lint": "solhint \"contracts/**/*.sol\"",
5252
"prettier": "prettier --config .prettierrc --write \"{contracts,src}/**/*.{js,json,sol,ts}\"",
5353
"prettier:list-different": "prettier --config .prettierrc --list-different \"**/*.{js,json,sol,ts}\"",

release.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ echo "### Build finished. Copying abis."
3535
rm -rf contracts/abi
3636
mkdir -p contracts/abi
3737
# copy all abis to contracts/abi
38-
find artifacts_forge ! -iregex ".*([a-zA-Z0-9_]).json" -exec cp {} contracts/abi 2>/dev/null \;
38+
find contract_artifacts ! -iregex ".*([a-zA-Z0-9_]).json" -exec cp {} contracts/abi 2>/dev/null \;
3939
echo "### Copying README."
4040
# copy root README to contracts folder
4141
cp README.md contracts/README.md

scripts/package-release.ts

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import * as fs from "fs-extra";
2+
import * as path from "path";
3+
4+
// Define the paths for the directories
5+
const artifactsForgeDir = path.join(__dirname, "..", "artifacts_forge");
6+
const contractsDir = path.join(__dirname, "..", "contracts");
7+
const contractArtifactsDir = path.join(__dirname, "..", "contract_artifacts");
8+
9+
async function getAllSolidityFiles(dir: string): Promise<string[]> {
10+
const dirents = await fs.readdir(dir, { withFileTypes: true });
11+
const files = await Promise.all(
12+
dirents.map(dirent => {
13+
const res = path.join(dir, dirent.name);
14+
return dirent.isDirectory() ? getAllSolidityFiles(res) : res;
15+
}),
16+
);
17+
// Flatten the array and filter for .sol files
18+
return files
19+
.flat()
20+
.filter(file => file.endsWith(".sol"))
21+
.map(file => path.basename(file));
22+
}
23+
24+
async function main() {
25+
// Create the contract_artifacts directory
26+
await fs.ensureDir(contractArtifactsDir);
27+
28+
// Get all directories within artifacts_forge that match *.sol
29+
const artifactDirs = await fs.readdir(artifactsForgeDir);
30+
const validArtifactDirs = artifactDirs.filter(dir => dir.endsWith(".sol"));
31+
32+
// Get all .sol filenames within contracts (recursively)
33+
const validContractFiles = await getAllSolidityFiles(contractsDir);
34+
35+
// Check if directory-name matches any Solidity file name from contracts
36+
for (const artifactDir of validArtifactDirs) {
37+
// Removing the .sol extension from the directory name to match with file names
38+
const artifactName = path.basename(artifactDir, ".sol");
39+
40+
if (validContractFiles.includes(artifactName + ".sol")) {
41+
const sourcePath = path.join(artifactsForgeDir, artifactDir);
42+
const destinationPath = path.join(contractArtifactsDir, artifactDir);
43+
await fs.copy(sourcePath, destinationPath);
44+
}
45+
}
46+
47+
console.log("Done copying matching directories.");
48+
}
49+
50+
main().catch(error => {
51+
console.error("An error occurred:", error);
52+
});

src/test/airdrop/AirdropERC721.t.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: Apache-2.0
22
pragma solidity ^0.8.0;
33

4-
import "contracts/airdrop/AirdropERC721.sol";
4+
import { AirdropERC721, IAirdropERC721 } from "contracts/airdrop/AirdropERC721.sol";
55

66
// Test imports
77
import { Wallet } from "../utils/Wallet.sol";

src/test/benchmark/AirdropERC721Benchmark.t.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: Apache-2.0
22
pragma solidity ^0.8.0;
33

4-
import "contracts/airdrop/AirdropERC721.sol";
4+
import { AirdropERC721, IAirdropERC721 } from "contracts/airdrop/AirdropERC721.sol";
55

66
// Test imports
77
import { Wallet } from "../utils/Wallet.sol";

src/test/sdk/base/BaseUtilTest.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import "../../mocks/MockERC1155.sol";
1111
import "contracts/forwarder/Forwarder.sol";
1212
import "contracts/lib/TWStrings.sol";
1313

14-
import "contracts/mock/Mock.sol";
14+
import { Mock } from "contracts/mock/Mock.sol";
1515

1616
abstract contract BaseUtilTest is DSTest, Test {
1717
string public constant NAME = "NAME";

src/test/sdk/extension/StakingExtension.t.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import "@ds-test/test.sol";
66

77
import { Staking721 } from "contracts/extension/Staking721.sol";
88
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
9-
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
9+
import "contracts/eip/interface/IERC721.sol";
1010
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
1111

12-
import "../../mocks/MockERC721.sol";
12+
import { MockERC721 } from "../../mocks/MockERC721.sol";
1313

1414
contract MyStakingContract is ERC20, Staking721, IERC721Receiver {
1515
bool condition;

src/test/utils/BaseTest.sol

+3-3
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,16 @@ import { VoteERC20 } from "contracts/vote/VoteERC20.sol";
2929
import { SignatureDrop } from "contracts/signature-drop/SignatureDrop.sol";
3030
import { ContractPublisher } from "contracts/ContractPublisher.sol";
3131
import { IContractPublisher } from "contracts/interfaces/IContractPublisher.sol";
32-
import "contracts/airdrop/AirdropERC721.sol";
33-
import "contracts/airdrop/AirdropERC721Claimable.sol";
32+
import { AirdropERC721 } from "contracts/airdrop/AirdropERC721.sol";
33+
import { AirdropERC721Claimable } from "contracts/airdrop/AirdropERC721Claimable.sol";
3434
import { AirdropERC20 } from "contracts/airdrop/AirdropERC20.sol";
3535
import "contracts/airdrop/AirdropERC20Claimable.sol";
3636
import "contracts/airdrop/AirdropERC1155.sol";
3737
import "contracts/airdrop/AirdropERC1155Claimable.sol";
3838
import { NFTStake } from "contracts/staking/NFTStake.sol";
3939
import { EditionStake } from "contracts/staking/EditionStake.sol";
4040
import { TokenStake } from "contracts/staking/TokenStake.sol";
41-
import "contracts/mock/Mock.sol";
41+
import { Mock, MockContract } from "contracts/mock/Mock.sol";
4242
import "contracts/mock/MockContractPublisher.sol";
4343

4444
abstract contract BaseTest is DSTest, Test {

0 commit comments

Comments
 (0)