From 9b7f90e7200142e9021faae887a651807a3d2893 Mon Sep 17 00:00:00 2001 From: cpu1 Date: Mon, 16 Mar 2020 17:03:36 +0530 Subject: [PATCH] Restore inadvertently deleted files This partially reverts commit 06cf5a44e747417251cb104dce32375647b790d0. --- snap/snapcraft.yaml | 51 ++++++++++++++++++++++++ tag-release-candidate.sh | 79 +++++++++++++++++++++++++++++++++++++ tag-release.sh | 85 ++++++++++++++++++++++++++++++++++++++++ tools.go | 30 ++++++++++++++ 4 files changed, 245 insertions(+) create mode 100644 snap/snapcraft.yaml create mode 100755 tag-release-candidate.sh create mode 100755 tag-release.sh create mode 100644 tools.go diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml new file mode 100644 index 0000000000..b2bb85a170 --- /dev/null +++ b/snap/snapcraft.yaml @@ -0,0 +1,51 @@ +name: eksctl +summary: a CLI for Amazon EKS +description: | + eksctl is a simple CLI tool for creating clusters on EKS - Amazon's new + managed Kubernetes service for EC2. It is written in Go, and uses + CloudFormation. + . + You can create a cluster in minutes with just one command - + eksctl create cluster! +confinement: strict +base: core18 +adopt-info: eksctl + +apps: + eksctl: + command: eksctl + plugs: + - network + +parts: + eksctl: + source: . + plugin: make + make-parameters: [ build ] + artifacts: [ eksctl ] + override-pull: | + snapcraftctl pull + EKSCTL_TAG="$(git tag --sort=taggerdate | egrep -v '^(latest_release)' | tail -n 1)" + set +e + git describe --exact-match --tags $(git log -n1 --pretty='%h') + retVal=$? + set -e + if [ $retVal -eq 0 ]; then + snapcraftctl set-version "$EKSCTL_TAG" + snapcraftctl set-grade stable + else + GIT_REV="$(git rev-parse --short HEAD)" + snapcraftctl set-version "$EKSCTL_TAG+$GIT_REV" + snapcraftctl set-grade devel + fi + export GOPATH="$(realpath ../go)" + make install-build-deps + build-snaps: + - go/1.13/stable + build-packages: + - g++ + - gcc + - git + - time + build-environment: + - GOBIN: '$SNAPCRAFT_PART_INSTALL/bin' diff --git a/tag-release-candidate.sh b/tag-release-candidate.sh new file mode 100755 index 0000000000..d489c67eb2 --- /dev/null +++ b/tag-release-candidate.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +set -o errexit +set -o pipefail +set -o nounset + +function branch_exists() { + git ls-remote --heads origin "${1}" | grep -q "${1}" +} + +function current_branch() { + git rev-parse --abbrev-ref @ +} + +function release_generate() { + go run pkg/version/generate/release_generate.go ${1} +} + +if [[ ! "$(git remote get-url origin)" =~ ^git@github.com:weaveworks/eksctl(\-private)?(\.git)?$ ]] ; then + echo "Invalid origin: $(git remote get-url origin)" + exit 3 +fi + +candidate_for=$(release_generate print-version) + +release_branch="release-${candidate_for%.*}" # e.g.: 0.2.0-rc.0 -> release-0.2 +if ! [[ "${release_branch}" =~ ^release-[0-9]+\.[0-9]+$ ]] ; then + echo "Invalid release branch: ${release_branch}" + exit 3 +fi + +if [ ! "$(current_branch)" = "${release_branch}" ] ; then + echo "Must be on ${release_branch} branch" + exit 5 +fi + +# Ensure local release branch is up-to-date by pulling its latest version from +# origin and fast-forwarding the local branch: +git pull --ff-only origin "${release_branch}" || echo "${release_branch} not found in origin. Will push new branch upstream" + +RELEASE_NOTES_FILE="docs/release_notes/${candidate_for}.md" + +if [[ ! -f "${RELEASE_NOTES_FILE}" ]]; then + echo "Must have release notes ${RELEASE_NOTES_FILE}" + exit 6 +fi + + +# Update eksctl version +full_version=$(release_generate release-candidate) +export RELEASE_GIT_TAG="${full_version}" +git add ./pkg/version/release.go +git add "${RELEASE_NOTES_FILE}" + +m="Tag ${full_version} release candidate" + +git commit --message "${m}" +git push origin "${release_branch}" +git tag --annotate --message "${m}" "${full_version}" +git push origin "${full_version}" + +# Check if we need to bump version in master +git checkout master +if [ ! "$(current_branch)" = master ] ; then + echo "Must be on master branch" + exit 7 +fi +git pull --ff-only origin master + +master_version=$(release_generate print-version) + +# Increase next development iteration if needed +if [ "${master_version}" == "${candidate_for}" ]; then + echo "Preparing for next development iteration" + release_generate development + git add ./pkg/version/release.go + git commit --message "Prepare for next development iteration" + git push origin master:master +fi diff --git a/tag-release.sh b/tag-release.sh new file mode 100755 index 0000000000..72f5753bb8 --- /dev/null +++ b/tag-release.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +set -o errexit +set -o pipefail +set -o nounset + +function branch_exists() { + git ls-remote --heads origin "${1}" | grep -q "${1}" +} + +function current_branch() { + git rev-parse --abbrev-ref @ +} + +function release_generate() { + go run pkg/version/generate/release_generate.go ${1} +} + +if [[ ! "$(git remote get-url origin)" =~ ^git@github.com:weaveworks/eksctl(\-private)?(\.git)?$ ]] ; then + echo "Invalid origin: $(git remote get-url origin)" + exit 3 +fi + +v=$(release_generate print-version) + +release_branch="release-${v%.*}" # e.g.: 0.2.0 -> release-0.2 +if ! [[ "${release_branch}" =~ ^release-[0-9]+\.[0-9]+$ ]] ; then + echo "Invalid release branch: ${release_branch}" + exit 3 +fi + +if [ ! "$(current_branch)" = "${release_branch}" ] ; then + echo "Must be on ${release_branch} branch" + exit 5 +fi + +# Ensure local release branch is up-to-date by pulling its latest version from +# origin and fast-forwarding the local branch: +git pull --ff-only origin "${release_branch}" || echo "${release_branch} not found in origin. Will push new branch upstream" + +RELEASE_NOTES_FILE="docs/release_notes/${v}.md" +if [[ ! -f "${RELEASE_NOTES_FILE}" ]]; then + echo "Must have release notes ${RELEASE_NOTES_FILE}" + exit 6 +fi + +export RELEASE_GIT_TAG="${v}" + +# Update eksctl version by removing the pre-release id +release_generate release +git add ./pkg/version/release.go +git add "${RELEASE_NOTES_FILE}" + +m="Release ${v}" + +git commit --message "${m}" +git push origin "${release_branch}" + +# Create the release tag and push it to start release process +git tag --annotate --message "${m}" --force "latest_release" +git tag --annotate --message "${m}" "${v}" +git push origin "${v}" + +# Update the site by putting everything from master into the docs branch +git push --force origin "${release_branch}":docs + +# Check if need to bump version in master +git checkout master +if [ ! "$(current_branch)" = master ] ; then + echo "Must be on master branch" + exit 7 +fi +git pull --ff-only origin master + +master_version=$(release_generate print-version) + +# Increase next development iteration if needed +if [ "${master_version}" == "${v}" ]; then + echo "Preparing for next development iteration" + release_generate development + git add ./pkg/version/release.go + git commit --message "Prepare for next development iteration" + git push origin master:master +fi + diff --git a/tools.go b/tools.go new file mode 100644 index 0000000000..c48361cb2c --- /dev/null +++ b/tools.go @@ -0,0 +1,30 @@ +// +build tools + +package eksctl + +// Mock imports to enforce their installation by `go mod`. +// See https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module +import ( + // These dependencies are only included to enforce aws-iam-authenticator to use a specific versions. + // aws-iam-authenticator v0.4.0 uses `dep`, causing `go mod` to ignore its dependency files and just to pull + // master versions. Otherwise, build to breaks and is unpredictable + // TODO(fons): get rid of this dependencies once we bump the version of aws-iam-authenticator, + // which now uses go modules + _ "github.com/christopherhein/go-version" + _ "github.com/spf13/viper" + + _ "github.com/dave/jennifer/jen" + _ "github.com/gohugoio/hugo" + _ "github.com/golangci/golangci-lint/cmd/golangci-lint" + _ "github.com/goreleaser/goreleaser" + _ "github.com/kevinburke/go-bindata/go-bindata" + _ "github.com/kubernetes-sigs/aws-iam-authenticator/cmd/aws-iam-authenticator" + _ "github.com/vektra/mockery/cmd/mockery" + _ "github.com/weaveworks/github-release" + _ "golang.org/x/tools/cmd/stringer" + _ "k8s.io/code-generator/cmd/client-gen" + _ "k8s.io/code-generator/cmd/deepcopy-gen" + _ "k8s.io/code-generator/cmd/defaulter-gen" + _ "k8s.io/code-generator/cmd/informer-gen" + _ "k8s.io/code-generator/cmd/lister-gen" +)