Commit b8db886c authored by clabby's avatar clabby Committed by GitHub

Add version check for `abigen` in `bindgen` (#8738)

parent f77c1d80
...@@ -82,7 +82,7 @@ func (generator *bindGenGeneratorLocal) processContracts(contracts []string) err ...@@ -82,7 +82,7 @@ func (generator *bindGenGeneratorLocal) processContracts(contracts []string) err
return err return err
} }
err = genContractBindings(generator.logger, abiFilePath, bytecodeFilePath, generator.bindingsPackageName, contractName) err = genContractBindings(generator.logger, generator.monorepoBasePath, abiFilePath, bytecodeFilePath, generator.bindingsPackageName, contractName)
if err != nil { if err != nil {
return err return err
} }
......
...@@ -339,7 +339,7 @@ func (generator *bindGenGeneratorRemote) writeAllOutputs(contractMetadata *remot ...@@ -339,7 +339,7 @@ func (generator *bindGenGeneratorRemote) writeAllOutputs(contractMetadata *remot
return err return err
} }
err = genContractBindings(generator.logger, abiFilePath, bytecodeFilePath, generator.bindingsPackageName, contractMetadata.Name) err = genContractBindings(generator.logger, generator.monorepoBasePath, abiFilePath, bytecodeFilePath, generator.bindingsPackageName, contractMetadata.Name)
if err != nil { if err != nil {
return err return err
} }
......
package main package main
import ( import (
"bufio"
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
...@@ -113,7 +114,7 @@ func writeContractArtifacts(logger log.Logger, tempDirPath, contractName string, ...@@ -113,7 +114,7 @@ func writeContractArtifacts(logger log.Logger, tempDirPath, contractName string,
// //
// Note: This function relies on the external `abigen` tool, which should be // Note: This function relies on the external `abigen` tool, which should be
// installed and available in the system's PATH. // installed and available in the system's PATH.
func genContractBindings(logger log.Logger, abiFilePath, bytecodeFilePath, goPackageName, contractName string) error { func genContractBindings(logger log.Logger, monorepoRootPath, abiFilePath, bytecodeFilePath, goPackageName, contractName string) error {
cwd, err := os.Getwd() cwd, err := os.Getwd()
if err != nil { if err != nil {
return fmt.Errorf("error getting cwd: %w", err) return fmt.Errorf("error getting cwd: %w", err)
...@@ -129,6 +130,32 @@ func genContractBindings(logger log.Logger, abiFilePath, bytecodeFilePath, goPac ...@@ -129,6 +130,32 @@ func genContractBindings(logger log.Logger, abiFilePath, bytecodeFilePath, goPac
} }
} }
if monorepoRootPath != "" {
logger.Debug("Checking abigen version")
// Fetch installed abigen version (format: abigen version X.Y.Z-<stable/nightly>-<commit_sha>)
cmd := exec.Command("abigen", "--version")
var versionBuf bytes.Buffer
cmd.Stdout = bufio.NewWriter(&versionBuf)
if err := cmd.Run(); err != nil {
return fmt.Errorf("error fetching abigen version: %w", err)
}
abigenVersion := bytes.Trim(versionBuf.Bytes(), "\n")
// Fetch expected abigen version (format: vX.Y.Z)
expectedAbigenVersion, err := os.ReadFile(path.Join(monorepoRootPath, ".abigenrc"))
if err != nil {
return fmt.Errorf("error reading .abigenrc file: %w", err)
}
expectedAbigenVersion = bytes.Trim(expectedAbigenVersion, "\n")[1:]
if !bytes.Contains(abigenVersion, expectedAbigenVersion) {
return fmt.Errorf("abigen version mismatch, expected %s, got %s. Please run `pnpm install:abigen` in the monorepo root", expectedAbigenVersion, abigenVersion)
}
} else {
logger.Debug("No monorepo root path provided, skipping abigen version check")
}
logger.Debug("Generating contract bindings", "contractName", contractName, "outFilePath", outFilePath) logger.Debug("Generating contract bindings", "contractName", contractName, "outFilePath", outFilePath)
cmd := exec.Command("abigen", "--abi", abiFilePath, "--bin", bytecodeFilePath, "--pkg", goPackageName, "--type", contractName, "--out", outFilePath) cmd := exec.Command("abigen", "--abi", abiFilePath, "--bin", bytecodeFilePath, "--pkg", goPackageName, "--type", contractName, "--out", outFilePath)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment