From 9679004e6c74dac9d84d0201d9f0128a21e0f9fc Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 12:16:35 -0800 Subject: [PATCH 01/11] See Windows failures --- .github/workflows/ci.yml | 4 ++-- internal/endtoend/endtoend_test.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4afd6d9887..45f2829825 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,10 +18,10 @@ jobs: exclude: - isMain: false include: - - os: ubuntu-latest + - os: windows-latest cgo: '1' - os: ubuntu-latest - cgo: '0' + cgo: '1' name: test ${{ matrix.os }} cgo=${{ matrix.cgo }} runs-on: ${{ matrix.os }} diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index 10cd065c37..11ddb739d9 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -1,6 +1,6 @@ -// Currently requires cgo for wasmtime and has line-ending issues on windows. -//go:build cgo && !windows -// +build cgo,!windows +// Currently requires cgo for wasmtime +//go:build cgo +// +build cgo package main From 3e283fdebfa8369afdedc9f494a1626f7531dc13 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 12:32:45 -0800 Subject: [PATCH 02/11] run the tests without cgo --- .github/workflows/ci.yml | 4 ++-- internal/endtoend/endtoend_test.go | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 45f2829825..56c2ed8a85 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,9 +19,9 @@ jobs: - isMain: false include: - os: windows-latest - cgo: '1' + cgo: '0' - os: ubuntu-latest - cgo: '1' + cgo: '0' name: test ${{ matrix.os }} cgo=${{ matrix.cgo }} runs-on: ${{ matrix.os }} diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index 11ddb739d9..aea72c5dbf 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -1,7 +1,3 @@ -// Currently requires cgo for wasmtime -//go:build cgo -// +build cgo - package main import ( From 1115d0e4c1c0b80ba29fd31f88a0e7897b4cf381 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 12:43:30 -0800 Subject: [PATCH 03/11] Ignore managed mode --- .github/workflows/ci.yml | 2 +- internal/endtoend/ddl_test.go | 2 ++ internal/endtoend/endtoend_test.go | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 56c2ed8a85..92bdc31031 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: CGO_ENABLED: ${{ matrix.cgo }} - name: test ./... - run: gotestsum --junitfile junit.xml -- --tags=examples -timeout 20m ./... + run: gotestsum --junitfile junit.xml -- -timeout 20m ./... env: CI_SQLC_PROJECT_ID: ${{ secrets.CI_SQLC_PROJECT_ID }} CI_SQLC_AUTH_TOKEN: ${{ secrets.CI_SQLC_AUTH_TOKEN }} diff --git a/internal/endtoend/ddl_test.go b/internal/endtoend/ddl_test.go index c77389207d..e00d58f521 100644 --- a/internal/endtoend/ddl_test.go +++ b/internal/endtoend/ddl_test.go @@ -19,6 +19,8 @@ import ( ) func TestValidSchema(t *testing.T) { + t.Skip("ignore") + ctx := context.Background() projectID := os.Getenv("CI_SQLC_PROJECT_ID") diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index aea72c5dbf..c43be02220 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -111,7 +111,8 @@ func TestReplay(t *testing.T) { } }, Enabled: func() bool { - return len(os.Getenv("SQLC_AUTH_TOKEN")) > 0 + return false + // return len(os.Getenv("SQLC_AUTH_TOKEN")) > 0 }, }, } From 1666b5d17db23dc90c93ae8c2e7ae792a1a0f99a Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 12:46:11 -0800 Subject: [PATCH 04/11] come on --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 92bdc31031..c087415018 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,8 +20,8 @@ jobs: include: - os: windows-latest cgo: '0' - - os: ubuntu-latest - cgo: '0' + # - os: ubuntu-latest + # cgo: '0' name: test ${{ matrix.os }} cgo=${{ matrix.cgo }} runs-on: ${{ matrix.os }} From 0de46b7294225c07016da79687eab5f4a0a97ea9 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 12:54:09 -0800 Subject: [PATCH 05/11] Let's try again --- internal/endtoend/endtoend_test.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index c43be02220..eff5aafda3 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -234,7 +234,15 @@ func cmpDirectory(t *testing.T, dir string, actual map[string]string) { t.Fatal(err) } - if !cmp.Equal(expected, actual, cmpopts.EquateEmpty()) { + opts := []cmp.Option{ + cmpopts.EquateEmpty(), + cmp.Transformer("LineEndings", func(in string) string { + // Replace Windows new lines with Unix newlines + return strings.Replace(in, "\r\n", "\n", -1) + }), + } + + if !cmp.Equal(expected, actual, opts...) { t.Errorf("%s contents differ", dir) for name, contents := range expected { name := name @@ -242,7 +250,7 @@ func cmpDirectory(t *testing.T, dir string, actual map[string]string) { t.Errorf("%s is empty", name) return } - if diff := cmp.Diff(contents, actual[name]); diff != "" { + if diff := cmp.Diff(contents, actual[name], opts...); diff != "" { t.Errorf("%s differed (-want +got):\n%s", name, diff) } } From 5bc92e7f693fa2164a48b3eac041db9f042ee3a9 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 13:04:25 -0800 Subject: [PATCH 06/11] Also update line endings for stderr --- internal/endtoend/endtoend_test.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index eff5aafda3..6285ec60aa 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -18,6 +18,13 @@ import ( "github.com/sqlc-dev/sqlc/internal/opts" ) +func lineEndings() cmp.Option { + return cmp.Transformer("LineEndings", func(in string) string { + // Replace Windows new lines with Unix newlines + return strings.Replace(in, "\r\n", "\n", -1) + }) +} + func TestExamples(t *testing.T) { t.Parallel() ctx := context.Background() @@ -181,7 +188,7 @@ func TestReplay(t *testing.T) { t.Fatalf("sqlc %s failed: %s", args.Command, stderr.String()) } - diff := cmp.Diff(strings.TrimSpace(expected), strings.TrimSpace(stderr.String())) + diff := cmp.Diff(strings.TrimSpace(expected), strings.TrimSpace(stderr.String()), lineEndings()) if diff != "" { t.Fatalf("stderr differed (-want +got):\n%s", diff) } @@ -236,10 +243,7 @@ func cmpDirectory(t *testing.T, dir string, actual map[string]string) { opts := []cmp.Option{ cmpopts.EquateEmpty(), - cmp.Transformer("LineEndings", func(in string) string { - // Replace Windows new lines with Unix newlines - return strings.Replace(in, "\r\n", "\n", -1) - }), + lineEndings(), } if !cmp.Equal(expected, actual, opts...) { From 31734199c96b13526809e0dd87c7d3c5c9288be3 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 13:33:28 -0800 Subject: [PATCH 07/11] stderr comparer --- internal/endtoend/endtoend_test.go | 13 ++++++++++++- .../testdata/syntax_errors/mysql/stderr.txt | 6 +++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index 6285ec60aa..c84860b50b 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -25,6 +25,13 @@ func lineEndings() cmp.Option { }) } +func stderrTransformer() cmp.Option { + return cmp.Transformer("Stderr", func(in string) string { + s := strings.Replace(in, "\r\n", "\n", -1) + return strings.Replace(s, "\\", "/", -1) + }) +} + func TestExamples(t *testing.T) { t.Parallel() ctx := context.Background() @@ -188,7 +195,11 @@ func TestReplay(t *testing.T) { t.Fatalf("sqlc %s failed: %s", args.Command, stderr.String()) } - diff := cmp.Diff(strings.TrimSpace(expected), strings.TrimSpace(stderr.String()), lineEndings()) + diff := cmp.Diff( + strings.TrimSpace(expected), + strings.TrimSpace(stderr.String()), + stderrTransformer(), + ) if diff != "" { t.Fatalf("stderr differed (-want +got):\n%s", diff) } diff --git a/internal/endtoend/testdata/syntax_errors/mysql/stderr.txt b/internal/endtoend/testdata/syntax_errors/mysql/stderr.txt index 9d20497a1e..f51b1e569f 100644 --- a/internal/endtoend/testdata/syntax_errors/mysql/stderr.txt +++ b/internal/endtoend/testdata/syntax_errors/mysql/stderr.txt @@ -1,4 +1,4 @@ # package querytest -query/from.sql:2:38: syntax error near "from where id = ?;" -query/select.sql:2:34: syntax error near "select id;" -query/typo.sql:2:8: syntax error near "selectt id, first_name from users;" +query\from.sql:2:38: syntax error near "from where id = ?;" +query\select.sql:2:34: syntax error near "select id;" +query\typo.sql:2:8: syntax error near "selectt id, first_name from users;" From 34cc691d3664139e2763feddc375eb477c114502 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 13:42:41 -0800 Subject: [PATCH 08/11] let's try this --- internal/endtoend/endtoend_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index c84860b50b..be2c70a683 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -27,7 +27,7 @@ func lineEndings() cmp.Option { func stderrTransformer() cmp.Option { return cmp.Transformer("Stderr", func(in string) string { - s := strings.Replace(in, "\r\n", "\n", -1) + s := strings.Replace(in, "\r", "", -1) return strings.Replace(s, "\\", "/", -1) }) } From 9d81df93743453f059463334a85da72c97fc9b10 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 14:01:58 -0800 Subject: [PATCH 09/11] Fix last test --- internal/endtoend/case_test.go | 1 + internal/endtoend/endtoend_test.go | 7 +++++++ .../testdata/process_plugin_sqlc_gen_test/exec.json | 5 +++-- internal/endtoend/testdata/syntax_errors/mysql/stderr.txt | 6 +++--- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/internal/endtoend/case_test.go b/internal/endtoend/case_test.go index 367b9dd158..50dcc57ec5 100644 --- a/internal/endtoend/case_test.go +++ b/internal/endtoend/case_test.go @@ -21,6 +21,7 @@ type Exec struct { Command string `json:"command"` Contexts []string `json:"contexts"` Process string `json:"process"` + OS []string `json:"os"` Env map[string]string `json:"env"` } diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index be2c70a683..c4e1d76b1b 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -6,6 +6,7 @@ import ( "os" osexec "os/exec" "path/filepath" + "runtime" "slices" "strings" "testing" @@ -168,6 +169,12 @@ func TestReplay(t *testing.T) { } } + if len(args.OS) > 0 { + if !slices.Contains(args.OS, runtime.GOOS) { + t.Skipf("unsupported os: %s", runtime.GOOS) + } + } + opts := cmd.Options{ Env: cmd.Env{ Debug: opts.DebugFromString(args.Env["SQLCDEBUG"]), diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_test/exec.json b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/exec.json index 7865c9ec17..1aa4920cb9 100644 --- a/internal/endtoend/testdata/process_plugin_sqlc_gen_test/exec.json +++ b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/exec.json @@ -1,3 +1,4 @@ { - "process": "sqlc-gen-test" -} \ No newline at end of file + "process": "sqlc-gen-test", + "os": ["linux", "darwin"] +} diff --git a/internal/endtoend/testdata/syntax_errors/mysql/stderr.txt b/internal/endtoend/testdata/syntax_errors/mysql/stderr.txt index f51b1e569f..9d20497a1e 100644 --- a/internal/endtoend/testdata/syntax_errors/mysql/stderr.txt +++ b/internal/endtoend/testdata/syntax_errors/mysql/stderr.txt @@ -1,4 +1,4 @@ # package querytest -query\from.sql:2:38: syntax error near "from where id = ?;" -query\select.sql:2:34: syntax error near "select id;" -query\typo.sql:2:8: syntax error near "selectt id, first_name from users;" +query/from.sql:2:38: syntax error near "from where id = ?;" +query/select.sql:2:34: syntax error near "select id;" +query/typo.sql:2:8: syntax error near "selectt id, first_name from users;" From 64b18c3d88790ba61e6924c690b13f058acf811f Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 14:14:22 -0800 Subject: [PATCH 10/11] Skip tests if WASM isn't enabled --- internal/endtoend/case_test.go | 1 + internal/endtoend/endtoend_test.go | 5 +++++ .../endtoend/testdata/wasm_plugin_sqlc_gen_greeter/exec.json | 3 +++ .../endtoend/testdata/wasm_plugin_sqlc_gen_test/exec.json | 3 +++ internal/ext/wasm/nowasm.go | 4 ++++ internal/ext/wasm/wasm.go | 4 ++++ 6 files changed, 20 insertions(+) create mode 100644 internal/endtoend/testdata/wasm_plugin_sqlc_gen_greeter/exec.json create mode 100644 internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/exec.json diff --git a/internal/endtoend/case_test.go b/internal/endtoend/case_test.go index 50dcc57ec5..208b3fb9fa 100644 --- a/internal/endtoend/case_test.go +++ b/internal/endtoend/case_test.go @@ -22,6 +22,7 @@ type Exec struct { Contexts []string `json:"contexts"` Process string `json:"process"` OS []string `json:"os"` + WASM bool `json:"wasm"` Env map[string]string `json:"env"` } diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index c4e1d76b1b..75954c44b8 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -16,6 +16,7 @@ import ( "github.com/sqlc-dev/sqlc/internal/cmd" "github.com/sqlc-dev/sqlc/internal/config" + "github.com/sqlc-dev/sqlc/internal/ext/wasm" "github.com/sqlc-dev/sqlc/internal/opts" ) @@ -169,6 +170,10 @@ func TestReplay(t *testing.T) { } } + if args.WASM && !wasm.Enabled() { + t.Skipf("wasm support not enabled") + } + if len(args.OS) > 0 { if !slices.Contains(args.OS, runtime.GOOS) { t.Skipf("unsupported os: %s", runtime.GOOS) diff --git a/internal/endtoend/testdata/wasm_plugin_sqlc_gen_greeter/exec.json b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_greeter/exec.json new file mode 100644 index 0000000000..efe8bbc9aa --- /dev/null +++ b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_greeter/exec.json @@ -0,0 +1,3 @@ +{ + "wasm": true +} diff --git a/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/exec.json b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/exec.json new file mode 100644 index 0000000000..efe8bbc9aa --- /dev/null +++ b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/exec.json @@ -0,0 +1,3 @@ +{ + "wasm": true +} diff --git a/internal/ext/wasm/nowasm.go b/internal/ext/wasm/nowasm.go index 419c6eefef..14af0b54a2 100644 --- a/internal/ext/wasm/nowasm.go +++ b/internal/ext/wasm/nowasm.go @@ -10,6 +10,10 @@ import ( "google.golang.org/grpc/status" ) +func Enabled() bool { + return false +} + func (r *Runner) Invoke(ctx context.Context, method string, args any, reply any, opts ...grpc.CallOption) error { return status.Error(codes.FailedPrecondition, "sqlc built without wasmtime support") } diff --git a/internal/ext/wasm/wasm.go b/internal/ext/wasm/wasm.go index d0a2d4c047..c096ec9844 100644 --- a/internal/ext/wasm/wasm.go +++ b/internal/ext/wasm/wasm.go @@ -31,6 +31,10 @@ import ( "github.com/sqlc-dev/sqlc/internal/plugin" ) +func Enabled() bool { + return true +} + // This version must be updated whenever the wasmtime-go dependency is updated const wasmtimeVersion = `v14.0.0` From 5af50461a8d981d4f9d11536bd6aed01d25f3ae3 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 5 Dec 2023 14:27:16 -0800 Subject: [PATCH 11/11] Skip a few more tests --- .github/workflows/ci.yml | 8 ++++---- internal/endtoend/ddl_test.go | 5 ++++- internal/endtoend/endtoend_test.go | 11 +++++++++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c087415018..4afd6d9887 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,10 +18,10 @@ jobs: exclude: - isMain: false include: - - os: windows-latest + - os: ubuntu-latest + cgo: '1' + - os: ubuntu-latest cgo: '0' - # - os: ubuntu-latest - # cgo: '0' name: test ${{ matrix.os }} cgo=${{ matrix.cgo }} runs-on: ${{ matrix.os }} @@ -50,7 +50,7 @@ jobs: CGO_ENABLED: ${{ matrix.cgo }} - name: test ./... - run: gotestsum --junitfile junit.xml -- -timeout 20m ./... + run: gotestsum --junitfile junit.xml -- --tags=examples -timeout 20m ./... env: CI_SQLC_PROJECT_ID: ${{ secrets.CI_SQLC_PROJECT_ID }} CI_SQLC_AUTH_TOKEN: ${{ secrets.CI_SQLC_AUTH_TOKEN }} diff --git a/internal/endtoend/ddl_test.go b/internal/endtoend/ddl_test.go index e00d58f521..71ea2052c9 100644 --- a/internal/endtoend/ddl_test.go +++ b/internal/endtoend/ddl_test.go @@ -5,6 +5,7 @@ import ( "fmt" "os" "path/filepath" + "runtime" "slices" "strings" "testing" @@ -19,7 +20,9 @@ import ( ) func TestValidSchema(t *testing.T) { - t.Skip("ignore") + if os.Getenv("CI") != "" && runtime.GOOS != "linux" { + t.Skipf("only run these tests in CI on linux: %s %s", os.Getenv("CI"), runtime.GOOS) + } ctx := context.Background() diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index 75954c44b8..2054baeee3 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -127,8 +127,15 @@ func TestReplay(t *testing.T) { } }, Enabled: func() bool { - return false - // return len(os.Getenv("SQLC_AUTH_TOKEN")) > 0 + // Return false if no auth token exists + if len(os.Getenv("SQLC_AUTH_TOKEN")) == 0 { + return false + } + // In CI, only run these tests from Linux + if os.Getenv("CI") != "" { + return runtime.GOOS == "linux" + } + return true }, }, }