Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CLI-2823] Add chocolatey to goreleaser config #2365

Draft
wants to merge 21 commits into
base: main
Choose a base branch
from
Draft
Changes from 6 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
b8faf55
Add Chocolatey to the goreleaser config file
sgagniere Oct 12, 2023
f1f3959
small changes
sgagniere Oct 19, 2023
7f04ea9
Merge branch 'main' of github.com:confluentinc/cli into cli-2823
sgagniere Oct 19, 2023
e1c3122
add missing entry
sgagniere Oct 19, 2023
a2d1eeb
change comment
sgagniere Oct 20, 2023
ede4a2a
temporarily hardcode true for because goreleaser check reports an er…
sgagniere Oct 20, 2023
a0c9f3f
Merge branch 'main' into cli-2823
brianstrauch Dec 5, 2023
9be35c3
Merge branch 'main' of github.com:confluentinc/cli into cli-2823
sgagniere Dec 15, 2023
f98f0c4
Rearrange pre and post hooks
sgagniere Dec 26, 2023
dc29d94
some prep for building choco packages in docker
sgagniere Dec 26, 2023
f92d854
move windows builds outside of the main goreleaser file
sgagniere Dec 27, 2023
91ebd77
forgot to remove archive-chocolatey
sgagniere Dec 27, 2023
e365ba3
install choco in the windows builder docker image
sgagniere Dec 27, 2023
4bc9aea
fix typo
sgagniere Dec 27, 2023
d1be0cc
Add signing certificate to .gitignore
sgagniere Dec 27, 2023
cb3c9e0
move osslsigncode into the windows builder base image
sgagniere Dec 27, 2023
6f5ebd2
Can't sign in place with osslsigncode in Docker for some reason
sgagniere Dec 27, 2023
c872a56
Hide windows signing certificate in Docker using secrets feature
sgagniere Dec 28, 2023
8b640cd
Add chocolateys block to goreleaser-windows
sgagniere Dec 28, 2023
bb3affb
typo fix and add .dockerignore
sgagniere Dec 28, 2023
6282f3b
don't package the chocolatey version of windows twice
sgagniere Dec 28, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 63 additions & 2 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ builds:
binary: confluent
main: cmd/confluent/main.go
ldflags:
- -s -w -X main.version={{.Version}} -X main.commit={{.ShortCommit}} -X main.date={{.Date}} -buildmode=exe
- -s -w -X main.version={{.Version}} -X main.commit={{.ShortCommit}} -X main.date={{.Date}} -buildmode=exe
gcflags:
- all=-trimpath={{.Env.HOME}}/git
asmflags:
Expand All @@ -178,6 +178,33 @@ builds:
post:
- cmd: ./lib/osslsigncode sign -n "Confluent CLI" -i "https://confluent.io" -pkcs12 CLIEVCodeSigningCertificate2.pfx -in {{ .Path }} -out {{ .Path }}
- cmd: rm CLIEVCodeSigningCertificate2.pfx
- id: confluent-windows-amd64-chocolatey
Copy link
Member

@brianstrauch brianstrauch Oct 23, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We might want to come up with a more generic name, i.e. confluent-windows-amd64-disableupdates in case we want to support scoop (or other Windows package managers) in the future. We should probably consider doing the same for the linux/darwin builds too.

binary: confluent
main: cmd/confluent/main.go
ldflags:
- -s -w -X main.version={{.Version}} -X main.commit={{.ShortCommit}} -X main.date={{.Date}} -X main.disableUpdates=true -buildmode=exe
gcflags:
- all=-trimpath={{.Env.HOME}}/git
asmflags:
- all=-trimpath={{.Env.HOME}}/git
env:
- CGO_ENABLED=1
- CC=x86_64-w64-mingw32-gcc
- CXX=x86_64-w64-mingw32-g++
- CGO_LDFLAGS=${CGO_LDFLAGS} -static
goos:
- windows
goarch:
- amd64
hooks:
# TODO: We might have to convert some of these to global before/after hooks since we'll now have multiple Windows binaries w/ different ldflags
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, let's try to avoid running az login more than once. When this is automated in Semaphore it won't result in an annoying pop-up, but might result in a longer release time.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(and I guess we only need to download the signing secret once, too)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aside from just the annoyance of two popups, I actually discovered a pretty annoying thing when I was testing this: if you log in w/ one of the tabs and close out the other, goreleaser just blocks on that pre-hook.

