diff options
| author | Lain Iwakura <lain@iwakura.page> | 2026-03-25 21:56:03 +0300 |
|---|---|---|
| committer | Lain Iwakura <lain@iwakura.page> | 2026-03-25 21:56:03 +0300 |
| commit | a3397f54c09323b972d733aa4f4e2a4eba6cebc9 (patch) | |
| tree | 2d115b62f9a3d9cd759db75cee9c191fe68e6089 | |
| parent | 319d696398cf5e6df63d29f3129d16cfbe272644 (diff) | |
feat: staaatus
| -rw-r--r-- | .woodpecker.yaml | 16 | ||||
| -rw-r--r-- | Dockerfile | 23 | ||||
| -rw-r--r-- | server/go.mod | 3 | ||||
| -rw-r--r-- | server/main.go | 37 |
4 files changed, 79 insertions, 0 deletions
diff --git a/.woodpecker.yaml b/.woodpecker.yaml new file mode 100644 index 0000000..984bd93 --- /dev/null +++ b/.woodpecker.yaml @@ -0,0 +1,16 @@ +steps: + - name: build + image: docker:dind + privileged: true + commands: + - dockerd-entrypoint.sh & + - sleep 3 + - docker build -t reg.nx.kroot.sh/blog:latest -t reg.nx.kroot.sh/blog:${CI_COMMIT_SHA:0:7} . + - echo "$REGISTRY_PASSWORD" | docker login reg.nx.kroot.sh -u "$REGISTRY_USER" --password-stdin + - docker push reg.nx.kroot.sh/blog:latest + - docker push reg.nx.kroot.sh/blog:${CI_COMMIT_SHA:0:7} + secrets: [registry_user, registry_password] + +when: + branch: master + event: push diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..089bd0f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM reg.nx.kroot.sh/makko AS builder-makko + +WORKDIR /src +COPY blog/ blog/ +COPY templates/ templates/ +COPY makko.json . + +RUN makko . + +FROM golang:alpine AS builder-go + +WORKDIR /src +COPY server/go.mod server/main.go ./ +COPY --from=builder-makko /src/web ./static/ + +RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /blog-server . + +FROM scratch + +COPY --from=builder-go /blog-server /blog-server + +EXPOSE 8080 +ENTRYPOINT ["/blog-server"] diff --git a/server/go.mod b/server/go.mod new file mode 100644 index 0000000..8b76811 --- /dev/null +++ b/server/go.mod @@ -0,0 +1,3 @@ +module blog-server + +go 1.22 diff --git a/server/main.go b/server/main.go new file mode 100644 index 0000000..bffc427 --- /dev/null +++ b/server/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "embed" + "flag" + "io/fs" + "log/slog" + "net/http" // sure, we could use fiber... but for now lets' stick with net/http to keep dependencies to a minimum + "os" +) + +//go:embed static/* +var staticFS embed.FS + +func main() { + addr := flag.String("addr", ":8080", "listen address") + flag.Parse() + + logger := slog.New(slog.NewTextHandler(os.Stdout, nil)) + slog.SetDefault(logger) + + /* strip "static/" prefix so files are served from root */ + subFS, err := fs.Sub(staticFS, "static") + if err != nil { + slog.Error("failed to create sub filesystem", "error", err) + os.Exit(1) + } + + fileServer := http.FileServer(http.FS(subFS)) + http.Handle("/", fileServer) + + slog.Info("starting server", "addr", *addr) + if err := http.ListenAndServe(*addr, nil); err != nil { + slog.Error("server failed", "error", err) + os.Exit(1) + } +} |
