From 686da14eaf125675be2a9fc354522faea95229bd Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Mon, 28 Aug 2023 17:24:15 -0700 Subject: [PATCH 1/7] feat(codegen): Allow plugins to access environment variables Currently untested, but environment variable access must be configured in sqlc.yaml. --- internal/cmd/generate.go | 2 ++ internal/config/config.go | 3 ++- internal/ext/process/gen.go | 5 +++++ internal/ext/wasm/wasm.go | 9 +++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/internal/cmd/generate.go b/internal/cmd/generate.go index b38e730986..40e1dcbcad 100644 --- a/internal/cmd/generate.go +++ b/internal/cmd/generate.go @@ -386,11 +386,13 @@ func codegen(ctx context.Context, combo config.CombinedSettings, sql outPair, re case plug.Process != nil: handler = &process.Runner{ Cmd: plug.Process.Cmd, + Env: plug.Env, } case plug.WASM != nil: handler = &wasm.Runner{ URL: plug.WASM.URL, SHA256: plug.WASM.SHA256, + Env: plug.Env, } default: return "", nil, fmt.Errorf("unsupported plugin type") diff --git a/internal/config/config.go b/internal/config/config.go index 1d3df66aae..6b3c665d99 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -79,7 +79,8 @@ type Cloud struct { } type Plugin struct { - Name string `json:"name" yaml:"name"` + Name string `json:"name" yaml:"name"` + Env []string `json:"env" yaml:"env"` Process *struct { Cmd string `json:"cmd" yaml:"cmd"` } `json:"process" yaml:"process"` diff --git a/internal/ext/process/gen.go b/internal/ext/process/gen.go index dc39a15fd8..7a48038444 100644 --- a/internal/ext/process/gen.go +++ b/internal/ext/process/gen.go @@ -5,6 +5,7 @@ import ( "context" "errors" "fmt" + "os" "os/exec" "google.golang.org/protobuf/proto" @@ -14,6 +15,7 @@ import ( type Runner struct { Cmd string + Env []string } // TODO: Update the gen func signature to take a ctx @@ -34,6 +36,9 @@ func (r Runner) Generate(ctx context.Context, req *plugin.CodeGenRequest) (*plug cmd.Env = []string{ fmt.Sprintf("SQLC_VERSION=%s", req.SqlcVersion), } + for _, key := range r.Env { + cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", key, os.Getenv(key))) + } out, err := cmd.Output() if err != nil { diff --git a/internal/ext/wasm/wasm.go b/internal/ext/wasm/wasm.go index 9b10c08d52..e643ea7a3f 100644 --- a/internal/ext/wasm/wasm.go +++ b/internal/ext/wasm/wasm.go @@ -47,6 +47,7 @@ func cacheDir() (string, error) { type Runner struct { URL string SHA256 string + Env []string } var flight singleflight.Group @@ -255,6 +256,14 @@ func (r *Runner) Generate(ctx context.Context, req *plugin.CodeGenRequest) (*plu wasiConfig.SetStdoutFile(stdoutPath) wasiConfig.SetStderrFile(stderrPath) + keys := []string{"SQLC_VERSION"} + vals := []string{req.SqlcVersion} + for _, key := range r.Env { + keys = append(keys, key) + vals = append(vals, os.Getenv(key)) + } + wasiConfig.SetEnv(keys, vals) + store := wasmtime.NewStore(engine) store.SetWasi(wasiConfig) From c1ce837b92b1e712b8c7c67b89358394ae97dfb7 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 29 Aug 2023 11:25:28 -0700 Subject: [PATCH 2/7] Add tests for process-based plugins --- cmd/sqlc-gen-env/main.go | 45 +++++++++++++++++++ internal/endtoend/endtoend_test.go | 4 ++ .../process_plugin_sqlc_gen_env/exec.json | 3 ++ .../process_plugin_sqlc_gen_env/gen/env.json | 1 + .../process_plugin_sqlc_gen_env/query.sql | 19 ++++++++ .../process_plugin_sqlc_gen_env/schema.sql | 5 +++ .../process_plugin_sqlc_gen_env/sqlc.json | 25 +++++++++++ scripts/regenerate/main.go | 1 + 8 files changed, 103 insertions(+) create mode 100644 cmd/sqlc-gen-env/main.go create mode 100644 internal/endtoend/testdata/process_plugin_sqlc_gen_env/exec.json create mode 100644 internal/endtoend/testdata/process_plugin_sqlc_gen_env/gen/env.json create mode 100644 internal/endtoend/testdata/process_plugin_sqlc_gen_env/query.sql create mode 100644 internal/endtoend/testdata/process_plugin_sqlc_gen_env/schema.sql create mode 100644 internal/endtoend/testdata/process_plugin_sqlc_gen_env/sqlc.json diff --git a/cmd/sqlc-gen-env/main.go b/cmd/sqlc-gen-env/main.go new file mode 100644 index 0000000000..9545ec4b6e --- /dev/null +++ b/cmd/sqlc-gen-env/main.go @@ -0,0 +1,45 @@ +package main + +import ( + "bufio" + "encoding/json" + "fmt" + "os" + + "github.com/sqlc-dev/sqlc/internal/plugin" +) + +func main() { + if err := run(); err != nil { + fmt.Fprintf(os.Stderr, "error generating env: %s", err) + os.Exit(2) + } +} + +func run() error { + env := os.Environ() + blob, err := json.Marshal(env) + if err != nil { + return err + } + resp := &plugin.CodeGenResponse{ + Files: []*plugin.File{ + { + Name: "env.json", + Contents: append(blob, '\n'), + }, + }, + } + respBlob, err := resp.MarshalVT() + if err != nil { + return err + } + w := bufio.NewWriter(os.Stdout) + if _, err := w.Write(respBlob); err != nil { + return err + } + if err := w.Flush(); err != nil { + return err + } + return nil +} diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index 5df39c44e9..e91e9f9c56 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -75,6 +75,10 @@ func BenchmarkExamples(b *testing.B) { } func TestReplay(t *testing.T) { + // Ensure that this environment variable is always set to true when running + // end-to-end tests + os.Setenv("SQLC_DUMMY_VALUE", "true") + t.Parallel() ctx := context.Background() var dirs []string diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/exec.json b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/exec.json new file mode 100644 index 0000000000..b91ae4b564 --- /dev/null +++ b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/exec.json @@ -0,0 +1,3 @@ +{ + "process": "sqlc-gen-env" +} \ No newline at end of file diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/gen/env.json b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/gen/env.json new file mode 100644 index 0000000000..6c2d3ce36e --- /dev/null +++ b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/gen/env.json @@ -0,0 +1 @@ +["SQLC_VERSION=v1.20.0","SQLC_DUMMY_VALUE=true"] diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/query.sql b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/query.sql new file mode 100644 index 0000000000..75e38b2caf --- /dev/null +++ b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/query.sql @@ -0,0 +1,19 @@ +-- name: GetAuthor :one +SELECT * FROM authors +WHERE id = $1 LIMIT 1; + +-- name: ListAuthors :many +SELECT * FROM authors +ORDER BY name; + +-- name: CreateAuthor :one +INSERT INTO authors ( + name, bio +) VALUES ( + $1, $2 +) +RETURNING *; + +-- name: DeleteAuthor :exec +DELETE FROM authors +WHERE id = $1; diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/schema.sql b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/schema.sql new file mode 100644 index 0000000000..b4fad78497 --- /dev/null +++ b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE authors ( + id BIGSERIAL PRIMARY KEY, + name text NOT NULL, + bio text +); diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/sqlc.json b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/sqlc.json new file mode 100644 index 0000000000..56d5e5b482 --- /dev/null +++ b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/sqlc.json @@ -0,0 +1,25 @@ +{ + "version": "2", + "sql": [ + { + "schema": "schema.sql", + "queries": "query.sql", + "engine": "postgresql", + "codegen": [ + { + "out": "gen", + "plugin": "env" + } + ] + } + ], + "plugins": [ + { + "name": "env", + "env": ["SQLC_DUMMY_VALUE"], + "process": { + "cmd": "sqlc-gen-env" + } + } + ] +} diff --git a/scripts/regenerate/main.go b/scripts/regenerate/main.go index 3bb2ba3e66..b2bcb2089f 100644 --- a/scripts/regenerate/main.go +++ b/scripts/regenerate/main.go @@ -56,6 +56,7 @@ func regenerate(dir string) error { } cmd := exec.Command("sqlc-dev", "generate") + cmd.Env = append(cmd.Env, "SQLC_DUMMY_VALUE=true") cmd.Dir = cwd out, failed := cmd.CombinedOutput() if failed != nil && !expectFailure { From 25f9ce184c2d320ef9663db2756f43e24a20ecfb Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 29 Aug 2023 12:26:53 -0700 Subject: [PATCH 3/7] chore: Move sqlc-gen-env to a different repo --- .github/workflows/ci.yml | 5 ++++- cmd/sqlc-gen-env/main.go | 45 ---------------------------------------- 2 files changed, 4 insertions(+), 46 deletions(-) delete mode 100644 cmd/sqlc-gen-env/main.go diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a163dd023a..462cae1f45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,9 +55,12 @@ jobs: with: go-version: '1.21.0' - - name: gotestsum + - name: install gotestsum run: go install gotest.tools/gotestsum@latest + - name: install sqlc-gen-test + run: go install github.com/sqlc-dev/sqlc-gen-test@main + - name: install ./... run: go install ./... diff --git a/cmd/sqlc-gen-env/main.go b/cmd/sqlc-gen-env/main.go deleted file mode 100644 index 9545ec4b6e..0000000000 --- a/cmd/sqlc-gen-env/main.go +++ /dev/null @@ -1,45 +0,0 @@ -package main - -import ( - "bufio" - "encoding/json" - "fmt" - "os" - - "github.com/sqlc-dev/sqlc/internal/plugin" -) - -func main() { - if err := run(); err != nil { - fmt.Fprintf(os.Stderr, "error generating env: %s", err) - os.Exit(2) - } -} - -func run() error { - env := os.Environ() - blob, err := json.Marshal(env) - if err != nil { - return err - } - resp := &plugin.CodeGenResponse{ - Files: []*plugin.File{ - { - Name: "env.json", - Contents: append(blob, '\n'), - }, - }, - } - respBlob, err := resp.MarshalVT() - if err != nil { - return err - } - w := bufio.NewWriter(os.Stdout) - if _, err := w.Write(respBlob); err != nil { - return err - } - if err := w.Flush(); err != nil { - return err - } - return nil -} From e926e9de4e654b82c6748f5656f5e425471c3b2c Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 29 Aug 2023 12:32:02 -0700 Subject: [PATCH 4/7] change test out --- .../endtoend/testdata/process_plugin_sqlc_gen_env/exec.json | 3 --- .../testdata/process_plugin_sqlc_gen_env/gen/env.json | 1 - .../testdata/process_plugin_sqlc_gen_test/exec.json | 3 +++ .../testdata/process_plugin_sqlc_gen_test/gen/env.json | 6 ++++++ .../query.sql | 0 .../schema.sql | 0 .../sqlc.json | 6 +++--- 7 files changed, 12 insertions(+), 7 deletions(-) delete mode 100644 internal/endtoend/testdata/process_plugin_sqlc_gen_env/exec.json delete mode 100644 internal/endtoend/testdata/process_plugin_sqlc_gen_env/gen/env.json create mode 100644 internal/endtoend/testdata/process_plugin_sqlc_gen_test/exec.json create mode 100644 internal/endtoend/testdata/process_plugin_sqlc_gen_test/gen/env.json rename internal/endtoend/testdata/{process_plugin_sqlc_gen_env => process_plugin_sqlc_gen_test}/query.sql (100%) rename internal/endtoend/testdata/{process_plugin_sqlc_gen_env => process_plugin_sqlc_gen_test}/schema.sql (100%) rename internal/endtoend/testdata/{process_plugin_sqlc_gen_env => process_plugin_sqlc_gen_test}/sqlc.json (79%) diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/exec.json b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/exec.json deleted file mode 100644 index b91ae4b564..0000000000 --- a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/exec.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "process": "sqlc-gen-env" -} \ No newline at end of file diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/gen/env.json b/internal/endtoend/testdata/process_plugin_sqlc_gen_env/gen/env.json deleted file mode 100644 index 6c2d3ce36e..0000000000 --- a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/gen/env.json +++ /dev/null @@ -1 +0,0 @@ -["SQLC_VERSION=v1.20.0","SQLC_DUMMY_VALUE=true"] diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_test/exec.json b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/exec.json new file mode 100644 index 0000000000..7865c9ec17 --- /dev/null +++ b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/exec.json @@ -0,0 +1,3 @@ +{ + "process": "sqlc-gen-test" +} \ No newline at end of file diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_test/gen/env.json b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/gen/env.json new file mode 100644 index 0000000000..f8332e7532 --- /dev/null +++ b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/gen/env.json @@ -0,0 +1,6 @@ +{ + "env": [ + "SQLC_VERSION=v1.20.0", + "SQLC_DUMMY_VALUE=true" + ] +} diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/query.sql b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/query.sql similarity index 100% rename from internal/endtoend/testdata/process_plugin_sqlc_gen_env/query.sql rename to internal/endtoend/testdata/process_plugin_sqlc_gen_test/query.sql diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/schema.sql b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/schema.sql similarity index 100% rename from internal/endtoend/testdata/process_plugin_sqlc_gen_env/schema.sql rename to internal/endtoend/testdata/process_plugin_sqlc_gen_test/schema.sql diff --git a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/sqlc.json b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/sqlc.json similarity index 79% rename from internal/endtoend/testdata/process_plugin_sqlc_gen_env/sqlc.json rename to internal/endtoend/testdata/process_plugin_sqlc_gen_test/sqlc.json index 56d5e5b482..a2b0e8b931 100644 --- a/internal/endtoend/testdata/process_plugin_sqlc_gen_env/sqlc.json +++ b/internal/endtoend/testdata/process_plugin_sqlc_gen_test/sqlc.json @@ -8,17 +8,17 @@ "codegen": [ { "out": "gen", - "plugin": "env" + "plugin": "test" } ] } ], "plugins": [ { - "name": "env", + "name": "test", "env": ["SQLC_DUMMY_VALUE"], "process": { - "cmd": "sqlc-gen-env" + "cmd": "sqlc-gen-test" } } ] From fb88b7f446da1cf4869871fcfc29924aee73d0b0 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 29 Aug 2023 12:47:17 -0700 Subject: [PATCH 5/7] Test both WASM and process-based --- .github/workflows/ci.yml | 2 +- .../wasm_plugin_sqlc_gen_test/gen/env.json | 6 +++++ .../wasm_plugin_sqlc_gen_test/query.sql | 19 ++++++++++++++ .../wasm_plugin_sqlc_gen_test/schema.sql | 5 ++++ .../wasm_plugin_sqlc_gen_test/sqlc.json | 26 +++++++++++++++++++ 5 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/gen/env.json create mode 100644 internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/query.sql create mode 100644 internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/schema.sql create mode 100644 internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/sqlc.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 462cae1f45..e11ffbd03b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,7 +59,7 @@ jobs: run: go install gotest.tools/gotestsum@latest - name: install sqlc-gen-test - run: go install github.com/sqlc-dev/sqlc-gen-test@main + run: go install github.com/sqlc-dev/sqlc-gen-test@v0.1.0 - name: install ./... run: go install ./... diff --git a/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/gen/env.json b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/gen/env.json new file mode 100644 index 0000000000..f8332e7532 --- /dev/null +++ b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/gen/env.json @@ -0,0 +1,6 @@ +{ + "env": [ + "SQLC_VERSION=v1.20.0", + "SQLC_DUMMY_VALUE=true" + ] +} diff --git a/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/query.sql b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/query.sql new file mode 100644 index 0000000000..75e38b2caf --- /dev/null +++ b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/query.sql @@ -0,0 +1,19 @@ +-- name: GetAuthor :one +SELECT * FROM authors +WHERE id = $1 LIMIT 1; + +-- name: ListAuthors :many +SELECT * FROM authors +ORDER BY name; + +-- name: CreateAuthor :one +INSERT INTO authors ( + name, bio +) VALUES ( + $1, $2 +) +RETURNING *; + +-- name: DeleteAuthor :exec +DELETE FROM authors +WHERE id = $1; diff --git a/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/schema.sql b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/schema.sql new file mode 100644 index 0000000000..b4fad78497 --- /dev/null +++ b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE authors ( + id BIGSERIAL PRIMARY KEY, + name text NOT NULL, + bio text +); diff --git a/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/sqlc.json b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/sqlc.json new file mode 100644 index 0000000000..38e6773a25 --- /dev/null +++ b/internal/endtoend/testdata/wasm_plugin_sqlc_gen_test/sqlc.json @@ -0,0 +1,26 @@ +{ + "version": "2", + "sql": [ + { + "schema": "schema.sql", + "queries": "query.sql", + "engine": "postgresql", + "codegen": [ + { + "out": "gen", + "plugin": "test" + } + ] + } + ], + "plugins": [ + { + "name": "test", + "env": ["SQLC_DUMMY_VALUE"], + "wasm": { + "url": "https://github.com/sqlc-dev/sqlc-gen-test/releases/download/v0.1.0/sqlc-gen-test.wasm", + "sha256": "138220eae508d4b65a5a8cea555edd155eb2290daf576b7a8b96949acfeb3790" + } + } + ] +} \ No newline at end of file From 12e7cd943dbbeeec1210374278e283df59a0004b Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 29 Aug 2023 13:05:52 -0700 Subject: [PATCH 6/7] more docs --- docs/guides/plugins.md | 110 +++++++++++++++++++-------------------- docs/reference/config.md | 4 ++ 2 files changed, 59 insertions(+), 55 deletions(-) diff --git a/docs/guides/plugins.md b/docs/guides/plugins.md index 8845585c86..3dd1bb2239 100644 --- a/docs/guides/plugins.md +++ b/docs/guides/plugins.md @@ -15,32 +15,20 @@ top-level `plugins` map. The `options` are serialized to a string and passed on to the plugin itself. -```json -{ - "version": "2", - "plugins": [ - { - "name": "greeter", - "wasm": { - "url": "https://github.com/sqlc-dev/sqlc-gen-greeter/releases/download/v0.1.0/sqlc-gen-greeter.wasm", - "sha256": "afc486dac2068d741d7a4110146559d12a013fd0286f42a2fc7dcd802424ad07" - } - } - ], - "sql": [ - { - "schema": "schema.sql", - "queries": "query.sql", - "engine": "postgresql", - "codegen": [ - { - "out": "gen", - "plugin": "greeter" - } - ] - } - ] -} +```yaml +version: '2' +plugins: +- name: greeter + wasm: + url: https://github.com/sqlc-dev/sqlc-gen-greeter/releases/download/v0.1.0/sqlc-gen-greeter.wasm + sha256: afc486dac2068d741d7a4110146559d12a013fd0286f42a2fc7dcd802424ad07 +sql: +- schema: schema.sql + queries: query.sql + engine: postgresql + codegen: + - out: gen + plugin: greeter ``` For a complete working example see the following files: @@ -59,35 +47,22 @@ the new files. The `plugin` key must reference a plugin defined in the top-level `plugins` map. The `options` are serialized to a string and passed on to the plugin itself. -```json -{ - "version": "2", - "plugins": [ - { - "name": "jsonb", - "process": { - "cmd": "sqlc-gen-json" - } - } - ], - "sql": [ - { - "schema": "schema.sql", - "queries": "query.sql", - "engine": "postgresql", - "codegen": [ - { - "out": "gen", - "plugin": "jsonb", - "options": { - "indent": " ", - "filename": "codegen.json" - } - } - ] - } - ] -} +```yaml +version: '2' +plugins: +- name: jsonb + process: + cmd: sqlc-gen-json +sql: +- schema: schema.sql + queries: query.sql + engine: postgresql + codegen: + - out: gen + plugin: jsonb + options: + indent: " " + filename: codegen.json ``` For a complete working example see the following files: @@ -95,3 +70,28 @@ For a complete working example see the following files: - A process-based plugin that serializes the CodeGenRequest to JSON - [process_plugin_sqlc_gen_json](https://github.com/sqlc-dev/sqlc/tree/main/internal/endtoend/testdata/process_plugin_sqlc_gen_json) - An example project showing how to use a process-based plugin + +## Environment variables + +By default, plugins do not inherit access to environment variables. Instead, +access can be configured on a per-variable basis. For example, if your plugin +needs the `PATH` environment variable, add the `PATH` to the `env` option in the +`plugins` collection. + +```yaml +version: '2' +sql: +- schema: schema.sql + queries: query.sql + engine: postgresql + codegen: + - out: gen + plugin: test +plugins: +- name: test + env: + - PATH + wasm: + url: https://github.com/sqlc-dev/sqlc-gen-test/releases/download/v0.1.0/sqlc-gen-test.wasm + sha256: 138220eae508d4b65a5a8cea555edd155eb2290daf576b7a8b96949acfeb3790 +``` \ No newline at end of file diff --git a/docs/reference/config.md b/docs/reference/config.md index 51c6e6488a..a9e0c40ed3 100644 --- a/docs/reference/config.md +++ b/docs/reference/config.md @@ -316,6 +316,8 @@ Each mapping in the `plugins` collection has the following keys: - `name`: - The name of this plugin. Required +- `env` + - A list of environment variables to pass to the plugin. By default, no environment variables are passed. - `process`: A mapping with a single `cmd` key - `cmd`: - The executable to call when using this plugin @@ -333,6 +335,8 @@ plugins: url: "https://github.com/sqlc-dev/sqlc-gen-python/releases/download/v0.16.0-alpha/sqlc-gen-python.wasm" sha256: "428476c7408fd4c032da4ec74e8a7344f4fa75e0f98a5a3302f238283b9b95f2" - name: "js" + env: + - PATH process: cmd: "sqlc-gen-json" ``` From d4e5fde8abce20201bfe2956385debe1fec7250b Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 29 Aug 2023 14:22:58 -0700 Subject: [PATCH 7/7] Add SQLC_VERSION to docs --- docs/guides/plugins.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/guides/plugins.md b/docs/guides/plugins.md index 3dd1bb2239..139a068dde 100644 --- a/docs/guides/plugins.md +++ b/docs/guides/plugins.md @@ -94,4 +94,7 @@ plugins: wasm: url: https://github.com/sqlc-dev/sqlc-gen-test/releases/download/v0.1.0/sqlc-gen-test.wasm sha256: 138220eae508d4b65a5a8cea555edd155eb2290daf576b7a8b96949acfeb3790 -``` \ No newline at end of file +``` + +The `SQLC_VERSION` environment variable will always be included in the +environment, set to the version of the `sqlc` executable. \ No newline at end of file