From 1ddb0afb24b90e17ee97ce34f362531df4e266e5 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 4 Aug 2023 12:26:05 +0200 Subject: [PATCH] fix: reduce disk usage during release Co-authored-by: Ludovic Fernandez --- .goreleaser.yml => .goreleaser.yml.tmpl | 10 +++--- .semaphore/semaphore.yml | 4 +-- Makefile | 8 ++++- internal/release/release.go | 41 +++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 8 deletions(-) rename .goreleaser.yml => .goreleaser.yml.tmpl (93%) create mode 100644 internal/release/release.go diff --git a/.goreleaser.yml b/.goreleaser.yml.tmpl similarity index 93% rename from .goreleaser.yml rename to .goreleaser.yml.tmpl index 9892a4747..f469b52c5 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml.tmpl @@ -1,8 +1,12 @@ project_name: traefik +dist: "./dist/[[ .GOOS ]]" + +[[ if eq .GOOS "linux" ]] before: hooks: - go generate +[[ end ]] builds: - binary: traefik @@ -15,11 +19,7 @@ builds: flags: - -trimpath goos: - - linux - - darwin - - windows - - freebsd - - openbsd + - "[[ .GOOS ]]" goarch: - amd64 - '386' diff --git a/.semaphore/semaphore.yml b/.semaphore/semaphore.yml index 746cf0d68..98b682ce4 100644 --- a/.semaphore/semaphore.yml +++ b/.semaphore/semaphore.yml @@ -62,7 +62,7 @@ blocks: - name: traefik env_vars: - name: GH_VERSION - value: 1.12.1 + value: 2.32.1 - name: CODENAME value: "saintmarcelin" - name: IN_DOCKER @@ -79,5 +79,5 @@ blocks: - name: Release commands: - make release-packages - - gh release create ${SEMAPHORE_GIT_TAG_NAME} ./dist/traefik*.* --repo traefik/traefik --title ${SEMAPHORE_GIT_TAG_NAME} --notes ${SEMAPHORE_GIT_TAG_NAME} + - gh release create ${SEMAPHORE_GIT_TAG_NAME} ./dist/**/traefik*.{zip,tar.gz} ./dist/traefik*.{tar.gz,txt} --repo traefik/traefik --title ${SEMAPHORE_GIT_TAG_NAME} --notes ${SEMAPHORE_GIT_TAG_NAME} - ./script/deploy.sh diff --git a/Makefile b/Makefile index 8de756967..468a713bf 100644 --- a/Makefile +++ b/Makefile @@ -189,7 +189,13 @@ generate-genconf: .PHONY: release-packages release-packages: generate-webui build-dev-image rm -rf dist - $(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_NOTTY)) goreleaser release --skip-publish -p 2 --timeout="90m" + @- $(foreach os, linux darwin windows freebsd openbsd, \ + $(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_NOTTY)) goreleaser release --skip-publish -p 2 --timeout="90m" --config $(shell go run ./internal/release $(os)); \ + $(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_NOTTY)) go clean -cache; \ + ) + + $(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_NOTTY)) cat dist/**/*_checksums.txt >> dist/traefik_${VERSION}_checksums.txt + $(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_NOTTY)) rm dist/**/*_checksums.txt $(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_NOTTY)) tar cfz dist/traefik-${VERSION}.src.tar.gz \ --exclude-vcs \ --exclude .idea \ diff --git a/internal/release/release.go b/internal/release/release.go new file mode 100644 index 000000000..d27eed270 --- /dev/null +++ b/internal/release/release.go @@ -0,0 +1,41 @@ +package main + +import ( + "fmt" + "log" + "os" + "path" + "strings" + "text/template" +) + +func main() { + if len(os.Args) < 2 { + log.Fatal("GOOS should be provided as a CLI argument") + } + + goos := strings.TrimSpace(os.Args[1]) + if goos == "" { + log.Fatal("GOOS should be provided as a CLI argument") + } + + tmpl := template.Must( + template.New(".goreleaser.yml.tmpl"). + Delims("[[", "]]"). + ParseFiles("./.goreleaser.yml.tmpl"), + ) + + outputPath := path.Join(os.TempDir(), fmt.Sprintf(".goreleaser_%s.yml", goos)) + + output, err := os.Create(outputPath) + if err != nil { + log.Fatal(err) + } + + err = tmpl.Execute(output, map[string]string{"GOOS": goos}) + if err != nil { + log.Fatal(err) + } + + fmt.Print(outputPath) +}