diff --git a/.gitignore b/.gitignore index a9cc4be0e..79d37b78b 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,8 @@ go.work.sum # Build output directory /dist/ +completions + # worktrees .worktrees/ diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 16db2eac0..9df5b5bd8 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -1,5 +1,10 @@ version: 2 +before: + hooks: + - go mod tidy + - mise run completions + builds: - main: ./cmd/entire binary: entire @@ -33,6 +38,22 @@ archives: - formats: - tar.gz name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}" + files: + - src: completions/* + info: + owner: root + group: root + mtime: "{{ .CommitDate }}" + - src: LICENSE + info: + owner: root + group: root + mtime: "{{ .CommitDate }}" + - src: README.md + info: + owner: root + group: root + mtime: "{{ .CommitDate }}" checksum: name_template: "checksums.txt" @@ -54,9 +75,47 @@ homebrew_casks: directory: Casks homepage: "https://github.com/entireio/cli" description: "CLI for Entire" + custom_block: | + module GitHubHelper + def self.token + require "utils/github" + + # Prefer environment variable if available + github_token = ENV["HOMEBREW_GITHUB_API_TOKEN"] + github_token ||= GitHub::API.credentials + raise "Failed to retrieve github api token" if github_token.nil? || github_token.empty? + + github_token + end + + def self.release_asset_url(tag, name) + require "json" + require "net/http" + require "uri" + + resp = Net::HTTP.get( + URI.parse("https://api.github.com/repos/entireio/cli/releases/tags/#{tag}"), + { + "Accept" => "application/vnd.github+json", + "Authorization" => "Bearer #{token}", + "X-GitHub-Api-Version" => "2022-11-28" + } + ) + + release = JSON.parse(resp) + release["assets"].find { |asset| asset["name"] == name }["url"] + end + end + + url: + template: '#{GitHubHelper.release_asset_url("{{.Tag}}", "{{.ArtifactName}}")}' + headers: + - "Accept: application/octet-stream" + - "Authorization: Bearer #{GitHubHelper.token}" + - "X-GitHub-Api-Version: 2022-11-28" binaries: - entire completions: - bash: bash - zsh: zsh - fish: fish + bash: "completions/entire.bash" + zsh: "completions/entire.zsh" + fish: "completions/entire.fish" diff --git a/mise.toml b/mise.toml index 9041f9356..47033e993 100644 --- a/mise.toml +++ b/mise.toml @@ -42,3 +42,14 @@ run = "goreleaser build --snapshot --clean" [tasks."lint:gomod"] description = "Check go.mod tidiness" run = "go mod tidy && git diff --exit-code go.mod go.sum" + +[tasks."completions"] +description = "generate entire shell completions" +quiet = true +run = """ +rm -rf completions +mkdir completions +for sh in bash zsh fish; do + go run ./cmd/entire/main.go completion "$sh" >"completions/entire.$sh" +done +""" \ No newline at end of file