From 37c221d0f4d175084e23a6b172d72f177bfa0c81 Mon Sep 17 00:00:00 2001 From: Will Cory Date: Tue, 31 Jan 2023 11:35:45 -0800 Subject: [PATCH] Add automatic foundry toml detection to foundry plugin (#1738) * Add automatic foundry toml detection read the foundry toml use the function Add test cleanup * changeset * changeset * dupe * refactor: use foundry config command * docs: update --------- Co-authored-by: Will Cory Co-authored-by: Tom Meagher --- .changeset/smooth-kings-think.md | 5 ++++ docs/pages/cli/plugins/foundry.en-US.mdx | 5 +++- docs/pages/cli/plugins/hardhat.en-US.mdx | 4 ++- packages/cli/package.json | 4 +-- packages/cli/src/plugins/foundry.test.ts | 20 +++++-------- packages/cli/src/plugins/foundry.ts | 36 +++++++++++++++++++++--- 6 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 .changeset/smooth-kings-think.md diff --git a/.changeset/smooth-kings-think.md b/.changeset/smooth-kings-think.md new file mode 100644 index 0000000000..c5acf0bc4a --- /dev/null +++ b/.changeset/smooth-kings-think.md @@ -0,0 +1,5 @@ +--- +'@wagmi/cli': patch +--- + +Added automatic Foundry config detection for artifacts directory. diff --git a/docs/pages/cli/plugins/foundry.en-US.mdx b/docs/pages/cli/plugins/foundry.en-US.mdx index 351668fc6a..9614c8ac9e 100644 --- a/docs/pages/cli/plugins/foundry.en-US.mdx +++ b/docs/pages/cli/plugins/foundry.en-US.mdx @@ -5,7 +5,7 @@ description: 'Foundry plugin' # Foundry -Plugin for resolving ABIs from [Foundry](https://github.com/foundry-rs/foundry) projects. Supports [`generate`](/cli/commands#generate) `--watch` (`-w`) mode. +Plugin for resolving ABIs from [Foundry](https://github.com/foundry-rs/foundry) projects. ```ts import { foundry } from '@wagmi/cli/plugins' @@ -26,6 +26,9 @@ export default defineConfig({ }) ``` +- Supports [`generate`](/cli/commands#generate) `--watch` (`-w`) mode. +- Detects Foundry configuration using `forge config --json` command. + ## Configuration ### project diff --git a/docs/pages/cli/plugins/hardhat.en-US.mdx b/docs/pages/cli/plugins/hardhat.en-US.mdx index ef892657a6..8c5f3d640e 100644 --- a/docs/pages/cli/plugins/hardhat.en-US.mdx +++ b/docs/pages/cli/plugins/hardhat.en-US.mdx @@ -5,7 +5,7 @@ description: 'Hardhat plugin' # Hardhat -Plugin for resolving ABIs from [Hardhat](https://hardhat.org) projects. Supports [`generate`](/cli/commands#generate) `--watch` (`-w`) mode. +Plugin for resolving ABIs from [Hardhat](https://hardhat.org) projects. ```ts import { hardhat } from '@wagmi/cli/plugins' @@ -26,6 +26,8 @@ export default defineConfig({ }) ``` +- Supports [`generate`](/cli/commands#generate) `--watch` (`-w`) mode. + ## Configuration ### project diff --git a/packages/cli/package.json b/packages/cli/package.json index d69d17e1a3..17db35b4bf 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -51,9 +51,9 @@ "/dist" ], "peerDependencies": { - "@wagmi/core": ">=0.8.10", + "@wagmi/core": ">=0.9", "typescript": ">=4.9.4", - "wagmi": ">=0.10.4" + "wagmi": ">=0.11" }, "peerDependenciesMeta": { "@wagmi/core": { diff --git a/packages/cli/src/plugins/foundry.test.ts b/packages/cli/src/plugins/foundry.test.ts index 66805d3b6d..124fbce539 100644 --- a/packages/cli/src/plugins/foundry.test.ts +++ b/packages/cli/src/plugins/foundry.test.ts @@ -44,14 +44,12 @@ describe('foundry', () => { }) }) - it( - 'contracts', - async () => { - await expect( - foundry({ - project: resolve(__dirname, '__fixtures__/foundry/'), - }).contracts(), - ).resolves.toMatchInlineSnapshot(` + it('contracts', async () => { + await expect( + foundry({ + project: resolve(__dirname, '__fixtures__/foundry/'), + }).contracts(), + ).resolves.toMatchInlineSnapshot(` [ { "abi": [ @@ -94,9 +92,5 @@ describe('foundry', () => { }, ] `) - }, - { - timeout: 10_000, - }, - ) + }) }) diff --git a/packages/cli/src/plugins/foundry.ts b/packages/cli/src/plugins/foundry.ts index ffde715397..f24973c9ee 100644 --- a/packages/cli/src/plugins/foundry.ts +++ b/packages/cli/src/plugins/foundry.ts @@ -1,9 +1,10 @@ import dedent from 'dedent' -import { execa } from 'execa' +import { execa, execaCommandSync } from 'execa' import { default as fse } from 'fs-extra' import { globby } from 'globby' import { basename, extname, resolve } from 'pathe' import pc from 'picocolors' +import { z } from 'zod' import type { ContractConfig, Plugin } from '../config' import * as logger from '../logger' @@ -35,7 +36,7 @@ type FoundryConfig = { * * Same as your project's `--out` (`-o`) option. * - * @default 'out/' + * @default foundry.config#out | 'out' */ artifacts?: string /** @@ -83,11 +84,16 @@ type FoundryConfig = { type FoundryResult = RequiredBy +const FoundryConfigSchema = z.object({ + out: z.string().default('out').optional(), + src: z.string().default('src').optional(), +}) + /** * Resolves ABIs from [Foundry](https://github.com/foundry-rs/foundry) project. */ export function foundry({ - artifacts = 'out', + artifacts, deployments = {}, exclude = defaultExcludes, forge: { @@ -123,7 +129,29 @@ export function foundry({ } const project = resolve(process.cwd(), project_) - const artifactsDirectory = `${project}/${artifacts}` + + let config: z.infer = { + out: 'out', + src: 'src', + } + try { + config = FoundryConfigSchema.parse( + JSON.parse( + execaCommandSync(`${forgeExecutable} config --json`, { + cwd: project, + }).stdout, + ), + ) + // eslint-disable-next-line no-empty + } catch { + } finally { + config = { + ...config, + out: artifacts ?? config.out, + } + } + + const artifactsDirectory = `${project}/${config.out}` return { async contracts() {