Change summary
  .github/workflows/nightly.yml | 12 ++++
.github/workflows/release.yml | 46 +++++-------------
.gitignore                    |  3 +
.goreleaser.yml               | 90 +++++++++++++++++++++++++++++-------
4 files changed, 101 insertions(+), 50 deletions(-)
  Detailed changes
  
  
    
    @@ -0,0 +1,12 @@
+name: nightly
+
+on:
+  schedule:
+    - cron: "0 0 * * *" # every day at midnight
+  workflow_dispatch: # allows manual triggering
+
+jobs:
+  nightly:
+    uses: charmbracelet/meta/.github/workflows/nightly.yml@main
+    secrets:
+      goreleaser_key: ${{ secrets.GORELEASER_KEY }}
  
  
  
    
    @@ -1,40 +1,22 @@
-name: release
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
+
+name: goreleaser
 
 on:
-  workflow_dispatch:
   push:
     tags:
-      - "*"
-
-concurrency: ${{ github.workflow }}-${{ github.ref }}
+      - v*.*.*
 
-permissions:
-  contents: write
-  packages: write
+concurrency:
+  group: goreleaser
+  cancel-in-progress: true
 
 jobs:
   goreleaser:
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v3
-        with:
-          fetch-depth: 0
-
-      - run: git fetch --force --tags
-
-      - uses: actions/setup-go@v5
-        with:
-          go-version: ">=1.23.2"
-          cache: true
-          cache-dependency-path: go.sum
-
-      - run: go mod download
-
-      - uses: goreleaser/goreleaser-action@v6
-        with:
-          distribution: goreleaser
-          version: latest
-          args: release --clean
-        env:
-          GITHUB_TOKEN: ${{ secrets.HOMEBREW_GITHUB_TOKEN }}
-          AUR_KEY: ${{ secrets.AUR_KEY }}
+    uses: charmbracelet/meta/.github/workflows/goreleaser.yml@main
+    secrets:
+      gh_pat: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
+      goreleaser_key: ${{ secrets.GORELEASER_KEY }}
+      fury_token: ${{ secrets.FURY_TOKEN }}
+      nfpm_gpg_key: ${{ secrets.NFPM_GPG_KEY }}
+      nfpm_passphrase: ${{ secrets.NFPM_PASSPHRASE }}
  
  
  
    
    @@ -44,3 +44,6 @@ Thumbs.db
 .crush/
 
 crush
+
+manpages/
+completions/
  
  
  
    
    @@ -4,6 +4,10 @@ version: 2
 
 project_name: crush
 
+includes:
+  - from_url:
+      url: charmbracelet/meta/main/notarize.yaml
+
 metadata:
   mod_timestamp: "{{ .CommitTimestamp }}"
   license: "MIT"
@@ -12,6 +16,29 @@ metadata:
   maintainers:
     - "kujtimiihoxha <kujtim@charm.sh>"
 
+nightly:
+  publish_release: true
+  keep_single_release: true
+  version_template: "{{ incminor .Version }}-nightly"
+
+snapshot:
+  version_template: "0.0.0-{{ .Timestamp }}"
+
+before:
+  hooks:
+    - go mod tidy
+    - rm -rf completions
+    - mkdir completions
+    - rm -rf manpages
+    - mkdir manpages
+    - sh -c 'go run . completion bash >./completions/crush.bash'
+    - sh -c 'go run . completion zsh >./completions/crush.zsh'
+    - sh -c 'go run . completion fish >./completions/crush.fish'
+    - sh -c 'go run . man | gzip -c >./manpages/crush.1.gz'
+
+gomod:
+  proxy: true
+
 builds:
   - env:
       - CGO_ENABLED=0
@@ -24,19 +51,22 @@ builds:
       - arm64
     ldflags:
       - -s -w -X github.com/charmbracelet/crush/internal/version.Version={{.Version}}
-    main: ./main.go
 
 archives:
