diff --git a/Makefile b/Makefile index c7083c5d12..a96968e6b2 100644 --- a/Makefile +++ b/Makefile @@ -1,20 +1,35 @@ all: kops -DOCKER_REGISTRY=gcr.io/must-override/ -S3_BUCKET=s3://must-override/ +DOCKER_REGISTRY?=gcr.io/must-override/ +S3_BUCKET?=s3://must-override/ +GCS_LOCATION?=gs://must-override GOPATH_1ST=$(shell echo ${GOPATH} | cut -d : -f 1) +UNIQUE:=$(shell date +%s) +GOVERSION=1.7 TAG=1.3 ifndef VERSION - VERSION := git-$(shell git rev-parse --short HEAD) + VERSION := git-$(shell git describe --always) +endif + +# Go exports: + +GO15VENDOREXPERIMENT=1 +export GO15VENDOREXPERIMENT + +ifdef STATIC_BUILD + CGO_ENABLED=0 + export CGO_ENABLED + EXTRA_BUILDFLAGS=-installsuffix cgo + EXTRA_LDFLAGS=-s endif kops: gobindata - GO15VENDOREXPERIMENT=1 go install -ldflags "-X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/kops/... + go install ${EXTRA_BUILDFLAGS} -ldflags "-X main.BuildVersion=${VERSION} ${EXTRA_LDFLAGS}" k8s.io/kops/cmd/kops/... gobindata: - GO15VENDOREXPERIMENT=1 go build -o ${GOPATH_1ST}/bin/go-bindata k8s.io/kops/vendor/github.com/jteeuwen/go-bindata/go-bindata + go build ${EXTRA_BUILDFLAGS} -ldflags "${EXTRA_LDFLAGS}" -o ${GOPATH_1ST}/bin/go-bindata k8s.io/kops/vendor/github.com/jteeuwen/go-bindata/go-bindata cd ${GOPATH_1ST}/src/k8s.io/kops; ${GOPATH_1ST}/bin/go-bindata -o upup/models/bindata.go -pkg models -prefix upup/models/ upup/models/cloudup/... upup/models/config/... upup/models/nodeup/... upup/models/proto/... # Build in a docker container with golang 1.X @@ -29,13 +44,13 @@ check-builds-in-go17: docker run -v ${GOPATH_1ST}/src/k8s.io/kops:/go/src/k8s.io/kops golang:1.7 make -f /go/src/k8s.io/kops/Makefile kops codegen: gobindata - GO15VENDOREXPERIMENT=1 go install k8s.io/kops/upup/tools/generators/... - GO15VENDOREXPERIMENT=1 PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/cloudup/awstasks - GO15VENDOREXPERIMENT=1 PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/cloudup/gcetasks - GO15VENDOREXPERIMENT=1 PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/fitasks + go install k8s.io/kops/upup/tools/generators/... + PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/cloudup/awstasks + PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/cloudup/gcetasks + PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/fitasks test: - GO15VENDOREXPERIMENT=1 go test k8s.io/kops/upup/pkg/... -args -v=1 -logtostderr + go test k8s.io/kops/upup/pkg/... -args -v=1 -logtostderr godeps: # I think strip-vendor is the workaround for 25572 @@ -51,26 +66,37 @@ gofmt: crossbuild: mkdir -p .build/dist/ - GOOS=darwin GOARCH=amd64 go build -o .build/dist/darwin/amd64/kops -ldflags "-X main.BuildVersion=${VERSION}" -v k8s.io/kops/cmd/kops/... - GOOS=linux GOARCH=amd64 go build -o .build/dist/linux/amd64/kops -ldflags "-X main.BuildVersion=${VERSION}" -v k8s.io/kops/cmd/kops/... + GOOS=darwin GOARCH=amd64 go build -a ${EXTRA_BUILDFLAGS} -o .build/dist/darwin/amd64/kops -ldflags "${EXTRA_LDFLAGS} -X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/kops/... + GOOS=linux GOARCH=amd64 go build -a ${EXTRA_BUILDFLAGS} -o .build/dist/linux/amd64/kops -ldflags "${EXTRA_LDFLAGS} -X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/kops/... #GOOS=windows GOARCH=amd64 go build -o .build/dist/windows/amd64/kops -ldflags "-X main.BuildVersion=${VERSION}" -v k8s.io/kops/cmd/kops/... -kops-dist: crossbuild +crossbuild-in-docker: + docker pull golang:${GOVERSION} # Keep golang image up to date + docker run --name=kops-build-${UNIQUE} -e STATIC_BUILD=yes -e VERSION=${VERSION} -v ${GOPATH_1ST}/src/k8s.io/kops:/go/src/k8s.io/kops golang:${GOVERSION} make -f /go/src/k8s.io/kops/Makefile crossbuild + docker cp kops-build-${UNIQUE}:/go/.build . + +kops-dist: crossbuild-in-docker mkdir -p .build/dist/ (sha1sum .build/dist/darwin/amd64/kops | cut -d' ' -f1) > .build/dist/darwin/amd64/kops.sha1 (sha1sum .build/dist/linux/amd64/kops | cut -d' ' -f1) > .build/dist/linux/amd64/kops.sha1 -upload: nodeup-dist kops-dist - rm -rf .build/s3 - mkdir -p .build/s3/kops/${VERSION}/linux/amd64/ - mkdir -p .build/s3/kops/${VERSION}/darwin/amd64/ - cp .build/dist/nodeup .build/s3/kops/${VERSION}/linux/amd64/nodeup - cp .build/dist/nodeup.sha1 .build/s3/kops/${VERSION}/linux/amd64/nodeup.sha1 - cp .build/dist/linux/amd64/kops .build/s3/kops/${VERSION}/linux/amd64/kops - cp .build/dist/linux/amd64/kops.sha1 .build/s3/kops/${VERSION}/linux/amd64/kops.sha1 - cp .build/dist/darwin/amd64/kops .build/s3/kops/${VERSION}/darwin/amd64/kops - cp .build/dist/darwin/amd64/kops.sha1 .build/s3/kops/${VERSION}/darwin/amd64/kops.sha1 - aws s3 sync --acl public-read .build/s3/ ${S3_BUCKET} +version-dist: nodeup-dist kops-dist + rm -rf .build/upload + mkdir -p .build/upload/kops/${VERSION}/linux/amd64/ + mkdir -p .build/upload/kops/${VERSION}/darwin/amd64/ + cp .build/dist/nodeup .build/upload/kops/${VERSION}/linux/amd64/nodeup + cp .build/dist/nodeup.sha1 .build/upload/kops/${VERSION}/linux/amd64/nodeup.sha1 + cp .build/dist/linux/amd64/kops .build/upload/kops/${VERSION}/linux/amd64/kops + cp .build/dist/linux/amd64/kops.sha1 .build/upload/kops/${VERSION}/linux/amd64/kops.sha1 + cp .build/dist/darwin/amd64/kops .build/upload/kops/${VERSION}/darwin/amd64/kops + cp .build/dist/darwin/amd64/kops.sha1 .build/upload/kops/${VERSION}/darwin/amd64/kops.sha1 + +upload: version-dist + aws s3 sync --acl public-read .build/upload/ ${S3_BUCKET} + + +gcs-upload: version-dist + gsutil -m rsync -r .build/upload/kops ${GCS_LOCATION} push: nodeup-dist scp -C .build/dist/nodeup ${TARGET}:/tmp/ @@ -109,17 +135,13 @@ protokube-push: protokube-image nodeup: nodeup-dist nodeup-gocode: gobindata - go install -ldflags "-X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/nodeup + go install ${EXTRA_BUILDFLAGS} -ldflags "${EXTRA_LDFLAGS} -X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/nodeup -nodeup-builder-image: - docker build -t nodeup-builder images/nodeup-builder - -nodeup-build-in-docker: nodeup-builder-image - docker run -it -e VERSION=${VERSION} -v `pwd`:/src nodeup-builder /onbuild.sh - -nodeup-dist: nodeup-build-in-docker +nodeup-dist: + docker pull golang:${GOVERSION} # Keep golang image up to date + docker run --name=nodeup-build-${UNIQUE} -e STATIC_BUILD=yes -e VERSION=${VERSION} -v ${GOPATH_1ST}/src/k8s.io/kops:/go/src/k8s.io/kops golang:${GOVERSION} make -f /go/src/k8s.io/kops/Makefile nodeup-gocode mkdir -p .build/dist - cp .build/artifacts/nodeup .build/dist/ + docker cp nodeup-build-${UNIQUE}:/go/bin/nodeup .build/dist/ (sha1sum .build/dist/nodeup | cut -d' ' -f1) > .build/dist/nodeup.sha1 diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 9036c7c1e2..0000000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -FROM golang:1.6-alpine - -ARG KOPS_SRC=_src -COPY $KOPS_SRC/ /go/src/k8s.io/kops/ - -# KUBECTL_SOURCE: Change to kubernetes-dev/ci for CI -ARG KUBECTL_SOURCE=kubernetes-release/release - -# KUBECTL_TRACK: Currently latest from KUBECTL_SOURCE. Change to latest-1.3.txt, etc. if desired. -ARG KUBECTL_TRACK=latest.txt - -ARG KUBECTL_ARCH=linux/amd64 - -RUN apk add --no-cache --update build-base curl git mercurial --virtual .kops-deps && \ - cd "${GOPATH}/src/k8s.io/kops" && make && \ - MODELS=$(readlink "${GOPATH}/bin/models") && mv "${MODELS}" /usr/local/bin && rm "${GOPATH}/bin/models" && mv ${GOPATH}/bin/* /usr/local/bin && \ - GITISH=$(git describe --always) && \ - KUBECTL_VERSION=${KUBECTL_VERSION:-$(curl -SsL --retry 5 "https://storage.googleapis.com/${KUBECTL_SOURCE}/${KUBECTL_TRACK}")} && \ - echo "=== Fetching kubectl ${KUBECTL_VERSION} ===" && \ - curl -SsL --retry 5 "https://storage.googleapis.com/${KUBECTL_SOURCE}/${KUBECTL_VERSION}/${KUBECTL_ARCH}/kubectl" > /usr/local/bin/kubectl && \ - chmod +x /usr/local/bin/kubectl && \ - /usr/local/bin/kubectl version --client && \ - cd / && rm -rf "${GOPATH}" && rm -rf /usr/local/go && rm /usr/local/bin/go-wrapper && apk del .kops-deps && \ - echo "=== Built kops at ${GITISH}, fetched kubectl ${KUBECTL_VERSION} ===" - -CMD "/go/bin/kops" diff --git a/docker/README.md b/docker/README.md deleted file mode 100644 index 45f63fcb60..0000000000 --- a/docker/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Running Kops in Docker - -The Dockerfile here is offered primarily as a way to build continuous -integration versions of `kops` until we figure out how we want to -release/package it. - -To use it, e.g. (assumes your `$HOME` is correct and that `$KOPS_STATE_STORE` is correct): -```shell -$ docker build -t kops . -$ KOPS="docker run -v $HOME/.aws:/root/.aws:ro -v $HOME/.ssh:/root/.ssh:ro -v $HOME/.kube:/root/.kube -it kops kops --state=$KOPS_STATE_STORE" -``` - -This creates a shell variable that runs the `kops` container with `~/.aws` mounted in (for AWS credentials), `~/.ssh` mounted in (for SSH keys, for AWS specifically), and `~/.kube` mounted in (so `kubectl` can add newly created clusters). - -After this, you can just use `$KOPS` where you would generally use `kops`, e.g. `$KOPS get cluster`. diff --git a/docker/build-squash-push.sh b/docker/build-squash-push.sh deleted file mode 100755 index f8cacadfe9..0000000000 --- a/docker/build-squash-push.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -set -o errexit -set -o nounset -set -o pipefail - -readonly DOCKER_ROOT=$(dirname "${BASH_SOURCE}") -readonly GITISH="$(git describe --always)" -readonly ARCH=${BUILD_ARCH:-"linux/amd64"} -readonly NAME=${BUILD_NAME:-"ci-${GITISH}-${ARCH/\//-}"} # e.g. ci-bef7faf-linux-amd64 -readonly TMPNAME="${NAME}-$(date +%s)" # e.g. ci-bef7faf-linux-amd64-12345678 -readonly TAG=${BUILD_DOCKER_TAG:-"b.gcr.io/kops-ci/kops:${NAME}"} -readonly PUSH_TAG=${BUILD_PUSH_TAG:-"no"} -readonly CLEAN_TAG=${BUILD_CLEAN_TAG:-"yes"} -readonly TMPTAG="${TAG}-$(date +%s)" -readonly LINK=${BUILD_LINK:-} # Also pushes to e.g. ci-{BUILD_LINK}-linux-amd64, i.e. for "latest" -readonly SYMBOLIC_TAG=${BUILD_SYMBOLIC_TAG:-"b.gcr.io/kops-ci/kops:ci-${LINK}-${ARCH/\//-}"} - -if [[ "${ARCH}" != "linux/amd64" ]]; then - echo "!!! Alternate architecture build not supported yet. !!!" - exit 1 -fi - -if [[ -z "${GITISH}" ]]; then - echo "!!! git hash not found, are you sure you're in a git tree and git is installed? !!!" - git config -l - exit 1 -fi - -echo -echo "=== Copying src to docker/_src ===" -echo - -rsync -a --exclude=/docker/ "${DOCKER_ROOT}/.." "${DOCKER_ROOT}/_src" - -echo -echo "=== Building at ${GITISH} for ${ARCH} ===" -echo - -# Build -> $TMPTAG -docker build -t "${TMPTAG}" --build-arg "KUBECTL_ARCH=${ARCH}" --force-rm=true --rm=true --pull=true --no-cache=true "${DOCKER_ROOT}" - -# Squash -> $TAG -docker create --name="${TMPNAME}" "${TMPTAG}" -docker export "${TMPNAME}" | docker import - "${TAG}" - -if [[ "${PUSH_TAG}" == "yes" ]]; then - echo - echo "=== Pushing ${TAG} ===" - echo - - gcloud docker push "${TAG}" -fi - -if [[ -n "${LINK}" ]]; then - echo - echo "=== Pushing ${SYMBOLIC_TAG} ===" - echo - docker tag "${TAG}" "${SYMBOLIC_TAG}" - gcloud docker push "${SYMBOLIC_TAG}" -fi - -echo -echo "=== Cleaning up ===" -echo -docker rm "${TMPNAME}" || true -docker rmi -f "${TMPTAG}" || true -if [[ -n "${LINK}" ]]; then - docker rmi -f "${SYMBOLIC_TAG}" || true -fi -if [[ "${CLEAN_TAG}" == "yes" ]]; then - docker rmi -f "${TAG}" || true -else - echo - echo "=== ${TAG} leaked (BUILD_CLEAN_TAG not set) ===" - echo -fi diff --git a/images/nodeup-builder/Dockerfile b/images/nodeup-builder/Dockerfile deleted file mode 100644 index 62beac991b..0000000000 --- a/images/nodeup-builder/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM debian:jessie - -# Install packages: -# curl (to download golang) -# git (for getting the current head) -# gcc make (for compilation) -RUN apt-get update && apt-get install --yes curl git gcc make - -# Install golang -RUN curl -L https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz | tar zx -C /usr/local -ENV PATH $PATH:/usr/local/go/bin - -COPY onbuild.sh /onbuild.sh diff --git a/images/nodeup-builder/onbuild.sh b/images/nodeup-builder/onbuild.sh deleted file mode 100755 index 85683b8489..0000000000 --- a/images/nodeup-builder/onbuild.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -mkdir -p /go -export GOPATH=/go - -mkdir -p /go/src/k8s.io -ln -s /src/ /go/src/k8s.io/kops - -cd /go/src/k8s.io/kops/ -make nodeup-gocode - -mkdir -p /src/.build/artifacts/ -cp /go/bin/nodeup /src/.build/artifacts/