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

Fix windows build, add clarity to goreleaser build (due to race conditions). #4262

Merged
merged 2 commits into from
Nov 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
24 changes: 21 additions & 3 deletions releasing/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -595,14 +595,32 @@ git push upstream :latest_kustomize
git tag -a latest_kustomize
```

### Optionally build a release locally
### Optionally build locally

[localbuild.sh]: localbuild.sh

Install [`cloud-build-local`], then run [localbuild.sh]:
Load the same version of `goreleaser` referenced in `cloudbuild.yaml` via docker and run [localbuild.sh] from the container's command line:

```
./releasing/localbuild.sh $module
# 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

Install [`cloud-build-local`], then run [cloudbuild-local.sh]:

```
./releasing/cloudbuild-local.sh $module
```

This should create release artifacts in a local directory.
Expand Down
54 changes: 54 additions & 0 deletions releasing/cloudbuild-local.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/bin/bash
#
# To test the release process, this script attempts
# to use a Google cloudbuild configuration to create
# release artifacts locally.
#
# See https://cloud.google.com/cloud-build/docs/build-debug-locally
#
# Usage: from the repo root, enter:
#
# ./releasing/cloudbuild-local.sh kustomize/v1.2.3
#
# or some other valid tag value.
#
# IMPORTANT:
# The process clones the repo at the given tag,
# so the repo must have the tag applied upstream.
# Either use an old tag, or disable the cloud build
# trigger so that a new testing tag can be applied
# without setting off a cloud build.

set -e

config=$(mktemp)
cp releasing/cloudbuild.yaml $config

# Add the --snapshot flag to suppress the
# github release and leave the build output
# in the kustomize/dist directory.
sed -i "s|# - '--snapshot|- '--snapshot|" $config

echo "Executing cloud-build-local with config file $config :"
echo "========================="
cat $config
echo "========================="

workspace=~/cloud-build-local-workspace

cloud-build-local \
--config=$config \
--substitutions=TAG_NAME=$1 \
--write-workspace=$workspace \
--dryrun=false \
.

# --bind-mount-source \

echo " "
echo "Result of local build:"
echo "##########################################"
tree ./$module/dist
echo "##########################################"
tree ./$workspace
echo "##########################################"
2 changes: 2 additions & 0 deletions releasing/cloudbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ builds:
goos:
- linux
- darwin
- windows

goarch:
- amd64
Expand All @@ -117,6 +118,7 @@ cat $goReleaserConfigFile
date

time /usr/local/bin/goreleaser release \
--debug \
--timeout 10m \
--parallelism 4 \
--config=$goReleaserConfigFile \
Expand Down
159 changes: 115 additions & 44 deletions releasing/localbuild.sh
Original file line number Diff line number Diff line change
@@ -1,54 +1,125 @@
#!/bin/bash
#
# To test the release process, this script attempts
# to use a Google cloudbuild configuration to create
# release artifacts locally.
# Works exactly like cloudbuild.sh but doesn't perform a release.
#
# See https://cloud.google.com/cloud-build/docs/build-debug-locally
# Usage (from top of repo):
#
# Usage: from the repo root, enter:
# releasing/localbuild.sh TAG [--snapshot]
#
# ./releasing/localbuild.sh kustomize/v1.2.3
# Where TAG is in the form
#
# or some other valid tag value.
# 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.
#
# IMPORTANT:
# The process clones the repo at the given tag,
# so the repo must have the tag applied upstream.
# Either use an old tag, or disable the cloud build
# trigger so that a new testing tag can be applied
# without setting off a cloud build.

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 <<EOF >$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

config=$(mktemp)
cp releasing/cloudbuild.yaml $config

# Add the --snapshot flag to suppress the
# github release and leave the build output
# in the kustomize/dist directory.
sed -i "s|# - '--snapshot|- '--snapshot|" $config

echo "Executing cloud-build-local with config file $config :"
echo "========================="
cat $config
echo "========================="

workspace=~/cloud-build-local-workspace

cloud-build-local \
--config=$config \
--substitutions=TAG_NAME=$1 \
--write-workspace=$workspace \
--dryrun=false \
.

# --bind-mount-source \

echo " "
echo "Result of local build:"
echo "##########################################"
tree ./$module/dist
echo "##########################################"
tree ./$workspace
echo "##########################################"
date