Skip to content

Commit

Permalink
Merge pull request #20 from Nordstrom/use_github_releases
Browse files Browse the repository at this point in the history
Publish CLI binaries to Github releases.
  • Loading branch information
emmanuel authored Oct 6, 2017
2 parents 35981d6 + e10bcdb commit 5179c8c
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 37 deletions.
8 changes: 5 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
FROM quay.io/nordstrom/baseimage-ubuntu:16.04

ARG CURRENT_TAG

COPY kubelogin /kubelogin
COPY download/windows/kubelogin-cli-windows.zip /download/windows/
COPY download/linux/kubelogin-cli-linux.tar.gz /download/linux/
COPY download/mac/kubelogin-cli-darwin.tar.gz /download/mac/
COPY cli/windows/kubelogin-cli-windows-${CURRENT_TAG}.zip /download/windows/kubelogin-cli-windows.zip
COPY cli/linux/kubelogin-cli-linux-${CURRENT_TAG}.tar.gz /download/linux/kubelogin-cli-linux.tar.gz
COPY cli/mac/kubelogin-cli-darwin-${CURRENT_TAG}.tar.gz /download/mac/kubelogin-cli-darwin.tar.gz

ENTRYPOINT /kubelogin
127 changes: 93 additions & 34 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,42 +1,105 @@
image_tag := v0.0.2
image_name := quay.io/nordstrom/kubelogin
GITHUB_REPO_OWNER := Nordstrom
GITHUB_REPO_NAME := kubelogin
GITHUB_RELEASE_PRERELASE_BOOLEAN := true
GITHUB_RELEASES_URL := https://api.github.com/repos/$(GITHUB_REPO_OWNER)/$(GITHUB_REPO_NAME)/releases
GITHUB_INDIVIDUAL_RELEASE_ASSET_URL := https://uploads.github.com/repos/$(GITHUB_REPO_OWNER)/$(GITHUB_REPO_NAME)/releases
GITHUB_REPO_HOST_AND_PATH := github.com/$(GITHUB_REPO_OWNER)/$(GITHUB_REPO_NAME)
IMAGE_NAME := quay.io/nordstrom/kubelogin
BUILD := build
CURRENT_TAG := v0.0.3-pre

build build/download/mac build/download/linux build/download/windows:
mkdir -p $@
.PHONY: image/build image/push
.PHONY: release/tag/local release/tag/push
.PHONY: release/github/create release/github/update
.PHONY: clean

image/push: image/build
docker push $(IMAGE_NAME):$(CURRENT_TAG)

image/build: $(BUILD)/cli/mac/kubelogin-cli-darwin-$(CURRENT_TAG).tar.gz
image/build: $(BUILD)/cli/linux/kubelogin-cli-linux-$(CURRENT_TAG).tar.gz
image/build: $(BUILD)/cli/windows/kubelogin-cli-windows-$(CURRENT_TAG).zip
image/build: $(BUILD)/Dockerfile $(BUILD)/kubelogin
docker build --build-arg CURRENT_TAG=$(CURRENT_TAG) --tag $(IMAGE_NAME):$(CURRENT_TAG) $(<D)

release/tag/local:
git tag $(CURRENT_TAG)

release/tag/push:
git push --tags

release/github: release/github/create release/assets
release/github/create: $(BUILD)/github-release-$(CURRENT_TAG)-response-body.json
release/assets: release/assets/darwin release/assets/linux release/assets/windows

release/assets/darwin: $(BUILD)/cli/mac/kubelogin-cli-darwin-$(CURRENT_TAG).tar.gz $(BUILD)/github-release-$(CURRENT_TAG)-id
release/assets/linux: $(BUILD)/cli/linux/kubelogin-cli-linux-$(CURRENT_TAG).tar.gz $(BUILD)/github-release-$(CURRENT_TAG)-id
release/assets/windows: $(BUILD)/cli/windows/kubelogin-cli-windows-$(CURRENT_TAG).zip $(BUILD)/github-release-$(CURRENT_TAG)-id
release/assets/darwin release/assets/linux release/assets/windows: |
@if [ -z "$(GITHUB_USERNAME)" ]; then echo "Please set GITHUB_USERNAME"; exit 1; fi
curl -u $(GITHUB_USERNAME) \
--data-binary @"$<" \
-H "Content-Type: application/octet-stream" \
"$(GITHUB_INDIVIDUAL_RELEASE_ASSET_URL)/$$(cat $(BUILD)/github-release-$(CURRENT_TAG)-id)/assets?name=$(<F)"

# find an existing, non-draft GH release or create one for the tag $(CURRENT_TAG)
$(BUILD)/github-release-$(CURRENT_TAG)-response-body.json: | $(BUILD)
curl -s "$(GITHUB_RELEASES_URL)/tags/$(CURRENT_TAG)" > "$@"
@if [ -z "$$(cat '$@')" ]; then \
make "$(BUILD)/github-release-$(CURRENT_TAG)-response-body-new.json"; \
mv "$(BUILD)/github-release-$(CURRENT_TAG)-response-body-new.json" "$@"; \
fi

$(BUILD)/github-release-$(CURRENT_TAG)-response-body-new.json: $(BUILD)/github-release-$(CURRENT_TAG)-request-body.json
@if [ -z "$(GITHUB_USERNAME)" ]; then echo "Please set GITHUB_USERNAME"; exit 1; fi
curl -u $(GITHUB_USERNAME) -XPOST -d@"$<" "$(GITHUB_RELEASES_URL)" > "$@"

