From af019b44aa32fe4028ae532a0e1acd1ddc95905a Mon Sep 17 00:00:00 2001 From: ivanauth Date: Fri, 22 May 2026 11:54:17 -0400 Subject: [PATCH 1/3] feat: package shell completions into DEB, RPM, and APK --- .gitignore | 1 + .goreleaser.yml | 17 +++++++++++++++++ magefiles/gen.go | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/.gitignore b/.gitignore index 2ef25bdf..e2e0be7e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ dist/ temp/ docs/merged.md +completions/ # Local-only files go.work diff --git a/.goreleaser.yml b/.goreleaser.yml index 3976f0e8..23a804ee 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,5 +1,8 @@ --- version: 2 +before: + hooks: + - "go run mage.go gen:completions" builds: - id: "linux-amd64-gnu" goos: ["linux"] @@ -108,6 +111,19 @@ nfpms: epoch: &epoch "0" ids: ["linux-amd64-gnu", "linux-arm64-gnu"] formats: ["deb", "rpm"] + contents: &nfpm_contents + - src: "./completions/zed.bash" + dst: "/usr/share/bash-completion/completions/zed" + file_info: + mode: 0644 + - src: "./completions/zed.fish" + dst: "/usr/share/fish/vendor_completions.d/zed.fish" + file_info: + mode: 0644 + - src: "./completions/zed.zsh" + dst: "/usr/share/zsh/site-functions/_zed" + file_info: + mode: 0644 - id: "musl" vendor: *vendor homepage: *homepage @@ -117,6 +133,7 @@ nfpms: epoch: *epoch ids: ["linux-amd64-musl", "linux-arm64-musl"] formats: ["apk"] + contents: *nfpm_contents furies: - account: "authzed" diff --git a/magefiles/gen.go b/magefiles/gen.go index 477c6911..331adfe0 100644 --- a/magefiles/gen.go +++ b/magefiles/gen.go @@ -4,11 +4,14 @@ package main import ( + "io" "os" + "path/filepath" "github.com/jzelinskie/cobrautil/v2/cobrazerolog" "github.com/magefile/mage/mg" "github.com/magefile/mage/sh" + "github.com/spf13/cobra" "github.com/authzed/zed/internal/cmd" ) @@ -47,3 +50,39 @@ func (g Gen) DocsForPublish() error { return sh.RunV("bash", "-c", "cat docs/getting-started.md <(echo -e '\\n') docs/zed.md > docs/merged.md") } + +// Completions Generate shell completion scripts for bash, zsh, and fish +func (g Gen) Completions() error { + targetDir := "completions" + + if err := os.MkdirAll(targetDir, 0o755); err != nil { + return err + } + + rootCmd := cmd.InitialiseRootCmd(cobrazerolog.New()) + + generators := []struct { + shell string + generate func(*cobra.Command, io.Writer) error + }{ + {"bash", func(c *cobra.Command, w io.Writer) error { return c.GenBashCompletionV2(w, true) }}, + {"zsh", func(c *cobra.Command, w io.Writer) error { return c.GenZshCompletion(w) }}, + {"fish", func(c *cobra.Command, w io.Writer) error { return c.GenFishCompletion(w, true) }}, + } + + for _, gen := range generators { + path := filepath.Join(targetDir, "zed."+gen.shell) + f, err := os.Create(path) + if err != nil { + return err + } + if err := gen.generate(rootCmd, f); err != nil { + f.Close() + return err + } + if err := f.Close(); err != nil { + return err + } + } + return nil +} From 573285107a6c1c3e5ae9a95302461543cf64f079 Mon Sep 17 00:00:00 2001 From: ivanauth Date: Tue, 26 May 2026 11:51:04 -0400 Subject: [PATCH 2/3] refactor: generate completions via zed completion in goreleaser hook --- .goreleaser.yml | 4 +++- magefiles/gen.go | 39 --------------------------------------- 2 files changed, 3 insertions(+), 40 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 23a804ee..0699e4b8 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -2,7 +2,9 @@ version: 2 before: hooks: - - "go run mage.go gen:completions" + - sh -c "mkdir -p completions && go run ./cmd/zed completion bash > ./completions/zed.bash" + - sh -c "go run ./cmd/zed completion zsh > ./completions/zed.zsh" + - sh -c "go run ./cmd/zed completion fish > ./completions/zed.fish" builds: - id: "linux-amd64-gnu" goos: ["linux"] diff --git a/magefiles/gen.go b/magefiles/gen.go index 331adfe0..477c6911 100644 --- a/magefiles/gen.go +++ b/magefiles/gen.go @@ -4,14 +4,11 @@ package main import ( - "io" "os" - "path/filepath" "github.com/jzelinskie/cobrautil/v2/cobrazerolog" "github.com/magefile/mage/mg" "github.com/magefile/mage/sh" - "github.com/spf13/cobra" "github.com/authzed/zed/internal/cmd" ) @@ -50,39 +47,3 @@ func (g Gen) DocsForPublish() error { return sh.RunV("bash", "-c", "cat docs/getting-started.md <(echo -e '\\n') docs/zed.md > docs/merged.md") } - -// Completions Generate shell completion scripts for bash, zsh, and fish -func (g Gen) Completions() error { - targetDir := "completions" - - if err := os.MkdirAll(targetDir, 0o755); err != nil { - return err - } - - rootCmd := cmd.InitialiseRootCmd(cobrazerolog.New()) - - generators := []struct { - shell string - generate func(*cobra.Command, io.Writer) error - }{ - {"bash", func(c *cobra.Command, w io.Writer) error { return c.GenBashCompletionV2(w, true) }}, - {"zsh", func(c *cobra.Command, w io.Writer) error { return c.GenZshCompletion(w) }}, - {"fish", func(c *cobra.Command, w io.Writer) error { return c.GenFishCompletion(w, true) }}, - } - - for _, gen := range generators { - path := filepath.Join(targetDir, "zed."+gen.shell) - f, err := os.Create(path) - if err != nil { - return err - } - if err := gen.generate(rootCmd, f); err != nil { - f.Close() - return err - } - if err := f.Close(); err != nil { - return err - } - } - return nil -} From 7d26f0a3d5f0df87eb2e3b4fd76e7e99c5af2b07 Mon Sep 17 00:00:00 2001 From: ivanauth Date: Tue, 26 May 2026 15:07:40 -0400 Subject: [PATCH 3/3] fix: quote shell-completion hooks for yamllint quoted-strings rule --- .goreleaser.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 0699e4b8..c09418cc 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -2,9 +2,9 @@ version: 2 before: hooks: - - sh -c "mkdir -p completions && go run ./cmd/zed completion bash > ./completions/zed.bash" - - sh -c "go run ./cmd/zed completion zsh > ./completions/zed.zsh" - - sh -c "go run ./cmd/zed completion fish > ./completions/zed.fish" + - 'sh -c "mkdir -p completions && go run ./cmd/zed completion bash > ./completions/zed.bash"' + - 'sh -c "go run ./cmd/zed completion zsh > ./completions/zed.zsh"' + - 'sh -c "go run ./cmd/zed completion fish > ./completions/zed.fish"' builds: - id: "linux-amd64-gnu" goos: ["linux"]