Converting it into a global before hook worked perfectly, though (I'll update the remote branch soon).

For the downloading, we have some options. What I tried is downloading to two separate files so that the removal post hook doesn't remove the file before the other build's post hook can sign with it. This works, although it's a bit clunky carrying two copies of the signing file with different names.

The other option is to download the file in the global before hook and remove it in the global after hook. The documentation for the after hook has weird wording which is why I didn't try it first.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The other option is to download the file in the global before hook and remove it in the global after hook.

👍

pre:
- cmd: az login
- cmd: az keyvault secret download --file CLIEVCodeSigningCertificate2.pfx --name CLIEVCodeSigningCertificate2 --subscription cc-prod --vault-name CLICodeSigningKeyVault --encoding base64
- cmd: xattr -dr com.apple.quarantine ./lib/osslsigncode
post:
- cmd: ./lib/osslsigncode sign -n "Confluent CLI" -i "https://confluent.io" -pkcs12 CLIEVCodeSigningCertificate2.pfx -in {{ .Path }} -out {{ .Path }}
- cmd: rm CLIEVCodeSigningCertificate2.pfx

archives:
- id: archive
Expand Down Expand Up @@ -216,6 +243,16 @@ archives:
files:
- LICENSE
- legal/**/*
- id: archive-chocolatey
# TODO: Check naming requirements for Chocolatey
format: zip
builds:
- confluent-windows-amd64-chocolatey
name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}_chocolatey"
wrap_in_directory: "{{ .ProjectName }}"
files:
- LICENSE
- legal/**/*
- id: binary
format: binary
builds:
Expand Down Expand Up @@ -284,6 +321,7 @@ blobs:
- archive
- archive-alpine
- archive-homebrew
- archive-chocolatey
brianstrauch marked this conversation as resolved.
Show resolved Hide resolved
provider: s3
bucket: confluent.cloud
region: us-west-2
Expand All @@ -308,4 +346,27 @@ brews:
homepage: https://docs.confluent.io/confluent-cli/current/overview.html
description: CLI for Confluent Cloud and Confluent Platform
skip_upload: "{{ .Env.DRY_RUN }}"
test: system "#{bin}/confluent version"
test: system "#{bin}/confluent version"

chocolateys:
# TODO: Check naming requirements for Chocolatey
- name: confluent
ids:
- archive-chocolatey
owners: confluentinc
title: Confluent CLI
authors: Confluent Inc.
project_url: https://docs.confluent.io/confluent-cli/current/overview.html
url_template: "https://s3-us-west-2.amazonaws.com/confluent.cloud/confluent-cli/archives/{{ .Version }}/{{ .ArtifactName }}"
copyright: 2023 Confluent Inc.
license_url: https://github.com/confluentinc/cli/blob/main/LICENSE
require_license_acceptance: false
project_source_url: https://github.com/confluentinc/cli
bug_tracker_url: https://github.com/confluentinc/cli/issues
summary: CLI for Confluent Cloud and Confluent Platform
description: CLI for Confluent Cloud and Confluent Platform
release_notes: https://docs.confluent.io/confluent-cli/current/release-notes.html
# TODO
api_key: "{{ .Env.CHOCOLATEY_API_KEY }}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we be reading this directly from vault instead?

Copy link
Member Author

@sgagniere sgagniere Oct 23, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah if we do end up using the chocolatey repo, that's what we'll do. This is just a "don't forget this" placeholder.

Actually, no matter which repo we end up using we'll need a corresponding api-key, so we'll be likely be storing and reading it from vault no matter what we go with.

source_repo: "https://push.chocolatey.org/"
skip_publish: true