diff --git a/.air.toml b/.air.toml index f7973c6..72bf726 100644 --- a/.air.toml +++ b/.air.toml @@ -11,7 +11,6 @@ tmp_dir = "tmp" exclude_regex = ["_test.go", "_templ.go"] exclude_unchanged = false follow_symlink = false - full_bin = "" include_dir = [] include_ext = ["go", "templ", "html"] include_file = [] diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index 35498ca..fc325b6 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -11,11 +11,5 @@ jobs: steps: - name: Check out repository code uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 - - run: docker build api/ -t api-test - - run: docker rmi api-test - - run: | - docker build \ - --build-arg="PUBLIC_BASE_API_URL=${{ vars.PUBLIC_BASE_API_URL }}" \ - -t view-test \ - view/ - - run: docker rmi view-test + - run: docker build . -t me-fit-test + - run: docker rmi me-fit-test diff --git a/.gitea/workflows/buildAndPush.yaml b/.gitea/workflows/buildAndPush.yaml index 6df52b6..569be62 100644 --- a/.gitea/workflows/buildAndPush.yaml +++ b/.gitea/workflows/buildAndPush.yaml @@ -11,20 +11,9 @@ jobs: - name: Check out repository code uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 - run: docker login git.wundenbergs.de -u tim -p ${{ secrets.DOCKER_GITEA_TOKEN }} - - run: | - docker build \ - -t git.wundenbergs.de/tim/me-fit/api:latest \ - -t git.wundenbergs.de/tim/me-fit/api:$GITHUB_SHA \ - api/ - - run: docker push git.wundenbergs.de/tim/me-fit/api:latest - - run: docker push git.wundenbergs.de/tim/me-fit/api:$GITHUB_SHA - - run: docker rmi git.wundenbergs.de/tim/me-fit/api:latest git.wundenbergs.de/tim/me-fit/api:$GITHUB_SHA - - run: | - docker build \ - --build-arg="PUBLIC_BASE_API_URL=${{ vars.PUBLIC_BASE_API_URL }}" \ - -t git.wundenbergs.de/tim/me-fit/view:latest \ - -t git.wundenbergs.de/tim/me-fit/view:$GITHUB_SHA \ - view/ - - run: docker push git.wundenbergs.de/tim/me-fit/view:latest - - run: docker push git.wundenbergs.de/tim/me-fit/view:$GITHUB_SHA - - run: docker rmi git.wundenbergs.de/tim/me-fit/view:latest git.wundenbergs.de/tim/me-fit/view:$GITHUB_SHA + - run: docker build . \ + -t git.wundenbergs.de/tim/me-fit:latest \ + -t git.wundenbergs.de/tim/me-fit:$GITHUB_SHA \ + - run: docker push git.wundenbergs.de/tim/me-fit:latest + - run: docker push git.wundenbergs.de/tim/me-fit:$GITHUB_SHA + - run: docker rmi git.wundenbergs.de/tim/me-fit:latest git.wundenbergs.de/tim/me-fit:$GITHUB_SHA diff --git a/.gitignore b/.gitignore index 65f0206..6dfd4c4 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ secrets/ node_modules/ static/css/tailwind.css +static/js/htmx.min.js tmp/ diff --git a/Dockerfile b/Dockerfile index 8eb83cd..a2b6915 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,22 @@ -FROM golang:1.23@sha256:613a108a4a4b1dfb6923305db791a19d088f77632317cfc3446825c54fb862cd AS builder - -WORKDIR /app -COPY go.mod go.sum main.go ./ -COPY src src -RUN go build -o /bin/api ./main.go +FROM golang:1.23.0 AS BUILDER_GO +WORKDIR /me-fit +RUN go install github.com/a-h/templ/cmd/templ@latest +COPY . ./ +RUN templ generate && go build -o /me-fit/me-fit . -FROM debian:stable-slim@sha256:382967fd7c35a0899ca3146b0b73d0791478fba2f71020c7aa8c27e3a4f26672 +FROM node:22.7.0 AS BUILDER_NODE +WORKDIR /me-fit +COPY . ./ +RUN npm install && npm run build -RUN apt-get update && apt-get install -y ca-certificates -WORKDIR /app -COPY --from=builder /bin/api ./api + +FROM debian:12.6 +WORKDIR /me-fit +RUN apt-get update && apt-get install -y ca-certificates && echo "" > .env +COPY --from=BUILDER_GO /me-fit/me-fit ./me-fit +COPY --from=BUILDER_NODE /me-fit/static ./static COPY migrations ./migrations EXPOSE 8080 -ENTRYPOINT ["/app/api"] +ENTRYPOINT ["/me-fit/me-fit"] diff --git a/package-lock.json b/package-lock.json index 8a453e7..7f1d164 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "daisyui": "^4.12.10", + "daisyui": "4.12.10", + "htmx.org": "2.0.2", "tailwindcss": "3.4.10" } }, @@ -525,6 +526,12 @@ "node": ">= 0.4" } }, + "node_modules/htmx.org": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/htmx.org/-/htmx.org-2.0.2.tgz", + "integrity": "sha512-eUPIpQaWKKstX393XNCRCMJTrqPzikh36Y9RceqsUZLTtlFjFaVDgwZLUsrFk8J2uzZxkkfiy0TE359j2eN6hA==", + "dev": true + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", diff --git a/package.json b/package.json index f792c4d..0597fdb 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,16 @@ "description": "Your (almost) independent tech stack to host on a VPC.", "main": "index.js", "scripts": { - "build": "tailwindcss build -o static/css/tailwind.css --minify", - "watch": "tailwindcss build -o static/css/tailwind.css --watch" + "build": "mkdir -p static/js && cp -f node_modules/htmx.org/dist/htmx.min.js static/js/htmx.min.js && tailwindcss build -o static/css/tailwind.css --minify", + "watch": "mkdir -p static/js && cp -f node_modules/htmx.org/dist/htmx.min.js static/js/htmx.min.js && tailwindcss build -o static/css/tailwind.css --watch", + "test": "" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { - "daisyui": "^4.12.10", - "tailwindcss": "3.4.10" + "htmx.org": "2.0.2", + "tailwindcss": "3.4.10", + "daisyui": "4.12.10" } } diff --git a/service/static_ui.go b/service/static_ui.go index 391f6e1..2822b68 100644 --- a/service/static_ui.go +++ b/service/static_ui.go @@ -11,6 +11,7 @@ func HandleIndexAnd404(w http.ResponseWriter, r *http.Request) { var comp templ.Component = nil if r.URL.Path != "/" { comp = templates.Layout(templates.NotFound()) + w.WriteHeader(http.StatusNotFound) } else { comp = templates.Layout(templates.Index()) } diff --git a/service/workout.go b/service/workout.go index 63007ca..41b2dcf 100644 --- a/service/workout.go +++ b/service/workout.go @@ -27,7 +27,6 @@ func App(w http.ResponseWriter, r *http.Request) { comp := templates.App() layout := templates.Layout(comp) layout.Render(r.Context(), w) - w.WriteHeader(http.StatusOK) } func NewWorkout(db *sql.DB) http.HandlerFunc {