-
Notifications
You must be signed in to change notification settings - Fork 543
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
👷 Adds filetree generation via GitHub Workflow (#809)
- Loading branch information
Showing
2 changed files
with
80 additions
and
0 deletions.
There are no files selected for viewing
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
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 |
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
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'.") |