Skip to content

Commit 0d951d7

Browse files
committed
Add docker support to server template
1 parent 898c6c0 commit 0d951d7

File tree

4 files changed

+56
-24
lines changed

4 files changed

+56
-24
lines changed

new/server/server.go

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,19 @@ import (
1313
)
1414

1515
//go:embed templates/main.go.tmpl
16-
var goServerMainTemplate string
16+
var mainTemplate string
1717

1818
//go:embed templates/game.go.tmpl
19-
var goServerGameTemplate string
19+
var gameTemplate string
2020

2121
//go:embed templates/event_definitions.go.tmpl
22-
var goServerEventsTemplate string
22+
var eventsTemplate string
23+
24+
//go:embed templates/Dockerfile.tmpl
25+
var dockerfileTemplate string
26+
27+
//go:embed templates/dockerignore.tmpl
28+
var dockerignoreTemplate string
2329

2430
func CreateNewServer(projectName, libraryVersion string) error {
2531
module, err := cli.Input("Project module path:")
@@ -33,7 +39,7 @@ func CreateNewServer(projectName, libraryVersion string) error {
3339
}
3440

3541
cli.Begin("Installing correct go-server version...")
36-
libraryURL, libraryTag, err := getServerLibraryURL(libraryVersion)
42+
libraryURL, libraryTag, err := getLibraryURL(libraryVersion)
3743
if err != nil {
3844
return err
3945
}
@@ -45,7 +51,7 @@ func CreateNewServer(projectName, libraryVersion string) error {
4551
cli.Finish()
4652

4753
cli.Begin("Creating project template...")
48-
err = createGoServerTemplate(projectName, module, libraryURL)
54+
err = createTemplate(projectName, module, libraryURL)
4955
if err != nil {
5056
return err
5157
}
@@ -60,39 +66,36 @@ func CreateNewServer(projectName, libraryVersion string) error {
6066

6167
cli.Finish()
6268

63-
cli.Begin("Organizing imports...")
69+
return nil
70+
}
6471

65-
if !util.IsInstalled("goimports") {
66-
cli.Warn("Failed to organize import statements: 'goimports' is not installed!")
67-
return nil
72+
func createTemplate(projectName, module, libraryURL string) error {
73+
err := executeTemplate(mainTemplate, "main.go", projectName, libraryURL, module)
74+
if err != nil {
75+
return err
6876
}
69-
util.Execute(true, "goimports", "-w", "main.go")
70-
71-
packageDir := strings.ReplaceAll(strings.ReplaceAll(projectName, "_", ""), "-", "")
72-
util.Execute(true, "goimports", "-w", filepath.Join(packageDir, "game.go"))
7377

74-
cli.Finish()
75-
76-
return nil
77-
}
78+
err = executeTemplate(dockerfileTemplate, "Dockerfile", projectName, libraryURL, module)
79+
if err != nil {
80+
return err
81+
}
7882

79-
func createGoServerTemplate(projectName, module, libraryURL string) error {
80-
err := executeGoServerTemplate(goServerMainTemplate, "main.go", projectName, libraryURL, module)
83+
err = executeTemplate(dockerignoreTemplate, ".dockerignore", projectName, libraryURL, module)
8184
if err != nil {
8285
return err
8386
}
8487

8588
packageName := strings.ReplaceAll(strings.ReplaceAll(projectName, "_", ""), "-", "")
8689

87-
err = executeGoServerTemplate(goServerGameTemplate, filepath.Join(packageName, "game.go"), projectName, libraryURL, module)
90+
err = executeTemplate(gameTemplate, filepath.Join(packageName, "game.go"), projectName, libraryURL, module)
8891
if err != nil {
8992
return err
9093
}
9194

92-
return executeGoServerTemplate(goServerEventsTemplate, filepath.Join(packageName, "event_definitions.go"), projectName, libraryURL, module)
95+
return executeTemplate(eventsTemplate, filepath.Join(packageName, "event_definitions.go"), projectName, libraryURL, module)
9396
}
9497

95-
func executeGoServerTemplate(templateText, fileName, projectName, libraryURL, modulePath string) error {
98+
func executeTemplate(templateText, fileName, projectName, libraryURL, modulePath string) error {
9699
type data struct {
97100
Name string
98101
PackageName string
@@ -108,7 +111,7 @@ func executeGoServerTemplate(templateText, fileName, projectName, libraryURL, mo
108111
})
109112
}
110113

111-
func getServerLibraryURL(serverVersion string) (url string, tag string, err error) {
114+
func getLibraryURL(serverVersion string) (url string, tag string, err error) {
112115
if serverVersion == "latest" {
113116
var err error
114117
serverVersion, err = util.LatestGithubTag("code-game-project", "go-server")

new/server/templates/Dockerfile.tmpl

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
FROM golang:1.18-bullseye
2+
3+
# Set working directory for source
4+
WORKDIR /usr/src/app
5+
6+
# Pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change
7+
COPY go.mod go.sum ./
8+
RUN go mod download && go mod verify
9+
10+
# Compile the app
11+
COPY . .
12+
RUN go build -v -o /usr/local/bin ./...
13+
14+
# Switch to a low-privileged user
15+
RUN adduser --no-create-home go --shell /bin/sh && chown -R go:go /usr/local/bin
16+
USER go
17+
18+
# Expose the port
19+
ENV CG_PORT="8080"
20+
EXPOSE 8080
21+
22+
# Run the app
23+
CMD [ "{{.Name}}" ]
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.git/
2+
README.md

new/server/templates/game.go.tmpl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package {{.PackageName}}
22

3-
import "{{.LibraryURL}}"
3+
import (
4+
"fmt"
5+
6+
"{{.LibraryURL}}"
7+
)
48

59
type Game struct {
610
cg *cg.Game

0 commit comments

Comments
 (0)