From a44cf0f4a3f41a1e52b76300ead82e115d377bc0 Mon Sep 17 00:00:00 2001 From: Ambrose Chua Date: Tue, 2 Jul 2019 13:20:58 +0800 Subject: [PATCH] Switch to Go modules and script, bump to 1.0.0 Closes #3 --- .gitignore | 2 ++ Dockerfile | 33 +++++++++++------------------ README.md | 15 ++++++++++++++ go.mod | 3 +++ plugger.go | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 .gitignore create mode 100644 go.mod create mode 100644 plugger.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..34ef21a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +caddy.go +go.sum diff --git a/Dockerfile b/Dockerfile index 4a10142..f11cf40 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,38 +1,29 @@ # -# Build stage by @abiosoft https://github.com/abiosoft/caddy-docker +# Build stage # FROM golang:1.12-alpine as build # args -ARG version="0.11.5" -# add plugins here separated by commas +ARG version="1.0.0" +# add plugin import paths here separated by commas ARG plugins="" +ARG telemetry="true" # deps RUN apk add --no-cache git -# source -RUN git clone https://github.com/mholt/caddy -b "v${version}" $GOPATH/src/github.com/mholt/caddy -WORKDIR $GOPATH/src/github.com/mholt/caddy -RUN git checkout -b "v${version}" - -# plugin helper -RUN go get -v github.com/abiosoft/caddyplug/caddyplug +# build root +RUN mkdir /build +WORKDIR /build +ENV GO111MODULE=on +ENV CGO_ENABLED=0 # plugins -RUN for plugin in $(echo $plugins | tr "," " "); do \ - go get -v $(caddyplug package $plugin); \ - printf "package caddyhttp\nimport _ \"$(caddyplug package $plugin)\"" > \ - $GOPATH/src/github.com/mholt/caddy/caddyhttp/$plugin.go ; \ - done - -# builder dependency -RUN git clone https://github.com/caddyserver/builds $GOPATH/src/github.com/caddyserver/builds +COPY go.mod plugger.go ./ +RUN go run plugger.go -plugins="${plugins}" -telemetry="${telemetry}" # build -WORKDIR $GOPATH/src/github.com/mholt/caddy/caddy -RUN git checkout -f -RUN go run build.go +RUN go build RUN mv caddy / diff --git a/README.md b/README.md index 61e4a37..788ceba 100755 --- a/README.md +++ b/README.md @@ -21,3 +21,18 @@ Persist `.caddy` to avoid hitting Let's Encrypt's rate limit: ``` docker run -it --rm -p 2015:2015 -v $PWD:/srv -v $PWD/Caddyfile:/etc/Caddyfile -v $HOME/.caddy:/etc/.caddy productionwentdown/caddy ``` + +# Build with plugins + +Using `docker build` arguments: +``` +docker build -t caddy --build-arg plugins=github.com/abiosoft/caddy-git,github.com/zikes/gopkg . +``` + +You can also fork and edit plugger.go for more advanced plugin configuration + +# Build without telemetry + +``` +docker build -t caddy --build-arg telemetry=false +``` diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..c8f4a4b --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module caddy + +require github.com/mholt/caddy v1.0.0 diff --git a/plugger.go b/plugger.go new file mode 100644 index 0000000..b09f446 --- /dev/null +++ b/plugger.go @@ -0,0 +1,61 @@ +// +build ignore + +package main + +import ( + "flag" + "log" + "os" + "strings" + "text/template" +) + +var plugins string +var telemetry bool + +func main() { + flag.StringVar(&plugins, "plugins", "", "Specify plugins by full paths, seperated by commas") + flag.BoolVar(&telemetry, "telemetry", false, "Enable telemetry") + flag.Parse() + + d := &data{ + Plugins: strings.FieldsFunc(plugins, func(c rune) bool { return c == ',' }), + EnableTelemetry: telemetry, + } + + log.Printf("Additional plugins: %v", d.Plugins) + log.Printf("Enabled telemetry: %v", d.EnableTelemetry) + + f, err := os.Create("caddy.go") + defer f.Close() + if err != nil { + log.Fatal("Unable to open file") + } + + t := template.Must(template.New("caddy.go").Parse(caddyTemplate)) + t.Execute(f, d) +} + +type data struct { + Plugins []string + EnableTelemetry bool +} + +var caddyTemplate = ` +package main + +import ( + "github.com/mholt/caddy/caddy/caddymain" + + // plug in plugins here + {{range $plugin := .Plugins}} + _ "{{$plugin}}" + {{end}} +) + +func main() { + // optional: disable telemetry + caddymain.EnableTelemetry = {{.EnableTelemetry}} + caddymain.Run() +} +`