Skip to content

Commit

Permalink
👷 Adds filetree generation via GitHub Workflow (#809)
Browse files Browse the repository at this point in the history
  • Loading branch information
ajnart authored Oct 20, 2024
1 parent a010132 commit 478994e
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 0 deletions.
31 changes: 31 additions & 0 deletions .github/workflows/generate_filetree.yml
Original file line number Diff line number Diff line change
@@ -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 "[email protected]"
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 changes: 49 additions & 0 deletions config/tree.py
Original file line number Diff line number Diff line change
@@ -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'.")

0 comments on commit 478994e

Please sign in to comment.