commit 2811fdd9cf162b8c724a97d1303bf86daa0eae4e Author: John Ritsema Date: Thu Jun 1 22:04:03 2023 -0400 from go-template diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f3cceee --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +app +*.swp +*.test +*.out diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..1799f52 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +golang 1.19 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..950cc51 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM golang:1.19 AS build +WORKDIR /go/src/app +COPY . . +ENV CGO_ENABLED=0 GOOS=linux +RUN go build -v -o app . + +FROM alpine:latest +WORKDIR /root/ +COPY --from=build /go/src/app/app . +CMD ["./app"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5a7d7b9 --- /dev/null +++ b/Makefile @@ -0,0 +1,50 @@ +PACKAGES := $(shell go list ./...) + +all: help + +.PHONY: help +help: Makefile + @echo + @echo " Choose a make command to run" + @echo + @sed -n 's/^##//p' $< | column -t -s ':' | sed -e 's/^/ /' + @echo + +## vet: vet code +.PHONY: vet +vet: + go vet $(PACKAGES) + +## test: run unit tests +.PHONY: test +test: + go test -race -cover $(PACKAGES) + +## build: build a binary +.PHONY: build +build: test + go build -o ./app -v + +## autobuild: auto build when source files change +.PHONY: autobuild +autobuild: + # curl -sf https://gobinaries.com/cespare/reflex | sh + reflex -g '*.go' -- sh -c 'echo "\n\n\n\n\n\n" && make build' + +## dockerbuild: build project into a docker container image +.PHONY: dockerbuild +dockerbuild: test + docker-compose build + +## start: build and run local project +.PHONY: start +start: build + clear + @echo "" + ./app + +## deploy: build code into a container and deploy it to the cloud dev environment +.PHONY: deploy +deploy: build + ./deploy.sh + diff --git a/README.md b/README.md new file mode 100644 index 0000000..92a9d3d --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# go-template + +Quick starter template for new go projects + +```sh +go mod init app +``` + +``` + Choose a make command to run + + vet vet code + test run unit tests + build build a binary + autobuild auto build when source files change + dockerbuild build project into a docker container image + start build and run local project + deploy build code into a container and deploy it to the cloud dev environment +``` diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f566e4c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,7 @@ +version: "3.7" +services: + app: + build: . + image: app:0.1.0 + environment: + FOO: bar diff --git a/main.go b/main.go new file mode 100644 index 0000000..e0d3465 --- /dev/null +++ b/main.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" + "os" + "os/signal" + "syscall" +) + +func main() { + + //exit process immediately upon sigterm + handleSigTerms() + + //run + if err := run(os.Args, os.Stdout); err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } +} + +func handleSigTerms() { + c := make(chan os.Signal, 1) + signal.Notify(c, os.Interrupt, syscall.SIGTERM) + go func() { + <-c + fmt.Println("received SIGTERM, exiting") + os.Exit(1) + }() +} diff --git a/run.go b/run.go new file mode 100644 index 0000000..ffeccfe --- /dev/null +++ b/run.go @@ -0,0 +1,11 @@ +package main + +import ( + "fmt" + "io" +) + +func run(args []string, stdout io.Writer) error { + fmt.Println("hello world") + return nil +}