diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000000000000000000000000000000000000..1e271bbb6e180557b241a6ab5e40acf7b82705df --- /dev/null +++ b/.github/workflows/nightly.yml @@ -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 }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 542000fb69dd7f5176db01806f7db2399882d8fa..05632188b0c45704cf73f307182aeacfb2b857fa 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -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 }} diff --git a/.gitignore b/.gitignore index a26fa7ce3a61b69bfba967e503b923bd5e2d71ce..fa60789d7653799d43289eabf2e4d82bb7ae28a1 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,6 @@ Thumbs.db .crush/ crush + +manpages/ +completions/ diff --git a/.goreleaser.yml b/.goreleaser.yml index 8a549e8fab94f0a7b3a6f930ee1a8eaad88f0e18..4cc15e532059bfb9c47af8e2792b456cc453c3e3 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -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 " +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