Utility - Remake All Index Pages #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Utility - remake all index pages | |
on: | |
workflow_dispatch: | |
jobs: | |
remake-all-indexes: | |
runs-on: ubuntu-latest | |
name: Remake file index pages | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Generate index files | |
run: | | |
header_html="$(cat template_header.html)" | |
footer_html="$(cat template_footer.html)" | |
## MAKE HOME TABLE ## | |
echo "Working on: home" | |
table_html="" | |
table_html+="<table class=\"table table-striped table-bordered table-hover\">" | |
table_html+="<thead class=\"table-dark\"><tr><th>Item Name</th><th>Type</th><th>File Count / Size</th><th>Last Modified</th></tr></thead>" | |
table_html+=$'\n' | |
unique_release_dirs=() | |
# Add directories to the home index | |
for subdir in $(find . -mindepth 1 -maxdepth 1 -type d ! -name ".*" | sort -rn) | |
do | |
folder=$(basename $subdir) | |
# Collect unique list of release folders | |
if [[ ! " ${unique_release_dirs[@]} " =~ " ${folder} " ]]; then | |
unique_release_dirs+=("$folder") | |
fi | |
# Get the count and last modified date for directories | |
filecount=$(find $subdir -mindepth 2 -maxdepth 2 -type f ! -name "*.html" | wc -l) | |
modified=$(git log -1 --format=%cd --date=format:'%d %b %Y %l:%M %p' -- "$subdir") | |
table_html+="<tr><td><a class=\"file-link\" href=\"$folder\">$folder</a></td><td>Directory</td><td>$filecount files</td><td>$modified</td></tr>" | |
table_html+=$'\n' | |
done | |
# Add XML files to the home index | |
for file in $(find . -mindepth 1 -maxdepth 1 -type f -name "*.xml" | sort) | |
do | |
filename=$(basename "$file") | |
filesize=$(du -h "$file" | cut -f1) | |
modified=$(git log -1 --format=%cd --date=format:'%d %b %Y %l:%M %p' -- "$file") | |
table_html+="<tr><td><a class=\"file-link\" href=\"$filename\">$filename</a></td><td>XML File</td><td>$filesize</td><td>$modified</td></tr>" | |
table_html+=$'\n' | |
done | |
table_html+="</table>" | |
# Assemble and save HTML | |
home_html="$header_html$table_html$footer_html" | |
echo "$home_html" > "./index.html" | |
## MAKE RELEASE FOLDER TABLES ## | |
for release_dir in ${unique_release_dirs[@]} | |
do | |
echo "Working on: $release_dir" | |
table_html="" | |
table_html+="<table class=\"table table-striped table-bordered table-hover\">" | |
table_html+="<thead class=\"table-dark\"><tr><th>Item Name</th><th>Type</th><th>File Count / Size</th><th>Last Modified</th></tr></thead>" | |
table_html+=$'\n' | |
unique_type_dirs=() | |
# Add subdirectories to the release folder index | |
for subdir in $(find "$release_dir" -mindepth 1 -maxdepth 1 -type d ! -name ".*" | sort) | |
do | |
folder=$(basename $subdir) | |
if [[ ! " ${unique_type_dirs[@]} " =~ " ${folder} " ]]; then | |
unique_type_dirs+=("$folder") | |
fi | |
filecount=$(find $subdir -mindepth 1 -maxdepth 1 -type f ! -name "*.html" | wc -l) | |
modified=$(git log -1 --format=%cd --date=format:'%d %b %Y %l:%M %p' -- "$subdir") | |
table_html+="<tr><td><a class=\"file-link\" href=\"$folder\">$folder</a></td><td>Directory</td><td>$filecount files</td><td>$modified</td></tr>" | |
table_html+=$'\n' | |
done | |
# Add XML files to the release folder index | |
for file in $(find "$release_dir" -mindepth 1 -maxdepth 1 -type f -name "*.xml" | sort) | |
do | |
filename=$(basename "$file") | |
filesize=$(du -h "$file" | cut -f1) | |
modified=$(git log -1 --format=%cd --date=format:'%d %b %Y %l:%M %p' -- "$file") | |
table_html+="<tr><td><a class=\"file-link\" href=\"$filename\">$filename</a></td><td>XML File</td><td>$filesize</td><td>$modified</td></tr>" | |
table_html+=$'\n' | |
done | |
table_html+="</table>" | |
table_html+='<p><a href="../">Parent directory</a></p>' | |
folder_html="$header_html$table_html$footer_html" | |
echo "$folder_html" > "$release_dir/index.html" | |
## MAKE FILE TABLE PER TYPE ## | |
for dir in ${unique_type_dirs[@]} | |
do | |
echo "Working on: $release_dir/$dir" | |
table_html="" | |
table_html+="<table class=\"table table-striped table-bordered table-hover\">" | |
table_html+="<thead class=\"table-dark\"><tr><th>File Name</th><th>File Size</th><th>Last Modified</th></tr></thead>" | |
table_html+=$'\n' | |
# Add all files (including XML) to the type folder index | |
for file in $(find "$release_dir/$dir" -mindepth 1 -maxdepth 1 -type f ! -name "*.html" | sort) | |
do | |
if [[ -f "$file" ]]; then | |
filename=$(basename "$file") | |
filesize=$(du -h "$file" | cut -f1) | |
modified=$(git log -1 --format=%cd --date=format:'%d %b %Y %l:%M %p' -- "$file") | |
table_html+="<tr><td><a class=\"file-link\" id=\"File\" href=\"$filename\">$filename</a></td><td>$filesize</td><td>$modified</td></tr>" | |
table_html+=$'\n' | |
fi | |
done | |
table_html+="</table>" | |
table_html+='<p><a href="../">Parent directory</a></p>' | |
file_html="$header_html$table_html$footer_html" | |
echo "$file_html" > "$release_dir/$dir/index.html" | |
done | |
done | |
- uses: stefanzweifel/git-auto-commit-action@v4 | |
with: | |
commit_message: Update file index pages | |
file_pattern: 'index.html **/index.html' |