diff --git a/releasing/README.md b/releasing/README.md index 4827d83cb..454390323 100644 --- a/releasing/README.md +++ b/releasing/README.md @@ -595,6 +595,24 @@ git push upstream :latest_kustomize git tag -a latest_kustomize ``` +### Optionally build locally + +[localbuild.sh]: localbuild.sh + +Load the same version of `goreleaser` referenced in `cloudbuild.yaml` via docker and run [localbuild.sh] from the container's command line: + +``` +# Get goreleaser image from cloudbuild.yaml +export GORELEASER_IMAGE=goreleaser/goreleaser:v0.172.1 + +# Drop into a shell +docker run -it --entrypoint=/bin/bash -v $(pwd):/go/src/github.com/kubernetes-sigs/kustomize -w /go/src/github.com/kubernetes-sigs/kustomize $GORELEASER_IMAGE + +# Run build +./releasing/localbuild.sh TAG [--snapshot] +``` + + ### Optionally build and release locally [cloudbuild-local.sh]: cloudbuild-local.sh diff --git a/releasing/cloudbuild-local.sh b/releasing/cloudbuild-local.sh old mode 100644 new mode 100755 diff --git a/releasing/cloudbuild.sh b/releasing/cloudbuild.sh index a8590d39d..d79daf0c5 100755 --- a/releasing/cloudbuild.sh +++ b/releasing/cloudbuild.sh @@ -92,6 +92,7 @@ builds: goos: - linux - darwin + - windows goarch: - amd64 @@ -117,6 +118,7 @@ cat $goReleaserConfigFile date time /usr/local/bin/goreleaser release \ + --debug \ --timeout 10m \ --parallelism 4 \ --config=$goReleaserConfigFile \ diff --git a/releasing/localbuild.sh b/releasing/localbuild.sh new file mode 100755 index 000000000..1cff6e016 --- /dev/null +++ b/releasing/localbuild.sh @@ -0,0 +1,125 @@ +#!/bin/bash +# +# Works exactly like cloudbuild.sh but doesn't perform a release. +# +# Usage (from top of repo): +# +# releasing/localbuild.sh TAG [--snapshot] +# +# Where TAG is in the form +# +# api/v1.2.3 +# kustomize/v1.2.3 +# cmd/config/v1.2.3 +# ... etc. +# +# This script runs a build through goreleaser (http://goreleaser.com) but nothing else. +# + +set -e +set -x + +fullTag=$1 +shift +echo "fullTag=$fullTag" + +remainingArgs="$@" +echo "Remaining args: $remainingArgs" + +# Take everything before the last slash. +# This is expected to match $module. +module=${fullTag%/*} +echo "module=$module" + +# Find previous tag that matches the tags module +prevTag=$(git tag -l "$module*" --sort=-version:refname --no-contains=$fullTag | head -n 1) + +# Generate the changelog for this release +# using the last two tags for the module +changeLogFile=$(mktemp) +git log $prevTag..$fullTag \ + --pretty=oneline \ + --abbrev-commit --no-decorate --no-color --no-merges \ + -- $module > $changeLogFile +echo "Release notes:" +cat $changeLogFile + +# Take everything after the last slash. +# This should be something like "v1.2.3". +semVer=`echo $fullTag | sed "s|$module/||"` +echo "semVer=$semVer" + +# This is probably a directory called /workspace +echo "pwd = $PWD" + +# Sanity check +echo "### ls -las . ################################" +ls -las . +echo "###################################" + + +# CD into the module directory. +# This directory expected to contain a main.go, so there's +# no need for extra details in the `build` stanza below. +cd $module + +skipBuild=true +if [[ "$module" == "kustomize" || "$module" == "pluginator" ]]; then + # If releasing a main program, don't skip the build. + skipBuild=false +fi + +goReleaserConfigFile=$(mktemp) + +cat <$goReleaserConfigFile +project_name: $module + +archives: +- name_template: "${module}_${semVer}_{{ .Os }}_{{ .Arch }}" + +builds: +- skip: $skipBuild + + ldflags: > + -s + -X sigs.k8s.io/kustomize/api/provenance.version={{.Version}} + -X sigs.k8s.io/kustomize/api/provenance.gitCommit={{.Commit}} + -X sigs.k8s.io/kustomize/api/provenance.buildDate={{.Date}} + + goos: + - linux + - darwin + - windows + + goarch: + - amd64 + - arm64 + +checksum: + name_template: 'checksums.txt' + +env: +- CGO_ENABLED=0 +- GO111MODULE=on + +release: + github: + owner: kubernetes-sigs + name: kustomize + draft: true + +EOF + +cat $goReleaserConfigFile + +date + +time /usr/local/bin/goreleaser build \ + --debug \ + --timeout 10m \ + --parallelism 4 \ + --config=$goReleaserConfigFile \ + --rm-dist \ + --skip-validate $remainingArgs + +date