-  - formats: [tar.gz]
-    name_template: >-
-      crush-
-      {{- if eq .Os "darwin" }}mac-
-      {{- else if eq .Os "windows" }}windows-
-      {{- else if eq .Os "linux" }}linux-{{end}}
+  - name_template: >-
+      crush_
+      {{- .Version }}_
+      {{- title .Os }}_
       {{- if eq .Arch "amd64" }}x86_64
-      {{- else if eq .Arch "#86" }}i386
+      {{- else if eq .Arch "386" }}i386
       {{- else }}{{ .Arch }}{{ end }}
-      {{- if .Arm }}v{{ .Arm }}{{ end }}
+      {{- with .Arm}}v{{ . }}{{ end }}
+    wrap_in_directory: true
+    files:
+      - README*
+      - LICENSE*
+      - manpages/*
+      - completions/*
     format_overrides:
       - goos: windows
         formats: [zip]
@@ -44,18 +74,36 @@ archives:
 checksum:
   name_template: "checksums.txt"
 
-snapshot:
-  version_template: "0.0.0-{{ .Timestamp }}"
-
 aurs:
   - private_key: "{{ .Env.AUR_KEY }}"
-    git_url: "ssh://aur@aur.archlinux.org/charmbracelet-bin.git"
+    git_url: "ssh://aur@aur.archlinux.org/crush-bin.git"
     provides:
       - crush
     conflicts:
       - crush
     package: |-
-      install -Dm755 ./crush "${pkgdir}/usr/bin/crush"
+      cd "${srcdir}/crush_${pkgver}_Linux_${CARCH}"
+      # bin
+      install -Dm755 "./crush" "${pkgdir}/usr/bin/crush"
+      # license
+      mkdir -p "${pkgdir}/usr/share/licenses/crush/"
+      install -Dm644 ./LICENSE* "${pkgdir}/usr/share/licenses/crush/"
+      # completions
+      mkdir -p "${pkgdir}/usr/share/bash-completion/completions/"
+      mkdir -p "${pkgdir}/usr/share/zsh/site-functions/"
+      mkdir -p "${pkgdir}/usr/share/fish/vendor_completions.d/"
+      install -Dm644 "./completions/crush.bash" "${pkgdir}/usr/share/bash-completion/completions/crush"
+      install -Dm644 "./completions/crush.zsh" "${pkgdir}/usr/share/zsh/site-functions/_crush"
+      install -Dm644 "./completions/crush.fish" "${pkgdir}/usr/share/fish/vendor_completions.d/crush.fish"
+      # man pages
+      install -Dm644 "./manpages/crush.1.gz" "${pkgdir}/usr/share/man/man1/crush.1.gz"
+      # readme
+      mkdir -pv "${pkgdir}/usr/share/doc/crush/"
+      install -Dm644 README* "${pkgdir}/usr/share/doc/crush/"
+
+furies:
+  - account: "{{ with .Env.FURY_TOKEN }}charmcli{{ else }}{{ end }}"
+    secret_name: FURY_TOKEN
 
 homebrew_casks:
   - repository:
@@ -66,10 +114,16 @@ nfpms:
   - formats:
       - deb
       - rpm
-    file_name_template: >-
-      {{ .ProjectName }}-
-      {{- if eq .Os "darwin" }}mac
-      {{- else }}{{ .Os }}{{ end }}-{{ .Arch }}
+    file_name_template: "{{ .ConventionalFileName }}"
+    contents:
+      - src: ./completions/crush.bash
+        dst: /etc/bash_completion.d/crush
+      - src: ./completions/crush.fish
+        dst: /usr/share/fish/vendor_completions.d/crush.fish
+      - src: ./completions/crush.zsh
+        dst: /usr/share/zsh/site-functions/_crush
+      - src: ./manpages/crush.1.gz
+        dst: /usr/share/man/man1/crush.1.gz
 
 changelog:
   sort: asc