mirror of
https://github.com/nickyeoman/docker-compose-cookbooks.git
synced 2026-09-04 02:46:23 +00:00
docker extend build bash script working
This commit is contained in:
+102
@@ -0,0 +1,102 @@
|
||||
#!/bin/bash
|
||||
|
||||
process_help_comments() {
|
||||
local input_file="$1"
|
||||
local output_file="$2"
|
||||
local project_path="$3"
|
||||
local cookbook_dir="$4"
|
||||
|
||||
local temp_file=$(mktemp)
|
||||
|
||||
while IFS= read -r line; do
|
||||
# Handle headings (keep headings and process below lines)
|
||||
if [[ "$line" =~ ^# ]]; then
|
||||
echo "$line" >> "$temp_file"
|
||||
elif [[ "$line" =~ ^([^=]+)= ]]; then
|
||||
local var_name="${BASH_REMATCH[1]}"
|
||||
local var_value="${line#*=}"
|
||||
var_value=$(echo "$var_value" | sed 's/\s*#HELP:.*$//')
|
||||
|
||||
# Process #HELP comments
|
||||
if [[ "$line" =~ \#HELP:\ project_path ]]; then
|
||||
var_value="$HLPR_PROJECTPATH"
|
||||
elif [[ "$line" =~ \#HELP:\ volpath ]]; then
|
||||
var_value="$HLPR_PROJECTPATH/data"
|
||||
elif [[ "$line" =~ \#HELP:\ cookbooks ]]; then
|
||||
var_value="$HLPR_COOKBOOKDIR"
|
||||
elif [[ "$line" =~ \#HELP:\ gen32 ]]; then
|
||||
var_value=$(pwgen -cnsB1v 32)
|
||||
fi
|
||||
|
||||
# Add the processed variable to the temp file
|
||||
echo "${var_name}=${var_value}" >> "$temp_file"
|
||||
else
|
||||
# If the line doesn't match a variable, just echo it
|
||||
echo "$line" >> "$temp_file"
|
||||
fi
|
||||
done < "$input_file"
|
||||
|
||||
# Call remove_duplicate_variables to process temp_file and write to output_file
|
||||
cat "$temp_file" >> $output_file
|
||||
rm "$temp_file"
|
||||
}
|
||||
|
||||
remove_duplicate_variables() {
|
||||
local input_file="$1"
|
||||
local temp_file=$(mktemp)
|
||||
declare -A seen_keys
|
||||
|
||||
while IFS= read -r line; do
|
||||
|
||||
# Skip lines that start with # or are blank
|
||||
if [[ ! $line =~ ^# ]] && [[ -n $line ]]; then
|
||||
# Extract the part before the equals sign
|
||||
key=$(echo "$line" | awk -F '=' '{print $1}')
|
||||
|
||||
# Check if the key has already been seen
|
||||
if [[ -z "${seen_keys[$key]}" ]]; then
|
||||
# Mark the key as seen
|
||||
seen_keys[$key]=1
|
||||
# Output the key
|
||||
echo "$line" >> "$temp_file"
|
||||
fi
|
||||
else
|
||||
echo "$line" >> "$temp_file"
|
||||
fi
|
||||
done < "$input_file"
|
||||
|
||||
# Replace the original file with the deduplicated version
|
||||
mv "$temp_file" "$input_file"
|
||||
}
|
||||
|
||||
# Function to create .env file
|
||||
create_env() {
|
||||
local project_path="$1"
|
||||
local selected_dirs="$2"
|
||||
local cookbook_dir="$3"
|
||||
local new_env_file="$project_path/.env"
|
||||
local current_date=$(date)
|
||||
local git_user=$(git config --get user.name)
|
||||
if [[ -z "$git_user" ]]; then
|
||||
local git_user=$USER
|
||||
fi
|
||||
|
||||
# Create the file
|
||||
touch $new_env_file
|
||||
echo "# Auto Generated env file on $current_date by $git_user" >> "$new_env_file"
|
||||
|
||||
# Loop through selected directories and process sample.env files
|
||||
for dir in $selected_dirs; do
|
||||
local sample_file="$cookbook_dir/$dir/sample.env"
|
||||
|
||||
if [ -f "$sample_file" ]; then
|
||||
process_help_comments "$sample_file" "$new_env_file" "$project_path" "$cookbook_dir"
|
||||
else
|
||||
echo "Warning: Create an issue: No sample.env found in $dir" >&2
|
||||
echo "#No Sample File found, raise a bug" >> "$new_env_file"
|
||||
fi
|
||||
done
|
||||
|
||||
remove_duplicate_variables "$new_env_file"
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user