diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..94a5f36 --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +include mk/common.mk +include mk/resolver-go.mk +include mk/closure-api.mk + +build: build-resolver build-closure + +.PHONY: build diff --git a/closure-compilerd/Dockerfile b/closure-api/Dockerfile similarity index 57% rename from closure-compilerd/Dockerfile rename to closure-api/Dockerfile index c3d1e9a..146aff4 100644 --- a/closure-compilerd/Dockerfile +++ b/closure-api/Dockerfile @@ -2,29 +2,31 @@ FROM maven:3.9-eclipse-temurin-21 AS build WORKDIR /src +ARG JAVA_SRC_DIR +ARG CLOSURE_NAME + # Copy pom first so Docker can cache dependencies. -COPY pom.xml . +COPY $JAVA_SRC_DIR/pom.xml . RUN --mount=type=cache,target=/root/.m2 \ mvn -B -DskipTests dependency:go-offline -COPY src ./src +COPY $JAVA_SRC_DIR/src ./src RUN --mount=type=cache,target=/root/.m2 \ mvn -B -DskipTests package - FROM eclipse-temurin:21-jre WORKDIR /app +ARG JAVA_SRC_DIR +ARG CLOSURE_NAME + RUN useradd -r -u 10001 closure -COPY --from=build /src/target/closure-compilerd-0.1.0.jar /app/closure-compilerd.jar - -# Optional: put your JS source tree/configs here if you want the container -# to compile files from inside the image. -COPY example ./example +COPY --from=build /src/target/${CLOSURE_NAME}-0.1.0.jar /app/runtime.jar +COPY $JAVA_SRC_DIR/example ./example USER closure @@ -34,4 +36,4 @@ ENV CLOSURED_WORKERS=2 EXPOSE 8080 -ENTRYPOINT ["java", "-Xms256m", "-Xmx2g", "-jar", "/app/closure-compilerd.jar"] +ENTRYPOINT ["java", "-Xms256m", "-Xmx2g", "-jar", "/app/runtime.jar"] diff --git a/closure-compilerd/README.md b/closure-api/README.md similarity index 83% rename from closure-compilerd/README.md rename to closure-api/README.md index 9609912..bc2a38b 100644 --- a/closure-compilerd/README.md +++ b/closure-api/README.md @@ -1,4 +1,4 @@ -# closure-compilerd-min +# closure-api-min Tiny Closure Compiler HTTP daemon using Java's built-in HTTP server. @@ -14,7 +14,7 @@ mvn -DskipTests package CLOSURED_ROOT=$PWD \ CLOSURED_PORT=8080 \ CLOSURED_WORKERS=2 \ -java -Xms256m -Xmx2g -jar target/closure-compilerd-0.1.0.jar +java -Xms256m -Xmx2g -jar target/closure-api-0.1.0.jar ``` ## Test diff --git a/closure-compilerd/example/externs/browser.js b/closure-api/example/externs/browser.js similarity index 100% rename from closure-compilerd/example/externs/browser.js rename to closure-api/example/externs/browser.js diff --git a/closure-compilerd/example/js/hello.js b/closure-api/example/js/hello.js similarity index 100% rename from closure-compilerd/example/js/hello.js rename to closure-api/example/js/hello.js diff --git a/closure-compilerd/pom.xml b/closure-api/pom.xml similarity index 97% rename from closure-compilerd/pom.xml rename to closure-api/pom.xml index 5273d4f..f3c94da 100644 --- a/closure-compilerd/pom.xml +++ b/closure-api/pom.xml @@ -4,7 +4,7 @@ 4.0.0 dev.tgckpg - closure-compilerd + closure-api 0.1.0 diff --git a/closure-compilerd/src/main/java/dev/tgckpg/closured/Main.java b/closure-api/src/main/java/dev/tgckpg/closured/Main.java similarity index 98% rename from closure-compilerd/src/main/java/dev/tgckpg/closured/Main.java rename to closure-api/src/main/java/dev/tgckpg/closured/Main.java index 9be87ce..ab20fb7 100644 --- a/closure-compilerd/src/main/java/dev/tgckpg/closured/Main.java +++ b/closure-api/src/main/java/dev/tgckpg/closured/Main.java @@ -41,7 +41,7 @@ public final class Main { server.createContext("/compile", Main::compile); server.start(); - System.err.printf("closure-compilerd listening on http://0.0.0.0:%d root=%s workers=%d%n", PORT, ROOT, WORKERS); + System.err.printf("closure-api listening on http://0.0.0.0:%d root=%s workers=%d%n", PORT, ROOT, WORKERS); } private static void health(HttpExchange ex) throws IOException { diff --git a/internal/generated/buildinfo_gen.go b/internal/generated/buildinfo_gen.go index a798cc7..86c1428 100644 --- a/internal/generated/buildinfo_gen.go +++ b/internal/generated/buildinfo_gen.go @@ -2,5 +2,5 @@ package generated const ( IMAGE_TAG = "dev" - Timestamp = "20260610.220306" + Timestamp = "20260611.005458" ) diff --git a/mk/botanres-go.mk b/mk/botanres-go.mk deleted file mode 100644 index f8cde4f..0000000 --- a/mk/botanres-go.mk +++ /dev/null @@ -1,54 +0,0 @@ -IMAGE_NAME ?= botanjs -IMAGE_TAG ?= dev - -JS_SRC_DIR ?= ./botanjs/src -GO_SRC_DIR ?= ./botanres-go -BUILDX_BUILDER ?= container-builder -BUILDINFO_FILE := internal/generated/buildinfo_gen.go - -ensure-buildx: - @if ! docker buildx inspect $(BUILDX_BUILDER) >/dev/null 2>&1; then \ - echo "Creating buildx builder $(BUILDX_BUILDER)..."; \ - docker buildx create \ - --name $(BUILDX_BUILDER) \ - --driver docker-container \ - --driver-opt network=host \ - --bootstrap --use; \ - else \ - echo "Using existing buildx builder $(BUILDX_BUILDER)"; \ - docker buildx use $(BUILDX_BUILDER); \ - fi - -.buildinfo: - @mkdir -p $(dir $(BUILDINFO_FILE)) - @printf '%s\n' \ - 'package generated' \ - '' \ - 'const (' \ - ' IMAGE_TAG = "$(IMAGE_TAG)"' \ - ' Timestamp = "'$$(TZ=UTC date +%Y%m%d.%H%M%S)'"' \ - ')' \ - > $(BUILDINFO_FILE) - -gen: - docker build \ - -f $(GO_SRC_DIR)/dockerfiles/gen.Dockerfile \ - --output type=local,dest=$(GO_SRC_DIR)/internal/generated . - -build: .buildinfo ensure-buildx gen - docker build \ - -f $(GO_SRC_DIR)/dockerfiles/api.Dockerfile \ - --load \ - -t $(IMAGE_NAME):$(IMAGE_TAG) . - -push: .buildinfo ensure-buildx gen - docker buildx build \ - --platform linux/amd64,linux/arm64 \ - -f $(GO_SRC_DIR)/dockerfiles/api.Dockerfile \ - -t $(IMAGE_NAME):$(IMAGE_TAG) \ - --push . - -inspect: - docker buildx imagetools inspect $(IMAGE_NAME):$(IMAGE_TAG) - -.PHONY: push build .buildinfo gen diff --git a/mk/closure-api.mk b/mk/closure-api.mk new file mode 100644 index 0000000..85a6643 --- /dev/null +++ b/mk/closure-api.mk @@ -0,0 +1,27 @@ +CLOSURE_IMAGE_NAME ?= closure-api +CLOSURE_IMAGE_TAG ?= dev + +CLOSURE_SRC_DIR = ./closure-api +CLOSURE_NAME = closure-api + +build-closure: + docker build \ + -f $(CLOSURE_SRC_DIR)/Dockerfile \ + --build-arg JAVA_SRC_DIR=$(CLOSURE_SRC_DIR) \ + --build-arg CLOSURE_NAME=$(CLOSURE_NAME) \ + --load \ + -t $(CLOSURE_IMAGE_NAME):$(CLOSURE_IMAGE_TAG) . + +push-closure: ensure-buildx + docker buildx build \ + --platform linux/amd64,linux/arm64 \ + -f $(CLOSURE_SRC_DIR)/Dockerfile \ + --build-arg JAVA_SRC_DIR=$(CLOSURE_SRC_DIR) \ + --build-arg CLOSURE_NAME=$(CLOSURE_NAME) \ + -t $(CLOSURE_IMAGE_NAME):$(CLOSURE_IMAGE_TAG) \ + --push . + +inspect-closure: + docker buildx imagetools inspect $(CLOSURE_IMAGE_NAME):$(CLOSURE_IMAGE_TAG) + +.PHONY: build-closure push-closure inspect-closure diff --git a/mk/common.mk b/mk/common.mk new file mode 100644 index 0000000..e6fa0ae --- /dev/null +++ b/mk/common.mk @@ -0,0 +1,18 @@ +JS_SRC_DIR ?= ./botanjs/src + +BUILDX_BUILDER ?= container-builder + +ensure-buildx: + @if ! docker buildx inspect $(BUILDX_BUILDER) >/dev/null 2>&1; then \ + echo "Creating buildx builder $(BUILDX_BUILDER)..."; \ + docker buildx create \ + --name $(BUILDX_BUILDER) \ + --driver docker-container \ + --driver-opt network=host \ + --bootstrap --use; \ + else \ + echo "Using existing buildx builder $(BUILDX_BUILDER)"; \ + docker buildx use $(BUILDX_BUILDER); \ + fi + +.PHONY: ensure-buildx diff --git a/mk/resolver-go.mk b/mk/resolver-go.mk new file mode 100644 index 0000000..2886d5e --- /dev/null +++ b/mk/resolver-go.mk @@ -0,0 +1,40 @@ +RESOLVER_IMAGE_NAME ?= botanjs +RESOLVER_IMAGE_TAG ?= dev + +GO_SRC_DIR ?= ./resolver-go + +BUILDINFO_FILE := internal/generated/buildinfo_gen.go + +.buildinfo: + @mkdir -p $(dir $(BUILDINFO_FILE)) + @printf '%s\n' \ + 'package generated' \ + '' \ + 'const (' \ + ' IMAGE_TAG = "$(RESOLVER_IMAGE_TAG)"' \ + ' Timestamp = "'$$(TZ=UTC date +%Y%m%d.%H%M%S)'"' \ + ')' \ + > $(BUILDINFO_FILE) + +resolver-gen: + docker build \ + -f $(GO_SRC_DIR)/dockerfiles/gen.Dockerfile \ + --output type=local,dest=$(GO_SRC_DIR)/internal/generated . + +build-resolver: .buildinfo ensure-buildx resolver-gen + docker build \ + -f $(GO_SRC_DIR)/dockerfiles/api.Dockerfile \ + --load \ + -t $(RESOLVER_IMAGE_NAME):$(RESOLVER_IMAGE_TAG) . + +push-resolver: .buildinfo ensure-buildx resolver-gen + docker buildx build \ + --platform linux/amd64,linux/arm64 \ + -f $(GO_SRC_DIR)/dockerfiles/api.Dockerfile \ + -t $(RESOLVER_IMAGE_NAME):$(RESOLVER_IMAGE_TAG) \ + --push . + +inspect-resolver: + docker buildx imagetools inspect $(RESOLVER_IMAGE_NAME):$(RESOLVER_IMAGE_TAG) + +.PHONY: push-resolver build-resolver .buildinfo resolver-gen diff --git a/botanres-go/README.md b/resolver-go/README.md similarity index 100% rename from botanres-go/README.md rename to resolver-go/README.md diff --git a/botanres-go/cmd/botan-api/main.go b/resolver-go/cmd/botan-api/main.go similarity index 98% rename from botanres-go/cmd/botan-api/main.go rename to resolver-go/cmd/botan-api/main.go index 2679453..28068cd 100644 --- a/botanres-go/cmd/botan-api/main.go +++ b/resolver-go/cmd/botan-api/main.go @@ -61,6 +61,8 @@ func (h handler) index(w http.ResponseWriter, req *http.Request) { return } + log.Println(res.JSFiles) + // Compatibility flags: // rjs/rcss/ojs/ocss => content // hjs/hcss => hash filename only diff --git a/botanres-go/cmd/botan-gen/main.go b/resolver-go/cmd/botan-gen/main.go similarity index 100% rename from botanres-go/cmd/botan-gen/main.go rename to resolver-go/cmd/botan-gen/main.go diff --git a/botanres-go/dockerfiles/api.Dockerfile b/resolver-go/dockerfiles/api.Dockerfile similarity index 83% rename from botanres-go/dockerfiles/api.Dockerfile rename to resolver-go/dockerfiles/api.Dockerfile index 88e730a..23ebd7e 100644 --- a/botanres-go/dockerfiles/api.Dockerfile +++ b/resolver-go/dockerfiles/api.Dockerfile @@ -5,14 +5,14 @@ WORKDIR /workspace ARG TARGETOS ARG TARGETARCH -COPY botanres-go/go.mod botanres-go/go.sum ./ +COPY resolver-go/go.mod resolver-go/go.sum ./ RUN --mount=type=cache,target=/go/pkg/mod \ go mod download COPY "botanjs/src" "./src" -COPY "botanres-go/cmd" "./cmd" -COPY "botanres-go/internal" "./internal" +COPY "resolver-go/cmd" "./cmd" +COPY "resolver-go/internal" "./internal" RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ diff --git a/botanres-go/dockerfiles/gen.Dockerfile b/resolver-go/dockerfiles/gen.Dockerfile similarity index 76% rename from botanres-go/dockerfiles/gen.Dockerfile rename to resolver-go/dockerfiles/gen.Dockerfile index 2f1ddd2..ddfcd3e 100644 --- a/botanres-go/dockerfiles/gen.Dockerfile +++ b/resolver-go/dockerfiles/gen.Dockerfile @@ -5,14 +5,14 @@ WORKDIR /workspace ARG TARGETOS ARG TARGETARCH -COPY botanres-go/go.mod botanres-go/go.sum ./ +COPY resolver-go/go.mod resolver-go/go.sum ./ RUN --mount=type=cache,target=/go/pkg/mod \ go mod download COPY "botanjs/src" "./src" -COPY "botanres-go/cmd" "./cmd" -COPY "botanres-go/internal" "./internal" +COPY "resolver-go/cmd" "./cmd" +COPY "resolver-go/internal" "./internal" RUN go run ./cmd/botan-gen \ -src ./src \ diff --git a/botanres-go/go.mod b/resolver-go/go.mod similarity index 100% rename from botanres-go/go.mod rename to resolver-go/go.mod diff --git a/botanres-go/go.sum b/resolver-go/go.sum similarity index 100% rename from botanres-go/go.sum rename to resolver-go/go.sum diff --git a/botanres-go/internal/classmap/scan.go b/resolver-go/internal/classmap/scan.go similarity index 100% rename from botanres-go/internal/classmap/scan.go rename to resolver-go/internal/classmap/scan.go diff --git a/botanres-go/internal/classmap/types.go b/resolver-go/internal/classmap/types.go similarity index 100% rename from botanres-go/internal/classmap/types.go rename to resolver-go/internal/classmap/types.go diff --git a/botanres-go/internal/generated/buildinfo_gen.go b/resolver-go/internal/generated/buildinfo_gen.go similarity index 100% rename from botanres-go/internal/generated/buildinfo_gen.go rename to resolver-go/internal/generated/buildinfo_gen.go diff --git a/botanres-go/internal/generated/classmap_gen.go b/resolver-go/internal/generated/classmap_gen.go similarity index 100% rename from botanres-go/internal/generated/classmap_gen.go rename to resolver-go/internal/generated/classmap_gen.go diff --git a/botanres-go/internal/resolver/resolver.go b/resolver-go/internal/resolver/resolver.go similarity index 100% rename from botanres-go/internal/resolver/resolver.go rename to resolver-go/internal/resolver/resolver.go