penguin/AstroJS

Javascript framework for my blog

commit b97bd85533bf4f4487084864ca87c947a7e1fc51

author斟酌 鵬兄 <tgckpg@gmail.com>
date2026-06-12T05:05:32Z
subjectUpdate deployment
commit b97bd85533bf4f4487084864ca87c947a7e1fc51
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2026-06-12T05:05:32Z

    Update deployment
---
 Dockerfile                                        |  1 +
 concourse/prepare-deployment-resources.yaml       |  2 -
 k8s/configmap.yaml                                | 25 -------
 k8s/deployments.yaml                              | 87 +++++++++--------------
 k8s/ingress.yaml                                  | 33 ---------
 mk/resolver-go.mk                                 |  6 ++
 resolver-go/README.md                             | 10 +--
 resolver-go/botanjs                               |  1 +
 resolver-go/cmd/{botan-api => api-server}/main.go |  0
 resolver-go/dockerfiles/api.Dockerfile            |  6 +-
 resolver-go/internal/generated/buildinfo_gen.go   |  2 +-
 resolver-go/src                                   |  1 -
 12 files changed, 47 insertions(+), 127 deletions(-)

diff --git a/Dockerfile b/Dockerfile
new file mode 120000
index 0000000..08a84fa
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1 @@
+resolver-go/dockerfiles/api.Dockerfile
\ No newline at end of file
diff --git a/concourse/prepare-deployment-resources.yaml b/concourse/prepare-deployment-resources.yaml
index 2eb6998..ab371da 100644
--- a/concourse/prepare-deployment-resources.yaml
+++ b/concourse/prepare-deployment-resources.yaml
@@ -18,6 +18,4 @@ run:
     - -exc
     - |
       VERSION=$( cat commit.sha )
-      cat k8s/configmap.yaml >> deploy-confs/prod.yaml
-      echo -e "\n---\n" >> deploy-confs/prod.yaml
       sed "s/IMAGE_TAG/$VERSION/g" k8s/deployments.yaml >> deploy-confs/prod.yaml
diff --git a/k8s/configmap.yaml b/k8s/configmap.yaml
deleted file mode 100644
index 29ef51c..0000000
--- a/k8s/configmap.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: astrojs-nginx-ctmpls
-  namespace: default
-data:
-  default.conf.template: |
-    server {
-        listen       80;
-        listen  [::]:80;
-        server_name  localhost;
-
-        expires 10d;
-        add_header Cache-Control "public";
-
-        location / {
-            root   /usr/share/nginx/html;
-            index  index.html index.htm;
-        }
-
-        error_page   500 502 503 504  /50x.html;
-        location = /50x.html {
-            root   /usr/share/nginx/html;
-        }
-    }
diff --git a/k8s/deployments.yaml b/k8s/deployments.yaml
index 46b167a..24565da 100644
--- a/k8s/deployments.yaml
+++ b/k8s/deployments.yaml
@@ -22,70 +22,47 @@ spec:
             runAsNonRoot: true
             runAsUser: 1001
           env:
-            - name: DEBUG
-              value: "0"
-          volumeMounts:
-          - name: cache
-            mountPath: "/app/cache"
-          livenessProbe:
-            exec:
-              command:
-                - sh
-                - -c
-                - wget -qO - http://127.0.0.1:5000/health
-        - name: redis
-          image: redis:6.0.8-alpine
-        - name: compiler
-          image: registry.k8s.astropenguin.net/closure-api:IMAGE_TAG
-          securityContext:
-            runAsNonRoot: true
-          env:
-            - name: DEBUG
-              value: "0"
-          volumeMounts:
-          - name: cache
-            mountPath: "/app/cache"
-        - name: assets
-          image: nginx:alpine
-          volumeMounts:
-            - mountPath: "/usr/share/nginx/html"
-              name: cache
-            - mountPath: "/etc/nginx/templates"
-              name: nginx-conf-templates
-      volumes:
-        - name: cache
-          persistentVolumeClaim:
-            claimName: astrojs-cache
-        - name: nginx-conf-templates
-          configMap:
-            name: astrojs-nginx-ctmpls
+            - name: CLOSURE_ENDPOINT
+              value: "http://closure-api.default.svc.cluster.local/compile"
 
 ---
 
 apiVersion: v1
-kind: PersistentVolumeClaim
+kind: Service
 metadata:
-  name: astrojs-cache
+  name: astrojs
 spec:
-  accessModes: [ "ReadWriteOnce" ]
-  resources:
-    requests:
-      storage: 1Gi
-  storageClassName: local-storage
+  selector:
+    app: astrojs
+  ports:
+    - port: 8080
+      targetPort: 8080
+      name: web
 
 ---
 
-apiVersion: v1
-kind: Service
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
 metadata:
   name: astrojs
 spec:
