From 6011ce120a4b2df9314a800fc93a61f852b766c1 Mon Sep 17 00:00:00 2001
From: Matthew Holt <mholt@users.noreply.github.com>
Date: Mon, 4 Nov 2019 12:13:21 -0700
Subject: [PATCH] cmd: Move module imports into standard packages

This makes it easier to make "standard" caddy builds, since you'll only
need to add a single import to get all of Caddy's standard modules.

There is a package for all of Caddy's standard modules (modules/standard)
and a package for the HTTP app's standard modules only
(modules/caddyhttp/standard).

We still need to decide which of these, if not all of them, should be
kept in the standard build. Those which aren't should be moved out of
this repo. See #2780.
---
 cmd/caddy/main.go                     | 39 ++++++++++-----------------
 modules/caddyhttp/standard/imports.go | 21 +++++++++++++++
 modules/standard/import.go            | 14 ++++++++++
 3 files changed, 49 insertions(+), 25 deletions(-)
 create mode 100644 modules/caddyhttp/standard/imports.go
 create mode 100644 modules/standard/import.go

diff --git a/cmd/caddy/main.go b/cmd/caddy/main.go
index 54220ded0..2383546a2 100644
--- a/cmd/caddy/main.go
+++ b/cmd/caddy/main.go
@@ -12,36 +12,25 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+// Package main is the entry point of the Caddy application.
+// Most of Caddy's functionality is provided through modules,
+// which can be plugged in by adding their import below.
+//
+// There is no need to modify the Caddy source code to customize your
+// builds. You can easily build a custom Caddy with these simple steps:
+//
+//   1. Copy this file (main.go) into a new folder
+//   2. Edit the imports below to include the modules you want plugged in
+//   3. Run `go mod init caddy`
+//   4. Run `go install` or `go build` - you now have a custom binary!
+//
 package main
 
 import (
 	caddycmd "github.com/caddyserver/caddy/v2/cmd"
 
-	// this is where modules get plugged in
-	_ "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
-	_ "github.com/caddyserver/caddy/v2/caddyconfig/json5"
-	_ "github.com/caddyserver/caddy/v2/caddyconfig/jsonc"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/caddyauth"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode/brotli"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode/gzip"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode/zstd"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/headers"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/httpcache"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/markdown"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/requestbody"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy/fastcgi"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/starlarkmw"
-	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/templates"
-	_ "github.com/caddyserver/caddy/v2/modules/caddytls"
-	_ "github.com/caddyserver/caddy/v2/modules/caddytls/distributedstek"
-	_ "github.com/caddyserver/caddy/v2/modules/caddytls/standardstek"
-	_ "github.com/caddyserver/caddy/v2/modules/filestorage"
-	_ "github.com/caddyserver/caddy/v2/modules/logging"
+	// plug in Caddy modules here
+	_ "github.com/caddyserver/caddy/v2/modules/standard"
 )
 
 func main() {
diff --git a/modules/caddyhttp/standard/imports.go b/modules/caddyhttp/standard/imports.go
new file mode 100644
index 000000000..0e4e1b88a
--- /dev/null
+++ b/modules/caddyhttp/standard/imports.go
@@ -0,0 +1,21 @@
+package standard
+
+import (
+	// standard Caddy HTTP app modules
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/caddyauth"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode/brotli"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode/gzip"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode/zstd"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/headers"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/httpcache"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/markdown"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/requestbody"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy/fastcgi"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/starlarkmw"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/templates"
+)
diff --git a/modules/standard/import.go b/modules/standard/import.go
new file mode 100644
index 000000000..5ecfb4ac4
--- /dev/null
+++ b/modules/standard/import.go
@@ -0,0 +1,14 @@
+package standard
+
+import (
+	// standard Caddy modules
+	_ "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
+	_ "github.com/caddyserver/caddy/v2/caddyconfig/json5"
+	_ "github.com/caddyserver/caddy/v2/caddyconfig/jsonc"
+	_ "github.com/caddyserver/caddy/v2/modules/caddyhttp/standard"
+	_ "github.com/caddyserver/caddy/v2/modules/caddytls"
+	_ "github.com/caddyserver/caddy/v2/modules/caddytls/distributedstek"
+	_ "github.com/caddyserver/caddy/v2/modules/caddytls/standardstek"
+	_ "github.com/caddyserver/caddy/v2/modules/filestorage"
+	_ "github.com/caddyserver/caddy/v2/modules/logging"
+)