$(BUILD)/github-release-$(CURRENT_TAG)-id: $(BUILD)/github-release-$(CURRENT_TAG)-response-body.json
jq -r '.id' "$<" > "$@"

$(BUILD)/github-release-$(CURRENT_TAG)-request-body.json: Makefile | $(BUILD)
jq -n '{ \
tag_name: "$(CURRENT_TAG)", \
target_commitish: "master", \
name: "$(CURRENT_TAG)", \
body: "kubelogin release $(CURRENT_TAG)", \
draft: true, \
prerelease: $(GITHUB_RELEASE_PRERELASE_BOOLEAN) \
}' > "$@"

$(BUILD)/cli/mac/kubelogin-cli-darwin-$(CURRENT_TAG).tar.gz: $(BUILD)/cli/mac/kubelogin
$(BUILD)/cli/linux/kubelogin-cli-linux-$(CURRENT_TAG).tar.gz: $(BUILD)/cli/linux/kubelogin
$(BUILD)/cli/mac/kubelogin-cli-darwin-$(CURRENT_TAG).tar.gz $(BUILD)/cli/linux/kubelogin-cli-linux-$(CURRENT_TAG).tar.gz:
tar -C "$(@D)" -czf $@ "$(<F)"

$(BUILD)/cli/windows/kubelogin-cli-windows-$(CURRENT_TAG).zip: $(BUILD)/cli/windows/kubelogin.exe
cd "$(@D)" && zip -r -X "$(@F)" "$(<F)"

$(BUILD)/cli/mac/kubelogin: $(BUILD)/kubelogin-cli-darwin | $(BUILD)/cli/mac
$(BUILD)/cli/linux/kubelogin: $(BUILD)/kubelogin-cli-linux | $(BUILD)/cli/linux
$(BUILD)/cli/windows/kubelogin.exe: $(BUILD)/kubelogin-cli-windows | $(BUILD)/cli/windows
$(BUILD)/cli/mac/kubelogin $(BUILD)/cli/linux/kubelogin $(BUILD)/cli/windows/kubelogin.exe:
cp $< $@

# Build your golang app for the target OS
# GOOS=linux GOARCH=amd64 go build -o $@ -ldflags "-X main.Version=$(image_tag)"
build/kubelogin : cmd/server/*.go | build
# GOOS=linux GOARCH=amd64 go build -o $@ -ldflags "-X main.Version=$(CURRENT_TAG)"
$(BUILD)/kubelogin : cmd/server/*.go | build
docker run -it \
-v $(PWD):/go/src/github.com/nordstrom/kubelogin \
-v $(PWD):/go/src/$(GITHUB_REPO_HOST_AND_PATH) \
-v $(PWD)/build:/go/bin \
golang:1.7.4 \
go build -v -o /go/bin/kubelogin \
github.com/nordstrom/kubelogin/cmd/server/
$(GITHUB_REPO_HOST_AND_PATH)/cmd/server/

build/kubelogin-cli-% : cmd/cli/*.go | build
$(BUILD)/kubelogin-cli-% : cmd/cli/*.go | build
docker run -it \
-v $(PWD):/go/src/github.com/nordstrom/kubelogin \
-v $(PWD):/go/src/$(GITHUB_REPO_HOST_AND_PATH) \
-v $(PWD)/build:/go/bin \
-e GOARCH=amd64 \
-e GOOS=$* \
golang:1.9.0 \
go build -v -o /go/bin/kubelogin-cli-$* \
github.com/nordstrom/kubelogin/cmd/cli/ \

build/download/mac/kubelogin: build/kubelogin-cli-darwin | build/download/mac
build/download/linux/kubelogin: build/kubelogin-cli-linux | build/download/linux
build/download/windows/kubelogin.exe: build/kubelogin-cli-windows | build/download/windows
build/download/mac/kubelogin build/download/linux/kubelogin build/download/windows/kubelogin.exe:
cp $< $@

build/download/mac/kubelogin-cli-darwin.tar.gz: build/download/mac/kubelogin
build/download/linux/kubelogin-cli-linux.tar.gz: build/download/linux/kubelogin
build/download/mac/kubelogin-cli-darwin.tar.gz build/download/linux/kubelogin-cli-linux.tar.gz:
tar -C $(@D) -czf $@ kubelogin

build/download/windows/kubelogin-cli-windows.zip: build/download/windows/kubelogin.exe
cd build/download/windows && zip -r -X kubelogin-cli-windows.zip kubelogin.exe
go build -v -o /go/bin/kubelogin-cli-$* \
$(GITHUB_REPO_HOST_AND_PATH)/cmd/cli/ \

# Build golang app for local OS
kubelogin: cmd/server/*.go | build
Expand All @@ -49,15 +112,11 @@ kubeloginCLI: cmd/cli/*.go | build
test_app:
go test ./...

build/Dockerfile: Dockerfile | build
cp Dockerfile build/Dockerfile
$(BUILD)/Dockerfile: Dockerfile | build
cp Dockerfile $(BUILD)/Dockerfile

.PHONY: build_image push_image deploy teardown clean
build_image: build/download/linux/kubelogin-cli-linux.tar.gz build/download/windows/kubelogin-cli-windows.zip build/download/mac/kubelogin-cli-darwin.tar.gz build/kubelogin build/Dockerfile
docker build -t $(image_name):$(image_tag) build

push_image: build_image
docker push $(image_name):$(image_tag)
build $(BUILD)/cli/mac $(BUILD)/cli/linux $(BUILD)/cli/windows:
mkdir -p $@

clean:
rm -rf build

0 comments on commit 5179c8c

Please sign in to comment.