summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLain Iwakura <lain@iwakura.page>2026-03-25 21:56:03 +0300
committerLain Iwakura <lain@iwakura.page>2026-03-25 21:56:03 +0300
commita3397f54c09323b972d733aa4f4e2a4eba6cebc9 (patch)
tree2d115b62f9a3d9cd759db75cee9c191fe68e6089
parent319d696398cf5e6df63d29f3129d16cfbe272644 (diff)
feat: staaatus
-rw-r--r--.woodpecker.yaml16
-rw-r--r--Dockerfile23
-rw-r--r--server/go.mod3
-rw-r--r--server/main.go37
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)
+ }
+}