mirror of
				https://github.com/flatcar/scripts.git
				synced 2025-11-03 01:31:29 +01:00 
			
		
		
		
	This may include recent failures or builds derrived from latest, such as those made by image_set_group.
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
# Copyright (c) 2014 The CoreOS Authors. All rights reserved.
 | 
						|
# Use of this source code is governed by a BSD-style license that can be
 | 
						|
# found in the LICENSE file.
 | 
						|
 | 
						|
SCRIPT_ROOT=$(dirname $(readlink -f "$0"))
 | 
						|
. "${SCRIPT_ROOT}/common.sh" || exit 1
 | 
						|
 | 
						|
DEFINE_string board "all" \
 | 
						|
    "Clean only builds for the given board or all boards."
 | 
						|
DEFINE_string output_root "${DEFAULT_BUILD_ROOT}/images" \
 | 
						|
    "Directory containing image result directories."
 | 
						|
DEFINE_boolean keep_latest ${FLAGS_TRUE} \
 | 
						|
    "Do not delete the latest successful image."
 | 
						|
 | 
						|
# Parse flags
 | 
						|
FLAGS "$@" || exit 1
 | 
						|
eval set -- "${FLAGS_ARGV}"
 | 
						|
switch_to_strict_mode
 | 
						|
 | 
						|
shopt -s nullglob
 | 
						|
 | 
						|
if [[ ! -d "${FLAGS_output_root}" ]]; then
 | 
						|
    die_notrace "Output directory not found: ${FLAGS_output_root}"
 | 
						|
fi
 | 
						|
 | 
						|
if [[ "${FLAGS_board}" == all ]]; then
 | 
						|
    board_paths=( "${FLAGS_output_root}"/* )
 | 
						|
elif [[ -d "${FLAGS_output_root}/${FLAGS_board}" ]]; then
 | 
						|
    board_paths=( "${FLAGS_output_root}/${FLAGS_board}" )
 | 
						|
else
 | 
						|
    die_notrace "Board directory not found: ${FLAGS_output_root}/${FLAGS_board}"
 | 
						|
fi
 | 
						|
 | 
						|
before=$(df -k "${FLAGS_output_root}" | awk '$3 ~ /^[0-9]+$/ { print $3 }')
 | 
						|
for board_path in "${board_paths[@]}"; do
 | 
						|
    if [[ ! -d "${board_path}" ]]; then
 | 
						|
        continue
 | 
						|
    fi
 | 
						|
 | 
						|
    for image_path in "${board_path}"/*; do
 | 
						|
        if [[ -h "${image_path}" || ! -d "${image_path}" ]]; then
 | 
						|
            continue
 | 
						|
        fi
 | 
						|
 | 
						|
        if [[ ${FLAGS_keep_latest} -eq ${FLAGS_TRUE} ]]; then
 | 
						|
	    # keep anything that is or newer than the latest
 | 
						|
	    if [[ "${board_path}/latest" -ef "${image_path}" || \
 | 
						|
	          "${board_path}/latest/version.txt" -ot \
 | 
						|
		      "${image_path}/version.txt" ]]; then
 | 
						|
                continue
 | 
						|
	    fi
 | 
						|
        fi
 | 
						|
 | 
						|
        # best effort attempt to clean up old mounts
 | 
						|
        safe_umount_tree "${image_path}"
 | 
						|
 | 
						|
        info "Deleting ${board_path##*/}/${image_path##*/}"
 | 
						|
        sudo rm -rf "${image_path}"
 | 
						|
    done
 | 
						|
 | 
						|
    # cleanup broken symlinks
 | 
						|
    if [[ -h "${board_path}/latest" && ! -e "${board_path}/latest" ]]; then
 | 
						|
        rm "${board_path}/latest"
 | 
						|
    fi
 | 
						|
done
 | 
						|
 | 
						|
after=$(df -k "${FLAGS_output_root}" | awk '$3 ~ /^[0-9]+$/ { print $3 }')
 | 
						|
saved=$(( before - after ))
 | 
						|
if [[ ${saved} -lt 1024 ]]; then
 | 
						|
    info "Deleted ${saved} KB"
 | 
						|
elif [[ ${saved} -lt 1048576 ]]; then
 | 
						|
    saved_mb=$(bc <<<"scale=2; ${saved} / 1024")
 | 
						|
    info "Deleted ${saved_mb} MB"
 | 
						|
else
 | 
						|
    saved_gb=$(bc <<<"scale=2; ${saved} / 1048576")
 | 
						|
    info "Deleted ${saved_gb} GB"
 | 
						|
fi
 |