-  selector:
-    app: astrojs
-  ports:
-    - port: 5000
-      targetPort: 5000
-      name: application
-    - port: 80
-      targetPort: 80
-      name: files
+  parentRefs:
+    - name: gateway-prod
+      namespace: cilium-system
+      sectionName: k8s-astropenguin-net
+  hostnames:
+    - astrojs.k8s.astropenguin.net
+  rules:
+    - matches:
+        - path:
+            type: PathPrefix
+            value: /
+      filters:
+        - type: URLRewrite
+          urlRewrite:
+            path:
+              type: ReplaceFullPath
+              replaceFullPath: /
+      backendRefs:
+        - name: astrojs
+          port: 8080
diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml
deleted file mode 100644
index 1971d8c..0000000
--- a/k8s/ingress.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: default-astrojs
-  namespace: ingress-https
-spec:
-  ingressClassName: nginx
-  tls:
-  - hosts:
-    - astrojs.k8s.astropenguin.net
-    secretName: any-k8s-astro-prod
-  rules:
-  - host: astrojs.k8s.astropenguin.net
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: default-astrojs
-            port:
-              number: 5000
-
----
-
-kind: Service
-apiVersion: v1
-metadata:
-  name: default-astrojs
-  namespace: ingress-https
-spec:
-  type: ExternalName
-  externalName: astrojs.default.svc.cluster.local
diff --git a/mk/resolver-go.mk b/mk/resolver-go.mk
index 5d9c7b4..8881634 100644
--- a/mk/resolver-go.mk
+++ b/mk/resolver-go.mk
@@ -34,6 +34,12 @@ push-resolver: .buildinfo ensure-buildx resolver-gen
 		-t $(RESOLVER_IMAGE_NAME):$(RESOLVER_IMAGE_TAG) \
 		--push .
 
+run-api-server:
+	cd $(GO_SRC_DIR) && \
+	go run ./cmd/classmap-gen -src "$(JS_SRC_DIR)" && \
+	go run ./cmd/externs-gen -src "$(JS_SRC_DIR)" && \
+	go run ./cmd/api-server -src "$(JS_SRC_DIR)" -addr :8080
+
 inspect-resolver:
 	docker buildx imagetools inspect $(RESOLVER_IMAGE_NAME):$(RESOLVER_IMAGE_TAG)
 
diff --git a/resolver-go/README.md b/resolver-go/README.md
index d841690..6c46e95 100644
--- a/resolver-go/README.md
+++ b/resolver-go/README.md
@@ -10,9 +10,7 @@ Go rewrite for the old BotanJS dynamic resource resolver.
 ## Generate the class map
 
 ```sh
-go run ./cmd/botan-gen \
-  -src /path/to/BotanJS/src \
-  -out internal/generated/classmap_gen.go
+make resolver-gen
 ```
 
 Commit the generated file if the source tree is mostly static. Generate it in CI if the source changes frequently.
@@ -20,7 +18,7 @@ Commit the generated file if the source tree is mostly static. Generate it in CI
 ## Run API
 
 ```sh
-go run ./cmd/botan-api -src /path/to/BotanJS/src -addr :8080
+make run-api-server
 ```
 
 Examples:
@@ -43,6 +41,4 @@ Prefix an item with `-` to exclude it.
 
 ## TODO
 
-- Test against the old python resolver output
-- Add an output interface so JS can be piped directly to a Closure Compiler server.
-- Put generated classmap in a separate package if multiple services need to import it.
+- Fix moderen closure errors
diff --git a/resolver-go/botanjs b/resolver-go/botanjs
new file mode 120000
index 0000000..30d1549
--- /dev/null
+++ b/resolver-go/botanjs
@@ -0,0 +1 @@
+../botanjs/
\ No newline at end of file
diff --git a/resolver-go/cmd/botan-api/main.go b/resolver-go/cmd/api-server/main.go
similarity index 100%
rename from resolver-go/cmd/botan-api/main.go
rename to resolver-go/cmd/api-server/main.go
diff --git a/resolver-go/dockerfiles/api.Dockerfile b/resolver-go/dockerfiles/api.Dockerfile
index e402d68..9548054 100644
--- a/resolver-go/dockerfiles/api.Dockerfile
+++ b/resolver-go/dockerfiles/api.Dockerfile
@@ -19,15 +19,15 @@ RUN --mount=type=cache,target=/go/pkg/mod \
     CGO_ENABLED=0 \
     GOOS=$TARGETOS \
     GOARCH=$TARGETARCH \
-    go build  -trimpath -o /out/botan-api -ldflags='-s -w' ./cmd/botan-api
+    go build  -trimpath -o /out/api-server -ldflags='-s -w' ./cmd/api-server
 
 RUN mkdir -p /out/tmp && chmod 1777 /out/tmp
 
 FROM scratch
 
-COPY --from=build /out/botan-api /usr/local/bin/botan-api
+COPY --from=build /out/api-server /usr/local/bin/api-server
 COPY --from=build /workspace/src "./src"
 COPY --from=build /out/tmp /tmp
 
 EXPOSE 8080/tcp
-ENTRYPOINT ["/usr/local/bin/botan-api", "-src", "./src", "-addr", ":8080"]
+ENTRYPOINT ["/usr/local/bin/api-server", "-src", "./src", "-addr", ":8080"]
diff --git a/resolver-go/internal/generated/buildinfo_gen.go b/resolver-go/internal/generated/buildinfo_gen.go
index 5246ed0..fc6b5e0 100644
--- a/resolver-go/internal/generated/buildinfo_gen.go
+++ b/resolver-go/internal/generated/buildinfo_gen.go
@@ -2,5 +2,5 @@ package generated
 
 const (
 	IMAGE_TAG   = "dev"
-	Timestamp   = "20260612.043857"
+	Timestamp   = "20260612.044857"
 )
diff --git a/resolver-go/src b/resolver-go/src
deleted file mode 120000
index c6a0283..0000000
--- a/resolver-go/src
+++ /dev/null
@@ -1 +0,0 @@
-../botanjs/src
\ No newline at end of file