From 844d55e8278fb7f85fc8cb377337c2926b8657de Mon Sep 17 00:00:00 2001 From: Mailo Arsac Date: Tue, 11 Feb 2025 13:37:14 -0800 Subject: [PATCH] feat: Add workflow for drafting releases --- .github/workflows/release-draft.yaml | 93 +++++++++++++++++++ .goreleaser.yaml | 7 ++ cmd/goreleaser/internal/configure.go | 11 +-- .../.goreleaser-nightly.yaml | 2 +- .../nr-otel-collector/.goreleaser.yaml | 22 ++--- .../.goreleaser-nightly.yaml | 2 +- .../nrdot-collector-host/.goreleaser.yaml | 22 ++--- 7 files changed, 126 insertions(+), 33 deletions(-) create mode 100644 .github/workflows/release-draft.yaml create mode 100644 .goreleaser.yaml diff --git a/.github/workflows/release-draft.yaml b/.github/workflows/release-draft.yaml new file mode 100644 index 00000000..949c4dd4 --- /dev/null +++ b/.github/workflows/release-draft.yaml @@ -0,0 +1,93 @@ +name: 📜 Release | Draft + + + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + distribution: + - nr-otel-collector + - nrdot-collector-host + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 # required for tag metadata + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: '1.23' + check-latest: true + + - name: Tidy go.mod files + run: go mod tidy + + - name: Verify build + run: make ci DISTRIBUTIONS=${{ matrix.distribution }} + + - name: Login to Docker + uses: docker/login-action@v3 + if: ${{ env.ACT }} + with: + registry: docker.io + username: ${{ secrets.OTELCOMM_DOCKER_HUB_USERNAME }} + password: ${{ secrets.OTELCOMM_DOCKER_HUB_PASSWORD }} + + - uses: docker/setup-qemu-action@v2 + + - uses: docker/setup-buildx-action@v2 + + - name: Import GPG key + id: import_gpg + uses: crazy-max/ghaction-import-gpg@v6 + with: + gpg_private_key: ${{ secrets.OHAI_GPG_PRIVATE_KEY_BASE64 }} + passphrase: ${{ secrets.OHAI_GPG_PASSPHRASE }} + + - name: Write GPG to path in memory for signing rpm/deb + id: write_gpg_to_path + run: | + GPG_KEY_PATH="$(mktemp /dev/shm/gpg.XXXXXX)" + echo "$GPG_PRIVATE_KEY" | base64 -d >> "$GPG_KEY_PATH" + echo "gpg_key_path=$GPG_KEY_PATH" >> $GITHUB_OUTPUT + env: + GPG_PRIVATE_KEY: ${{ secrets.OHAI_GPG_PRIVATE_KEY_BASE64 }} + + - name: Build binaries & packages with GoReleaser + id: goreleaser + uses: goreleaser/goreleaser-action@v6 + env: + NFPM_PASSPHRASE: ${{ secrets.OHAI_GPG_PASSPHRASE }} + GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} + GPG_KEY_PATH: ${{ steps.write_gpg_to_path.outputs.gpg_key_path }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + distribution: goreleaser + version: '~> v2' + args: --clean --skip=announce --timeout 2h + workdir: distributions/${{ matrix.distribution }} + + draft-release: + runs-on: ubuntu-latest + needs: build + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: '1.23' + + - name: Build binaries & packages with GoReleaser + id: goreleaser + uses: goreleaser/goreleaser-action@v6 + with: + distribution: goreleaser + version: '~> v2' + args: --clean --timeout 2h + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 00000000..4ece96da --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,7 @@ +version: 2 +builds: + - skip: true +release: + draft: true + use_existing_draft: true + mode: replace diff --git a/cmd/goreleaser/internal/configure.go b/cmd/goreleaser/internal/configure.go index 2f05a2e7..36ddd772 100644 --- a/cmd/goreleaser/internal/configure.go +++ b/cmd/goreleaser/internal/configure.go @@ -32,7 +32,6 @@ const ( HostDistro = "nrdot-collector-host" K8sDistro = "nrdot-collector-k8s" - DockerHub = "newrelic" EnvRegistry = "{{ .Env.REGISTRY }}" BinaryNamePrefix = "nrdot-collector" @@ -40,8 +39,7 @@ const ( ) var ( - ImagePrefixes = []string{DockerHub} - NightlyImagePrefixes = []string{EnvRegistry} + ImagePrefixes = []string{EnvRegistry} Architectures = []string{"amd64", "arm64"} DefaultConfigDists = map[string]bool{LegacyDistro: true, HostDistro: true} @@ -79,7 +77,7 @@ func Generate(dist string, nightly bool) config.Project { Blobs: Blobs(dist, nightly), Release: config.Release{ // Disable releases on all distros for now - Disable: "true", + Draft: true, }, } } @@ -276,7 +274,6 @@ func DockerImage(dist string, nightly bool, arch string, armVersion string) conf latestPrefixFormat := "%s/%s:latest-%s" if nightly { - imagePrefixes = NightlyImagePrefixes prefixFormat = "%s/%s:{{ .Version }}-nightly-%s" latestPrefixFormat = "%s/%s:nightly-%s" } @@ -324,10 +321,6 @@ func DockerManifests(dist string, nightly bool) []config.DockerManifest { imagePrefixes := ImagePrefixes - if nightly { - imagePrefixes = NightlyImagePrefixes - } - for _, prefix := range imagePrefixes { if nightly { r = append(r, DockerManifest(prefix, "nightly", dist, nightly)) diff --git a/distributions/nr-otel-collector/.goreleaser-nightly.yaml b/distributions/nr-otel-collector/.goreleaser-nightly.yaml index a7064a48..4f0eb22c 100644 --- a/distributions/nr-otel-collector/.goreleaser-nightly.yaml +++ b/distributions/nr-otel-collector/.goreleaser-nightly.yaml @@ -1,7 +1,7 @@ version: 2 project_name: nrdot-collector-releases-nightly release: - disable: "true" + draft: true builds: - id: nr-otel-collector goos: diff --git a/distributions/nr-otel-collector/.goreleaser.yaml b/distributions/nr-otel-collector/.goreleaser.yaml index 7911b0fb..c52f12f1 100644 --- a/distributions/nr-otel-collector/.goreleaser.yaml +++ b/distributions/nr-otel-collector/.goreleaser.yaml @@ -1,7 +1,7 @@ version: 2 project_name: nrdot-collector-releases release: - disable: "true" + draft: true builds: - id: nr-otel-collector goos: @@ -77,8 +77,8 @@ dockers: goarch: amd64 dockerfile: Dockerfile image_templates: - - newrelic/nr-otel-collector:{{ .Version }}-amd64 - - newrelic/nr-otel-collector:latest-amd64 + - '{{ .Env.REGISTRY }}/nr-otel-collector:{{ .Version }}-amd64' + - '{{ .Env.REGISTRY }}/nr-otel-collector:latest-amd64' extra_files: - config.yaml build_flag_templates: @@ -95,8 +95,8 @@ dockers: goarch: arm64 dockerfile: Dockerfile image_templates: - - newrelic/nr-otel-collector:{{ .Version }}-arm64 - - newrelic/nr-otel-collector:latest-arm64 + - '{{ .Env.REGISTRY }}/nr-otel-collector:{{ .Version }}-arm64' + - '{{ .Env.REGISTRY }}/nr-otel-collector:latest-arm64' extra_files: - config.yaml build_flag_templates: @@ -110,14 +110,14 @@ dockers: - --label=org.opencontainers.image.licenses=Apache-2.0 use: buildx docker_manifests: - - name_template: newrelic/nr-otel-collector:{{ .Version }} + - name_template: '{{ .Env.REGISTRY }}/nr-otel-collector:{{ .Version }}' image_templates: - - newrelic/nr-otel-collector:{{ .Version }}-amd64 - - newrelic/nr-otel-collector:{{ .Version }}-arm64 - - name_template: newrelic/nr-otel-collector:latest + - '{{ .Env.REGISTRY }}/nr-otel-collector:{{ .Version }}-amd64' + - '{{ .Env.REGISTRY }}/nr-otel-collector:{{ .Version }}-arm64' + - name_template: '{{ .Env.REGISTRY }}/nr-otel-collector:latest' image_templates: - - newrelic/nr-otel-collector:latest-amd64 - - newrelic/nr-otel-collector:latest-arm64 + - '{{ .Env.REGISTRY }}/nr-otel-collector:latest-amd64' + - '{{ .Env.REGISTRY }}/nr-otel-collector:latest-arm64' blobs: - bucket: nr-releases provider: s3 diff --git a/distributions/nrdot-collector-host/.goreleaser-nightly.yaml b/distributions/nrdot-collector-host/.goreleaser-nightly.yaml index cc84492a..12dd7e81 100644 --- a/distributions/nrdot-collector-host/.goreleaser-nightly.yaml +++ b/distributions/nrdot-collector-host/.goreleaser-nightly.yaml @@ -1,7 +1,7 @@ version: 2 project_name: nrdot-collector-releases-nightly release: - disable: "true" + draft: true builds: - id: nrdot-collector-host goos: diff --git a/distributions/nrdot-collector-host/.goreleaser.yaml b/distributions/nrdot-collector-host/.goreleaser.yaml index f6e929b7..e8986d8e 100644 --- a/distributions/nrdot-collector-host/.goreleaser.yaml +++ b/distributions/nrdot-collector-host/.goreleaser.yaml @@ -1,7 +1,7 @@ version: 2 project_name: nrdot-collector-releases release: - disable: "true" + draft: true builds: - id: nrdot-collector-host goos: @@ -77,8 +77,8 @@ dockers: goarch: amd64 dockerfile: Dockerfile image_templates: - - newrelic/nrdot-collector-host:{{ .Version }}-amd64 - - newrelic/nrdot-collector-host:latest-amd64 + - '{{ .Env.REGISTRY }}/nrdot-collector-host:{{ .Version }}-amd64' + - '{{ .Env.REGISTRY }}/nrdot-collector-host:latest-amd64' extra_files: - config.yaml build_flag_templates: @@ -95,8 +95,8 @@ dockers: goarch: arm64 dockerfile: Dockerfile image_templates: - - newrelic/nrdot-collector-host:{{ .Version }}-arm64 - - newrelic/nrdot-collector-host:latest-arm64 + - '{{ .Env.REGISTRY }}/nrdot-collector-host:{{ .Version }}-arm64' + - '{{ .Env.REGISTRY }}/nrdot-collector-host:latest-arm64' extra_files: - config.yaml build_flag_templates: @@ -110,14 +110,14 @@ dockers: - --label=org.opencontainers.image.licenses=Apache-2.0 use: buildx docker_manifests: - - name_template: newrelic/nrdot-collector-host:{{ .Version }} + - name_template: '{{ .Env.REGISTRY }}/nrdot-collector-host:{{ .Version }}' image_templates: - - newrelic/nrdot-collector-host:{{ .Version }}-amd64 - - newrelic/nrdot-collector-host:{{ .Version }}-arm64 - - name_template: newrelic/nrdot-collector-host:latest + - '{{ .Env.REGISTRY }}/nrdot-collector-host:{{ .Version }}-amd64' + - '{{ .Env.REGISTRY }}/nrdot-collector-host:{{ .Version }}-arm64' + - name_template: '{{ .Env.REGISTRY }}/nrdot-collector-host:latest' image_templates: - - newrelic/nrdot-collector-host:latest-amd64 - - newrelic/nrdot-collector-host:latest-arm64 + - '{{ .Env.REGISTRY }}/nrdot-collector-host:latest-amd64' + - '{{ .Env.REGISTRY }}/nrdot-collector-host:latest-arm64' blobs: - bucket: nr-releases provider: s3