diff --git a/scripts/image-builder.sh b/scripts/image-builder.sh index 6651588..e3dd230 100755 --- a/scripts/image-builder.sh +++ b/scripts/image-builder.sh @@ -613,20 +613,27 @@ load_project_config() { build_image() { local project=$1 local config_file="$PROJECT_CONFIG_DIR/$project/config-file" - local project_dir="$PROJECTS_DIR/$project" - - # Projekt-Konfiguration laden load_project_config "$config_file" - # Logs-Verzeichnis prüfen - mkdir -p "$LOGS_DIR" - local timestamp - timestamp=$(date +"%Y%m%d_%H%M%S") - local logfile="$LOGS_DIR/${project}_${timestamp}.log" + # Build-Parameter aus Config + local regs=() + IFS=',' read -r -a regs <<< "$registry" # Registries als Array + local tags=() + for r in "${regs[@]}"; do + [[ -n "$r" ]] && tags+=("-t $r/$image_name:$version") + done - echo "==== Build gestartet: $(date) ====" >> "$logfile" + local archs + archs=$(echo "$architectures" | sed 's/ /,/g') + + local push_flag="" + [[ "$push" == "yes" ]] && push_flag="--push" + + local logfile="$LOGS_DIR/${project}_$(date +"%Y%m%d_%H%M%S").log" + + echo "==== Build gestartet: $(date) ====" > "$logfile" echo "Projekt: $project" >> "$logfile" - echo "Registries: ${regs[*]}" >> "$logfile" + echo "Registries: ${registry}" >> "$logfile" echo "Image: $image_name" >> "$logfile" echo "Architekturen: $architectures" >> "$logfile" echo "Push: $push" >> "$logfile" @@ -634,59 +641,39 @@ build_image() { echo "Latest: $latest" >> "$logfile" echo "====================================" >> "$logfile" - # Plattformen korrekt für buildx - local platforms - platforms=$(echo "$architectures" | sed 's/ /,linux\//g') - platforms="linux/$platforms" - - # Tags vorbereiten - local tags=() - for reg in "${regs[@]}"; do - # Key=Value Datei einlesen - source "$CONFIG_DIR/registries/$reg/config-file" - tags+=("-t" "${url}/${image_name}:${version}") - [[ "$latest" == "yes" ]] && tags+=("-t" "${url}/${image_name}:latest") - done - - # Push-Option - local push_flag="" - if [[ "$push" == "yes" ]]; then - push_flag="--push" - # Login zu allen Registries - for reg in "${regs[@]}"; do - source "$CONFIG_DIR/registries/$reg/config-file" - if [[ -n "$username" && -n "$password" ]]; then - docker login "$url" -u "$username" -p "$password" &>> "$logfile" - fi - done - fi - # Build starten - { - docker buildx build --platform "$platforms" "$project_dir" "${tags[@]}" $push_flag - } &>> "$logfile" + local build_cmd + build_cmd="docker buildx build --platform linux/$archs ${tags[*]} ./projects/$project $push_flag" + echo "$build_cmd" >> "$logfile" - if [[ $? -eq 0 ]]; then + if $build_cmd >> "$logfile" 2>&1; then echo "==== Build beendet: $(date) ====" >> "$logfile" - # Auto Subversion erhöhen - local auto_subversion - auto_subversion=$(grep "^auto_subversion=" "$config_file" | cut -d= -f2) - if [[ "$auto_subversion" == "yes" ]]; then - IFS='.' read -r major minor <<< "$version" - minor=$((minor+1)) - version="${major}.${minor}" + # Latest-Tag setzen + if [[ "$latest" == "yes" ]]; then + for r in "${regs[@]}"; do + [[ -n "$r" ]] && docker tag "$r/$image_name:$version" "$r/$image_name:latest" >> "$logfile" 2>&1 + done + fi + + # Subversion erhöhen + if grep -q "^auto_subversion=yes" "$config_file"; then + local main_ver sub_ver + main_ver=$(echo "$version" | cut -d. -f1) + sub_ver=$(echo "$version" | cut -d. -f2) + sub_ver=$((sub_ver+1)) + version="$main_ver.$sub_ver" sed -i "s|^version=.*|version=$version|" "$config_file" echo "Subversion automatisch auf $version erhöht." >> "$logfile" fi - - whiptail --msgbox "Build erfolgreich! Log: $logfile" 10 70 else echo "==== Build fehlgeschlagen: $(date) ====" >> "$logfile" - whiptail --msgbox "Build fehlgeschlagen! Log: $logfile" 10 70 fi + + whiptail --msgbox "Build beendet. Log-Datei: $logfile" 15 70 } + # Logs ansehen (optional gefiltert nach Projekt) view_logs() { #ensure_logs_dir @@ -713,14 +700,19 @@ view_logs() { } # Projektübersicht anzeigen +# Projektübersicht mit Aktionen project_overview() { local project=$1 local config_file="$PROJECT_CONFIG_DIR/$project/config-file" load_project_config "$config_file" + # Registries als Array + IFS=' ' read -r -a regs <<< "$registry" + while true; do - choice=$(whiptail --title "Projektübersicht: $project" --menu "Parameter:" 20 70 10 \ - "1" "Registry: $registry" \ + local choice + choice=$(whiptail --title "Projektübersicht: $project" --menu "Parameter:" 20 70 12 \ + "1" "Registries: ${registry}" \ "2" "Image-Name: $image_name" \ "3" "Architekturen: $architectures" \ "4" "Push: $push" \ @@ -729,16 +721,16 @@ project_overview() { "7" "Git-Repo: $git_repo" \ "B" "Bauen" \ "E" "Bearbeiten" \ - "P" "Projektauswahl" \ + "P" "Projektauswahl wechseln" \ "L" "Logs ansehen" \ "Z" "Zurück" \ 3>&1 1>&2 2>&3) || return case $choice in B) build_image "$project" ;; - E) edit_project "$project" ;; # Reuse aus Projektverwaltung - P) select_project_for_build ;; - L) view_logs "$project" ;; + E) edit_project "$project" ;; # Bearbeitungsmenü für das Projekt + P) return ;; # zurück zur Projektauswahl + L) view_logs ;; Z) return ;; esac done @@ -746,16 +738,23 @@ project_overview() { # Projektauswahl für Image-Bauen select_project_for_build() { - local projects=($(ls "$PROJECT_CONFIG_DIR")) - [ ${#projects[@]} -eq 0 ] && { whiptail --msgbox "Keine Projekte vorhanden." 10 60; return; } + local projects + projects=$(ls "$PROJECT_CONFIG_DIR" 2>/dev/null) + [ -z "$projects" ] && { whiptail --msgbox "Keine Projekte vorhanden." 10 60; return; } - menu_list=() - for p in "${projects[@]}"; do - menu_list+=("$p" "Projekt") + # Projekte für Menü vorbereiten (1-Spalte) + local menu_list=() + for p in $projects; do + menu_list+=("$p" "") done - project=$(whiptail --title "Projekt auswählen" --menu "Bitte Projekt auswählen:" 20 60 10 "${menu_list[@]}" 3>&1 1>&2 2>&3) || return - project_overview "$project" + while true; do + local project + project=$(whiptail --title "Projekt auswählen" --menu "Projekt für Build auswählen:" 20 60 10 "${menu_list[@]}" 3>&1 1>&2 2>&3) || return + + # Projektübersicht anzeigen + project_overview "$project" + done } # Menüpunkt im Hauptmenü