Skip to content

Commit 28ca2b4

Browse files
authored
Merge pull request #665 from nginx-proxy/multi-os-arch-tests
ci: run tests on multiple go versions and oses
2 parents 7c0fe93 + 82739b3 commit 28ca2b4

File tree

8 files changed

+53
-81
lines changed

8 files changed

+53
-81
lines changed

.github/workflows/tests.yml

+16-4
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,19 @@ on:
1313

1414
jobs:
1515
unit:
16-
name: Unit Tests
17-
runs-on: ubuntu-latest
16+
strategy:
17+
matrix:
18+
go-version:
19+
- "1.23"
20+
- "1.24"
21+
os:
22+
- macos
23+
- ubuntu
24+
- windows
25+
fail-fast: false
26+
27+
name: Unit Tests (${{ matrix.os }}/go-${{ matrix.go-version }})
28+
runs-on: ${{ matrix.os }}-latest
1829

1930
steps:
2031
- uses: actions/checkout@v4
@@ -23,7 +34,7 @@ jobs:
2334

2435
- uses: actions/setup-go@v5
2536
with:
26-
go-version-file: go.mod
37+
go-version: ${{ matrix.go-version }}
2738

2839
- name: Install dependencies
2940
run: make get-deps
@@ -32,7 +43,8 @@ jobs:
3243
run: make docker-gen
3344

3445
- name: Check code formatting
46+
if: runner.os != 'Windows'
3547
run: make check-gofmt
3648

3749
- name: Run tests
38-
run: go test -race -v ./internal/...
50+
run: make test

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,4 @@ check-gofmt:
6262
fi
6363

6464
test:
65-
go test -race ./internal/...
65+
go test -v ./internal/...

internal/generator/generator_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func TestGenerateFromEvents(t *testing.T) {
3030
{"status":"stop","id":"8dfafdbc3a40","from":"base:latest","time":1374067966}
3131
{"status":"start","id":"8dfafdbc3a40","from":"base:latest","time":1374067970}
3232
{"status":"destroy","id":"8dfafdbc3a40","from":"base:latest","time":1374067990}`
33-
infoResponse := `{"Containers":1,"Images":1,"Debug":0,"NFd":11,"NGoroutines":21,"MemoryLimit":1,"SwapLimit":0}`
33+
infoResponse := `{"Containers":1,"Images":1,"Debug":false,"NFd":11,"NGoroutines":21,"MemoryLimit":true,"SwapLimit":false}`
3434
versionResponse := `{"Version":"1.8.0","Os":"Linux","KernelVersion":"3.18.5-tinycore64","GoVersion":"go1.4.1","GitCommit":"a8a31ef","Arch":"amd64","ApiVersion":"1.19"}`
3535

3636
server, _ := dockertest.NewServer("127.0.0.1:0", nil, nil)

internal/template/chown_unix.go

-18
This file was deleted.

internal/template/chown_windows.go

-12
This file was deleted.

internal/template/functions_test.go

+25-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package template
22

33
import (
44
"os"
5-
"path"
5+
"path/filepath"
66
"reflect"
77
"testing"
88

@@ -96,10 +96,28 @@ func TestInclude(t *testing.T) {
9696
data := include("some_random_file")
9797
assert.Equal(t, "", data)
9898

99-
_ = os.WriteFile("/tmp/docker-gen-test-temp-file", []byte("some string"), 0o777)
100-
data = include("/tmp/docker-gen-test-temp-file")
99+
f, err := os.CreateTemp("", "docker-gen-test-temp-file")
100+
if err != nil {
101+
t.Fatal(err)
102+
}
103+
104+
defer func() {
105+
f.Close()
106+
os.Remove(f.Name())
107+
}()
108+
109+
err = f.Chmod(0o644)
110+
if err != nil {
111+
t.Fatal(err)
112+
}
113+
114+
_, err = f.WriteString("some string")
115+
if err != nil {
116+
t.Fatal(err)
117+
}
118+
119+
data = include(f.Name())
101120
assert.Equal(t, "some string", data)
102-
_ = os.Remove("/tmp/docker-gen-test-temp-file")
103121
}
104122

105123
func TestIntersect(t *testing.T) {
@@ -225,9 +243,9 @@ func TestDirList(t *testing.T) {
225243
}
226244

227245
expected := []string{
228-
path.Base(files["aaa"]),
229-
path.Base(files["bbb"]),
230-
path.Base(files["ccc"]),
246+
filepath.Base(files["aaa"]),
247+
filepath.Base(files["bbb"]),
248+
filepath.Base(files["ccc"]),
231249
}
232250

233251
filesList, _ := dirList(dir)

internal/template/template.go

+7-37
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"errors"
77
"fmt"
88
"io"
9+
"io/fs"
910
"log"
1011
"net/url"
1112
"os"
@@ -190,48 +191,17 @@ func GenerateFile(config config.Config, containers context.Context) bool {
190191
}
191192

192193
if config.Dest != "" {
193-
dest, err := os.CreateTemp(filepath.Dir(config.Dest), "docker-gen")
194-
defer func() {
195-
dest.Close()
196-
os.Remove(dest.Name())
197-
}()
198-
if err != nil {
199-
log.Fatalf("Unable to create temp file: %s\n", err)
200-
}
201-
202-
if n, err := dest.Write(contents); n != len(contents) || err != nil {
203-
log.Fatalf("Failed to write to temp file: wrote %d, exp %d, err=%v", n, len(contents), err)
204-
}
205-
206-
oldContents := []byte{}
207-
if fi, err := os.Stat(config.Dest); err == nil || os.IsNotExist(err) {
208-
if err != nil && os.IsNotExist(err) {
209-
emptyFile, err := os.Create(config.Dest)
210-
if err != nil {
211-
log.Fatalf("Unable to create empty destination file: %s\n", err)
212-
} else {
213-
emptyFile.Close()
214-
fi, _ = os.Stat(config.Dest)
215-
}
216-
}
217-
218-
if err := dest.Chmod(fi.Mode()); err != nil {
219-
log.Fatalf("Unable to chmod temp file: %s\n", err)
220-
}
221-
222-
chown(dest, fi)
223-
224-
oldContents, err = os.ReadFile(config.Dest)
225-
if err != nil {
226-
log.Fatalf("Unable to compare current file contents: %s: %s\n", config.Dest, err)
227-
}
194+
oldContents, err := os.ReadFile(config.Dest)
195+
if err != nil && !errors.Is(err, fs.ErrNotExist) {
196+
log.Fatalf("Unable to compare current file contents: %s: %s\n", config.Dest, err)
228197
}
229198

230199
if !bytes.Equal(oldContents, contents) {
231-
err = os.Rename(dest.Name(), config.Dest)
200+
err := os.WriteFile(config.Dest, contents, 0644)
232201
if err != nil {
233-
log.Fatalf("Unable to create dest file %s: %s\n", config.Dest, err)
202+
log.Fatalf("Unable to write to dest file %s: %s\n", config.Dest, err)
234203
}
204+
235205
log.Printf("Generated '%s' from %d containers", config.Dest, len(filteredContainers))
236206
return true
237207
}

internal/utils/utils.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package utils
22

33
import (
4+
"errors"
5+
"io/fs"
46
"os"
57
"strings"
68
)
@@ -27,7 +29,7 @@ func PathExists(path string) (bool, error) {
2729
if err == nil {
2830
return true, nil
2931
}
30-
if os.IsNotExist(err) {
32+
if errors.Is(err, fs.ErrNotExist) {
3133
return false, nil
3234
}
3335
return false, err

0 commit comments

Comments
 (0)