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:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ci-java21-node20:latest
|
||||
|
||||
steps:
|
||||
- name: 📥 Repository auschecken
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- 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
|
||||
- name: Map gitea into /etc/hosts (ohne ip)
|
||||
shell: bash
|
||||
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
|
||||
|
||||
# Zeitstempel im Format YYYYMMDD-HHMMSS
|
||||
timestamp=$(date +"%Y%m%d-%H%M%S")
|
||||
|
||||
# JAR-Datei kopieren (aktuelle Version)
|
||||
cp build/libs/MyTimeTracker-0.0.1-SNAPSHOT.jar /shared_jar_data/MyTimeTracker-0.0.1-SNAPSHOT.jar
|
||||
|
||||
# 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
|
||||
SRC="$(ls -1 build/libs/*.jar | head -n1)"
|
||||
# WICHTIG: Fester Name, den docker-compose startet
|
||||
cp -f "$SRC" "/shared_jar_data/MyTimeTracker-0.0.1-SNAPSHOT.jar"
|
||||
# Zusätzlich archivieren
|
||||
cp -f "$SRC" "/shared_jar_data/archive/MyTimeTracker-${ts}.jar"
|
||||
ls -al /shared_jar_data | tail -n +1
|
||||
|
||||
@@ -13,18 +13,21 @@ import org.vaadin.crudui.crud.impl.GridCrud;
|
||||
import org.vaadin.crudui.form.CrudFormFactory;
|
||||
import org.vaadin.crudui.form.impl.form.factory.DefaultCrudFormFactory;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
import java.util.Locale;
|
||||
|
||||
final class TimeEntryFormConfigurer {
|
||||
|
||||
private TimeEntryFormConfigurer() {}
|
||||
private TimeEntryFormConfigurer() {
|
||||
}
|
||||
|
||||
static void configure(GridCrud<TimeEntry> crud, SerializableSupplier<TimeEntry> newInstanceSupplier) {
|
||||
CrudFormFactory<TimeEntry> formFactory = new DefaultCrudFormFactory<>(TimeEntry.class);
|
||||
|
||||
formFactory.setVisibleProperties(
|
||||
CrudOperation.ADD, "date", "startTime", "endTime", "pauseMinutes", "targetMinutes", "status", "comment"
|
||||
CrudOperation.ADD, "date", "startTime", "endTime", "pauseMinutes", "targetMinutes", "status", "comment"
|
||||
);
|
||||
formFactory.setVisibleProperties(
|
||||
CrudOperation.UPDATE, "date", "startTime", "endTime", "pauseMinutes", "targetMinutes", "status", "comment"
|
||||
@@ -44,15 +47,21 @@ final class TimeEntryFormConfigurer {
|
||||
formFactory.setFieldProvider("startTime", (TimeEntry bean) -> {
|
||||
TimePicker tp = new TimePicker("Start");
|
||||
tp.setRequiredIndicatorVisible(true);
|
||||
|
||||
tp.setLocale(Locale.of("de", "DE"));
|
||||
tp.setMin(LocalTime.of(5, 0));
|
||||
tp.setMax(LocalTime.of(23, 59));
|
||||
tp.setStep(Duration.ofMinutes(15));
|
||||
return tp;
|
||||
});
|
||||
formFactory.setFieldProvider("endTime", (TimeEntry bean) -> {
|
||||
TimePicker tp = new TimePicker("End");
|
||||
tp.setRequiredIndicatorVisible(true);
|
||||
tp.setLocale(Locale.of("de", "DE"));
|
||||
tp.setMin(LocalTime.of(5, 0));
|
||||
tp.setMax(LocalTime.of(23, 59));
|
||||
tp.setStep(Duration.ofMinutes(15));
|
||||
|
||||
return tp;
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user