Refactor deploy script to add 'no-backup' option for updates, allowing users to skip database backups during code updates. Update help text for clarity on available options and improve overall script usability.
This commit is contained in:
50
deploy.sh
50
deploy.sh
@@ -9,13 +9,14 @@
|
|||||||
# ./deploy.sh [OPTION]
|
# ./deploy.sh [OPTION]
|
||||||
#
|
#
|
||||||
# Optionen:
|
# Optionen:
|
||||||
# install - Erste Installation (inkl. System-Setup)
|
# install - Erste Installation (inkl. System-Setup)
|
||||||
# update - Update einer bestehenden Installation
|
# update - Update einer bestehenden Installation
|
||||||
# rollback - Rollback zur vorherigen Version
|
# update no-backup - Update ohne Backup (nur Code-Update)
|
||||||
# backup - Erstelle Backup der Datenbank
|
# rollback - Rollback zur vorherigen Version
|
||||||
# status - Zeige Status der Services
|
# backup - Erstelle Backup der Datenbank
|
||||||
# logs - Zeige Logs
|
# status - Zeige Status der Services
|
||||||
# help - Zeige diese Hilfe
|
# logs - Zeige Logs
|
||||||
|
# help - Zeige diese Hilfe
|
||||||
#
|
#
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
@@ -459,8 +460,13 @@ do_update() {
|
|||||||
print_info "Quell-Verzeichnis: $CURRENT_DIR"
|
print_info "Quell-Verzeichnis: $CURRENT_DIR"
|
||||||
print_info "Ziel-Verzeichnis: $PROJECT_DIR"
|
print_info "Ziel-Verzeichnis: $PROJECT_DIR"
|
||||||
|
|
||||||
# Backup erstellen
|
# Backup erstellen (nur wenn nicht explizit übersprungen)
|
||||||
do_backup
|
SKIP_BACKUP="${2:-false}"
|
||||||
|
if [ "$SKIP_BACKUP" != "no-backup" ]; then
|
||||||
|
do_backup
|
||||||
|
else
|
||||||
|
print_info "Backup übersprungen (--no-backup Flag gesetzt)"
|
||||||
|
fi
|
||||||
|
|
||||||
# Kopiere aktualisierte Dateien
|
# Kopiere aktualisierte Dateien
|
||||||
print_header "Kopiere aktualisierte Dateien"
|
print_header "Kopiere aktualisierte Dateien"
|
||||||
@@ -767,19 +773,21 @@ $PROJECT_NAME v3 - Deployment Script
|
|||||||
Verwendung: $0 [OPTION]
|
Verwendung: $0 [OPTION]
|
||||||
|
|
||||||
Optionen:
|
Optionen:
|
||||||
install Erste Installation (inkl. System-Setup)
|
install Erste Installation (inkl. System-Setup)
|
||||||
update Update einer bestehenden Installation
|
update Update einer bestehenden Installation
|
||||||
rollback Rollback zur vorherigen Version
|
update no-backup Update ohne Backup (nur Code-Update, keine DB-Berührung)
|
||||||
backup Erstelle Backup der Datenbank
|
rollback Rollback zur vorherigen Version
|
||||||
status Zeige Status der Services
|
backup Erstelle Backup der Datenbank
|
||||||
logs Zeige Logs
|
status Zeige Status der Services
|
||||||
help Zeige diese Hilfe
|
logs Zeige Logs
|
||||||
|
help Zeige diese Hilfe
|
||||||
|
|
||||||
Beispiele:
|
Beispiele:
|
||||||
$0 install # Erste Installation
|
$0 install # Erste Installation
|
||||||
$0 update # Update durchführen
|
$0 update # Update durchführen (mit Backup)
|
||||||
$0 backup # Backup erstellen
|
$0 update no-backup # Nur Code-Update, kein Backup
|
||||||
$0 status # Status anzeigen
|
$0 backup # Backup erstellen
|
||||||
|
$0 status # Status anzeigen
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
@@ -790,7 +798,7 @@ case "${1:-help}" in
|
|||||||
do_install
|
do_install
|
||||||
;;
|
;;
|
||||||
update)
|
update)
|
||||||
do_update
|
do_update "$@"
|
||||||
;;
|
;;
|
||||||
rollback)
|
rollback)
|
||||||
do_rollback
|
do_rollback
|
||||||
|
|||||||
@@ -92,6 +92,19 @@ const fetchStats = async () => {
|
|||||||
isReady.value = true
|
isReady.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Lädt Zustand, laufende Zeiten und Tages-Stats neu (z. B. nach Stempeln oder Zeitkorrektur). */
|
||||||
|
const refreshStatusData = async () => {
|
||||||
|
await fetchCurrentState()
|
||||||
|
await fetchWorklogData()
|
||||||
|
await fetchStats()
|
||||||
|
}
|
||||||
|
|
||||||
|
const onWorklogUpdated = (e) => {
|
||||||
|
// Nach Stempeln in dieser Komponente wurde bereits refreshStatusData ausgeführt
|
||||||
|
if (e.detail?.fromStatusBoxClock) return
|
||||||
|
void refreshStatusData()
|
||||||
|
}
|
||||||
|
|
||||||
const fetchCurrentState = async () => {
|
const fetchCurrentState = async () => {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`${API_URL}/time-entries/current-state`, {
|
const response = await fetch(`${API_URL}/time-entries/current-state`, {
|
||||||
@@ -317,13 +330,10 @@ const handleAction = async (action) => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Aktualisiere Status und Worklog-Daten sofort
|
await refreshStatusData()
|
||||||
await fetchCurrentState()
|
window.dispatchEvent(
|
||||||
await fetchWorklogData()
|
new CustomEvent('worklog-updated', { detail: { fromStatusBoxClock: true } })
|
||||||
await fetchStats()
|
)
|
||||||
|
|
||||||
// Event auslösen für andere Komponenten (z.B. WeekOverview)
|
|
||||||
window.dispatchEvent(new CustomEvent('worklog-updated'))
|
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Fehler beim Stempeln:', error)
|
console.error('Fehler beim Stempeln:', error)
|
||||||
@@ -366,22 +376,17 @@ const rightButton = computed(() => {
|
|||||||
|
|
||||||
// Event-Handler für Login
|
// Event-Handler für Login
|
||||||
const handleLoginCompleted = async () => {
|
const handleLoginCompleted = async () => {
|
||||||
await fetchCurrentState()
|
await refreshStatusData()
|
||||||
await fetchWorklogData()
|
|
||||||
await fetchStats()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
// Initiales Laden
|
// Initiales Laden
|
||||||
await fetchCurrentState()
|
await refreshStatusData()
|
||||||
await fetchWorklogData()
|
window.addEventListener('worklog-updated', onWorklogUpdated)
|
||||||
await fetchStats()
|
|
||||||
|
|
||||||
// Server-Daten alle 60 Sekunden neu laden
|
// Server-Daten alle 60 Sekunden neu laden
|
||||||
dataFetchInterval = setInterval(async () => {
|
dataFetchInterval = setInterval(async () => {
|
||||||
await fetchCurrentState()
|
await refreshStatusData()
|
||||||
await fetchWorklogData()
|
|
||||||
await fetchStats()
|
|
||||||
}, 60000)
|
}, 60000)
|
||||||
|
|
||||||
// Anzeige 2x pro Sekunde aktualisieren (nur Berechnung, keine Server-Requests)
|
// Anzeige 2x pro Sekunde aktualisieren (nur Berechnung, keine Server-Requests)
|
||||||
@@ -398,6 +403,7 @@ onBeforeUnmount(() => {
|
|||||||
if (dataFetchInterval) clearInterval(dataFetchInterval)
|
if (dataFetchInterval) clearInterval(dataFetchInterval)
|
||||||
if (displayUpdateInterval) clearInterval(displayUpdateInterval)
|
if (displayUpdateInterval) clearInterval(displayUpdateInterval)
|
||||||
window.removeEventListener('login-completed', handleLoginCompleted)
|
window.removeEventListener('login-completed', handleLoginCompleted)
|
||||||
|
window.removeEventListener('worklog-updated', onWorklogUpdated)
|
||||||
})
|
})
|
||||||
|
|
||||||
const displayRows = computed(() => {
|
const displayRows = computed(() => {
|
||||||
|
|||||||
@@ -275,6 +275,7 @@ async function createTimefix() {
|
|||||||
loadTimefixes(),
|
loadTimefixes(),
|
||||||
loadWorklogEntries() // Lade auch die Dropdown-Liste neu
|
loadWorklogEntries() // Lade auch die Dropdown-Liste neu
|
||||||
])
|
])
|
||||||
|
window.dispatchEvent(new CustomEvent('worklog-updated'))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Fehler beim Erstellen der Zeitkorrektur:', error)
|
console.error('Fehler beim Erstellen der Zeitkorrektur:', error)
|
||||||
await alert(`Fehler: ${error.message}`, 'Fehler')
|
await alert(`Fehler: ${error.message}`, 'Fehler')
|
||||||
@@ -304,6 +305,7 @@ async function deleteTimefix(id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await loadTimefixes()
|
await loadTimefixes()
|
||||||
|
window.dispatchEvent(new CustomEvent('worklog-updated'))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Fehler beim Löschen der Zeitkorrektur:', error)
|
console.error('Fehler beim Löschen der Zeitkorrektur:', error)
|
||||||
await alert(`Fehler: ${error.message}`, 'Fehler')
|
await alert(`Fehler: ${error.message}`, 'Fehler')
|
||||||
|
|||||||
Reference in New Issue
Block a user