Dockerfile, build: prebuild and cache dependencies

This commit is contained in:
Péter Szilágyi 2024-10-18 17:50:26 +03:00
parent 3ff73d46b3
commit bf23d41fdc
7 changed files with 592 additions and 13 deletions

View file

@ -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

View file

@ -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

View file

@ -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 ''

View file

@ -24,6 +24,7 @@ Usage: go run build/ci.go <command> <command flags/arguments>
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)
}
}

497
build/docker.go.dep Normal file
View file

@ -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

View file

@ -27,7 +27,6 @@ func FileExist(filePath string) bool {
if err != nil && os.IsNotExist(err) {
return false
}
return true
}

View file

@ -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) {