Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Commit 519829e

Browse files
committed
Add common/env package for environmental variables
1 parent 397ffe5 commit 519829e

File tree

6 files changed

+70
-33
lines changed

6 files changed

+70
-33
lines changed

Dockerfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
FROM golang:1.23-alpine AS deps
2+
COPY go.mod go.sum ./
3+
RUN go mod download
4+
15
FROM golang:1.23-alpine AS golang-with-curl
26
RUN apk --no-cache add curl
37

48
FROM golang-with-curl
59
WORKDIR /app
10+
COPY --from=deps /go/pkg/mod /go/pkg/mod
611
COPY go.mod .
712
COPY go.sum .
813
COPY common common

common/env/env.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package env
2+
3+
import "os"
4+
5+
const (
6+
HttpPrefix = "AOC2024_HTTP_PREFIX"
7+
HttpPort = "AOC2024_HTTP_PORT"
8+
GrpcPort = "AOC2024_GRPC_PORT"
9+
)
10+
11+
func GetString(
12+
key string,
13+
) string {
14+
return os.Getenv(key)
15+
}
16+
17+
func GetStringOrDefault(
18+
key string,
19+
def string,
20+
) string {
21+
v := os.Getenv(key)
22+
if v == "" {
23+
return def
24+
}
25+
return v
26+
}

common/proto/grpc.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package proto
22

