From 4ee92ddfce692868388c7c289f9c0485dca228b3 Mon Sep 17 00:00:00 2001 From: Josh Finnie Date: Tue, 26 Nov 2019 17:28:20 -0500 Subject: [PATCH] Adding the ability to develop Gorson completely in Docker. (#19) * Adding the ability to develop Gorson completely in Docker. * adding a docker compose file too * updated docker docs to show docker-compose too * fixing typo --- Dockerfile | 11 +++++++++++ docker-compose.yml | 6 ++++++ docs/docker.md | 40 +++++++++++++++++++++++++++++++++++++++ scripts/docker-release.sh | 34 +++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 docs/docker.md create mode 100755 scripts/docker-release.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0e73f4f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM golang:1.13.4-alpine + +# borrowed with gratitude from confd +# https://github.com/kelseyhightower/confd/blob/master/Dockerfile.build.alpine?at=09f6676 + +WORKDIR /app +RUN apk add --no-cache bash gcc git musl-dev + +COPY go.mod /app/go.mod +COPY go.sum /app/go.sum +RUN go mod download diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..686b57f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,6 @@ +version: '3' +services: + builder: + build: . + volumes: + - .:/app diff --git a/docs/docker.md b/docs/docker.md new file mode 100644 index 0000000..ba791a7 --- /dev/null +++ b/docs/docker.md @@ -0,0 +1,40 @@ +# Setting up Docker + +This repository has been built with development of `gorson` done entirely in Docker in mind. Below are the steps required to get +this package up and running through Docker. + +## Build Docker image + +```bash +$ docker build -t gorson . +``` + +or + +```bash +$ docker-compose build +``` + +## Run tests on Docker image + +```bash +$ docker run -it -v `pwd`:/app gorson ./scripts/test.sh +``` + +or + +```bash +$ docker-compose run --rm builder ./scripts/test.sh +``` + +## Create releases + +```bash +$ docker run -it -v `pwd`:/app gorson ./scripts/docker-release.sh +``` + +or + +```bash +$ docker-compose run --rm builder ./scripts/docker-release.sh +``` diff --git a/scripts/docker-release.sh b/scripts/docker-release.sh new file mode 100755 index 0000000..94460dd --- /dev/null +++ b/scripts/docker-release.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +# tooling logic borrowed heavily from the talented minds of confd +# https://github.com/kelseyhightower/confd/blob/master/Makefile + +cd "$( dirname "${BASH_SOURCE[0]}" )/.." + +./scripts/clean.sh +mkdir -p bin + +VERSION=`egrep -o '[0-9]+\.[0-9a-z.\-]+' ./internal/gorson/version/version.go` + +# We want to make sure the final builds are formatted and linted properly. +./scripts/format.sh +./scripts/lint.sh + +# for each of our target platforms we use the gorson_builder +# docker container to compile a binary of our application +>&2 echo "compiling binaries for release" +for platform in darwin linux; do \ + binary_name="gorson-${VERSION}-${platform}-amd64" + >&2 echo "compiling $binary_name" + + # * GOOS is the target operating system + # * GOARCH is the target processor architecture + # (we only compile for amd64 systems) + # see https://golang.org/cmd/go/#hdr-Environment_variables + # * CGO_ENABLED controls whether the go compiler allows us to + # import C packages (we don't do this, so we set it to 0 to turn CGO off) + # see https://golang.org/cmd/cgo/ + GOOS=$platform GOARCH=amd64 CGO_ENABLED=0 go build -o bin/$binary_name +done