👷 Adds filetree generation via GitHub Workflow (#809)

This commit is contained in:
Thomas Camlong 2024-10-20 19:05:11 +09:00 committed by GitHub
parent a0101322ee
commit 478994e9cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 80 additions and 0 deletions

31
.github/workflows/generate_filetree.yml vendored Normal file
View File

@ -0,0 +1,31 @@
name: 🌴 Generate File Tree
on:
push:
workflow_dispatch:
jobs:
generate:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.9"
architecture: "x64"
- name: Generate File Tree
run: python config/tree.py svg png
- name: Load to GitHub
run: |-
git diff
git config --global user.email "noreply@lammers.media"
git config --global user.name "Dashboard Icons Bot"
git add file_tree.json
git commit -m ":construction_worker: Generates file_tree.json" || exit 0
git push

49
config/tree.py Normal file
View File

@ -0,0 +1,49 @@
import os
import json
import sys
def folder_to_json(path):
tree = {}
base_folder_name = os.path.basename(os.path.normpath(path)) # Get the base folder name
# Ensure the path doesn't return an empty string or dot.
base_folder_name = base_folder_name if base_folder_name else os.path.basename(os.getcwd())
for root, dirs, files in os.walk(path):
# Get the relative path of the root directory
relative_path = os.path.relpath(root, path)
# Use base folder name for root, and append relative path for subfolders
key = base_folder_name if relative_path == '.' else os.path.join(base_folder_name, relative_path)
# Only add the folder if there are files
if files:
tree[key] = files
return tree
def generate_combined_tree(paths):
combined_tree = {}
for path in paths:
# Add folder tree for each path
combined_tree.update(folder_to_json(path))
return combined_tree
if __name__ == "__main__":
# Get the list of folder paths from command-line arguments
folder_paths = sys.argv[1:]
if not folder_paths:
print("Please provide at least one folder path.")
sys.exit(1)
# Generate the combined folder tree for all specified paths
combined_folder_tree = generate_combined_tree(folder_paths)
# Write the combined JSON structure to a file named tree.json
with open('tree.json', 'w') as f:
json.dump(combined_folder_tree, f, indent=4)
print("Folder tree successfully written to 'tree.json'.")