33
import (
44
"context"
5+
"fmt"
6+
"github.com/terminalnode/adventofcode2024/common/env"
57
"github.com/terminalnode/adventofcode2024/common/util"
68
"google.golang.org/grpc"
79
"log"
@@ -15,12 +17,14 @@ type server struct {
1517
}
1618

1719
func CreateGRPCServer(
18-
port string,
1920
day int,
2021
part1 util.Solution,
2122
part2 util.Solution,
2223
) *grpc.Server {
23-
lis, err := net.Listen("tcp", port)
24+
port := env.GetStringOrDefault(env.GrpcPort, "50051")
25+
addr := fmt.Sprintf(":%s", port)
26+
27+
lis, err := net.Listen("tcp", addr)
2428
if err != nil {
2529
log.Fatalf("failed to listen: %v", err)
2630
}

common/setup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func Setup(
1818
part2 util.Solution,
1919
) {
2020
httpServer := web.CreateHttpServer(day, part1, part2)
21-
grpcServer := proto.CreateGRPCServer(":50051", day, part1, part2)
21+
grpcServer := proto.CreateGRPCServer(day, part1, part2)
2222

2323
// Open a signal channel, listening for SIGTERM and SIGINT
2424
signalChan := make(chan os.Signal, 1)

common/web/http.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,30 @@ package web
33
import (
44
"errors"
55
"fmt"
6+
"github.com/terminalnode/adventofcode2024/common/env"
67
"github.com/terminalnode/adventofcode2024/common/util"
78
"log"
89
"net/http"
9-
"os"
1010
)
1111

1212
func CreateHttpServer(
1313
day int,
1414
part1 util.Solution,
1515
part2 util.Solution,
1616
) *http.Server {
17-
prefix := os.Getenv("AOC2024_PREFIX")
17+
prefix := env.GetString(env.HttpPrefix)
18+
port := env.GetStringOrDefault(env.HttpPort, "3000")
19+
addr := fmt.Sprintf(":%s", port)
1820

19-
server := &http.Server{Addr: ":3000", Handler: nil}
21+
server := &http.Server{Addr: addr, Handler: nil}
2022
addHealthCheckHandlers(prefix)
2123
addSolutionHandlers(prefix, day, part1, part2)
2224
addUnknownPathHandlers()
2325

2426
go func() {
25-
log.Printf("Starting Day #%d service on port 3000", day)
27+
log.Printf("HTTP server for day #%d starting on port %s", day, addr)
2628
if err := server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
27-
log.Fatalf("Fatal server error: %v", err)
29+
log.Fatalf("Fatal HTTP server error: %v", err)
2830
}
2931
}()
3032
return server

docker-compose.yml

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ services:
1313
context: .
1414
dockerfile: Dockerfile
1515
args: { DAY: '01' }
16-
environment: { AOC2024_PREFIX: 'day01' }
16+
environment: { AOC2024_HTTP_PREFIX: 'day01' }
1717
labels:
1818
- "traefik.enable=true"
1919
- "traefik.http.routers.day01.rule=PathPrefix(`/day01`)"
@@ -28,7 +28,7 @@ services:
2828
context: .
2929
dockerfile: Dockerfile
3030
args: { DAY: '02' }
31-
environment: { AOC2024_PREFIX: 'day02' }
31+
environment: { AOC2024_HTTP_PREFIX: 'day02' }
3232
labels:
3333
- "traefik.enable=true"
3434
- "traefik.http.routers.day02.rule=PathPrefix(`/day02`)"
@@ -43,7 +43,7 @@ services:
4343
context: .
4444
dockerfile: Dockerfile
4545
args: { DAY: '03' }
46-
environment: { AOC2024_PREFIX: 'day03' }
46+
environment: { AOC2024_HTTP_PREFIX: 'day03' }
4747
labels:
4848
- "traefik.enable=true"
4949
- "traefik.http.routers.day03.rule=PathPrefix(`/day03`)"
@@ -58,7 +58,7 @@ services:
5858
context: .
5959
dockerfile: Dockerfile
6060
args: { DAY: '04' }
61-
environment: { AOC2024_PREFIX: 'day04' }
61+
environment: { AOC2024_HTTP_PREFIX: 'day04' }
6262
labels:
6363
- "traefik.enable=true"
6464
- "traefik.http.routers.day04.rule=PathPrefix(`/day04`)"
@@ -73,7 +73,7 @@ services:
7373
context: .
7474
dockerfile: Dockerfile
7575
args: { DAY: '05' }
76-
environment: { AOC2024_PREFIX: 'day05' }
76+
environment: { AOC2024_HTTP_PREFIX: 'day05' }
7777
labels:
7878
- "traefik.enable=true"
7979
- "traefik.http.routers.day05.rule=PathPrefix(`/day05`)"
@@ -88,7 +88,7 @@ services:
8888
context: .
8989
dockerfile: Dockerfile
9090
args: { DAY: '06' }
91-
environment: { AOC2024_PREFIX: 'day06' }
91+
environment: { AOC2024_HTTP_PREFIX: 'day06' }
9292
labels:
9393
- "traefik.enable=true"
9494
- "traefik.http.routers.day06.rule=PathPrefix(`/day06`)"
@@ -103,7 +103,7 @@ services:
103103
context: .
104104
dockerfile: Dockerfile
105105
args: { DAY: '07' }
106-
environment: { AOC2024_PREFIX: 'day07' }
106+
environment: { AOC2024_HTTP_PREFIX: 'day07' }
107107
labels:
108108
- "traefik.enable=true"
109109
- "traefik.http.routers.day07.rule=PathPrefix(`/day07`)"
@@ -118,7 +118,7 @@ services:
118118
context: .
119119
dockerfile: Dockerfile
120120
args: { DAY: '08' }
121-
environment: { AOC2024_PREFIX: 'day08' }
121+
environment: { AOC2024_HTTP_PREFIX: 'day08' }
122122
labels:
123123
- "traefik.enable=true"
124124
- "traefik.http.routers.day08.rule=PathPrefix(`/day08`)"
@@ -133,7 +133,7 @@ services:
133133
context: .
134134
dockerfile: Dockerfile
135135
args: { DAY: '09' }
136-
environment: { AOC2024_PREFIX: 'day09' }
136+
environment: { AOC2024_HTTP_PREFIX: 'day09' }
137137
labels:
138138
- "traefik.enable=true"
139139
- "traefik.http.routers.day09.rule=PathPrefix(`/day09`)"
@@ -148,7 +148,7 @@ services:
148148
context: .
149149
dockerfile: Dockerfile
150150
args: { DAY: '10' }
151-
environment: { AOC2024_PREFIX: 'day10' }
151+
environment: { AOC2024_HTTP_PREFIX: 'day10' }
152152
labels:
153153
- "traefik.enable=true"
154154
- "traefik.http.routers.day10.rule=PathPrefix(`/day10`)"
@@ -163,7 +163,7 @@ services:
163163
context: .
164164
dockerfile: Dockerfile
165165
args: { DAY: '11' }
166-
environment: { AOC2024_PREFIX: 'day11' }
166+
environment: { AOC2024_HTTP_PREFIX: 'day11' }
167167
labels:
168168
- "traefik.enable=true"
169169
- "traefik.http.routers.day11.rule=PathPrefix(`/day11`)"
@@ -178,7 +178,7 @@ services:
178178
context: .
179179
dockerfile: Dockerfile
180180
args: { DAY: '12' }
181-
environment: { AOC2024_PREFIX: 'day12' }
181+
environment: { AOC2024_HTTP_PREFIX: 'day12' }
182182
labels:
183183
- "traefik.enable=true"
184184
- "traefik.http.routers.day12.rule=PathPrefix(`/day12`)"
@@ -193,7 +193,7 @@ services:
193193
context: .
194194
dockerfile: Dockerfile
195195
args: { DAY: '13' }
196-
environment: { AOC2024_PREFIX: 'day13' }
196+
environment: { AOC2024_HTTP_PREFIX: 'day13' }
197197
labels:
198198
- "traefik.enable=true"
199199
- "traefik.http.routers.day13.rule=PathPrefix(`/day13`)"
@@ -208,7 +208,7 @@ services:
208208
context: .
209209
dockerfile: Dockerfile
210210
args: { DAY: '14' }
211-
environment: { AOC2024_PREFIX: 'day14' }
211+
environment: { AOC2024_HTTP_PREFIX: 'day14' }
212212
labels:
213213
- "traefik.enable=true"
214214
- "traefik.http.routers.day14.rule=PathPrefix(`/day14`)"
@@ -223,7 +223,7 @@ services:
223223
context: .
224224
dockerfile: Dockerfile
225225
args: { DAY: '15' }
226-
environment: { AOC2024_PREFIX: 'day15' }
226+
environment: { AOC2024_HTTP_PREFIX: 'day15' }
227227
labels:
228228
- "traefik.enable=true"
229229
- "traefik.http.routers.day15.rule=PathPrefix(`/day15`)"
@@ -238,7 +238,7 @@ services:
238238
context: .
239239
dockerfile: Dockerfile
240240
args: { DAY: '16' }
241-
environment: { AOC2024_PREFIX: 'day16' }
241+
environment: { AOC2024_HTTP_PREFIX: 'day16' }
242242
labels:
243243
- "traefik.enable=true"
244244
- "traefik.http.routers.day16.rule=PathPrefix(`/day16`)"
@@ -253,7 +253,7 @@ services:
253253
context: .
254254
dockerfile: Dockerfile
255255
args: { DAY: '17' }
256-
environment: { AOC2024_PREFIX: 'day17' }
256+
environment: { AOC2024_HTTP_PREFIX: 'day17' }
257257
labels:
258258
- "traefik.enable=true"
259259
- "traefik.http.routers.day17.rule=PathPrefix(`/day17`)"
@@ -268,7 +268,7 @@ services:
268268
context: .
269269
dockerfile: Dockerfile
270270
args: { DAY: '18' }
271-
environment: { AOC2024_PREFIX: 'day18' }
271+
environment: { AOC2024_HTTP_PREFIX: 'day18' }
272272
labels:
273273
- "traefik.enable=true"
274274
- "traefik.http.routers.day18.rule=PathPrefix(`/day18`)"
@@ -283,7 +283,7 @@ services:
283283
context: .
284284
dockerfile: Dockerfile
285285
args: { DAY: '19' }
286-
environment: { AOC2024_PREFIX: 'day19' }
286+
environment: { AOC2024_HTTP_PREFIX: 'day19' }
287287
labels:
288288
- "traefik.enable=true"
289289
- "traefik.http.routers.day19.rule=PathPrefix(`/day19`)"
@@ -298,7 +298,7 @@ services:
298298
context: .
299299
dockerfile: Dockerfile
300300
args: { DAY: '20' }
301-
environment: { AOC2024_PREFIX: 'day20' }
301+
environment: { AOC2024_HTTP_PREFIX: 'day20' }
302302
labels:
303303
- "traefik.enable=true"
304304
- "traefik.http.routers.day20.rule=PathPrefix(`/day20`)"
@@ -313,7 +313,7 @@ services:
313313
context: .
314314
dockerfile: Dockerfile
315315
args: { DAY: '21' }
316-
environment: { AOC2024_PREFIX: 'day21' }
316+
environment: { AOC2024_HTTP_PREFIX: 'day21' }
317317
labels:
318318
- "traefik.enable=true"
319319
- "traefik.http.routers.day21.rule=PathPrefix(`/day21`)"
@@ -328,7 +328,7 @@ services:
328328
context: .
329329
dockerfile: Dockerfile
330330
args: { DAY: '22' }
331-
environment: { AOC2024_PREFIX: 'day22' }
331+
environment: { AOC2024_HTTP_PREFIX: 'day22' }
332332
labels:
333333
- "traefik.enable=true"
334334
- "traefik.http.routers.day22.rule=PathPrefix(`/day22`)"
@@ -343,7 +343,7 @@ services:
343343
context: .
344344
dockerfile: Dockerfile
345345
args: { DAY: '23' }
346-
environment: { AOC2024_PREFIX: 'day23' }
346+
environment: { AOC2024_HTTP_PREFIX: 'day23' }
347347
labels:
348348
- "traefik.enable=true"
349349
- "traefik.http.routers.day23.rule=PathPrefix(`/day23`)"
@@ -358,7 +358,7 @@ services:
358358
context: .
359359
dockerfile: Dockerfile
360360
args: { DAY: '24' }
361-
environment: { AOC2024_PREFIX: 'day24' }
361+
environment: { AOC2024_HTTP_PREFIX: 'day24' }
362362
labels:
363363
- "traefik.enable=true"
364364
- "traefik.http.routers.day24.rule=PathPrefix(`/day24`)"
@@ -373,7 +373,7 @@ services:
373373
context: .
374374
dockerfile: Dockerfile
375375
args: { DAY: '25' }
376-
environment: { AOC2024_PREFIX: 'day25' }
376+
environment: { AOC2024_HTTP_PREFIX: 'day25' }
377377
labels:
378378
- "traefik.enable=true"
379379
- "traefik.http.routers.day25.rule=PathPrefix(`/day25`)"

0 commit comments

Comments
 (0)