Files
espanso/test.sh
T
naomi 6944c10fea
CI / Validate YAML (push) Successful in 5s
feat: test for duplicate replace values
2025-08-06 10:17:37 -07:00

122 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# Directory containing YAML files
MATCH_DIR="match"
# Check if directory exists
if [ ! -d "$MATCH_DIR" ]; then
echo "Error: Directory '$MATCH_DIR' not found!"
exit 1
fi
# Temporary file to store all triggers
ALL_TRIGGERS=$(mktemp)
ALL_REPLACES=$(mktemp)
# Find all YAML files and extract triggers
echo "Scanning YAML files in $MATCH_DIR directory..."
for file in "$MATCH_DIR"/*.y*ml; do
if [ -f "$file" ]; then
echo "Processing file: $(basename "$file")"
# Extract triggers using grep and sed
# This looks for lines with "trigger:" and captures the value
grep -E '^\s*-\s*trigger:' "$file" | sed 's/.*trigger:\s*"\([^"]*\)".*/\1/' >> "$ALL_TRIGGERS"
# Also extract replace values if they exist
grep -E '^\s*replace:' "$file" | sed 's/.*replace:\s*"\([^"]*\)".*/\1/' >> "$ALL_REPLACES"
else
echo "Warning: No YAML files found in $MATCH_DIR directory!"
continue
fi
done
# Check if we found any triggers
if [ ! -s "$ALL_TRIGGERS" ]; then
echo "No triggers found in YAML files. Check file format or directory."
rm "$ALL_TRIGGERS"
exit 1
fi
# Sort triggers and find duplicates
echo -e "\nChecking for duplicate triggers..."
DUPLICATE_TRIGGERS=$(sort "$ALL_TRIGGERS" | uniq -d)
# Display results
if [ -z "$DUPLICATE_TRIGGERS" ]; then
echo "Success: All triggers are unique!"
TOTAL=$(wc -l < "$ALL_TRIGGERS")
echo "Total number of triggers found: $TOTAL"
else
echo "Error: Duplicate triggers found:"
echo "$DUPLICATE_TRIGGERS"
# Optional: Show which files contain each duplicate
echo -e "\nDuplicates found in these files:"
for dupe in $DUPLICATE_TRIGGERS; do
echo "Trigger \"$dupe\" found in:"
grep -l "trigger: \"$dupe\"" "$MATCH_DIR"/*.y*ml
done
exit 1
fi
# Sort replace values and find duplicates
echo -e "\nChecking for duplicate replace values..."
DUPLICATE_REPLACES=$(sort "$ALL_REPLACES" | uniq -d)
# Display results
if [ -z "$DUPLICATE_REPLACES" ]; then
echo "Success: All replace values are unique!"
TOTAL_REPLACES=$(wc -l < "$ALL_REPLACES")
echo "Total number of replace values found: $TOTAL_REPLACES"
else
echo "Error: Duplicate replace values found:"
echo "$DUPLICATE_REPLACES"
# Optional: Show which files contain each duplicate replace value
echo -e "\nDuplicates found in these files:"
for dupe in $DUPLICATE_REPLACES; do
echo "Replace value \"$dupe\" found in:"
grep -l "replace: \"$dupe\"" "$MATCH_DIR"/*.y*ml
done
exit 1
fi
# Clean up
rm "$ALL_TRIGGERS"
rm "$ALL_REPLACES"
### Now we test that all gifs.yml replace values match "c.tenor.com".
# Temporary file to store all replace values
REPLACE_VALUES=$(mktemp)
# Read gifs.yml file and extract replace values
echo "Scanning gifs.yml for replace values..."
if [ -f "$MATCH_DIR/gifs.yml" ]; then
# We match lines like: ` replace: "https://c.tenor.com/some-value/tenor.gif"`
grep -E '^\s*replace:' "$MATCH_DIR/gifs.yml" | sed 's/.*replace:\s*"\([^"]*\)".*/\1/' >> "$REPLACE_VALUES"
else
echo "Error: gifs.yml file not found in $MATCH_DIR directory!"
rm "$REPLACE_VALUES"
exit 1
fi
# Check if we found any replace values
if [ ! -s "$REPLACE_VALUES" ]; then
echo "No replace values found in gifs.yml. Check file format."
rm "$REPLACE_VALUES"
exit 1
fi
# Check if all replace values start with "https://c.tenor.com/"
echo -e "\nChecking replace values in gifs.yml..."
INVALID_REPLACE=$(grep -v '^https://c\.tenor\.com/' "$REPLACE_VALUES")
if [ -z "$INVALID_REPLACE" ]; then
echo "Success: All replace values in gifs.yml are valid!"
else
echo "Error: Invalid replace values found in gifs.yml:"
echo "$INVALID_REPLACE"
exit 1
fi
# This must always be the final line, so that CI can detect success. If you want to exit with a failure, do so at the conditional point.
exit 0