From fa6d33fb5d7b40aab65c618d33e812c52ad3f4d6 Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 22:03:33 -0700 Subject: [PATCH 01/11] initialize the local and remote addresses of connections Signed-off-by: Achille Roussel --- .gitignore | 19 ++++ wasip1/conn_wasip1.go | 1 + wasip1/dial_wasip1.go | 68 +------------- wasip1/listen_wasip1.go | 11 ++- wasip1/net_wasip1.go | 151 ++++++++++++++++++++++++++++++ wasip1/syscall_wasmedge_wasip1.go | 10 +- 6 files changed, 187 insertions(+), 73 deletions(-) create mode 100644 .gitignore create mode 100644 wasip1/conn_wasip1.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e6a7f7e --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib +wasirun + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Emacs +*~ diff --git a/wasip1/conn_wasip1.go b/wasip1/conn_wasip1.go new file mode 100644 index 0000000..8c6d043 --- /dev/null +++ b/wasip1/conn_wasip1.go @@ -0,0 +1 @@ +package wasip1 diff --git a/wasip1/dial_wasip1.go b/wasip1/dial_wasip1.go index 19cea86..bc57040 100644 --- a/wasip1/dial_wasip1.go +++ b/wasip1/dial_wasip1.go @@ -38,8 +38,10 @@ func dialErr(addr net.Addr, err error) error { func dialAddr(addr net.Addr) (net.Conn, error) { proto := family(addr) - sotype := socketType(addr) - + sotype, err := socketType(addr) + if err != nil { + return nil, os.NewSyscallError("socket", err) + } fd, err := socket(proto, sotype, 0) if err != nil { return nil, os.NewSyscallError("socket", err) @@ -49,7 +51,6 @@ func dialAddr(addr net.Addr) (net.Conn, error) { syscall.Close(fd) return nil, os.NewSyscallError("setnonblock", err) } - if sotype == SOCK_DGRAM && proto != AF_UNIX { if err := setsockopt(fd, SOL_SOCKET, SO_BROADCAST, 1); err != nil { syscall.Close(fd) @@ -61,7 +62,6 @@ func dialAddr(addr net.Addr) (net.Conn, error) { if err != nil { return nil, os.NewSyscallError("connect", err) } - var inProgress bool switch err := connect(fd, connectAddr); err { case nil: @@ -113,63 +113,5 @@ func dialAddr(addr net.Addr) (net.Conn, error) { if err != nil { return nil, err } - - // TODO: get local+peer address; wrap FileConn to implement LocalAddr() and RemoteAddr() - return c, nil -} - -func family(addr net.Addr) int { - var ip net.IP - switch a := addr.(type) { - case *net.UnixAddr: - return AF_UNIX - case *net.TCPAddr: - ip = a.IP - case *net.UDPAddr: - ip = a.IP - case *net.IPAddr: - ip = a.IP - } - if ip.To4() != nil { - return AF_INET - } else if len(ip) == net.IPv6len { - return AF_INET6 - } - return AF_INET -} - -func socketType(addr net.Addr) int { - switch addr.Network() { - case "tcp", "unix": - return SOCK_STREAM - case "udp", "unixgram": - return SOCK_DGRAM - default: - panic("not implemented") - } -} - -func socketAddress(addr net.Addr) (sockaddr, error) { - var ip net.IP - var port int - switch a := addr.(type) { - case *net.UnixAddr: - return &sockaddrUnix{name: a.Name}, nil - case *net.TCPAddr: - ip, port = a.IP, a.Port - case *net.UDPAddr: - ip, port = a.IP, a.Port - case *net.IPAddr: - ip = a.IP - } - if ipv4 := ip.To4(); ipv4 != nil { - return &sockaddrInet4{addr: ([4]byte)(ipv4), port: port}, nil - } else if len(ip) == net.IPv6len { - return &sockaddrInet6{addr: ([16]byte)(ip), port: port}, nil - } else { - return nil, &net.AddrError{ - Err: "unsupported address type", - Addr: addr.String(), - } - } + return makeConn(c) } diff --git a/wasip1/listen_wasip1.go b/wasip1/listen_wasip1.go index 855bc2f..9d4f283 100644 --- a/wasip1/listen_wasip1.go +++ b/wasip1/listen_wasip1.go @@ -25,7 +25,11 @@ func listenErr(addr net.Addr, err error) error { } func listenAddr(addr net.Addr) (net.Listener, error) { - fd, err := socket(family(addr), socketType(addr), 0) + sotype, err := socketType(addr) + if err != nil { + return nil, os.NewSyscallError("socket", err) + } + fd, err := socket(family(addr), sotype, 0) if err != nil { return nil, os.NewSyscallError("socket", err) } @@ -43,12 +47,10 @@ func listenAddr(addr net.Addr) (net.Listener, error) { if err != nil { return nil, os.NewSyscallError("bind", err) } - if err := bind(fd, listenAddr); err != nil { syscall.Close(fd) return nil, os.NewSyscallError("bind", err) } - const backlog = 64 // TODO: configurable? if err := listen(fd, backlog); err != nil { syscall.Close(fd) @@ -75,8 +77,7 @@ func (l *listener) Accept() (net.Conn, error) { if err != nil { return nil, err } - // TODO: get local+peer address; wrap Conn to implement LocalAddr() and RemoteAddr() - return c, nil + return makeConn(c) } func (l *listener) Addr() net.Addr { diff --git a/wasip1/net_wasip1.go b/wasip1/net_wasip1.go index ab067f3..bb9470a 100644 --- a/wasip1/net_wasip1.go +++ b/wasip1/net_wasip1.go @@ -5,6 +5,7 @@ import ( "errors" "net" "net/http" + "syscall" ) func dialResolverNotSupported(ctx context.Context, network, address string) (net.Conn, error) { @@ -41,3 +42,153 @@ type netAddr struct{ network, address string } func (na *netAddr) Network() string { return na.address } func (na *netAddr) String() string { return na.address } + +func family(addr net.Addr) int { + var ip net.IP + switch a := addr.(type) { + case *net.UnixAddr: + return AF_UNIX + case *net.TCPAddr: + ip = a.IP + case *net.UDPAddr: + ip = a.IP + case *net.IPAddr: + ip = a.IP + } + if ip.To4() != nil { + return AF_INET + } else if len(ip) == net.IPv6len { + return AF_INET6 + } + return AF_INET +} + +func socketType(addr net.Addr) (int, error) { + switch addr.Network() { + case "tcp", "unix": + return SOCK_STREAM, nil + case "udp", "unixgram": + return SOCK_DGRAM, nil + default: + return -1, syscall.EPROTOTYPE + } +} + +func socketAddress(addr net.Addr) (sockaddr, error) { + var ip net.IP + var port int + switch a := addr.(type) { + case *net.UnixAddr: + return &sockaddrUnix{name: a.Name}, nil + case *net.TCPAddr: + ip, port = a.IP, a.Port + case *net.UDPAddr: + ip, port = a.IP, a.Port + case *net.IPAddr: + ip = a.IP + } + if ipv4 := ip.To4(); ipv4 != nil { + return &sockaddrInet4{addr: ([4]byte)(ipv4), port: port}, nil + } else if len(ip) == net.IPv6len { + return &sockaddrInet6{addr: ([16]byte)(ip), port: port}, nil + } else { + return nil, &net.AddrError{ + Err: "unsupported address type", + Addr: addr.String(), + } + } +} + +type conn struct { + net.Conn + laddr net.Addr + raddr net.Addr +} + +func (c *conn) LocalAddr() net.Addr { return c.laddr } +func (c *conn) RemoteAddr() net.Addr { return c.raddr } + +// In Go 1.21, the net package cannot initialize the local and remote addresses +// of network connections. For this reason, we use this function to retreive the +// addresses and return a wrapped net.Conn with LocalAddr/RemoteAddr implemented. +func makeConn(c net.Conn) (net.Conn, error) { + syscallConn, ok := c.(syscall.Conn) + if !ok { + return c, nil + } + rawConn, err := syscallConn.SyscallConn() + if err != nil { + c.Close() + return nil, err + } + var laddr net.Addr + var raddr net.Addr + rawConnErr := rawConn.Control(func(fd uintptr) { + var addr sockaddr + var peer sockaddr + if addr, err = getsockname(int(fd)); err != nil { + return + } + if peer, err = getpeername(int(fd)); err != nil { + return + } + switch c.(type) { + case *net.UnixConn: + laddr = sockaddrToUnixAddr(addr) + raddr = sockaddrToUnixAddr(peer) + case *net.UDPConn: + laddr = sockaddrToUDPAddr(addr) + raddr = sockaddrToUDPAddr(peer) + case *net.TCPConn: + laddr = sockaddrToTCPAddr(addr) + raddr = sockaddrToTCPAddr(peer) + } + }) + if err == nil { + err = rawConnErr + } + if err != nil { + c.Close() + return nil, err + } + return &conn{c, laddr, raddr}, nil +} + +func sockaddrToUnixAddr(addr sockaddr) net.Addr { + switch a := addr.(type) { + case *sockaddrUnix: + return &net.UnixAddr{ + Net: "unix", + Name: a.name, + } + default: + return nil + } +} + +func sockaddrToTCPAddr(addr sockaddr) net.Addr { + ip, port := sockaddrIPAndPort(addr) + return &net.TCPAddr{ + IP: ip, + Port: port, + } +} + +func sockaddrToUDPAddr(addr sockaddr) net.Addr { + ip, port := sockaddrIPAndPort(addr) + return &net.UDPAddr{ + IP: ip, + Port: port, + } +} + +func sockaddrIPAndPort(addr sockaddr) (net.IP, int) { + switch a := addr.(type) { + case *sockaddrInet4: + return net.IP(a.addr[:]), a.port + case *sockaddrInet6: + return net.IP(a.addr[:]), a.port + default: + return nil, 0 + } +} diff --git a/wasip1/syscall_wasmedge_wasip1.go b/wasip1/syscall_wasmedge_wasip1.go index 521306f..696bcac 100644 --- a/wasip1/syscall_wasmedge_wasip1.go +++ b/wasip1/syscall_wasmedge_wasip1.go @@ -71,14 +71,14 @@ func (s *sockaddrInet4) sockport() int { } type sockaddrInet6 struct { - port int - ZoneId uint32 - addr [16]byte - raw addressBuffer + port int + zone uint32 + addr [16]byte + raw addressBuffer } func (s *sockaddrInet6) sockaddr() (unsafe.Pointer, error) { - if s.ZoneId != 0 { + if s.zone != 0 { return nil, syscall.ENOTSUP } s.raw.bufLen = 16 From efdc6f9fea6652fd9b4c3e8f3130b500ce7b73bf Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 22:32:14 -0700 Subject: [PATCH 02/11] pass nettest test suite Signed-off-by: Achille Roussel --- go.mod | 2 ++ go.sum | 2 ++ wasip1/conn_wasip1.go | 1 - wasip1/listen_wasip1.go | 16 +++++++-- wasip1/net_wasip1_test.go | 71 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 go.sum delete mode 100644 wasip1/conn_wasip1.go create mode 100644 wasip1/net_wasip1_test.go diff --git a/go.mod b/go.mod index ab42d04..446b338 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module github.com/stealthrocket/net go 1.20 + +require golang.org/x/net v0.10.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..ac972c8 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= diff --git a/wasip1/conn_wasip1.go b/wasip1/conn_wasip1.go deleted file mode 100644 index 8c6d043..0000000 --- a/wasip1/conn_wasip1.go +++ /dev/null @@ -1 +0,0 @@ -package wasip1 diff --git a/wasip1/listen_wasip1.go b/wasip1/listen_wasip1.go index 9d4f283..976efe8 100644 --- a/wasip1/listen_wasip1.go +++ b/wasip1/listen_wasip1.go @@ -43,11 +43,11 @@ func listenAddr(addr net.Addr) (net.Listener, error) { return nil, os.NewSyscallError("setsockopt", err) } - listenAddr, err := socketAddress(addr) + bindAddr, err := socketAddress(addr) if err != nil { return nil, os.NewSyscallError("bind", err) } - if err := bind(fd, listenAddr); err != nil { + if err := bind(fd, bindAddr); err != nil { syscall.Close(fd) return nil, os.NewSyscallError("bind", err) } @@ -57,6 +57,12 @@ func listenAddr(addr net.Addr) (net.Listener, error) { return nil, os.NewSyscallError("listen", err) } + sockaddr, err := getsockname(fd) + if err != nil { + syscall.Close(fd) + return nil, os.NewSyscallError("getsockname", err) + } + f := os.NewFile(uintptr(fd), "") defer f.Close() @@ -64,6 +70,12 @@ func listenAddr(addr net.Addr) (net.Listener, error) { if err != nil { return nil, err } + switch l.(type) { + case *net.UnixListener: + addr = sockaddrToUnixAddr(sockaddr) + case *net.TCPListener: + addr = sockaddrToTCPAddr(sockaddr) + } return &listener{l, addr}, nil } diff --git a/wasip1/net_wasip1_test.go b/wasip1/net_wasip1_test.go new file mode 100644 index 0000000..caa86b2 --- /dev/null +++ b/wasip1/net_wasip1_test.go @@ -0,0 +1,71 @@ +package wasip1_test + +import ( + "net" + "testing" + + "github.com/stealthrocket/net/wasip1" + "golang.org/x/net/nettest" +) + +func TestConn(t *testing.T) { + // TODO: for now only the TCP tests pass due to limitations in Go 1.21, see: + // https://github.com/golang/go/blob/39effbc105f5c54117a6011af3c48e3c8f14eca9/src/net/file_wasip1.go#L33-L55 + // + // Once https://go-review.googlesource.com/c/go/+/500578 is merged, we will + // be able to test udp and unix networks as well. + tests := []struct { + network string + address string + }{ + { + network: "tcp", + address: ":0", + }, + { + network: "tcp4", + address: ":0", + }, + { + network: "tcp6", + address: ":0", + }, + } + + for _, test := range tests { + t.Run(test.network, func(t *testing.T) { + nettest.TestConn(t, func() (c1, c2 net.Conn, stop func(), err error) { + l, err := wasip1.Listen(test.network, test.address) + if err != nil { + return nil, nil, nil, err + } + defer l.Close() + + conns := make(chan net.Conn, 1) + errch := make(chan error, 1) + go func() { + c, err := l.Accept() + if err != nil { + errch <- err + } else { + conns <- c + } + }() + + address := l.Addr() + c1, err = wasip1.Dial(address.Network(), address.String()) + if err != nil { + return nil, nil, nil, err + } + + select { + case c2 := <-conns: + return c1, c2, func() { c1.Close(); c2.Close() }, nil + case err := <-errch: + c1.Close() + return nil, nil, nil, err + } + }) + }) + } +} From f6b26d81bea174b7edba2cac1bec3c6843394658 Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 22:39:40 -0700 Subject: [PATCH 03/11] support asynchrnously cancelling connections Signed-off-by: Achille Roussel --- wasip1/dial_wasip1.go | 86 ++++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/wasip1/dial_wasip1.go b/wasip1/dial_wasip1.go index bc57040..7f81f40 100644 --- a/wasip1/dial_wasip1.go +++ b/wasip1/dial_wasip1.go @@ -9,34 +9,28 @@ import ( // Dial connects to the address on the named network. func Dial(network, address string) (net.Conn, error) { + return DialContext(context.Background(), network, address) +} + +// DialContext is a variant of Dial that accepts a context. +func DialContext(ctx context.Context, network, address string) (net.Conn, error) { addr, err := lookupAddr("dial", network, address) if err != nil { addr := &netAddr{network, address} return nil, dialErr(addr, err) } - conn, err := dialAddr(addr) + conn, err := dialAddr(ctx, addr) if err != nil { return nil, dialErr(addr, err) } return conn, nil } -// DialContext is a variant of Dial that accepts a context. -func DialContext(ctx context.Context, network, address string) (net.Conn, error) { - select { - case <-ctx.Done(): - addr := &netAddr{network, address} - return nil, dialErr(addr, context.Cause(ctx)) - default: - return Dial(network, address) - } -} - func dialErr(addr net.Addr, err error) error { return newOpError("dial", addr, err) } -func dialAddr(addr net.Addr) (net.Conn, error) { +func dialAddr(ctx context.Context, addr net.Addr) (net.Conn, error) { proto := family(addr) sotype, err := socketType(addr) if err != nil { @@ -80,32 +74,50 @@ func dialAddr(addr net.Addr) (net.Conn, error) { if err != nil { return nil, err } - rawConnErr := rawConn.Write(func(fd uintptr) bool { - var value int - value, err = getsockopt(int(fd), SOL_SOCKET, SO_ERROR) - if err != nil { - return true // done + + errch := make(chan error) + go func() { + var err error + rawConnErr := rawConn.Write(func(fd uintptr) bool { + var value int + value, err = getsockopt(int(fd), SOL_SOCKET, SO_ERROR) + if err != nil { + return true // done + } + switch syscall.Errno(value) { + case syscall.EINPROGRESS, syscall.EINTR: + return false // continue + case syscall.EISCONN: + err = nil + return true + case syscall.Errno(0): + // The net poller can wake up spuriously. Check that we are + // are really connected. + _, err := getpeername(int(fd)) + return err == nil + default: + return true + } + }) + if err == nil { + err = rawConnErr } - switch syscall.Errno(value) { - case syscall.EINPROGRESS, syscall.EINTR: - return false // continue - case syscall.EISCONN: - err = nil - return true - case syscall.Errno(0): - // The net poller can wake up spuriously. Check that we are - // are really connected. - _, err := getpeername(int(fd)) - return err == nil - default: - return true + errch <- err + }() + + select { + case err := <-errch: + if err != nil { + return nil, os.NewSyscallError("connect", err) } - }) - if err == nil { - err = rawConnErr - } - if err != nil { - return nil, os.NewSyscallError("connect", err) + case <-ctx.Done(): + // This should interrupt the async connect operation handled by the + // goroutine. + f.Close() + // Wait for the goroutine to complete, we can safely discard the + // error here because we don't care about the socket anymore. + <-errch + return nil, context.Cause(ctx) } } From 4f36ce426c3854391dc5e1c178e27cb881b0f361 Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 22:45:19 -0700 Subject: [PATCH 04/11] add Makefile Signed-off-by: Achille Roussel --- Makefile | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e515167 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +.PHONY: test + +go ?= go + +test: wasip1.test + wasirun wasip1.test -test.v + +wasip1.test: + GOARCH=wasm GOOS=wasip1 $(go) test -c ./wasip1 From 22d60c44fc53060d7c709ceb71ec1186bd5cb5f1 Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 22:51:04 -0700 Subject: [PATCH 05/11] add github action to run tests Signed-off-by: Achille Roussel --- .github/workflows/build.yml | 36 ++++++++++++++++++++++++++++++++++++ Makefile | 16 +++++++++++----- 2 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..21d21bc --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,36 @@ +name: build +on: + push: + tags: + - v* + branches: + - main + pull_request: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.event.number || github.ref }} + cancel-in-progress: true + +jobs: + test: + name: Go Test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + with: + go-version-file: go.mod + check-latest: true + + - name: Install Go tip + run: | + curl -sL https://storage.googleapis.com/go-build-snap/go/linux-amd64/$(git ls-remote https://github.com/golang/go.git HEAD | awk '{print $1;}').tar.gz -o gotip.tar.gz + ls -lah gotip.tar.gz + mkdir -p $HOME/gotip + tar -C $HOME/gotip -xzf gotip.tar.gz + + - run: git config --global url.https://$GH_ACCESS_TOKEN@github.com.insteadOf https://github.com + - run: make wasirun + - run: make test diff --git a/Makefile b/Makefile index e515167..a037ffa 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,15 @@ -.PHONY: test +.PHONY: test lint wasirun -go ?= go +GO ?= go +GOPATH = $(shell $(GO) env GOPATH) -test: wasip1.test +wasip1.test: + GOARCH=wasm GOOS=wasip1 $(GO) test -c ./wasip1 + +test: wasirun wasip1.test wasirun wasip1.test -test.v -wasip1.test: - GOARCH=wasm GOOS=wasip1 $(go) test -c ./wasip1 +wasirun: $(GOPATH)/bin/wasirun + +$(GOPATH)/bin/wasirun: + $(GO) install github.com/stealthrocket/wasi-go/cmd/wasirun@latest From bbd44e2fc4d9ef40da9d3d829b1fade1ebcc8178 Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 22:52:28 -0700 Subject: [PATCH 06/11] enumerate go files as dependencies to the test Signed-off-by: Achille Roussel --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a037ffa..b3a24e8 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ GO ?= go GOPATH = $(shell $(GO) env GOPATH) -wasip1.test: +wasip1.test: go.mod $(wildcard wasip1/*.go) GOARCH=wasm GOOS=wasip1 $(GO) test -c ./wasip1 test: wasirun wasip1.test From 3fcf9ad808e37f9c25bdd93195f4ae98f03c588c Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 22:53:24 -0700 Subject: [PATCH 07/11] explicitly use gotip Signed-off-by: Achille Roussel --- Makefile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index b3a24e8..d55f466 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,9 @@ .PHONY: test lint wasirun -GO ?= go -GOPATH = $(shell $(GO) env GOPATH) +GOPATH = $(shell gotip env GOPATH) wasip1.test: go.mod $(wildcard wasip1/*.go) - GOARCH=wasm GOOS=wasip1 $(GO) test -c ./wasip1 + GOARCH=wasm GOOS=wasip1 gotip test -c ./wasip1 test: wasirun wasip1.test wasirun wasip1.test -test.v @@ -12,4 +11,4 @@ test: wasirun wasip1.test wasirun: $(GOPATH)/bin/wasirun $(GOPATH)/bin/wasirun: - $(GO) install github.com/stealthrocket/wasi-go/cmd/wasirun@latest + gotip install github.com/stealthrocket/wasi-go/cmd/wasirun@latest From a06e2e356df2abad528faf0f7256be508d38b6cf Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 22:55:54 -0700 Subject: [PATCH 08/11] fix gotip configuration Signed-off-by: Achille Roussel --- .github/workflows/build.yml | 4 +--- Makefile | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 21d21bc..397cb7f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,5 @@ jobs: ls -lah gotip.tar.gz mkdir -p $HOME/gotip tar -C $HOME/gotip -xzf gotip.tar.gz - - - run: git config --global url.https://$GH_ACCESS_TOKEN@github.com.insteadOf https://github.com - run: make wasirun - - run: make test + - run: make test GO=$HOME/gotip/bin/go diff --git a/Makefile b/Makefile index d55f466..44bc898 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ .PHONY: test lint wasirun -GOPATH = $(shell gotip env GOPATH) +GOPATH = $(shell $(GO) env GOPATH) wasip1.test: go.mod $(wildcard wasip1/*.go) - GOARCH=wasm GOOS=wasip1 gotip test -c ./wasip1 + GOARCH=wasm GOOS=wasip1 $(GO) test -c ./wasip1 test: wasirun wasip1.test wasirun wasip1.test -test.v @@ -11,4 +11,4 @@ test: wasirun wasip1.test wasirun: $(GOPATH)/bin/wasirun $(GOPATH)/bin/wasirun: - gotip install github.com/stealthrocket/wasi-go/cmd/wasirun@latest + $(GO) install github.com/stealthrocket/wasi-go/cmd/wasirun@latest From a34db2ee69e6bc8e7b793937d5a9938b0251a47f Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 22:58:23 -0700 Subject: [PATCH 09/11] configure GOPATH explicitly in CI Signed-off-by: Achille Roussel --- .github/workflows/build.yml | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 397cb7f..ae4c236 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,4 +31,4 @@ jobs: mkdir -p $HOME/gotip tar -C $HOME/gotip -xzf gotip.tar.gz - run: make wasirun - - run: make test GO=$HOME/gotip/bin/go + - run: make test GO=$HOME/gotip/bin/go GOPATH=$HOME/gotip diff --git a/Makefile b/Makefile index 44bc898..ca2ad5a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ .PHONY: test lint wasirun -GOPATH = $(shell $(GO) env GOPATH) +GOPATH ?= $(shell $(GO) env GOPATH) wasip1.test: go.mod $(wildcard wasip1/*.go) GOARCH=wasm GOOS=wasip1 $(GO) test -c ./wasip1 From b2c0a3056a24567e5a81c83253368adb702d7916 Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 23:00:21 -0700 Subject: [PATCH 10/11] run everything in a single step Signed-off-by: Achille Roussel --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae4c236..f346156 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,5 +30,4 @@ jobs: ls -lah gotip.tar.gz mkdir -p $HOME/gotip tar -C $HOME/gotip -xzf gotip.tar.gz - - run: make wasirun - run: make test GO=$HOME/gotip/bin/go GOPATH=$HOME/gotip From e4b8ef44462b08fdb664fa1646b591de06618a21 Mon Sep 17 00:00:00 2001 From: Achille Roussel Date: Thu, 8 Jun 2023 23:02:44 -0700 Subject: [PATCH 11/11] add wasirun variable to Makefile Signed-off-by: Achille Roussel --- Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index ca2ad5a..39308c9 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,15 @@ .PHONY: test lint wasirun GOPATH ?= $(shell $(GO) env GOPATH) +wasirun = $(GOPATH)/bin/wasirun wasip1.test: go.mod $(wildcard wasip1/*.go) GOARCH=wasm GOOS=wasip1 $(GO) test -c ./wasip1 test: wasirun wasip1.test - wasirun wasip1.test -test.v + $(wasirun) wasip1.test -test.v -wasirun: $(GOPATH)/bin/wasirun +wasirun: $(wasirun) -$(GOPATH)/bin/wasirun: +$(wasirun): $(GO) install github.com/stealthrocket/wasi-go/cmd/wasirun@latest