diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c08565a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,13 @@ +# Zugangsdaten duerfen nicht ins Image +.env + +# Build-Artefakte und generierte Dateien +target/ +node_modules/ +src/main/frontend/generated/ + +# Repository und IDE +.git/ +.github/ +.vscode/ +.DS_Store diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..78eb1a9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM eclipse-temurin:21-jre + +ARG JAR_FILE=target/*.jar + +# Zeitzone auf Berlin setzen und 24h-Format konfigurieren +ENV TZ=Europe/Berlin +ENV LC_TIME=de_DE.UTF-8 +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +COPY ${JAR_FILE} app.jar +EXPOSE 8080 +ENTRYPOINT ["java", "-jar", "/app.jar", "--spring.profiles.active=production"] diff --git a/src/docker_push.sh b/src/docker_push.sh new file mode 100644 index 0000000..f3289fe --- /dev/null +++ b/src/docker_push.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash + +set -euo pipefail + +readonly SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +readonly REGISTRY_IMAGE="registry.assecutor.org/votianlt" +readonly BACKEND_DIR="${SCRIPT_DIR}" + +usage() { + cat <<'EOF' +Verwendung: + ./docker_push.sh [x.y.z] + +Beispiel: + ./docker_push.sh 0.9.13 + ./docker_push.sh + +Voraussetzungen: + - Docker Buildx ist installiert + - Login zur Registry wurde bereits ausgeführt: + docker login registry.assecutor.org + +Ohne Versionsargument wird automatisch die Version aus der pom.xml verwendet. +EOF +} + +fail() { + echo "Fehler: $*" >&2 + exit 1 +} + +require_command() { + command -v "$1" >/dev/null 2>&1 || fail "'$1' wurde nicht gefunden." +} + +resolve_pom_version() { + [[ -x "${BACKEND_DIR}/mvnw" ]] || fail "'${BACKEND_DIR}/mvnw' wurde nicht gefunden oder ist nicht ausführbar." + + local version + version="$( + cd "${BACKEND_DIR}" && ./mvnw -q -DforceStdout help:evaluate -Dexpression=project.version \ + | awk 'NF { last = $0 } END { print last }' + )" + + [[ -n "${version}" ]] || fail "Version konnte nicht aus der pom.xml ermittelt werden." + echo "${version}" +} + +VERSION="${1:-$(resolve_pom_version)}" + +if [[ "${VERSION}" == "-h" || "${VERSION}" == "--help" ]]; then + usage + exit 0 +fi + +if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + fail "Versionsnummer muss das Format x.y.z haben." +fi + +require_command docker +docker buildx version >/dev/null 2>&1 || fail "Docker Buildx ist nicht verfügbar." + +cd "${SCRIPT_DIR}" + +echo "Verwende Release-Version ${VERSION}." +echo "Baue Production-JAR für Version ${VERSION} ..." +(cd "${BACKEND_DIR}" && ./mvnw -Pproduction -DskipTests -Drevision="${VERSION}" package) + +JAR_FILE_REL="target/votianlt-${VERSION}.jar" +JAR_FILE_ABS="${BACKEND_DIR}/${JAR_FILE_REL}" +[[ -f "${JAR_FILE_ABS}" ]] || fail "Release-JAR wurde nicht gefunden: ${JAR_FILE_ABS}" + +echo "Pushe Image ${REGISTRY_IMAGE}:${VERSION} ..." +docker buildx build \ + --platform linux/amd64 \ + -f "${BACKEND_DIR}/Dockerfile" \ + --build-arg "JAR_FILE=${JAR_FILE_REL}" \ + -t "${REGISTRY_IMAGE}:${VERSION}" \ + --push \ + "${BACKEND_DIR}" + +echo "Fertig: ${REGISTRY_IMAGE}:${VERSION}" diff --git a/src/main/java/de/assecutor/pdftool/ui/MainView.java b/src/main/java/de/assecutor/pdftool/ui/MainView.java index e5455f3..be839bd 100644 --- a/src/main/java/de/assecutor/pdftool/ui/MainView.java +++ b/src/main/java/de/assecutor/pdftool/ui/MainView.java @@ -152,7 +152,6 @@ public class MainView extends VerticalLayout { if (event.isFromClient() && event.getValue() != null) { loadDraft(event.getValue()); } else if (event.isFromClient()) { - // Auswahl entfernt: es gilt wieder "keine Vorbelegung geladen". loadedDraftState = null; updateSaveDraftEnabled(); }