From bf23d41fdcef477cee7af1eb398bcc2e95665c91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Fri, 18 Oct 2024 17:50:26 +0300 Subject: [PATCH] Dockerfile, build: prebuild and cache dependencies --- Dockerfile | 12 + Dockerfile.alltools | 11 + Makefile | 4 + build/ci.go | 71 +++++- build/docker.go.dep | 497 +++++++++++++++++++++++++++++++++++++++++ common/path.go | 1 - internal/build/util.go | 9 + 7 files changed, 592 insertions(+), 13 deletions(-) create mode 100644 build/docker.go.dep diff --git a/Dockerfile b/Dockerfile index ff89e92f25..e5890b4cfd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,6 +13,18 @@ COPY go.mod /go-ethereum/ COPY go.sum /go-ethereum/ RUN cd /go-ethereum && go mod download +# Build all the dependencies in a pre-step to cache them in a docker layer +ADD build /go-ethereum/build +ADD internal/build /go-ethereum/internal/build + +ADD common /go-ethereum/common +ADD crypto/signify /go-ethereum/crypto/signify +ADD params /go-ethereum/params + +COPY go.dep /go-ethereum/ +RUN cd /go-ethereum && go run build/ci.go prebuild --deps build/docker.go.dep --static + +# Finally build go-ethereum itself ADD . /go-ethereum RUN cd /go-ethereum && go run build/ci.go install -static ./cmd/geth diff --git a/Dockerfile.alltools b/Dockerfile.alltools index 44d5065af0..5f80a7d856 100644 --- a/Dockerfile.alltools +++ b/Dockerfile.alltools @@ -13,6 +13,17 @@ COPY go.mod /go-ethereum/ COPY go.sum /go-ethereum/ RUN cd /go-ethereum && go mod download +# Build all the dependencies in a pre-step to cache them in a docker layer +ADD build /go-ethereum/build +ADD internal/build /go-ethereum/internal/build + +ADD common /go-ethereum/common +ADD crypto/signify /go-ethereum/crypto/signify +ADD params /go-ethereum/params + +COPY go.dep /go-ethereum/ +RUN cd /go-ethereum && go run build/ci.go prebuild --deps go.dep --static + ADD . /go-ethereum # This is not strictly necessary, but it matches the "Dockerfile" steps, thus diff --git a/Makefile b/Makefile index f4932165a4..06dae0dfd1 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,10 @@ devtools: @type "solc" 2> /dev/null || echo 'Please install solc' @type "protoc" 2> /dev/null || echo 'Please install protoc' +#? deplist: Generate a dependent package list for docker +deplist: + go list -f "{{if and (not .Standard) .DepOnly}}{{.ImportPath}}{{end}}" -deps github.com/ethereum/go-ethereum/... | sort > build/docker.go.dep + #? help: Get more info on make commands. help: Makefile @echo '' diff --git a/build/ci.go b/build/ci.go index 29a80dca5e..a956b3ff27 100644 --- a/build/ci.go +++ b/build/ci.go @@ -24,6 +24,7 @@ Usage: go run build/ci.go Available commands are: + prebuild -- pre-builds all dependencies for caching install [ -arch architecture ] [ -cc compiler ] [ packages... ] -- builds packages and executables test [ -coverage ] [ packages... ] -- runs the tests lint -- runs certain pre-selected linters @@ -38,6 +39,7 @@ For all commands, -n prevents execution of external programs (dry run mode). package main import ( + "bufio" "bytes" "crypto/sha256" "encoding/base64" @@ -54,7 +56,6 @@ import ( "time" "github.com/cespare/cp" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto/signify" "github.com/ethereum/go-ethereum/internal/build" "github.com/ethereum/go-ethereum/params" @@ -144,13 +145,15 @@ func executablePath(name string) string { func main() { log.SetFlags(log.Lshortfile) - if !common.FileExist(filepath.Join("build", "ci.go")) { + if !build.FileExist(filepath.Join("build", "ci.go")) { log.Fatal("this script must be run from the root of the repository") } if len(os.Args) < 2 { log.Fatal("need subcommand as first argument") } switch os.Args[1] { + case "prebuild": + doPreBuild(os.Args[2:]) case "install": doInstall(os.Args[2:]) case "test": @@ -178,6 +181,51 @@ func main() { // Compiling +func doPreBuild(cmdline []string) { + var ( + depsfile = flag.String("deps", "", "Dependency list to pre-build") + staticlink = flag.Bool("static", false, "Pre-build statically-linked dependencies") + ) + flag.CommandLine.Parse(cmdline) + env := build.Env() + + // Disable CLI markdown doc generation in release builds. + buildTags := []string{"urfave_cli_no_docs"} + + // Enable linking the CKZG library since we can make it work with additional flags. + if env.UbuntuVersion != "trusty" { + buildTags = append(buildTags, "ckzg") + } + // Configure the build. + gobuild := new(build.GoToolchain).Go("build", buildFlags(env, *staticlink, buildTags)...) + + // We use -trimpath to avoid leaking local paths into the built executables. + gobuild.Args = append(gobuild.Args, "-trimpath") + + // Show packages during build. + gobuild.Args = append(gobuild.Args, "-v") + + // Now we choose what we're even building. + blob, err := os.ReadFile(*depsfile) + if err != nil { + log.Fatalf("Failed to read go.dep file: %v", err) + } + deps := bufio.NewReader(bytes.NewReader(blob)) + + var packages []string + for { + pkg, _, err := deps.ReadLine() + if err != nil { + break + } + packages = append(packages, string(pkg)) + } + args := make([]string, len(gobuild.Args)) + copy(args, gobuild.Args) + args = append(args, packages...) + build.MustRun(&exec.Cmd{Path: gobuild.Path, Args: args, Env: gobuild.Env}) +} + func doInstall(cmdline []string) { var ( dlgo = flag.Bool("dlgo", false, "Download Go and build with it") @@ -201,7 +249,6 @@ func doInstall(cmdline []string) { if env.UbuntuVersion != "trusty" { buildTags = append(buildTags, "ckzg") } - // Configure the build. gobuild := tc.Go("build", buildFlags(env, *staticlink, buildTags)...) @@ -352,8 +399,8 @@ func downloadSpecTestFixtures(csdb *build.ChecksumDB, cachedir string) string { // hashAllSourceFiles iterates all files under the top-level project directory // computing the hash of each file (excluding files within the tests // subrepo) -func hashAllSourceFiles() (map[string]common.Hash, error) { - res := make(map[string]common.Hash) +func hashAllSourceFiles() (map[string][32]byte, error) { + res := make(map[string][32]byte) err := filepath.WalkDir(".", func(path string, d os.DirEntry, err error) error { if strings.HasPrefix(path, filepath.FromSlash("tests/testdata")) { return filepath.SkipDir @@ -370,7 +417,7 @@ func hashAllSourceFiles() (map[string]common.Hash, error) { if _, err := io.Copy(hasher, f); err != nil { return err } - res[path] = common.Hash(hasher.Sum(nil)) + res[path] = [32]byte(hasher.Sum(nil)) return nil }) if err != nil { @@ -381,8 +428,8 @@ func hashAllSourceFiles() (map[string]common.Hash, error) { // hashSourceFiles iterates the provided set of filepaths (relative to the top-level geth project directory) // computing the hash of each file. -func hashSourceFiles(files []string) (map[string]common.Hash, error) { - res := make(map[string]common.Hash) +func hashSourceFiles(files []string) (map[string][32]byte, error) { + res := make(map[string][32]byte) for _, filePath := range files { f, err := os.OpenFile(filePath, os.O_RDONLY, 0666) if err != nil { @@ -392,14 +439,14 @@ func hashSourceFiles(files []string) (map[string]common.Hash, error) { if _, err := io.Copy(hasher, f); err != nil { return nil, err } - res[filePath] = common.Hash(hasher.Sum(nil)) + res[filePath] = [32]byte(hasher.Sum(nil)) } return res, nil } // compareHashedFilesets compares two maps (key is relative file path to top-level geth directory, value is its hash) // and returns the list of file paths whose hashes differed. -func compareHashedFilesets(preHashes map[string]common.Hash, postHashes map[string]common.Hash) []string { +func compareHashedFilesets(preHashes map[string][32]byte, postHashes map[string][32]byte) []string { updates := []string{} for path, postHash := range postHashes { preHash, ok := preHashes[path] @@ -442,7 +489,7 @@ func doGenerate() { protocPath := downloadProtoc(*cachedir) protocGenGoPath := downloadProtocGenGo(*cachedir) - var preHashes map[string]common.Hash + var preHashes map[string][32]byte if *verify { var err error preHashes, err = hashAllSourceFiles() @@ -915,7 +962,7 @@ func ppaUpload(workdir, ppa, sshUser string, files []string) { var idfile string if sshkey := getenvBase64("PPA_SSH_KEY"); len(sshkey) > 0 { idfile = filepath.Join(workdir, "sshkey") - if !common.FileExist(idfile) { + if !build.FileExist(idfile) { os.WriteFile(idfile, sshkey, 0600) } } diff --git a/build/docker.go.dep b/build/docker.go.dep new file mode 100644 index 0000000000..0b484639d8 --- /dev/null +++ b/build/docker.go.dep @@ -0,0 +1,497 @@ +github.com/Azure/azure-sdk-for-go/sdk/azcore +github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud +github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported +github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log +github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers +github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async +github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body +github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc +github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op +github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared +github.com/Azure/azure-sdk-for-go/sdk/azcore/log +github.com/Azure/azure-sdk-for-go/sdk/azcore/policy +github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime +github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming +github.com/Azure/azure-sdk-for-go/sdk/azcore/to +github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing +github.com/Azure/azure-sdk-for-go/sdk/internal/diag +github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo +github.com/Azure/azure-sdk-for-go/sdk/internal/exported +github.com/Azure/azure-sdk-for-go/sdk/internal/log +github.com/Azure/azure-sdk-for-go/sdk/internal/poller +github.com/Azure/azure-sdk-for-go/sdk/internal/temporal +github.com/Azure/azure-sdk-for-go/sdk/internal/uuid +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/appendblob +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blockblob +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/base +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/exported +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/generated +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/shared +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/pageblob +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/sas +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/service +github.com/DataDog/zstd +github.com/VictoriaMetrics/fastcache +github.com/aws/aws-sdk-go-v2 +github.com/aws/aws-sdk-go-v2/aws +github.com/aws/aws-sdk-go-v2/aws/defaults +github.com/aws/aws-sdk-go-v2/aws/middleware +github.com/aws/aws-sdk-go-v2/aws/protocol/query +github.com/aws/aws-sdk-go-v2/aws/protocol/restjson +github.com/aws/aws-sdk-go-v2/aws/protocol/xml +github.com/aws/aws-sdk-go-v2/aws/ratelimit +github.com/aws/aws-sdk-go-v2/aws/retry +github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4 +github.com/aws/aws-sdk-go-v2/aws/signer/v4 +github.com/aws/aws-sdk-go-v2/aws/transport/http +github.com/aws/aws-sdk-go-v2/config +github.com/aws/aws-sdk-go-v2/credentials +github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds +github.com/aws/aws-sdk-go-v2/credentials/endpointcreds +github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client +github.com/aws/aws-sdk-go-v2/credentials/processcreds +github.com/aws/aws-sdk-go-v2/credentials/ssocreds +github.com/aws/aws-sdk-go-v2/credentials/stscreds +github.com/aws/aws-sdk-go-v2/feature/ec2/imds +github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config +github.com/aws/aws-sdk-go-v2/internal/auth +github.com/aws/aws-sdk-go-v2/internal/configsources +github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 +github.com/aws/aws-sdk-go-v2/internal/ini +github.com/aws/aws-sdk-go-v2/internal/rand +github.com/aws/aws-sdk-go-v2/internal/sdk +github.com/aws/aws-sdk-go-v2/internal/sdkio +github.com/aws/aws-sdk-go-v2/internal/shareddefaults +github.com/aws/aws-sdk-go-v2/internal/strings +github.com/aws/aws-sdk-go-v2/internal/sync/singleflight +github.com/aws/aws-sdk-go-v2/internal/timeconv +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url +github.com/aws/aws-sdk-go-v2/service/route53 +github.com/aws/aws-sdk-go-v2/service/route53/internal/customizations +github.com/aws/aws-sdk-go-v2/service/route53/internal/endpoints +github.com/aws/aws-sdk-go-v2/service/route53/types +github.com/aws/aws-sdk-go-v2/service/sso +github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints +github.com/aws/aws-sdk-go-v2/service/sso/types +github.com/aws/aws-sdk-go-v2/service/ssooidc +github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints +github.com/aws/aws-sdk-go-v2/service/ssooidc/types +github.com/aws/aws-sdk-go-v2/service/sts +github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints +github.com/aws/aws-sdk-go-v2/service/sts/types +github.com/aws/smithy-go +github.com/aws/smithy-go/auth/bearer +github.com/aws/smithy-go/context +github.com/aws/smithy-go/document +github.com/aws/smithy-go/encoding +github.com/aws/smithy-go/encoding/httpbinding +github.com/aws/smithy-go/encoding/json +github.com/aws/smithy-go/encoding/xml +github.com/aws/smithy-go/endpoints +github.com/aws/smithy-go/internal/sync/singleflight +github.com/aws/smithy-go/io +github.com/aws/smithy-go/logging +github.com/aws/smithy-go/middleware +github.com/aws/smithy-go/ptr +github.com/aws/smithy-go/rand +github.com/aws/smithy-go/time +github.com/aws/smithy-go/transport/http +github.com/aws/smithy-go/transport/http/internal/io +github.com/aws/smithy-go/waiter +github.com/beorn7/perks/quantile +github.com/bits-and-blooms/bitset +github.com/cespare/xxhash/v2 +github.com/cloudflare/cloudflare-go +github.com/cockroachdb/errors +github.com/cockroachdb/errors/assert +github.com/cockroachdb/errors/barriers +github.com/cockroachdb/errors/contexttags +github.com/cockroachdb/errors/domains +github.com/cockroachdb/errors/errbase +github.com/cockroachdb/errors/errorspb +github.com/cockroachdb/errors/errutil +github.com/cockroachdb/errors/hintdetail +github.com/cockroachdb/errors/issuelink +github.com/cockroachdb/errors/join +github.com/cockroachdb/errors/markers +github.com/cockroachdb/errors/oserror +github.com/cockroachdb/errors/report +github.com/cockroachdb/errors/safedetails +github.com/cockroachdb/errors/secondary +github.com/cockroachdb/errors/stdstrings +github.com/cockroachdb/errors/telemetrykeys +github.com/cockroachdb/errors/withstack +github.com/cockroachdb/fifo +github.com/cockroachdb/logtags +github.com/cockroachdb/pebble +github.com/cockroachdb/pebble/bloom +github.com/cockroachdb/pebble/internal/arenaskl +github.com/cockroachdb/pebble/internal/base +github.com/cockroachdb/pebble/internal/batchskl +github.com/cockroachdb/pebble/internal/bytealloc +github.com/cockroachdb/pebble/internal/cache +github.com/cockroachdb/pebble/internal/constants +github.com/cockroachdb/pebble/internal/crc +github.com/cockroachdb/pebble/internal/fastrand +github.com/cockroachdb/pebble/internal/humanize +github.com/cockroachdb/pebble/internal/intern +github.com/cockroachdb/pebble/internal/invalidating +github.com/cockroachdb/pebble/internal/invariants +github.com/cockroachdb/pebble/internal/keyspan +github.com/cockroachdb/pebble/internal/manifest +github.com/cockroachdb/pebble/internal/manual +github.com/cockroachdb/pebble/internal/private +github.com/cockroachdb/pebble/internal/rangedel +github.com/cockroachdb/pebble/internal/rangekey +github.com/cockroachdb/pebble/internal/rawalloc +github.com/cockroachdb/pebble/internal/testkeys +github.com/cockroachdb/pebble/objstorage +github.com/cockroachdb/pebble/objstorage/objstorageprovider +github.com/cockroachdb/pebble/objstorage/objstorageprovider/objiotracing +github.com/cockroachdb/pebble/objstorage/objstorageprovider/remoteobjcat +github.com/cockroachdb/pebble/objstorage/objstorageprovider/sharedcache +github.com/cockroachdb/pebble/objstorage/remote +github.com/cockroachdb/pebble/rangekey +github.com/cockroachdb/pebble/record +github.com/cockroachdb/pebble/sstable +github.com/cockroachdb/pebble/vfs +github.com/cockroachdb/pebble/vfs/atomicfs +github.com/cockroachdb/redact +github.com/cockroachdb/redact/builder +github.com/cockroachdb/redact/interfaces +github.com/cockroachdb/redact/internal/buffer +github.com/cockroachdb/redact/internal/escape +github.com/cockroachdb/redact/internal/fmtforward +github.com/cockroachdb/redact/internal/markers +github.com/cockroachdb/redact/internal/redact +github.com/cockroachdb/redact/internal/rfmt +github.com/cockroachdb/redact/internal/rfmt/fmtsort +github.com/cockroachdb/tokenbucket +github.com/consensys/bavard +github.com/consensys/gnark-crypto/ecc +github.com/consensys/gnark-crypto/ecc/bls12-381 +github.com/consensys/gnark-crypto/ecc/bls12-381/bandersnatch +github.com/consensys/gnark-crypto/ecc/bls12-381/fp +github.com/consensys/gnark-crypto/ecc/bls12-381/fr +github.com/consensys/gnark-crypto/ecc/bls12-381/internal/fptower +github.com/consensys/gnark-crypto/ecc/bn254 +github.com/consensys/gnark-crypto/ecc/bn254/fp +github.com/consensys/gnark-crypto/ecc/bn254/fr +github.com/consensys/gnark-crypto/ecc/bn254/internal/fptower +github.com/consensys/gnark-crypto/field/generator/config +github.com/consensys/gnark-crypto/field/generator/internal/addchain +github.com/consensys/gnark-crypto/field/hash +github.com/consensys/gnark-crypto/field/pool +github.com/consensys/gnark-crypto/internal/generator/config +github.com/consensys/gnark-crypto/internal/parallel +github.com/cpuguy83/go-md2man/v2/md2man +github.com/crate-crypto/go-ipa +github.com/crate-crypto/go-ipa/bandersnatch +github.com/crate-crypto/go-ipa/bandersnatch/fp +github.com/crate-crypto/go-ipa/bandersnatch/fr +github.com/crate-crypto/go-ipa/banderwagon +github.com/crate-crypto/go-ipa/common +github.com/crate-crypto/go-ipa/common/parallel +github.com/crate-crypto/go-ipa/ipa +github.com/crate-crypto/go-kzg-4844 +github.com/crate-crypto/go-kzg-4844/internal/kzg +github.com/crate-crypto/go-kzg-4844/internal/multiexp +github.com/crate-crypto/go-kzg-4844/internal/utils +github.com/davecgh/go-spew/spew +github.com/deckarep/golang-set/v2 +github.com/deepmap/oapi-codegen/pkg/runtime +github.com/deepmap/oapi-codegen/pkg/types +github.com/dlclark/regexp2 +github.com/dlclark/regexp2/syntax +github.com/donovanhide/eventsource +github.com/dop251/goja +github.com/dop251/goja/ast +github.com/dop251/goja/file +github.com/dop251/goja/ftoa +github.com/dop251/goja/ftoa/internal/fast +github.com/dop251/goja/parser +github.com/dop251/goja/token +github.com/dop251/goja/unistring +github.com/ethereum/go-verkle +github.com/fatih/color +github.com/ferranbt/fastssz +github.com/fsnotify/fsnotify +github.com/gballet/go-libpcsclite +github.com/getsentry/sentry-go +github.com/getsentry/sentry-go/internal/debug +github.com/getsentry/sentry-go/internal/otel/baggage +github.com/getsentry/sentry-go/internal/otel/baggage/internal/baggage +github.com/getsentry/sentry-go/internal/ratelimit +github.com/getsentry/sentry-go/internal/traceparser +github.com/go-sourcemap/sourcemap +github.com/go-sourcemap/sourcemap/internal/base64vlq +github.com/goccy/go-json +github.com/goccy/go-json/internal/decoder +github.com/goccy/go-json/internal/encoder +github.com/goccy/go-json/internal/encoder/vm +github.com/goccy/go-json/internal/encoder/vm_color +github.com/goccy/go-json/internal/encoder/vm_color_indent +github.com/goccy/go-json/internal/encoder/vm_indent +github.com/goccy/go-json/internal/errors +github.com/goccy/go-json/internal/runtime +github.com/gofrs/flock +github.com/gogo/protobuf/gogoproto +github.com/gogo/protobuf/proto +github.com/gogo/protobuf/protoc-gen-gogo/descriptor +github.com/gogo/protobuf/sortkeys +github.com/gogo/protobuf/types +github.com/golang-jwt/jwt/v4 +github.com/golang/protobuf/proto +github.com/golang/protobuf/ptypes +github.com/golang/protobuf/ptypes/any +github.com/golang/protobuf/ptypes/duration +github.com/golang/protobuf/ptypes/timestamp +github.com/golang/snappy +github.com/google/go-querystring/query +github.com/google/pprof/profile +github.com/google/uuid +github.com/gorilla/websocket +github.com/graph-gophers/graphql-go +github.com/graph-gophers/graphql-go/decode +github.com/graph-gophers/graphql-go/errors +github.com/graph-gophers/graphql-go/internal/common +github.com/graph-gophers/graphql-go/internal/exec +github.com/graph-gophers/graphql-go/internal/exec/packer +github.com/graph-gophers/graphql-go/internal/exec/resolvable +github.com/graph-gophers/graphql-go/internal/exec/selected +github.com/graph-gophers/graphql-go/internal/query +github.com/graph-gophers/graphql-go/internal/schema +github.com/graph-gophers/graphql-go/internal/validation +github.com/graph-gophers/graphql-go/introspection +github.com/graph-gophers/graphql-go/log +github.com/graph-gophers/graphql-go/trace +github.com/graph-gophers/graphql-go/types +github.com/hashicorp/go-bexpr +github.com/hashicorp/go-bexpr/grammar +github.com/hashicorp/go-cleanhttp +github.com/hashicorp/go-retryablehttp +github.com/holiman/billy +github.com/holiman/bloomfilter/v2 +github.com/holiman/uint256 +github.com/huin/goupnp +github.com/huin/goupnp/dcps/internetgateway1 +github.com/huin/goupnp/dcps/internetgateway2 +github.com/huin/goupnp/httpu +github.com/huin/goupnp/scpd +github.com/huin/goupnp/soap +github.com/huin/goupnp/ssdp +github.com/influxdata/influxdb-client-go/v2 +github.com/influxdata/influxdb-client-go/v2/api +github.com/influxdata/influxdb-client-go/v2/api/http +github.com/influxdata/influxdb-client-go/v2/api/query +github.com/influxdata/influxdb-client-go/v2/api/write +github.com/influxdata/influxdb-client-go/v2/domain +github.com/influxdata/influxdb-client-go/v2/internal/gzip +github.com/influxdata/influxdb-client-go/v2/internal/http +github.com/influxdata/influxdb-client-go/v2/internal/log +github.com/influxdata/influxdb-client-go/v2/internal/write +github.com/influxdata/influxdb-client-go/v2/log +github.com/influxdata/influxdb1-client/models +github.com/influxdata/influxdb1-client/pkg/escape +github.com/influxdata/influxdb1-client/v2 +github.com/influxdata/line-protocol +github.com/jackpal/go-nat-pmp +github.com/jedisct1/go-minisign +github.com/jmespath/go-jmespath +github.com/karalabe/hid +github.com/kilic/bls12-381 +github.com/klauspost/cpuid/v2 +github.com/kr/pretty +github.com/kr/text +github.com/mattn/go-colorable +github.com/mattn/go-isatty +github.com/mattn/go-runewidth +github.com/matttproud/golang_protobuf_extensions/pbutil +github.com/minio/sha256-simd +github.com/mitchellh/mapstructure +github.com/mitchellh/pointerstructure +github.com/mmcloughlin/addchain +github.com/mmcloughlin/addchain/acc +github.com/mmcloughlin/addchain/acc/ast +github.com/mmcloughlin/addchain/acc/ir +github.com/mmcloughlin/addchain/acc/parse +github.com/mmcloughlin/addchain/acc/parse/internal/parser +github.com/mmcloughlin/addchain/acc/pass +github.com/mmcloughlin/addchain/acc/printer +github.com/mmcloughlin/addchain/alg +github.com/mmcloughlin/addchain/alg/contfrac +github.com/mmcloughlin/addchain/alg/dict +github.com/mmcloughlin/addchain/alg/ensemble +github.com/mmcloughlin/addchain/alg/exec +github.com/mmcloughlin/addchain/alg/heuristic +github.com/mmcloughlin/addchain/alg/opt +github.com/mmcloughlin/addchain/internal/bigint +github.com/mmcloughlin/addchain/internal/bigints +github.com/mmcloughlin/addchain/internal/bigvector +github.com/mmcloughlin/addchain/internal/container/heap +github.com/mmcloughlin/addchain/internal/errutil +github.com/mmcloughlin/addchain/internal/print +github.com/mmcloughlin/addchain/meta +github.com/naoina/go-stringutil +github.com/naoina/toml +github.com/naoina/toml/ast +github.com/olekukonko/tablewriter +github.com/opentracing/opentracing-go +github.com/opentracing/opentracing-go/ext +github.com/opentracing/opentracing-go/log +github.com/peterh/liner +github.com/pkg/errors +github.com/prometheus/client_golang/prometheus +github.com/prometheus/client_golang/prometheus/internal +github.com/prometheus/client_model/go +github.com/prometheus/common/expfmt +github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg +github.com/prometheus/common/model +github.com/prometheus/procfs +github.com/prometheus/procfs/internal/fs +github.com/prometheus/procfs/internal/util +github.com/protolambda/bls12-381-util +github.com/protolambda/zrnt/eth2/beacon/altair +github.com/protolambda/zrnt/eth2/beacon/bellatrix +github.com/protolambda/zrnt/eth2/beacon/capella +github.com/protolambda/zrnt/eth2/beacon/common +github.com/protolambda/zrnt/eth2/beacon/deneb +github.com/protolambda/zrnt/eth2/beacon/phase0 +github.com/protolambda/zrnt/eth2/configs +github.com/protolambda/zrnt/eth2/util/hashing +github.com/protolambda/zrnt/eth2/util/math +github.com/protolambda/zrnt/eth2/util/merkle +github.com/protolambda/ztyp/bitfields +github.com/protolambda/ztyp/codec +github.com/protolambda/ztyp/conv +github.com/protolambda/ztyp/tree +github.com/protolambda/ztyp/view +github.com/rivo/uniseg +github.com/rogpeppe/go-internal/fmtsort +github.com/rs/cors +github.com/russross/blackfriday/v2 +github.com/shirou/gopsutil/cpu +github.com/shirou/gopsutil/internal/common +github.com/shirou/gopsutil/mem +github.com/status-im/keycard-go/derivationpath +github.com/supranational/blst/bindings/go +github.com/syndtr/goleveldb/leveldb +github.com/syndtr/goleveldb/leveldb/cache +github.com/syndtr/goleveldb/leveldb/comparer +github.com/syndtr/goleveldb/leveldb/errors +github.com/syndtr/goleveldb/leveldb/filter +github.com/syndtr/goleveldb/leveldb/iterator +github.com/syndtr/goleveldb/leveldb/journal +github.com/syndtr/goleveldb/leveldb/memdb +github.com/syndtr/goleveldb/leveldb/opt +github.com/syndtr/goleveldb/leveldb/storage +github.com/syndtr/goleveldb/leveldb/table +github.com/syndtr/goleveldb/leveldb/util +github.com/tklauser/go-sysconf +github.com/tyler-smith/go-bip39 +github.com/tyler-smith/go-bip39/wordlists +github.com/urfave/cli/v2 +github.com/xrash/smetrics +go.uber.org/automaxprocs/internal/runtime +go.uber.org/automaxprocs/maxprocs +golang.org/x/crypto/blake2b +golang.org/x/crypto/cast5 +golang.org/x/crypto/ed25519 +golang.org/x/crypto/hkdf +golang.org/x/crypto/openpgp +golang.org/x/crypto/openpgp/armor +golang.org/x/crypto/openpgp/elgamal +golang.org/x/crypto/openpgp/errors +golang.org/x/crypto/openpgp/packet +golang.org/x/crypto/openpgp/s2k +golang.org/x/crypto/pbkdf2 +golang.org/x/crypto/ripemd160 +golang.org/x/crypto/scrypt +golang.org/x/crypto/sha3 +golang.org/x/exp/constraints +golang.org/x/exp/maps +golang.org/x/exp/rand +golang.org/x/mod/semver +golang.org/x/net/http/httpguts +golang.org/x/net/idna +golang.org/x/net/publicsuffix +golang.org/x/sync/errgroup +golang.org/x/sync/singleflight +golang.org/x/sys/cpu +golang.org/x/sys/execabs +golang.org/x/sys/unix +golang.org/x/text/cases +golang.org/x/text/collate +golang.org/x/text/internal +golang.org/x/text/internal/colltab +golang.org/x/text/internal/language +golang.org/x/text/internal/language/compact +golang.org/x/text/internal/tag +golang.org/x/text/language +golang.org/x/text/secure/bidirule +golang.org/x/text/transform +golang.org/x/text/unicode/bidi +golang.org/x/text/unicode/norm +golang.org/x/text/unicode/rangetable +golang.org/x/time/rate +golang.org/x/tools/go/gcexportdata +golang.org/x/tools/go/internal/packagesdriver +golang.org/x/tools/go/packages +golang.org/x/tools/go/types/objectpath +golang.org/x/tools/internal/aliases +golang.org/x/tools/internal/event +golang.org/x/tools/internal/event/core +golang.org/x/tools/internal/event/keys +golang.org/x/tools/internal/event/label +golang.org/x/tools/internal/event/tag +golang.org/x/tools/internal/gcimporter +golang.org/x/tools/internal/gocommand +golang.org/x/tools/internal/packagesinternal +golang.org/x/tools/internal/pkgbits +golang.org/x/tools/internal/stdlib +golang.org/x/tools/internal/tokeninternal +golang.org/x/tools/internal/typesinternal +golang.org/x/tools/internal/versions +google.golang.org/protobuf/encoding/prototext +google.golang.org/protobuf/encoding/protowire +google.golang.org/protobuf/internal/descfmt +google.golang.org/protobuf/internal/descopts +google.golang.org/protobuf/internal/detrand +google.golang.org/protobuf/internal/editiondefaults +google.golang.org/protobuf/internal/editionssupport +google.golang.org/protobuf/internal/encoding/defval +google.golang.org/protobuf/internal/encoding/messageset +google.golang.org/protobuf/internal/encoding/tag +google.golang.org/protobuf/internal/encoding/text +google.golang.org/protobuf/internal/errors +google.golang.org/protobuf/internal/filedesc +google.golang.org/protobuf/internal/filetype +google.golang.org/protobuf/internal/flags +google.golang.org/protobuf/internal/genid +google.golang.org/protobuf/internal/impl +google.golang.org/protobuf/internal/order +google.golang.org/protobuf/internal/pragma +google.golang.org/protobuf/internal/set +google.golang.org/protobuf/internal/strs +google.golang.org/protobuf/internal/version +google.golang.org/protobuf/proto +google.golang.org/protobuf/reflect/protodesc +google.golang.org/protobuf/reflect/protoreflect +google.golang.org/protobuf/reflect/protoregistry +google.golang.org/protobuf/runtime/protoiface +google.golang.org/protobuf/runtime/protoimpl +google.golang.org/protobuf/types/descriptorpb +google.golang.org/protobuf/types/gofeaturespb +google.golang.org/protobuf/types/known/anypb +google.golang.org/protobuf/types/known/durationpb +google.golang.org/protobuf/types/known/timestamppb +gopkg.in/natefinch/lumberjack.v2 +gopkg.in/yaml.v2 +gopkg.in/yaml.v3 +rsc.io/tmplfunc +rsc.io/tmplfunc/internal/parse diff --git a/common/path.go b/common/path.go index c1e382fd29..49c6a5efc2 100644 --- a/common/path.go +++ b/common/path.go @@ -27,7 +27,6 @@ func FileExist(filePath string) bool { if err != nil && os.IsNotExist(err) { return false } - return true } diff --git a/internal/build/util.go b/internal/build/util.go index aee8bf0fc8..345c4aed5b 100644 --- a/internal/build/util.go +++ b/internal/build/util.go @@ -36,6 +36,15 @@ import ( var DryRunFlag = flag.Bool("n", false, "dry run, don't execute commands") +// FileExist checks if a file exists at filePath. +func FileExist(filePath string) bool { + _, err := os.Stat(filePath) + if err != nil && os.IsNotExist(err) { + return false + } + return true +} + // MustRun executes the given command and exits the host process for // any error. func MustRun(cmd *exec.Cmd) {