From e54afe9222ca8881d0d525cc16be6c77a2e6f54f Mon Sep 17 00:00:00 2001 From: HuangYi Date: Fri, 20 May 2022 14:42:52 +0800 Subject: [PATCH] fix symlink nested package - added a test case to demonstrate the fail scenario --- .gitignore | 1 + builder/default.nix | 6 ++-- builder/symlink.go | 20 +++++++++-- tests/ethermint/cmd/main.go | 11 ++++++ tests/ethermint/crypto/hd/algorithm.go | 11 ++++++ tests/ethermint/default.nix | 10 ++++++ tests/ethermint/go.mod | 13 +++++++ tests/ethermint/go.sum | 50 ++++++++++++++++++++++++++ tests/run.py | 2 +- 9 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 tests/ethermint/cmd/main.go create mode 100644 tests/ethermint/crypto/hd/algorithm.go create mode 100644 tests/ethermint/default.nix create mode 100644 tests/ethermint/go.mod create mode 100644 tests/ethermint/go.sum diff --git a/.gitignore b/.gitignore index a4c72be..ecd297f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /gomod2nix result* +/tests/*/gomod2nix.toml diff --git a/builder/default.nix b/builder/default.nix index 816c179..53584ff 100644 --- a/builder/default.nix +++ b/builder/default.nix @@ -71,8 +71,6 @@ let go run ${./symlink.go} ${lib.concatStringsSep "\n" localReplaceCommands} - find vendor - mv vendor $out '' ); @@ -118,6 +116,10 @@ let [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && return 0 local OUT if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" -v -p $NIX_BUILD_CORES $d 2>&1)"; then + if echo "$OUT" | grep -qE 'imports .*?: no Go files in'; then + echo "$OUT" >&2 + return 1 + fi if ! echo "$OUT" | grep -qE '(no( buildable| non-test)?|build constraints exclude all) Go (source )?files'; then echo "$OUT" >&2 return 1 diff --git a/builder/symlink.go b/builder/symlink.go index b10ded1..b130daa 100644 --- a/builder/symlink.go +++ b/builder/symlink.go @@ -67,7 +67,9 @@ func main() { for _, path := range paths { vendorDir := filepath.Join("vendor", filepath.Dir(path)) - os.MkdirAll(vendorDir, 0755) + if err := os.MkdirAll(vendorDir, 0755); err != nil { + panic(err) + } if _, err := os.Stat(filepath.Join("vendor", path)); err == nil { files, err := ioutil.ReadDir(src) @@ -76,7 +78,21 @@ func main() { } for _, f := range files { - os.Symlink(filepath.Join(src, f.Name()), filepath.Join("vendor", path, f.Name())) + innerSrc := filepath.Join(src, f.Name()) + dst := filepath.Join("vendor", path, f.Name()) + if err := os.Symlink(innerSrc, dst); err != nil { + // assume it's an existing directory, try to link the directory content instead. + // TODO should we do this recursively + files, err := ioutil.ReadDir(innerSrc) + if err != nil { + panic(err) + } + for _, f := range files { + if err := os.Symlink(filepath.Join(innerSrc, f.Name()), filepath.Join(dst, f.Name())); err != nil { + panic(err) + } + } + } } continue diff --git a/tests/ethermint/cmd/main.go b/tests/ethermint/cmd/main.go new file mode 100644 index 0000000..fdf18af --- /dev/null +++ b/tests/ethermint/cmd/main.go @@ -0,0 +1,11 @@ +package main + +import ( + "fmt" + + "github.com/tharsis/ethermint/crypto/hd" +) + +func main() { + fmt.Println(hd.NewExtendedKey()) +} diff --git a/tests/ethermint/crypto/hd/algorithm.go b/tests/ethermint/crypto/hd/algorithm.go new file mode 100644 index 0000000..858e3f9 --- /dev/null +++ b/tests/ethermint/crypto/hd/algorithm.go @@ -0,0 +1,11 @@ +package hd + +import ( + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcutil/hdkeychain" +) + +// NewExtendedKey +func NewExtendedKey() (*hdkeychain.ExtendedKey, error) { + return hdkeychain.NewMaster([]byte{}, &chaincfg.MainNetParams) +} diff --git a/tests/ethermint/default.nix b/tests/ethermint/default.nix new file mode 100644 index 0000000..c21188a --- /dev/null +++ b/tests/ethermint/default.nix @@ -0,0 +1,10 @@ +{ stdenv, buildGoApplication }: + +buildGoApplication rec { + pname = "ethermint"; + version = "0.0.1"; + src = ./.; + modules = ./gomod2nix.toml; + doCheck = false; + subPackages = [ "./cmd/main.go" ]; +} diff --git a/tests/ethermint/go.mod b/tests/ethermint/go.mod new file mode 100644 index 0000000..e04706b --- /dev/null +++ b/tests/ethermint/go.mod @@ -0,0 +1,13 @@ +module github.com/tharsis/ethermint + +go 1.17 + +require ( + github.com/btcsuite/btcd v0.22.1 + github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce +) + +require ( + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect + golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 // indirect +) diff --git a/tests/ethermint/go.sum b/tests/ethermint/go.sum new file mode 100644 index 0000000..50966ca --- /dev/null +++ b/tests/ethermint/go.sum @@ -0,0 +1,50 @@ +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/tests/run.py b/tests/run.py index 98a56bd..62cd860 100644 --- a/tests/run.py +++ b/tests/run.py @@ -16,7 +16,7 @@ if __name__ == '__main__': subprocess.run([cmd, "--dir", directory, "--outdir", directory], check=True) build_expr = (""" - with (import { overlays = [ (import %s/overlay.nix) ]; }); callPackage %s {}" + with (import { overlays = [ (import %s/overlay.nix) ]; }); callPackage %s {} """.replace("\n", " ") % (root_dir, directory)) subprocess.run(["nix-build", "--expr", build_expr], check=True)