diff --git a/report_on_fontawesome.sh b/report_on_fontawesome.sh new file mode 100755 index 00000000..8dabc952 --- /dev/null +++ b/report_on_fontawesome.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash + +# This script identifies which Font Awesome files are required based on your +# source code. It requires 'git' to be installed and run from a git repository. +# It uses git-grep to recursively search all tracked files regardless of nesting. + +set -eu + +# Helper to write to stdout with flag termination +stdout() { + printf -- '%s\n' "$@" +} + +# Helper to write to stderr with flag termination +stderr() { + printf >&2 -- '%s\n' "$@" +} + +# 1. Fail fast if git is not installed or the directory is not a repo +if ! command -v git &> /dev/null; then + stderr 'Error: git is not installed or not in PATH.' + exit 1 +fi + +if ! git rev-parse --is-inside-work-tree &> /dev/null; then + stderr 'Error: This script must be run inside a git repository.' + exit 1 +fi + +# Function to count occurrences using "$@" to preserve individual pathspecs +count_icons() { + local pattern="$1" + shift # Remove the pattern, leaving only pathspecs + + # We use -E for Extended Regex and -i for case-insensitivity + git grep -Ei "$pattern" -- "$@" 2>/dev/null | wc -l +} + +# Print header as a single call with multiple arguments +stdout \ + '--- Font Awesome Dependency Analysis ---' \ + 'Foundations: fontawesome.min.css (Always Required)' + +# 2. Analyze project source code for Font Awesome style prefixes +# Pathspecs are passed as individual single-quoted arguments +HAS_SOLID=$(count_icons 'fa-solid|fas fa-' '*.html' '*.js' '*.css') +HAS_BRANDS=$(count_icons 'fa-brands|fab fa-' '*.html' '*.js' '*.css') +HAS_REGULAR=$(count_icons 'fa-regular|far fa-' '*.html' '*.js' '*.css') +HAS_LIGHT=$(count_icons 'fa-light|fal fa-' '*.html' '*.js' '*.css') +HAS_THIN=$(count_icons 'fa-thin|fat fa-' '*.html' '*.js' '*.css') + +# 3. Map findings to the specific self-hosted files required +if [ "${HAS_SOLID}" -gt 0 ]; then + stdout 'Solid: keep css/solid.min.css and webfonts/fa-solid-900.woff2' +fi + +if [ "${HAS_BRANDS}" -gt 0 ]; then + stdout 'Brands: keep css/brands.min.css and webfonts/fa-brands-400.woff2' +fi + +if [ "${HAS_REGULAR}" -gt 0 ]; then + stdout 'Regular: keep css/regular.min.css and webfonts/fa-regular-400.woff2' +fi + +if [ "${HAS_LIGHT}" -gt 0 ]; then + stdout 'Light: keep css/light.min.css and webfonts/fa-light-300.woff2' +fi + +if [ "${HAS_THIN}" -gt 0 ]; then + stdout 'Thin: keep css/thin.min.css and webfonts/fa-thin-100.woff2' +fi + +stdout '----------------------------------------'