|
1 | | -name: update_directory_md |
2 | | -on: [push] |
| 1 | +name: Directory writer |
| 2 | +on: |
| 3 | + push: |
| 4 | + branches: |
| 5 | + - main |
| 6 | + schedule: |
| 7 | + # ┌───────────── minute (0 - 59) |
| 8 | + # │ ┌───────────── hour (0 - 23) |
| 9 | + # │ │ ┌───────────── day of the month (1 - 31) |
| 10 | + # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) |
| 11 | + # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) |
| 12 | + # │ │ │ │ │ |
| 13 | + # │ │ │ │ │ |
| 14 | + # │ │ │ │ │ |
| 15 | + # * * * * * |
| 16 | + - cron: '0 0 * * 1' |
3 | 17 | jobs: |
4 | | - update_directory_md: |
| 18 | + build: |
| 19 | + if: github.repository == 'TheAlgorithms/Ruby' # We only need this to run in our repository. |
5 | 20 | runs-on: ubuntu-latest |
6 | 21 | steps: |
7 | | - - uses: actions/checkout@master |
8 | | - - uses: actions/setup-python@master |
9 | | - - name: update_directory_md |
10 | | - shell: python |
11 | | - run: | |
12 | | - import os |
13 | | - from typing import Iterator |
14 | | - URL_BASE = "https://github.com/TheAlgorithms/Ruby/blob/master" |
15 | | - g_output = [] |
16 | | - |
17 | | - def good_filepaths(top_dir: str = ".") -> Iterator[str]: |
18 | | - for dirpath, dirnames, filenames in os.walk(top_dir): |
19 | | - dirnames[:] = [d for d in dirnames if d[0] not in "._"] |
20 | | - for filename in filenames: |
21 | | - if os.path.splitext(filename)[1].lower() == ".rb": |
22 | | - yield os.path.join(dirpath, filename).lstrip("./") |
23 | | - |
24 | | - def md_prefix(i): |
25 | | - return f"{i * ' '}*" if i else "\n##" |
26 | | - |
27 | | - def print_path(old_path: str, new_path: str) -> str: |
28 | | - global g_output |
29 | | - old_parts = old_path.split(os.sep) |
30 | | - for i, new_part in enumerate(new_path.split(os.sep)): |
31 | | - if i + 1 > len(old_parts) or old_parts[i] != new_part: |
32 | | - if new_part: |
33 | | - g_output.append(f"{md_prefix(i)} {new_part.replace('_', ' ').title()}") |
34 | | - return new_path |
35 | | - |
36 | | - def build_directory_md(top_dir: str = ".") -> str: |
37 | | - global g_output |
38 | | - old_path = "" |
39 | | - for filepath in sorted(good_filepaths(), key=str.lower): |
40 | | - filepath, filename = os.path.split(filepath) |
41 | | - if filepath != old_path: |
42 | | - old_path = print_path(old_path, filepath) |
43 | | - indent = (filepath.count(os.sep) + 1) if filepath else 0 |
44 | | - url = "/".join((URL_BASE, filepath, filename)).replace(" ", "%20") |
45 | | - filename = os.path.splitext(filename.replace("_", " ").title())[0] |
46 | | - g_output.append(f"{md_prefix(indent)} [{filename}]({url})") |
47 | | - return "\n".join(g_output) |
48 | | - with open("DIRECTORY.md", "w") as out_file: |
49 | | - out_file.write(build_directory_md(".") + "\n") |
50 | | - |
51 | | - - name: Update DIRECTORY.md |
52 | | - run: | |
53 | | - cat DIRECTORY.md |
54 | | - git config --global user.name github-actions |
55 | | - git config --global user.email '${GITHUB_ACTOR}@users.noreply.github.com' |
56 | | - git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY |
57 | | - git add DIRECTORY.md |
58 | | - git commit -am "updating DIRECTORY.md" || true |
59 | | - git push --force origin HEAD:$GITHUB_REF || true |
| 22 | + - uses: actions/checkout@v3 |
| 23 | + with: |
| 24 | + fetch-depth: 0 |
| 25 | + - name: Build directory |
| 26 | + uses: TheAlgorithms/scripts/directory_md@main |
| 27 | + with: |
| 28 | + language: Ruby |
| 29 | + working-directory: . |
| 30 | + filetypes: .rb |
0 commit comments