aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2025-06-04 12:09:26 +0300
committerGitHub <noreply@github.com>2025-06-04 12:09:26 +0300
commitb57c1a6878190abd6ed63e285e13b03a4fbac7a3 (patch)
tree32d143bd87bfb182c2035c6be09c6ee3b035f903
parent7240595478fedec02e9e47c704976cf56a66d3e8 (diff)
downloadgo-metatrader4-b57c1a6878190abd6ed63e285e13b03a4fbac7a3.tar.xz
go-metatrader4-b57c1a6878190abd6ed63e285e13b03a4fbac7a3.zip
Added GitHub Actions (#4)
-rw-r--r--.github/workflows/ci.yml52
-rw-r--r--internal/conn/conn.go16
-rw-r--r--mt4/client.go8
-rw-r--r--mt4/client_test.go6
4 files changed, 70 insertions, 12 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..07e7b97
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,52 @@
+name: CI
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v4
+ - name: Set up Go
+ uses: actions/setup-go@v5
+ with:
+ go-version: '1.24.2'
+ - name: Cache Go modules
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.cache/go-build
+ ~/go/pkg/mod
+ key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
+ restore-keys: |
+ ${{ runner.os }}-go-
+ - name: Download dependencies
+ run: go mod download
+ - name: Verify dependencies
+ run: go mod verify
+ - name: Run go vet
+ run: go vet ./...
+ - name: Run tests
+ run: go test -race -coverprofile=coverage.out -covermode=atomic ./...
+
+ lint:
+ name: Lint
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v4
+ - name: Set up Go
+ uses: actions/setup-go@v5
+ with:
+ go-version: '1.24.2'
+ - name: Run golangci-lint
+ uses: golangci/golangci-lint-action@v8
+ with:
+ version: latest
+ args: --timeout=5m \ No newline at end of file
diff --git a/internal/conn/conn.go b/internal/conn/conn.go
index a1da6f1..0bf3ae6 100644
--- a/internal/conn/conn.go
+++ b/internal/conn/conn.go
@@ -32,9 +32,13 @@ func (c *Conn) Close() error {
func (c *Conn) Send(ctx context.Context, data []byte, timeout time.Duration) error {
if dl, ok := ctx.Deadline(); ok {
- c.netConn.SetWriteDeadline(dl)
+ if err := c.netConn.SetWriteDeadline(dl); err != nil {
+ return err
+ }
} else {
- c.netConn.SetWriteDeadline(time.Now().Add(timeout))
+ if err := c.netConn.SetWriteDeadline(time.Now().Add(timeout)); err != nil {
+ return err
+ }
}
_, err := c.netConn.Write(data)
return err
@@ -42,9 +46,13 @@ func (c *Conn) Send(ctx context.Context, data []byte, timeout time.Duration) err
func (c *Conn) Receive(ctx context.Context, timeout time.Duration) ([]byte, error) {
if dl, ok := ctx.Deadline(); ok {
- c.netConn.SetReadDeadline(dl)
+ if err := c.netConn.SetReadDeadline(dl); err != nil {
+ return nil, err
+ }
} else {
- c.netConn.SetReadDeadline(time.Now().Add(timeout))
+ if err := c.netConn.SetReadDeadline(time.Now().Add(timeout)); err != nil {
+ return nil, err
+ }
}
return io.ReadAll(c.netConn)
}
diff --git a/mt4/client.go b/mt4/client.go
index 8a5f388..74fceee 100644
--- a/mt4/client.go
+++ b/mt4/client.go
@@ -3,7 +3,6 @@ package mt4
import (
"context"
"fmt"
- "net"
"time"
"go.popov.link/metatrader4/internal/conn"
@@ -18,7 +17,6 @@ type Client struct {
readTimeout time.Duration
writeTimeout time.Duration
autoClose bool
- dialer net.Dialer
c *conn.Conn
}
@@ -86,7 +84,7 @@ func (c *Client) Execute(ctx context.Context, command string, params map[string]
encoded, err := proto.EncodeParams(params)
if err != nil {
if c.autoClose {
- c.Close()
+ _ = c.Close()
}
return "", err
}
@@ -94,14 +92,14 @@ func (c *Client) Execute(ctx context.Context, command string, params map[string]
if err := c.c.Send(ctx, req, c.writeTimeout); err != nil {
if c.autoClose {
- c.Close()
+ _ = c.Close()
}
return "", fmt.Errorf("send: %w", err)
}
respBytes, err := c.c.Receive(ctx, c.readTimeout)
if c.autoClose {
- c.Close()
+ _ = c.Close()
}
if err != nil {
return "", fmt.Errorf("receive: %w", err)
diff --git a/mt4/client_test.go b/mt4/client_test.go
index 9644c9a..2ff5417 100644
--- a/mt4/client_test.go
+++ b/mt4/client_test.go
@@ -15,10 +15,10 @@ import (
func mockServer(response string) (net.Conn, net.Conn) {
server, client := net.Pipe()
go func() {
- defer server.Close()
+ defer func() { _ = server.Close() }()
buf := make([]byte, 1024)
- server.Read(buf) // read request ignoring
- server.Write([]byte(response))
+ _, _ = server.Read(buf) // read request ignoring
+ _, _ = server.Write([]byte(response))
}()
return client, server
}