diff --git a/.travis.yml b/.travis.yml index b1f5686..c9f6e4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,31 @@ -sudo: false +dist: trusty + language: go + go: - - 1.8 -before_script: go get github.com/mitchellh/gox -script: go build -after_success: gox -osarch="linux/amd64" && echo $TRAVIS_TEST_RESULT +- 1.8.x +- 1.9.x + +cache: + directories: + - ${TRAVIS_BUILD_DIR}/vendor + +services: +- docker + +install: +- go get github.com/golang/dep/cmd/dep +- dep ensure + +before_script: +- docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"; + +script: +- make build + +after_success: +- if [ -n "$TRAVIS_TAG" ]; then + make TAG=${TRAVIS_TAG} deploy; + fi +- make TAG=latest deploy +- make TAG=${TRAVIS_COMMIT} deploy diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fd1c903 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM debian + +# Non-root user `app` +RUN useradd app +WORKDIR /home/app + +COPY bin/ipify-api ./ + +ENV LOGGING_LEVEL WARNING + +COPY docker-entrypoint.sh ./ + +RUN chown -R app:app /home/app + +# Change to user `app` +USER app + +ENTRYPOINT ["./docker-entrypoint.sh"] + +CMD ["./ipify-api"] diff --git a/Gopkg.lock b/Gopkg.lock new file mode 100644 index 0000000..2afe254 --- /dev/null +++ b/Gopkg.lock @@ -0,0 +1,26 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + digest = "1:178a2b54e1bf1369822ee69876aab810f2a30ba3acbed4d0a502e7aa5bb781ae" + name = "github.com/julienschmidt/httprouter" + packages = ["."] + pruneopts = "UT" + revision = "9034cff70da2ab5888417e40d23cd213a1587f16" + +[[projects]] + digest = "1:9989cf75f82f97e62a2c5d2a3aecd586f272aaecd59646cff3eadbf79150c64f" + name = "github.com/rs/cors" + packages = ["."] + pruneopts = "UT" + revision = "eb527c8097e0f19a3ff7b253a3fe70545070f420" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + input-imports = [ + "github.com/julienschmidt/httprouter", + "github.com/rs/cors", + ] + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml new file mode 100644 index 0000000..d7072c2 --- /dev/null +++ b/Gopkg.toml @@ -0,0 +1,30 @@ +# Gopkg.toml example +# +# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" +# +# [prune] +# non-go = false +# go-tests = true +# unused-packages = true + + +[prune] + go-tests = true + unused-packages = true diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..212c826 --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +TAG=latest +BIN=ipify-api +IMAGE=unchartedsky/$(BIN) + +build: + dep ensure + go build -o bin/$(BIN) . + +image: build + dep ensure + GOOS=linux GOARCH=amd64 go build -o bin/$(BIN) . + docker build -t $(IMAGE):$(TAG) . + +deploy: image + docker push $(IMAGE):$(TAG) + +.PHONY: clean + +clean: + rm -rf bin/ + +cleanall: clean + rm -rf vendor/ + diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 0000000..8980e8f --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +if [ "$1" != "./ipify-api" ]; then + exec "$@" + exit $? +fi + +exec "$@" -logtostderr=true -stderrthreshold=${LOGGING_LEVEL}