diff --git a/scripts/image-builder.sh b/scripts/image-builder.sh index e3dd230..3fe82ed 100755 --- a/scripts/image-builder.sh +++ b/scripts/image-builder.sh @@ -615,25 +615,16 @@ build_image() { local config_file="$PROJECT_CONFIG_DIR/$project/config-file" load_project_config "$config_file" - # 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 + # Logs-Verzeichnis anlegen + mkdir -p "$LOGS_DIR" - local archs - archs=$(echo "$architectures" | sed 's/ /,/g') + local timestamp + timestamp=$(date +"%Y%m%d_%H%M%S") + local logfile="$LOGS_DIR/${project}_${timestamp}.log" - 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 "==== Build gestartet: $(date) ====" >> "$logfile" echo "Projekt: $project" >> "$logfile" - echo "Registries: ${registry}" >> "$logfile" + echo "Registries: $registry" >> "$logfile" echo "Image: $image_name" >> "$logfile" echo "Architekturen: $architectures" >> "$logfile" echo "Push: $push" >> "$logfile" @@ -641,39 +632,56 @@ build_image() { echo "Latest: $latest" >> "$logfile" echo "====================================" >> "$logfile" - # Build starten - local build_cmd - build_cmd="docker buildx build --platform linux/$archs ${tags[*]} ./projects/$project $push_flag" - echo "$build_cmd" >> "$logfile" - - if $build_cmd >> "$logfile" 2>&1; then - echo "==== Build beendet: $(date) ====" >> "$logfile" - - # 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 + # Registry-URL Funktion + get_registry_url() { + local reg_name=$1 + local reg_file="$REGISTRY_CONFIG_DIR/$reg_name/config-file" + if [[ -f "$reg_file" ]]; then + jq -r '.url' "$reg_file" + else + echo "$reg_name" 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" + # Tags erstellen + tags=() + IFS=',' read -r -a regs <<< "$registry" + for r in "${regs[@]}"; do + [[ -n "$r" ]] && tags+=("-t $(get_registry_url "$r")/$image_name:$version") + if [[ "$latest" == "yes" ]]; then + tags+=("-t $(get_registry_url "$r")/$image_name:latest") + fi + done + + # Architekturen korrekt formatieren + IFS=' ' read -r -a archs_arr <<< "$architectures" + platforms=$(printf ",linux/%s" "${archs_arr[@]}") + platforms=${platforms:1} # führendes Komma entfernen + + # Build-Befehl als Array + build_cmd=(docker buildx build --platform "$platforms" "${tags[@]}" "./projects/$project") + [[ "$push" == "yes" ]] && build_cmd+=(--push) || build_cmd+=(--load) + + # Build ausführen + if "${build_cmd[@]}" >> "$logfile" 2>&1; then + echo "==== Build beendet: $(date) ====" >> "$logfile" + whiptail --msgbox "Build erfolgreich abgeschlossen.\nLog: $logfile" 12 70 + # Subversion automatisch erhöhen, falls aktiviert + if [[ "${auto_subversion:-no}" == "yes" ]]; then + IFS='.' read -r main sub <<< "$version" + sub=$((sub + 1)) + new_version="$main.$sub" + sed -i "s|^version=.*|version=$new_version|" "$config_file" + whiptail --msgbox "Subversion automatisch auf $new_version erhöht." 10 60 fi else echo "==== Build fehlgeschlagen: $(date) ====" >> "$logfile" + whiptail --msgbox "Build fehlgeschlagen.\nLog: $logfile" 12 70 fi - - whiptail --msgbox "Build beendet. Log-Datei: $logfile" 15 70 } + # Logs ansehen (optional gefiltert nach Projekt) view_logs() { #ensure_logs_dir