diff --git a/Dockerfile b/Dockerfile index 661970d..90f06e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,7 +37,7 @@ RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs # Copy necessary files -#COPY --from=builder /app/public ./public +# COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static diff --git a/app/login/page.tsx b/app/login/page.tsx index adbc23e..fc6c234 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -2,67 +2,66 @@ import { useActionState } from 'react'; import { login } from './actions'; +import packageJson from '@/package.json'; export default function LoginPage() { const [state, loginAction, isPending] = useActionState(login, undefined); + const version = packageJson.version; + const buildDate = process.env.NEXT_PUBLIC_BUILD_DATE || new Date().toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }); + return (
-
-

Ausgaben - Log

+
+
+

Ausgaben - Log

+
-
-
-
-

Anmeldung

-

- Bitte melden Sie sich an, um fortzufahren -

-
+
+
+

Anmeldung

-
-
-
- - -
+ +
+ + +
-
- - -
+
+ +
{state?.error && ( -
+
{state.error}
)} @@ -70,14 +69,27 @@ export default function LoginPage() {
+ + {/* Footer */} +
); } + diff --git a/app/login/page.tsx_xx b/app/login/page.tsx_xx new file mode 100644 index 0000000..adbc23e --- /dev/null +++ b/app/login/page.tsx_xx @@ -0,0 +1,83 @@ +'use client'; + +import { useActionState } from 'react'; +import { login } from './actions'; + +export default function LoginPage() { + const [state, loginAction, isPending] = useActionState(login, undefined); + + return ( +
+
+

Ausgaben - Log

+ +
+
+
+

Anmeldung

+

+ Bitte melden Sie sich an, um fortzufahren +

+
+ +
+
+
+ + +
+ +
+ + +
+
+ + {state?.error && ( +
+ {state.error} +
+ )} + + +
+
+
+
+
+ ); +} diff --git a/deploy.sh b/deploy.sh index 2de71af..f71e9da 100755 --- a/deploy.sh +++ b/deploy.sh @@ -15,7 +15,7 @@ FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${TAG}" BUILD_DATE=$(date +%d.%m.%Y) echo "==========================================" -echo "Ausgaben-Next Deploy Script" +echo "ausgaben-next Deploy Script" echo "==========================================" echo "Registry: ${REGISTRY}" echo "Image: ${IMAGE_NAME}" @@ -24,25 +24,29 @@ echo "Build-Datum: ${BUILD_DATE}" echo "==========================================" echo "" -# 1. Docker Image bauen -echo ">>> Baue Docker Image..." -docker build \ - --build-arg BUILD_DATE="${BUILD_DATE}" \ - -t "${IMAGE_NAME}:${TAG}" \ - -t "${FULL_IMAGE}" \ - . - -echo ">>> Build erfolgreich!" -echo "" - -# 2. Login zur Registry (falls noch nicht eingeloggt) +# 1. Login zur Registry (falls noch nicht eingeloggt) echo ">>> Login zu ${REGISTRY}..." docker login "${REGISTRY}" echo "" -# 3. Image pushen -echo ">>> Pushe Image zu ${REGISTRY}..." -docker push "${FULL_IMAGE}" +# 2. Multiplatform Builder einrichten (docker-container driver erforderlich) +echo ">>> Richte Multiplatform Builder ein..." +if ! docker buildx inspect multiplatform-builder &>/dev/null; then + docker buildx create --name multiplatform-builder --driver docker-container --bootstrap +fi +docker buildx use multiplatform-builder +echo "" + +# 3. Docker Image bauen und pushen (Multiplatform) +echo ">>> Baue Multiplatform Docker Image und pushe zu Registry..." +docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --build-arg BUILD_DATE="${BUILD_DATE}" \ + -t "${FULL_IMAGE}" \ + --push \ + . + +echo ">>> Build und Push erfolgreich!" echo "" echo "==========================================" diff --git a/package-lock.json b/package-lock.json index 6ae24b3..e970bd5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ausgaben_next", - "version": "1.0.1", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ausgaben_next", - "version": "1.0.1", + "version": "1.2.0", "dependencies": { "bcryptjs": "^3.0.3", "jose": "^6.1.3", @@ -71,6 +71,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1561,6 +1562,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.34.tgz", "integrity": "sha512-by3/Z0Qp+L9cAySEsSNNwZ6WWw8ywgGLPQGgbQDhNRSitqYgkgp4pErd23ZSCavbtUA2CN4jQtoB3T8nk4j3Rg==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -1571,6 +1573,7 @@ "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1630,6 +1633,7 @@ "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", @@ -2155,6 +2159,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2516,6 +2521,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3092,6 +3098,7 @@ "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3277,6 +3284,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -5569,6 +5577,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5578,6 +5587,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -6287,6 +6297,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -6449,6 +6460,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6723,6 +6735,7 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index e859099..6e06012 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ausgaben_next", - "version": "1.2.0", + "version": "1.2.1", "private": true, "scripts": { "dev": "next dev -p 3005",