Compare commits
30 Commits
6d56458bb9
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 72ffefc640 | |||
| cc90a8c79c | |||
|
|
0d2334da48 | ||
|
|
f24fef9b16 | ||
|
|
13d8970b7a | ||
|
|
eed815c646 | ||
|
|
5bacd33ea0 | ||
|
|
9bf604719a | ||
|
|
8dcd02c593 | ||
|
|
9efdacea9e | ||
|
|
587e2dbdf2 | ||
|
|
4f3a5d4d66 | ||
|
|
590babea9e | ||
|
|
4e9fd80296 | ||
|
|
eb60e5af16 | ||
|
|
eb02ef4490 | ||
|
|
3c705b6ad8 | ||
|
|
464d644c4f | ||
|
|
c04e4f85fc | ||
|
|
d3c41b3e6c | ||
|
|
b1202577a8 | ||
|
|
39af511bbd | ||
|
|
32dfb0d6b4 | ||
|
|
e70a559f1d | ||
|
|
bbf3e4a20e | ||
|
|
64abe911ee | ||
|
|
d3265d364c | ||
|
|
8be2920952 | ||
|
|
98db0678b4 | ||
|
|
f88274be3d |
@@ -2,37 +2,60 @@ name: Build-und-Deploy
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches: [ master ]
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ci-java21-node20:latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Repository auschecken
|
- name: Map gitea into /etc/hosts (ohne ip)
|
||||||
uses: actions/checkout@v3
|
shell: bash
|
||||||
|
|
||||||
- name: 🧼 IP-Adresse von Gitea zu /etc/hosts hinzufügen
|
|
||||||
run: echo "172.26.0.2 gitea" >> /etc/hosts
|
|
||||||
|
|
||||||
- name: 🛠 Baue das Projekt (ohne Tests)
|
|
||||||
run: ./gradlew clean build -x test
|
|
||||||
|
|
||||||
- name: 📦 JAR ins Shared Volume kopieren und archivieren
|
|
||||||
run: |
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
gw_hex="$(awk '$2=="00000000" {print $3; exit}' /proc/net/route || true)"
|
||||||
|
if [ -n "${gw_hex:-}" ]; then
|
||||||
|
gw="$(printf "%d.%d.%d.%d" 0x${gw_hex:6:2} 0x${gw_hex:4:2} 0x${gw_hex:2:2} 0x${gw_hex:0:2})"
|
||||||
|
else
|
||||||
|
gw="172.17.0.1"
|
||||||
|
fi
|
||||||
|
echo "$gw gitea" >> /etc/hosts
|
||||||
|
getent hosts gitea || true
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: 🧰 Gradle vorbereiten & Version
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -euxo pipefail
|
||||||
|
test -f ./gradlew || { echo "gradlew fehlt – bitte lokal 'gradle wrapper' ausführen und committen."; exit 1; }
|
||||||
|
chmod +x ./gradlew
|
||||||
|
./gradlew --version
|
||||||
|
|
||||||
|
- name: 🏗️ Build Backend + Vaadin (Production)
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -euxo pipefail
|
||||||
|
# Vaadin im Production-Mode bündeln
|
||||||
|
./gradlew clean build -x test --no-daemon -Pvaadin.productionMode
|
||||||
|
ls -al build/libs
|
||||||
|
JAR="$(ls -1 build/libs/*.jar | head -n1)"
|
||||||
|
echo "Gebautes JAR: $JAR"
|
||||||
|
# kurze Sichtprüfung, dass Frontend drin ist
|
||||||
|
jar tf "$JAR" | grep -E 'VAADIN|static/|index\.html' | head || true
|
||||||
|
|
||||||
|
- name: 📦 Nach /shared_jar_data deployen (fester Name + Archiv)
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -euxo pipefail
|
||||||
|
ts="$(date +'%Y%m%d-%H%M%S')"
|
||||||
mkdir -p /shared_jar_data /shared_jar_data/archive
|
mkdir -p /shared_jar_data /shared_jar_data/archive
|
||||||
|
SRC="$(ls -1 build/libs/*.jar | head -n1)"
|
||||||
# Zeitstempel im Format YYYYMMDD-HHMMSS
|
# WICHTIG: Fester Name, den docker-compose startet
|
||||||
timestamp=$(date +"%Y%m%d-%H%M%S")
|
cp -f "$SRC" "/shared_jar_data/MyTimeTracker-0.0.1-SNAPSHOT.jar"
|
||||||
|
# Zusätzlich archivieren
|
||||||
# JAR-Datei kopieren (aktuelle Version)
|
cp -f "$SRC" "/shared_jar_data/archive/MyTimeTracker-${ts}.jar"
|
||||||
cp build/libs/MyTimeTracker-0.0.1-SNAPSHOT.jar /shared_jar_data/MyTimeTracker-0.0.1-SNAPSHOT.jar
|
ls -al /shared_jar_data | tail -n +1
|
||||||
|
|
||||||
# JAR-Datei archivieren
|
|
||||||
cp build/libs/MyTimeTracker-0.0.1-SNAPSHOT.jar /shared_jar_data/archive/MyTimeTracker-$timestamp.jar
|
|
||||||
|
|
||||||
- name: 🚦 Neustart der Anwendung triggern
|
|
||||||
run: |
|
|
||||||
mkdir -p /shared_trigger_dir
|
|
||||||
touch /shared_trigger_dir/restart-requested
|
|
||||||
|
|||||||
@@ -13,12 +13,15 @@ import org.vaadin.crudui.crud.impl.GridCrud;
|
|||||||
import org.vaadin.crudui.form.CrudFormFactory;
|
import org.vaadin.crudui.form.CrudFormFactory;
|
||||||
import org.vaadin.crudui.form.impl.form.factory.DefaultCrudFormFactory;
|
import org.vaadin.crudui.form.impl.form.factory.DefaultCrudFormFactory;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
final class TimeEntryFormConfigurer {
|
final class TimeEntryFormConfigurer {
|
||||||
|
|
||||||
private TimeEntryFormConfigurer() {}
|
private TimeEntryFormConfigurer() {
|
||||||
|
}
|
||||||
|
|
||||||
static void configure(GridCrud<TimeEntry> crud, SerializableSupplier<TimeEntry> newInstanceSupplier) {
|
static void configure(GridCrud<TimeEntry> crud, SerializableSupplier<TimeEntry> newInstanceSupplier) {
|
||||||
CrudFormFactory<TimeEntry> formFactory = new DefaultCrudFormFactory<>(TimeEntry.class);
|
CrudFormFactory<TimeEntry> formFactory = new DefaultCrudFormFactory<>(TimeEntry.class);
|
||||||
@@ -44,15 +47,21 @@ final class TimeEntryFormConfigurer {
|
|||||||
formFactory.setFieldProvider("startTime", (TimeEntry bean) -> {
|
formFactory.setFieldProvider("startTime", (TimeEntry bean) -> {
|
||||||
TimePicker tp = new TimePicker("Start");
|
TimePicker tp = new TimePicker("Start");
|
||||||
tp.setRequiredIndicatorVisible(true);
|
tp.setRequiredIndicatorVisible(true);
|
||||||
|
|
||||||
|
tp.setLocale(Locale.of("de", "DE"));
|
||||||
tp.setMin(LocalTime.of(5, 0));
|
tp.setMin(LocalTime.of(5, 0));
|
||||||
tp.setMax(LocalTime.of(23, 59));
|
tp.setMax(LocalTime.of(23, 59));
|
||||||
|
tp.setStep(Duration.ofMinutes(15));
|
||||||
return tp;
|
return tp;
|
||||||
});
|
});
|
||||||
formFactory.setFieldProvider("endTime", (TimeEntry bean) -> {
|
formFactory.setFieldProvider("endTime", (TimeEntry bean) -> {
|
||||||
TimePicker tp = new TimePicker("End");
|
TimePicker tp = new TimePicker("End");
|
||||||
tp.setRequiredIndicatorVisible(true);
|
tp.setRequiredIndicatorVisible(true);
|
||||||
|
tp.setLocale(Locale.of("de", "DE"));
|
||||||
tp.setMin(LocalTime.of(5, 0));
|
tp.setMin(LocalTime.of(5, 0));
|
||||||
tp.setMax(LocalTime.of(23, 59));
|
tp.setMax(LocalTime.of(23, 59));
|
||||||
|
tp.setStep(Duration.ofMinutes(15));
|
||||||
|
|
||||||
return tp;
|
return tp;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user