From fd3e2c58151e7797e8a66b1ae42d8056d1eeda17 Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 13 Jan 2026 15:47:36 +0100 Subject: [PATCH 01/16] Create jekyll-gh-pages.yml --- .github/workflows/jekyll-gh-pages.yml | 51 +++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/jekyll-gh-pages.yml diff --git a/.github/workflows/jekyll-gh-pages.yml b/.github/workflows/jekyll-gh-pages.yml new file mode 100644 index 0000000..e31d81c --- /dev/null +++ b/.github/workflows/jekyll-gh-pages.yml @@ -0,0 +1,51 @@ +# Sample workflow for building and deploying a Jekyll site to GitHub Pages +name: Deploy Jekyll with GitHub Pages dependencies preinstalled + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Build with Jekyll + uses: actions/jekyll-build-pages@v1 + with: + source: ./ + destination: ./_site + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From aafb6c0afdc7980b02c26b0b6c0b7761c1606749 Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 13 Jan 2026 15:51:14 +0100 Subject: [PATCH 02/16] Create static.yml --- .github/workflows/static.yml | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/static.yml diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml new file mode 100644 index 0000000..f2c9e97 --- /dev/null +++ b/.github/workflows/static.yml @@ -0,0 +1,43 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + # Upload entire repository + path: '.' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From fe33fd4854c255bf44c2cefd6c4437f612e40d46 Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Tue, 13 Jan 2026 18:09:18 +0100 Subject: [PATCH 03/16] Fix --- .github/workflows/jekyll-gh-pages.yml | 51 --------------------------- 1 file changed, 51 deletions(-) delete mode 100644 .github/workflows/jekyll-gh-pages.yml diff --git a/.github/workflows/jekyll-gh-pages.yml b/.github/workflows/jekyll-gh-pages.yml deleted file mode 100644 index e31d81c..0000000 --- a/.github/workflows/jekyll-gh-pages.yml +++ /dev/null @@ -1,51 +0,0 @@ -# Sample workflow for building and deploying a Jekyll site to GitHub Pages -name: Deploy Jekyll with GitHub Pages dependencies preinstalled - -on: - # Runs on pushes targeting the default branch - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - # Build job - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Pages - uses: actions/configure-pages@v5 - - name: Build with Jekyll - uses: actions/jekyll-build-pages@v1 - with: - source: ./ - destination: ./_site - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - - # Deployment job - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 From 3eba7841e6891080e140edc2182096a7b2f7a814 Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 13 Jan 2026 18:14:28 +0100 Subject: [PATCH 04/16] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..86feb48 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +actions.armbian.com \ No newline at end of file From 2d2f18533117baf5e31355de95dfc75566fbe805 Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 13 Jan 2026 18:20:23 +0100 Subject: [PATCH 05/16] Update concurrency settings for deployment Changed concurrency settings to cancel in-progress deployments. --- .github/workflows/static.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index f2c9e97..fea0529 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -15,11 +15,9 @@ permissions: pages: write id-token: write -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" - cancel-in-progress: false + cancel-in-progress: true jobs: # Single deploy job since we're just deploying From e074e3f4463fbff57609b10ffa77dda746a92dc5 Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 13 Jan 2026 18:21:53 +0100 Subject: [PATCH 06/16] Update workflow to use manual dispatch only Removed push trigger for GitHub Pages deployment. --- .github/workflows/static.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index fea0529..fbb00bd 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -2,11 +2,6 @@ name: Deploy static content to Pages on: - # Runs on pushes targeting the default branch - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages From 62d89720b1e795aa9ab3daa1b98356e240a78981 Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Tue, 13 Jan 2026 20:09:57 +0100 Subject: [PATCH 07/16] Website for actions --- actions-report.json | 219 +++++++++++++++ index.html | 666 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 885 insertions(+) create mode 100644 actions-report.json create mode 100644 index.html diff --git a/actions-report.json b/actions-report.json new file mode 100644 index 0000000..c6b4aac --- /dev/null +++ b/actions-report.json @@ -0,0 +1,219 @@ +[ + { + "name": "assets-generate-board-thumbnails.yml", + "description": "This GitHub Actions workflow generates thumbnails for board images and vendor logos. It is triggered on pushes to the main branch affecting specific directories or via manual dispatch. The workflow includes jobs for checking permissions, building matrices for boards and vendors, processing images, and generating a summary report.", + "execution_method": "on: push to main branch, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/assets-generate-board-thumbnails.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/assets-generate-board-thumbnails.yml" + }, + { + "name": "community-enforce-triage-role.yml", + "description": "This GitHub Actions workflow enforces the 'All-repository triage' role for members of the Armbian organization. It is triggered weekly on Mondays at 03:00 UTC and can also be manually triggered with optional inputs for a dry run and exclusion of specific usernames.", + "execution_method": "schedule (cron), workflow_dispatch (with inputs)", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/community-enforce-triage-role.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/community-enforce-triage-role.yml" + }, + { + "name": "community-invite-contributors.yml", + "description": "This workflow invites contributors to the Armbian organization by checking the eligibility of users who have opened pull requests in specified repositories over the last six months. It runs weekly on a schedule and can also be triggered manually with an optional dry-run input to simulate the invitation process without sending actual invites.", + "execution_method": "Triggered on schedule (cron: '0 0 * * 0') and manually via workflow_dispatch with an optional input 'dry-run'.", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/community-invite-contributors.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/community-invite-contributors.yml" + }, + { + "name": "data-update-base-files-info.yml", + "description": "This workflow updates base-files information in the repository when triggered manually or via a repository dispatch event. It checks out the repository, sets up a Python environment, installs necessary dependencies, runs a Python script to generate a JSON file, and commits any changes back to the repository. It is restricted to the 'Armbian' repository owner.", + "execution_method": "Triggered by workflow_dispatch and repository_dispatch events with type 'Data: Update base-files info'.", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-base-files-info.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-base-files-info.yml" + }, + { + "name": "data-update-download-index.yml", + "description": "This workflow updates the download index for Armbian by generating a JSON index and downloading torrent files. It is triggered by repository_dispatch events of type 'Data: Update download index' and can also be manually triggered via workflow_dispatch. The workflow checks out multiple repositories, installs dependencies, generates a JSON file, and commits changes back to the GitHub repository if any updates are made.", + "execution_method": "repository_dispatch, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-download-index.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-download-index.yml" + }, + { + "name": "data-update-image-info.yml", + "description": "This workflow updates the image-info JSON file in the armbian.github.io repository. It is triggered on a weekly schedule every Monday at midnight and can also be manually triggered via workflow_dispatch. The job checks out necessary repositories, generates the inventory JSON, and commits changes if any are detected.", + "execution_method": "schedule (cron: '0 0 * * MON'), workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-image-info.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-image-info.yml" + }, + { + "name": "data-update-jira-excerpt.yml", + "description": "This workflow updates Jira excerpts by pulling data from the Armbian Jira instance when triggered by a repository_dispatch event of type 'Data: Update Jira excerpt'. It checks out the repository, sets up Python, installs dependencies, fetches data from Jira, and commits any changes to the repository. The workflow only runs if the repository owner is 'Armbian'.", + "execution_method": "repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-jira-excerpt.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-jira-excerpt.yml" + }, + { + "name": "data-update-partners-data.yml", + "description": "This GitHub Actions workflow updates partner data by fetching information from the Zoho Bigin API and committing the results to the armbian.github.io repository. It is triggered by a repository_dispatch event with a specific type or manually via workflow_dispatch. The workflow includes steps to obtain access tokens, fetch partner data, enrich it with GitHub avatars, and push the updated JSON files to the repository.", + "execution_method": "repository_dispatch, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-partners-data.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-partners-data.yml" + }, + { + "name": "data-update-rpi-imager-json.yml", + "description": "This GitHub Actions workflow is designed to update a JSON index for RPI images. It can be triggered manually via the GitHub Actions UI or through a repository dispatch event specifically for data updates. The workflow checks out multiple repositories, installs dependencies, builds a JSON file from remote data, and commits changes back to a specified repository if there are updates.", + "execution_method": "Triggered on: repository_dispatch, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-rpi-imager-json.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-rpi-imager-json.yml" + }, + { + "name": "generate-actions-report.yml", + "description": "This workflow generates a report on AI actions, triggered by push events or manually via workflow_dispatch. It allows users to specify a folder to scan and a default branch for links, defaulting to '.github' and 'main' respectively. The workflow checks out the repository, sets up Node.js, installs dependencies, generates the report using a Node.js script, and uploads the resulting artifact.", + "execution_method": "Triggered on push and workflow_dispatch with inputs for scan_root and default_branch.", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-actions-report.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-actions-report.yml" + }, + { + "name": "generate-keyring-data.yaml", + "description": "This workflow downloads the latest keyring data for Debian and Ubuntu, triggered by manual dispatch or a repository dispatch event. It checks out the repository, retrieves the latest keyring packages, downloads them, and updates the repository with the new files. Finally, it triggers another action to notify of the update.", + "execution_method": "workflow_dispatch, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-keyring-data.yaml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-keyring-data.yaml" + }, + { + "name": "generate-motd.yaml", + "description": "This workflow generates a message of the day (MOTD) for Linux OS when triggered by a repository_dispatch event of type 'MOTD update'. It checks out two repositories, processes a JSON file to create a quotes.txt, and commits any changes back to the repository. Additionally, it triggers another action for a keyrings update.", + "execution_method": "repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-motd.yaml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-motd.yaml" + }, + { + "name": "generate-servers-jsons.yml", + "description": "This GitHub Actions workflow generates JSON files from NetBox data, specifically for servers categorized as download, cache, and upload. It can be triggered manually via workflow_dispatch or automatically on an hourly schedule. The workflow checks out a specific repository, installs necessary dependencies, fetches data from the NetBox API, processes it with jq, and commits the generated JSON files back to the repository if there are changes.", + "execution_method": "Triggered on: workflow_dispatch, schedule (cron: '0 * * * *')", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-servers-jsons.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-servers-jsons.yml" + }, + { + "name": "generate-torrent-tracker-lists.yml", + "description": "This workflow updates torrent tracker lists by generating a new announce list from a specified repository. It is triggered manually via workflow_dispatch or automatically on a schedule at 4 AM UTC daily. The job checks out the necessary repositories, processes the tracker data, commits the results to a data branch, and triggers another workflow for web indexing.", + "execution_method": "workflow_dispatch, schedule (cron: '0 4 * * *')", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-torrent-tracker-lists.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-torrent-tracker-lists.yml" + }, + { + "name": "generate-web-directory.yml", + "description": "This workflow generates a directory listing for a web page, triggered by pushes to the 'data' branch, manual dispatch, or specific repository dispatch events. It checks out the 'data' and 'main' branches, stages generated data, rewrites the 'data' branch, and generates directory listings before deploying to GitHub Pages.", + "execution_method": "Triggered on: push to 'data' branch, workflow_dispatch, repository_dispatch with type 'Web: Directory listing'", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-web-directory.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-web-directory.yml" + }, + { + "name": "infrastructure-download-external.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: workflow_dispatch, workflow_call", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-download-external.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-download-external.yml" + }, + { + "name": "infrastructure-mirror-repository-artifacts.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: workflow_dispatch, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-mirror-repository-artifacts.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-mirror-repository-artifacts.yml" + }, + { + "name": "infrastructure-repository-update.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: workflow_dispatch, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-repository-update.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-repository-update.yml" + }, + { + "name": "infrastructure-reusable-mirror.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: workflow_call", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-reusable-mirror.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-reusable-mirror.yml" + }, + { + "name": "infrastructure-update-redirector-config.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: repository_dispatch, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-update-redirector-config.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-update-redirector-config.yml" + }, + { + "name": "label-auto-on-pr.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: pull_request_target", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-auto-on-pr.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-auto-on-pr.yml" + }, + { + "name": "label-listen-pr-review.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: pull_request_review", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-listen-pr-review.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-listen-pr-review.yml" + }, + { + "name": "label-pr-on-approval.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: workflow_run", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-pr-on-approval.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-pr-on-approval.yml" + }, + { + "name": "label-sync.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: workflow_dispatch, push, pull_request", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-sync.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-sync.yml" + }, + { + "name": "maintenance-clean-workflow-logs.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: schedule, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/maintenance-clean-workflow-logs.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/maintenance-clean-workflow-logs.yml" + }, + { + "name": "maintenance-watchdog.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: push, schedule, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/maintenance-watchdog.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/maintenance-watchdog.yml" + }, + { + "name": "monitoring-runners-status.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: push, schedule, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/monitoring-runners-status.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/monitoring-runners-status.yml" + }, + { + "name": "reporting-release-summary.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: workflow_dispatch, schedule", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/reporting-release-summary.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/reporting-release-summary.yml" + }, + { + "name": "repository-status.yaml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: push, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/repository-status.yaml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/repository-status.yaml" + }, + { + "name": "testing-wireless-performance-test.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: workflow_dispatch, schedule", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/testing-wireless-performance-test.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/testing-wireless-performance-test.yml" + }, + { + "name": "validate-board-assets.yml", + "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", + "execution_method": "Triggered on: pull_request", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/validate-board-assets.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/validate-board-assets.yml" + } +] diff --git a/index.html b/index.html new file mode 100644 index 0000000..e8aad7e --- /dev/null +++ b/index.html @@ -0,0 +1,666 @@ + + + + + + GitHub Actions Report + + + + + +
+
+
+

+ GitHub Actions Report Viewer + 0 items +

+

+ Browse GitHub Actions workflows with tabs, search, and quick links. + Default source: actions-report.json +

+
+ +
+ + +
+
+ +
+
+
Overview
+
Table
+
Raw JSON
+
+ +
+
+ + +
+
+ +
+ + + + +
+ +
+
+ + + + + + +
+
+
+ + + + + + From 66ef947f7f686a56e2a9ce30c3744ac687d02ffb Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 13 Jan 2026 20:16:41 +0100 Subject: [PATCH 08/16] Delete .github/workflows/static.yml --- .github/workflows/static.yml | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 .github/workflows/static.yml diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml deleted file mode 100644 index fbb00bd..0000000 --- a/.github/workflows/static.yml +++ /dev/null @@ -1,36 +0,0 @@ -# Simple workflow for deploying static content to GitHub Pages -name: Deploy static content to Pages - -on: - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -concurrency: - group: "pages" - cancel-in-progress: true - -jobs: - # Single deploy job since we're just deploying - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Pages - uses: actions/configure-pages@v5 - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - # Upload entire repository - path: '.' - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 From 4b784497c272753eca21ed068caa56cb8c37838e Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 13 Jan 2026 20:18:30 +0100 Subject: [PATCH 09/16] Create static.yml --- .github/workflows/static.yml | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/static.yml diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml new file mode 100644 index 0000000..f2c9e97 --- /dev/null +++ b/.github/workflows/static.yml @@ -0,0 +1,43 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + # Upload entire repository + path: '.' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From b6ca1bfcf2a42dc7a06cccec2fb2825ec436e4fe Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Tue, 13 Jan 2026 20:49:03 +0100 Subject: [PATCH 10/16] Rename and add armbian.github.com repo --- .github/workflows/static.yml | 19 +++++++++++++++++-- index.html => index.htm | 0 2 files changed, 17 insertions(+), 2 deletions(-) rename index.html => index.htm (100%) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index f2c9e97..bdec4a4 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -29,15 +29,30 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - - name: Checkout + - name: Checkout main repository uses: actions/checkout@v4 + + - name: Checkout armbian.github.io data branch + uses: actions/checkout@v4 + with: + repository: armbian/armbian.github.io + ref: data + path: data-source + + - name: Copy JSON files from data branch + run: | + mkdir -p data + cp data-source/data/actions/*.json data/ 2>/dev/null || echo "No JSON files to copy" + ls -la data/ + - name: Setup Pages uses: actions/configure-pages@v5 + - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - # Upload entire repository path: '.' + - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 diff --git a/index.html b/index.htm similarity index 100% rename from index.html rename to index.htm From 191836f3f8e1f9a7691cb4d6511b00a43aff2d8d Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Tue, 13 Jan 2026 21:06:36 +0100 Subject: [PATCH 11/16] Add file --- actions-report.json | 504 +++++++++++++++++++++++++------------------- 1 file changed, 285 insertions(+), 219 deletions(-) diff --git a/actions-report.json b/actions-report.json index c6b4aac..9f10b35 100644 --- a/actions-report.json +++ b/actions-report.json @@ -1,219 +1,285 @@ -[ - { - "name": "assets-generate-board-thumbnails.yml", - "description": "This GitHub Actions workflow generates thumbnails for board images and vendor logos. It is triggered on pushes to the main branch affecting specific directories or via manual dispatch. The workflow includes jobs for checking permissions, building matrices for boards and vendors, processing images, and generating a summary report.", - "execution_method": "on: push to main branch, workflow_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/assets-generate-board-thumbnails.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/assets-generate-board-thumbnails.yml" - }, - { - "name": "community-enforce-triage-role.yml", - "description": "This GitHub Actions workflow enforces the 'All-repository triage' role for members of the Armbian organization. It is triggered weekly on Mondays at 03:00 UTC and can also be manually triggered with optional inputs for a dry run and exclusion of specific usernames.", - "execution_method": "schedule (cron), workflow_dispatch (with inputs)", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/community-enforce-triage-role.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/community-enforce-triage-role.yml" - }, - { - "name": "community-invite-contributors.yml", - "description": "This workflow invites contributors to the Armbian organization by checking the eligibility of users who have opened pull requests in specified repositories over the last six months. It runs weekly on a schedule and can also be triggered manually with an optional dry-run input to simulate the invitation process without sending actual invites.", - "execution_method": "Triggered on schedule (cron: '0 0 * * 0') and manually via workflow_dispatch with an optional input 'dry-run'.", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/community-invite-contributors.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/community-invite-contributors.yml" - }, - { - "name": "data-update-base-files-info.yml", - "description": "This workflow updates base-files information in the repository when triggered manually or via a repository dispatch event. It checks out the repository, sets up a Python environment, installs necessary dependencies, runs a Python script to generate a JSON file, and commits any changes back to the repository. It is restricted to the 'Armbian' repository owner.", - "execution_method": "Triggered by workflow_dispatch and repository_dispatch events with type 'Data: Update base-files info'.", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-base-files-info.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-base-files-info.yml" - }, - { - "name": "data-update-download-index.yml", - "description": "This workflow updates the download index for Armbian by generating a JSON index and downloading torrent files. It is triggered by repository_dispatch events of type 'Data: Update download index' and can also be manually triggered via workflow_dispatch. The workflow checks out multiple repositories, installs dependencies, generates a JSON file, and commits changes back to the GitHub repository if any updates are made.", - "execution_method": "repository_dispatch, workflow_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-download-index.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-download-index.yml" - }, - { - "name": "data-update-image-info.yml", - "description": "This workflow updates the image-info JSON file in the armbian.github.io repository. It is triggered on a weekly schedule every Monday at midnight and can also be manually triggered via workflow_dispatch. The job checks out necessary repositories, generates the inventory JSON, and commits changes if any are detected.", - "execution_method": "schedule (cron: '0 0 * * MON'), workflow_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-image-info.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-image-info.yml" - }, - { - "name": "data-update-jira-excerpt.yml", - "description": "This workflow updates Jira excerpts by pulling data from the Armbian Jira instance when triggered by a repository_dispatch event of type 'Data: Update Jira excerpt'. It checks out the repository, sets up Python, installs dependencies, fetches data from Jira, and commits any changes to the repository. The workflow only runs if the repository owner is 'Armbian'.", - "execution_method": "repository_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-jira-excerpt.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-jira-excerpt.yml" - }, - { - "name": "data-update-partners-data.yml", - "description": "This GitHub Actions workflow updates partner data by fetching information from the Zoho Bigin API and committing the results to the armbian.github.io repository. It is triggered by a repository_dispatch event with a specific type or manually via workflow_dispatch. The workflow includes steps to obtain access tokens, fetch partner data, enrich it with GitHub avatars, and push the updated JSON files to the repository.", - "execution_method": "repository_dispatch, workflow_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-partners-data.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-partners-data.yml" - }, - { - "name": "data-update-rpi-imager-json.yml", - "description": "This GitHub Actions workflow is designed to update a JSON index for RPI images. It can be triggered manually via the GitHub Actions UI or through a repository dispatch event specifically for data updates. The workflow checks out multiple repositories, installs dependencies, builds a JSON file from remote data, and commits changes back to a specified repository if there are updates.", - "execution_method": "Triggered on: repository_dispatch, workflow_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-rpi-imager-json.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-rpi-imager-json.yml" - }, - { - "name": "generate-actions-report.yml", - "description": "This workflow generates a report on AI actions, triggered by push events or manually via workflow_dispatch. It allows users to specify a folder to scan and a default branch for links, defaulting to '.github' and 'main' respectively. The workflow checks out the repository, sets up Node.js, installs dependencies, generates the report using a Node.js script, and uploads the resulting artifact.", - "execution_method": "Triggered on push and workflow_dispatch with inputs for scan_root and default_branch.", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-actions-report.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-actions-report.yml" - }, - { - "name": "generate-keyring-data.yaml", - "description": "This workflow downloads the latest keyring data for Debian and Ubuntu, triggered by manual dispatch or a repository dispatch event. It checks out the repository, retrieves the latest keyring packages, downloads them, and updates the repository with the new files. Finally, it triggers another action to notify of the update.", - "execution_method": "workflow_dispatch, repository_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-keyring-data.yaml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-keyring-data.yaml" - }, - { - "name": "generate-motd.yaml", - "description": "This workflow generates a message of the day (MOTD) for Linux OS when triggered by a repository_dispatch event of type 'MOTD update'. It checks out two repositories, processes a JSON file to create a quotes.txt, and commits any changes back to the repository. Additionally, it triggers another action for a keyrings update.", - "execution_method": "repository_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-motd.yaml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-motd.yaml" - }, - { - "name": "generate-servers-jsons.yml", - "description": "This GitHub Actions workflow generates JSON files from NetBox data, specifically for servers categorized as download, cache, and upload. It can be triggered manually via workflow_dispatch or automatically on an hourly schedule. The workflow checks out a specific repository, installs necessary dependencies, fetches data from the NetBox API, processes it with jq, and commits the generated JSON files back to the repository if there are changes.", - "execution_method": "Triggered on: workflow_dispatch, schedule (cron: '0 * * * *')", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-servers-jsons.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-servers-jsons.yml" - }, - { - "name": "generate-torrent-tracker-lists.yml", - "description": "This workflow updates torrent tracker lists by generating a new announce list from a specified repository. It is triggered manually via workflow_dispatch or automatically on a schedule at 4 AM UTC daily. The job checks out the necessary repositories, processes the tracker data, commits the results to a data branch, and triggers another workflow for web indexing.", - "execution_method": "workflow_dispatch, schedule (cron: '0 4 * * *')", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-torrent-tracker-lists.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-torrent-tracker-lists.yml" - }, - { - "name": "generate-web-directory.yml", - "description": "This workflow generates a directory listing for a web page, triggered by pushes to the 'data' branch, manual dispatch, or specific repository dispatch events. It checks out the 'data' and 'main' branches, stages generated data, rewrites the 'data' branch, and generates directory listings before deploying to GitHub Pages.", - "execution_method": "Triggered on: push to 'data' branch, workflow_dispatch, repository_dispatch with type 'Web: Directory listing'", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-web-directory.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-web-directory.yml" - }, - { - "name": "infrastructure-download-external.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: workflow_dispatch, workflow_call", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-download-external.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-download-external.yml" - }, - { - "name": "infrastructure-mirror-repository-artifacts.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: workflow_dispatch, repository_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-mirror-repository-artifacts.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-mirror-repository-artifacts.yml" - }, - { - "name": "infrastructure-repository-update.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: workflow_dispatch, repository_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-repository-update.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-repository-update.yml" - }, - { - "name": "infrastructure-reusable-mirror.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: workflow_call", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-reusable-mirror.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-reusable-mirror.yml" - }, - { - "name": "infrastructure-update-redirector-config.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: repository_dispatch, workflow_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-update-redirector-config.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-update-redirector-config.yml" - }, - { - "name": "label-auto-on-pr.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: pull_request_target", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-auto-on-pr.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-auto-on-pr.yml" - }, - { - "name": "label-listen-pr-review.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: pull_request_review", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-listen-pr-review.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-listen-pr-review.yml" - }, - { - "name": "label-pr-on-approval.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: workflow_run", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-pr-on-approval.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-pr-on-approval.yml" - }, - { - "name": "label-sync.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 15 per 60s exceeded for UserByModelByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: workflow_dispatch, push, pull_request", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-sync.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-sync.yml" - }, - { - "name": "maintenance-clean-workflow-logs.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: schedule, workflow_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/maintenance-clean-workflow-logs.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/maintenance-clean-workflow-logs.yml" - }, - { - "name": "maintenance-watchdog.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: push, schedule, workflow_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/maintenance-watchdog.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/maintenance-watchdog.yml" - }, - { - "name": "monitoring-runners-status.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: push, schedule, workflow_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/monitoring-runners-status.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/monitoring-runners-status.yml" - }, - { - "name": "reporting-release-summary.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: workflow_dispatch, schedule", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/reporting-release-summary.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/reporting-release-summary.yml" - }, - { - "name": "repository-status.yaml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: push, repository_dispatch", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/repository-status.yaml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/repository-status.yaml" - }, - { - "name": "testing-wireless-performance-test.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: workflow_dispatch, schedule", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/testing-wireless-performance-test.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/testing-wireless-performance-test.yml" - }, - { - "name": "validate-board-assets.yml", - "description": "AI description failed: OpenAI API error 429: {\"error\":{\"code\":\"RateLimitReached\",\"message\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\",\"details\":\"Rate limit of 24 per 60s exceeded for UserByMinute. Please wait 29 seconds before retrying.\"}}", - "execution_method": "Triggered on: pull_request", - "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/validate-board-assets.yml", - "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/validate-board-assets.yml" - } -] +{ + "organization": "armbian", + "repository": "armbian.github.io", + "actions": [ + { + "name": "Assets: Generate board thumbnails", + "description": "This workflow generates thumbnails for board images and vendor logos by processing image files from specified directories. It builds JSON matrices for boards and vendors, processes images into various sizes, and uploads the results to cache servers. Additionally, it generates a summary report detailing the processing outcomes, including statistics on successfully processed and failed items.", + "execution_method": "push, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/assets-generate-board-thumbnails.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/assets-generate-board-thumbnails.yml", + "edited": "2026-01-13T20:02:40.811Z", + "executed": null + }, + { + "name": "Community: Enforce triage role", + "description": "This workflow enforces the 'All-repository triage' role for eligible organization members, ensuring they have the necessary permissions. It checks current role assignments, excludes specified users, and can operate in a dry-run mode to simulate changes without applying them. The results are summarized in a formatted table.", + "execution_method": "schedule, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/community-enforce-triage-role.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/community-enforce-triage-role.yml", + "edited": "2026-01-13T20:02:40.811Z", + "executed": null + }, + { + "name": "Community: Invite contributors", + "description": "This workflow collects unique pull request authors from specified Armbian repositories over the last six months and checks their membership status in the Armbian organization. It generates a summary of eligible users for invitation and optionally sends invitations based on a dry-run input. The results are displayed in a markdown table format.", + "execution_method": "schedule, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/community-invite-contributors.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/community-invite-contributors.yml", + "edited": "2026-01-13T20:02:40.811Z", + "executed": null + }, + { + "name": "Data: Update base-files info", + "description": "This workflow updates base-files information by running a Python script that generates a JSON file and commits any changes to the repository. It checks out the repository, sets up a Python environment, installs necessary dependencies, and executes the script to produce the updated data. If changes are detected, it commits and pushes the new data file to the repository.", + "execution_method": "workflow_dispatch, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-base-files-info.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-base-files-info.yml", + "edited": "2026-01-13T20:02:40.811Z", + "executed": null + }, + { + "name": "Data: Update download index", + "description": "This workflow generates a JSON index of Armbian images and downloads associated torrent files. It checks out multiple repositories, installs necessary dependencies, and executes a script to create the JSON file. The workflow then compresses the downloaded torrent files and commits any changes to a specified repository branch.", + "execution_method": "repository_dispatch, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-download-index.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-download-index.yml", + "edited": "2026-01-13T20:02:40.811Z", + "executed": null + }, + { + "name": "Data: Update image-info JSON", + "description": "This workflow updates the image-info JSON file by generating new inventory data from a build process and committing any changes to a specified repository. It checks out necessary repositories, produces the inventory JSON, and pushes updates if there are changes. Additionally, it triggers a secondary action for further processing after the update.", + "execution_method": "schedule, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-image-info.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-image-info.yml", + "edited": "2026-01-13T20:02:40.811Z", + "executed": null + }, + { + "name": "Data: Update Jira excerpt", + "description": "This workflow updates Jira excerpts by pulling issue data from a Jira instance and generating HTML files that summarize current and upcoming issues. It retrieves issues based on specific criteria, formats them, and commits the generated HTML files to a designated repository path. Additionally, it triggers another action to update the repository status after the commit.", + "execution_method": "repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-jira-excerpt.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-jira-excerpt.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Data: Update partners data", + "description": "This workflow fetches partner data from Zoho Bigin, generates JSON files for platinum, gold, and silver partners, and enriches maintainer data with GitHub avatars. It commits the generated JSON files to a specified repository and triggers another action to update base-files information.", + "execution_method": "repository_dispatch, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-partners-data.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-partners-data.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Data: Update RPI imager JSON", + "description": "This workflow generates a JSON index file for RPI images by checking out multiple repositories, installing dependencies, and processing data from a remote server. It builds the JSON file by extracting and formatting information about available images, including their URLs and metadata, and commits the changes to a specified repository if any updates are made.", + "execution_method": "repository_dispatch, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-rpi-imager-json.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-rpi-imager-json.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "AI Actions Report", + "description": "This workflow generates a report on GitHub Actions usage by scanning a specified directory, utilizing OpenAI's GPT-4 model for analysis. It installs necessary dependencies, executes a script to create the report, displays the report summary, and uploads the generated report as an artifact.", + "execution_method": "push, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-actions-report.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-actions-report.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Download latest keyrings for Debian & Ubuntu", + "description": "This workflow downloads the latest keyring data for Debian and Ubuntu, retrieves the necessary package URLs, and saves the downloaded files into a specified directory in the repository. It also creates symlinks for the latest versions of the keyrings and commits any changes to the repository. Finally, it triggers another action to update related components.", + "execution_method": "workflow_dispatch, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-keyring-data.yaml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-keyring-data.yaml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Generate motd for Linux OS", + "description": "This workflow generates a message of the day (MOTD) for a Linux operating system by retrieving data from a JSON file, formatting it, and saving it to a text file. It checks out multiple repositories, processes the MOTD data, and commits any changes to the repository. Additionally, it triggers another action to update keyrings after the MOTD generation.", + "execution_method": "repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-motd.yaml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-motd.yaml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Infrastructure: Cache servers JSONs", + "description": "This workflow generates JSON files from data retrieved from a NetBox API, specifically for different types of server roles such as download, cache, and upload. It processes the data using jq to format it appropriately and commits the generated files to a specified branch in the repository. Additionally, it triggers another workflow to update the web index after the JSON files are committed.", + "execution_method": "workflow_dispatch, schedule", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-servers-jsons.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-servers-jsons.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Data: Update Torrent Trackers", + "description": "This workflow generates an updated list of torrent trackers by collecting and formatting entries from a specified repository. It commits the generated list to a designated branch and triggers another workflow for updating a web index. The output is formatted with a specific prefix for use in torrent applications.", + "execution_method": "workflow_dispatch, schedule", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-torrent-tracker-lists.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-torrent-tracker-lists.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Web: Directory listing", + "description": "This workflow rebuilds the 'data' branch by checking out both the 'data' and 'main' branches, staging generated data, and rewriting the 'data' branch with updated content. It generates directory listings from the 'data' folder and uploads them as artifacts, followed by deploying the content to GitHub Pages.", + "execution_method": "push to 'data' branch, workflow_dispatch, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-web-directory.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-web-directory.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Sync 3rd party packages", + "description": "This workflow synchronizes third-party packages by restoring permissions, purging old packages, and mirroring new packages. It checks out necessary repositories, builds a list of configuration files, and manages package versions across different architectures and releases. The workflow also handles GPG key imports and prepares the environment for downloading packages from specified repositories.", + "execution_method": "workflow_dispatch, workflow_call", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-download-external.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-download-external.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Infrastructure: Mirror artifacts", + "description": "This workflow mirrors artifacts from a specified GitHub repository by splitting JSON data into manageable parts, uploading them, and cleaning up older files on designated servers. It retrieves the latest release artifacts, processes them into smaller JSON files, and manages the deployment of these artifacts to remote servers while ensuring that only the latest versions are retained. Additionally, it utilizes SSH for secure file transfers and integrates with external APIs for server information.", + "execution_method": "workflow_dispatch, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-mirror-repository-artifacts.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-mirror-repository-artifacts.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Infrastructure: Repository update", + "description": "This workflow updates the infrastructure repository by downloading external packages, generating reports, and managing file operations related to .deb files. It performs various tasks such as checking membership, copying files, preparing repositories, fixing permissions, and cleaning up after updates. The workflow also includes steps for managing GPG keys and ensuring proper directory structures and permissions for the repositories.", + "execution_method": "workflow_dispatch, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-repository-update.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-repository-update.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Infrastructure: Reusable mirror", + "description": "This workflow defines a reusable process for downloading artifacts, checking API rate limits, installing SSH keys, and uploading files to a CDN based on device configurations. It retrieves a deployment matrix from a specified input file and processes each device to synchronize files using rsync. The workflow ensures that API limits are respected before proceeding with uploads.", + "execution_method": "workflow_call", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-reusable-mirror.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-reusable-mirror.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Infrastructure: Update redirector", + "description": "This workflow updates the redirector configuration by downloading and comparing package and image mirrors from a specified source of truth. It checks for synchronization between local and remote repositories, uploads the results, and generates YAML redirector configurations based on the comparison outcomes. The workflow also manages dependencies and artifacts throughout the process.", + "execution_method": "repository_dispatch, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-update-redirector-config.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-update-redirector-config.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Labels: auto on PR", + "description": "This workflow automatically manages labels on pull requests by categorizing them based on size, file types, and creation date. It removes the 'Ready to merge' label when a PR is updated, applies labels according to a predefined configuration, and assigns size labels based on the number of changed lines. Additionally, it labels PRs with a quarter identifier based on their creation month.", + "execution_method": "pull_request_target", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-auto-on-pr.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-auto-on-pr.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Label: listen PR review", + "description": "This workflow listens for approved pull request reviews and saves the associated pull request number to a text file. It then uploads this file as an artifact with a unique name that includes the workflow run ID.", + "execution_method": "pull_request_review", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-listen-pr-review.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-listen-pr-review.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Label: on PR approval", + "description": "This workflow labels a pull request as 'Ready to merge' upon approval and removes specific review-related labels. It downloads the pull request number from a previous workflow run and utilizes an action to apply the label based on approval status. Additionally, it cleans up any unnecessary labels that indicate the review process is still ongoing.", + "execution_method": "workflow_run", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-pr-on-approval.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-pr-on-approval.yml", + "edited": "2026-01-13T20:02:40.812Z", + "executed": null + }, + { + "name": "Labels: synhronize", + "description": "This workflow synchronizes GitHub issue and pull request labels based on a specified YAML file. It reads the label definitions from '.github/labels.yml' and applies them to the relevant issues or pull requests, while allowing for a dry-run mode during pull requests to preview changes without applying them. The workflow ensures that labels are kept up-to-date according to the defined configurations.", + "execution_method": "workflow_dispatch, push to main branch, pull_request", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-sync.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-sync.yml", + "edited": "2026-01-13T20:02:40.813Z", + "executed": null + }, + { + "name": "Maintenance: Clean workflow logs", + "description": "This workflow cleans up workflow logs by deleting runs older than a specified number of days, helping to manage storage and maintain organization. It can be executed on a schedule or manually through a dispatch event, allowing for flexible log management based on user-defined parameters.", + "execution_method": "schedule, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/maintenance-clean-workflow-logs.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/maintenance-clean-workflow-logs.yml", + "edited": "2026-01-13T20:02:40.813Z", + "executed": null + }, + { + "name": "Maintenance: Watchdog (cronjob)", + "description": "This workflow monitors specific scripts and restarts any failed GitHub Actions jobs associated with them, up to three attempts. It checks the status of the workflows and reruns failed jobs if they have been canceled or failed, ensuring reliability in the execution of critical tasks. The workflow operates on a schedule and can also be triggered manually.", + "execution_method": "push, schedule, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/maintenance-watchdog.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/maintenance-watchdog.yml", + "edited": "2026-01-13T20:02:40.813Z", + "executed": null + }, + { + "name": "Monitoring: Runners status", + "description": "This workflow checks the status of self-hosted runners in a GitHub organization and generates a summary report. It retrieves runner information and associated virtual machine details from NetBox, calculates resource totals, and formats the output as an HTML table. The workflow also verifies permissions for the release manager team before executing the main tasks.", + "execution_method": "push, schedule, workflow_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/monitoring-runners-status.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/monitoring-runners-status.yml", + "edited": "2026-01-13T20:02:40.813Z", + "executed": null + }, + { + "name": "Reporting: Release summary", + "description": "This workflow generates a summary of merged pull requests (PRs) from specified repositories over a defined period, creating a Markdown digest. It fetches PR data, formats it, and optionally publishes a GitHub release with the summary. Additionally, it can generate a journalistic intro using AI based on the summary content.", + "execution_method": "workflow_dispatch, schedule", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/reporting-release-summary.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/reporting-release-summary.yml", + "edited": "2026-01-13T20:02:40.813Z", + "executed": null + }, + { + "name": "Fetch Armbian kernel package versions", + "description": "This workflow fetches the current and edge versions of the Armbian kernel packages from the Armbian repository, generates corresponding SVG badges, and creates a JSON file with the version information. It commits any changes to a specified directory in the repository and triggers another action for a message of the day update.", + "execution_method": "push, repository_dispatch", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/repository-status.yaml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/repository-status.yaml", + "edited": "2026-01-13T20:02:40.813Z", + "executed": null + }, + { + "name": "Testing: WiFi performance", + "description": "This workflow tests the performance of WiFi devices by powering them on, configuring network settings, and running performance tests using iperf. It collects metrics, generates a summary report, and updates documentation with the results. The workflow also handles the cleanup of network configurations after testing.", + "execution_method": "workflow_dispatch, schedule", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/testing-wireless-performance-test.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/testing-wireless-performance-test.yml", + "edited": "2026-01-13T20:02:40.813Z", + "executed": null + }, + { + "name": "Validate board images & vendor logos", + "description": "This workflow validates board images and vendor logos by checking their integrity and format. It installs ImageMagick to perform the validation and executes a script that assesses the specified assets. The workflow ensures that only valid images are included in pull requests.", + "execution_method": "pull_request", + "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/validate-board-assets.yml", + "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/validate-board-assets.yml", + "edited": "2026-01-13T20:02:40.813Z", + "executed": null + } + ] +} From 5c3b1a68a487ed7152ca2b1f7fc7993aeb74c6d1 Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 13 Jan 2026 21:23:41 +0100 Subject: [PATCH 12/16] Add file (#11) --- index.htm | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/index.htm b/index.htm index e8aad7e..479fb23 100644 --- a/index.htm +++ b/index.htm @@ -420,8 +420,20 @@

} function normalizeActions(json){ - return json.map((x, idx) => ({ + // Handle new hierarchical structure: { organization, repository, actions } + const actions = json.actions || json; + + // Store organization and repository for display + if (json.organization) { + el("badgeCount").dataset.org = json.organization; + } + if (json.repository) { + el("badgeCount").dataset.repo = json.repository; + } + + return actions.map((x, idx) => ({ name: String(x.name ?? `item-${idx}`), + filename: String(x.filename ?? x.name ?? `item-${idx}`), description: String(x.description ?? ""), execution_method: String(x.execution_method ?? ""), status_link: x.status_link ?? null, @@ -538,13 +550,16 @@

const failed = data.filter(x => (x.description || "").toLowerCase().includes("ai description failed")).length; const noDesc = data.filter(x => !(x.description || "").trim()).length; + const org = el("badgeCount").dataset.org || "—"; + const repo = el("badgeCount").dataset.repo || "—"; + el("badgeCount").textContent = `${total} items`; el("stats").innerHTML = ` +
Organization
${escapeHtml(org)}
+
Repository
${escapeHtml(repo)}
Total
${total}
With status link
${withStatus}
-
AI failed
${failed}
-
Empty description
${noDesc}
`; } @@ -560,10 +575,14 @@

function renderOverview(){ renderStats(); + const org = el("badgeCount").dataset.org || "armbian"; + const repo = el("badgeCount").dataset.repo || "armbian.github.io"; + const repoPath = `${org}/${repo}`; + const items = view; const cards = items.map(item => { - const workflowName = item.name.replace('.yml', ''); - const badgeUrl = `https://img.shields.io/github/actions/workflow/status/armbian/armbian.github.io/${item.name}?label=&style=for-the-badge&branch=main&logoColor=white`; + const workflowFilename = item.filename; + const badgeUrl = `https://img.shields.io/github/actions/workflow/status/${repoPath}/${workflowFilename}?label=&style=for-the-badge&branch=main&logoColor=white`; const status = item.status_link ? `Workflow Status View Status` @@ -594,8 +613,13 @@

} function renderTable(items){ + const org = el("badgeCount").dataset.org || "armbian"; + const repo = el("badgeCount").dataset.repo || "armbian.github.io"; + const repoPath = `${org}/${repo}`; + const rows = items.map(item => { - const badgeUrl = `https://img.shields.io/github/actions/workflow/status/armbian/armbian.github.io/${item.name}?label=&style=for-the-badge&branch=main&logoColor=white`; + const workflowFilename = item.filename; + const badgeUrl = `https://img.shields.io/github/actions/workflow/status/${repoPath}/${workflowFilename}?label=&style=for-the-badge&branch=main&logoColor=white`; const status = item.status_link ? `Workflow Status` From f8304e2786f1e89bf21ed47e814ad848110d1621 Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Tue, 13 Jan 2026 21:24:19 +0100 Subject: [PATCH 13/16] File --- actions-report.json | 161 ++++++++++++++++++++++++++------------------ 1 file changed, 96 insertions(+), 65 deletions(-) diff --git a/actions-report.json b/actions-report.json index 9f10b35..b142083 100644 --- a/actions-report.json +++ b/actions-report.json @@ -4,281 +4,312 @@ "actions": [ { "name": "Assets: Generate board thumbnails", - "description": "This workflow generates thumbnails for board images and vendor logos by processing image files from specified directories. It builds JSON matrices for boards and vendors, processes images into various sizes, and uploads the results to cache servers. Additionally, it generates a summary report detailing the processing outcomes, including statistics on successfully processed and failed items.", + "filename": "assets-generate-board-thumbnails.yml", + "description": "This workflow generates thumbnails for board images and vendor logos by processing files in specified directories. It builds JSON matrices for boards and vendors, processes images to create thumbnails of various widths, and uploads the results to cache servers. Additionally, it generates a summary report detailing the processing outcomes and comparisons between images and configurations.", "execution_method": "push, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/assets-generate-board-thumbnails.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/assets-generate-board-thumbnails.yml", - "edited": "2026-01-13T20:02:40.811Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Community: Enforce triage role", - "description": "This workflow enforces the 'All-repository triage' role for eligible organization members, ensuring they have the necessary permissions. It checks current role assignments, excludes specified users, and can operate in a dry-run mode to simulate changes without applying them. The results are summarized in a formatted table.", + "filename": "community-enforce-triage-role.yml", + "description": "This workflow enforces the 'All-repository triage' role for eligible organization members by checking their current role assignments and assigning the role where necessary. It can operate in a dry-run mode to simulate changes without making any actual modifications. The results are summarized in a table format, indicating the actions taken for each user.", "execution_method": "schedule, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/community-enforce-triage-role.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/community-enforce-triage-role.yml", - "edited": "2026-01-13T20:02:40.811Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Community: Invite contributors", - "description": "This workflow collects unique pull request authors from specified Armbian repositories over the last six months and checks their membership status in the Armbian organization. It generates a summary of eligible users for invitation and optionally sends invitations based on a dry-run input. The results are displayed in a markdown table format.", + "filename": "community-invite-contributors.yml", + "description": "This workflow collects unique contributors from multiple Armbian repositories based on recent pull requests and checks their membership status in the Armbian organization. It identifies eligible users who are not already members and invites them, unless run in dry-run mode, in which case it only displays the eligible users without sending invitations.", "execution_method": "schedule, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/community-invite-contributors.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/community-invite-contributors.yml", - "edited": "2026-01-13T20:02:40.811Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Data: Update base-files info", - "description": "This workflow updates base-files information by running a Python script that generates a JSON file and commits any changes to the repository. It checks out the repository, sets up a Python environment, installs necessary dependencies, and executes the script to produce the updated data. If changes are detected, it commits and pushes the new data file to the repository.", + "filename": "data-update-base-files-info.yml", + "description": "This workflow updates base-files information by running a Python script that generates a JSON file containing package details. It checks out the repository, sets up a Python environment, installs necessary dependencies, and commits any changes to the repository. Additionally, it triggers a directory listing event upon completion.", "execution_method": "workflow_dispatch, repository_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-base-files-info.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-base-files-info.yml", - "edited": "2026-01-13T20:02:40.811Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Data: Update download index", - "description": "This workflow generates a JSON index of Armbian images and downloads associated torrent files. It checks out multiple repositories, installs necessary dependencies, and executes a script to create the JSON file. The workflow then compresses the downloaded torrent files and commits any changes to a specified repository branch.", + "filename": "data-update-download-index.yml", + "description": "This workflow generates a JSON index of Armbian images and downloads associated torrent files. It checks out multiple repositories, installs necessary dependencies, and executes a script to create the JSON file. The workflow then compresses the downloaded torrent files and commits any changes to the GitHub Pages repository.", "execution_method": "repository_dispatch, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-download-index.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-download-index.yml", - "edited": "2026-01-13T20:02:40.811Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Data: Update image-info JSON", - "description": "This workflow updates the image-info JSON file by generating new inventory data from a build process and committing any changes to a specified repository. It checks out necessary repositories, produces the inventory JSON, and pushes updates if there are changes. Additionally, it triggers a secondary action for further processing after the update.", + "filename": "data-update-image-info.yml", + "description": "This workflow updates the image-info JSON file by producing a new inventory from a build process and committing any changes to a specified repository. It checks out necessary repositories, runs a script to generate the inventory, and pushes updates if there are changes. Additionally, it triggers another action for further processing after the update.", "execution_method": "schedule, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-image-info.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-image-info.yml", - "edited": "2026-01-13T20:02:40.811Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Data: Update Jira excerpt", - "description": "This workflow updates Jira excerpts by pulling issue data from a Jira instance and generating HTML files that summarize current and upcoming issues. It retrieves issues based on specific criteria, formats them, and commits the generated HTML files to a designated repository path. Additionally, it triggers another action to update the repository status after the commit.", + "filename": "data-update-jira-excerpt.yml", + "description": "This workflow updates HTML files with Jira issue summaries and statuses by fetching data from the Armbian Jira API. It generates two HTML files: one for current issues and another for planned issues, based on specific fix versions and statuses. The generated files are then committed to the repository if there are any changes.", "execution_method": "repository_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-jira-excerpt.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-jira-excerpt.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Data: Update partners data", - "description": "This workflow fetches partner data from Zoho Bigin, generates JSON files for platinum, gold, and silver partners, and enriches maintainer data with GitHub avatars. It commits the generated JSON files to a specified repository and triggers another action to update base-files information.", + "filename": "data-update-partners-data.yml", + "description": "This workflow fetches partner data from Zoho Bigin, generates JSON files for platinum, gold, and silver partners, and enriches maintainer data with GitHub avatars. It commits the generated JSON files to the armbian.github.io repository and triggers another action for updating base-files information.", "execution_method": "repository_dispatch, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-partners-data.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-partners-data.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Data: Update RPI imager JSON", - "description": "This workflow generates a JSON index file for RPI images by checking out multiple repositories, installing dependencies, and processing data from a remote server. It builds the JSON file by extracting and formatting information about available images, including their URLs and metadata, and commits the changes to a specified repository if any updates are made.", + "filename": "data-update-rpi-imager-json.yml", + "description": "This workflow generates a JSON index file for RPI images by checking out multiple repositories, installing dependencies, and processing image data from a remote server. It constructs a structured JSON file containing details about the images, including their URLs, sizes, and checksums, and commits the changes to a specified repository if any updates are made.", "execution_method": "repository_dispatch, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/data-update-rpi-imager-json.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/data-update-rpi-imager-json.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "AI Actions Report", - "description": "This workflow generates a report on GitHub Actions usage by scanning a specified directory, utilizing OpenAI's GPT-4 model for analysis. It installs necessary dependencies, executes a script to create the report, displays the report summary, and uploads the generated report as an artifact.", + "filename": "generate-actions-report.yml", + "description": "This workflow generates a report on GitHub Actions usage by scanning a specified folder, utilizing OpenAI's GPT model to analyze the data. It installs necessary dependencies, executes a script to create the report, and then displays and uploads the generated report as an artifact.", "execution_method": "push, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-actions-report.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-actions-report.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Download latest keyrings for Debian & Ubuntu", - "description": "This workflow downloads the latest keyring data for Debian and Ubuntu, retrieves the necessary package URLs, and saves the downloaded files into a specified directory in the repository. It also creates symlinks for the latest versions of the keyrings and commits any changes to the repository. Finally, it triggers another action to update related components.", + "filename": "generate-keyring-data.yaml", + "description": "This workflow downloads the latest keyring data for Debian and Ubuntu, retrieves the necessary package URLs, and saves the downloaded files to a specific directory in the repository. It also creates symlinks for the latest keyrings and commits any changes made to the repository. Finally, it triggers another action to update related components.", "execution_method": "workflow_dispatch, repository_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-keyring-data.yaml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-keyring-data.yaml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Generate motd for Linux OS", - "description": "This workflow generates a message of the day (MOTD) for a Linux operating system by retrieving data from a JSON file, formatting it, and saving it to a text file. It checks out multiple repositories, processes the MOTD data, and commits any changes to the repository. Additionally, it triggers another action to update keyrings after the MOTD generation.", + "filename": "generate-motd.yaml", + "description": "This workflow generates a message of the day (MOTD) for Linux OS by checking out two repositories, processing a JSON file to extract specific fields, and saving the output to a text file. It then commits any changes to the repository and triggers another action for a keyrings update if necessary.", "execution_method": "repository_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-motd.yaml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-motd.yaml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Infrastructure: Cache servers JSONs", - "description": "This workflow generates JSON files from data retrieved from a NetBox API, specifically for different types of server roles such as download, cache, and upload. It processes the data using jq to format it appropriately and commits the generated files to a specified branch in the repository. Additionally, it triggers another workflow to update the web index after the JSON files are committed.", + "filename": "generate-servers-jsons.yml", + "description": "This workflow generates JSON files from data retrieved from a NetBox API, specifically for different types of servers categorized as download, cache, and upload. It processes the data using jq to format it and saves the output in specified JSON files. Additionally, it commits any changes to a designated branch and triggers another workflow for updating a web index.", "execution_method": "workflow_dispatch, schedule", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-servers-jsons.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-servers-jsons.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Data: Update Torrent Trackers", - "description": "This workflow generates an updated list of torrent trackers by collecting and formatting entries from a specified repository. It commits the generated list to a designated branch and triggers another workflow for updating a web index. The output is formatted with a specific prefix for use in torrent applications.", + "filename": "generate-torrent-tracker-lists.yml", + "description": "This workflow generates a list of torrent tracker servers by collecting and processing data from a specified repository. It prepares the list by filtering and formatting the tracker entries, then commits the updated list to a designated branch in the repository. Additionally, it triggers another workflow to update a web index with the new tracker data.", "execution_method": "workflow_dispatch, schedule", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-torrent-tracker-lists.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-torrent-tracker-lists.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Web: Directory listing", - "description": "This workflow rebuilds the 'data' branch by checking out both the 'data' and 'main' branches, staging generated data, and rewriting the 'data' branch with updated content. It generates directory listings from the 'data' folder and uploads them as artifacts, followed by deploying the content to GitHub Pages.", - "execution_method": "push to 'data' branch, workflow_dispatch, repository_dispatch", + "filename": "generate-web-directory.yml", + "description": "This workflow rebuilds a data branch by syncing content from a main branch and generating directory listings for deployment to GitHub Pages. It checks out the necessary branches, stages generated data, rewrites the data branch with updated content, and uploads the directory listings as an artifact. Finally, it deploys the updated content to GitHub Pages.", + "execution_method": "push to data branch, workflow_dispatch, repository_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/generate-web-directory.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/generate-web-directory.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Sync 3rd party packages", - "description": "This workflow synchronizes third-party packages by restoring permissions, purging old packages, and mirroring new packages. It checks out necessary repositories, builds a list of configuration files, and manages package versions across different architectures and releases. The workflow also handles GPG key imports and prepares the environment for downloading packages from specified repositories.", + "filename": "infrastructure-download-external.yml", + "description": "This workflow synchronizes third-party packages by restoring permissions, purging old packages, and mirroring new packages from a specified repository. It builds a matrix of configurations based on the provided inputs and manages the installation of GPG keys, SSH keys, and the downloading of necessary files. The workflow also handles the cleanup of temporary files and directories after processing.", "execution_method": "workflow_dispatch, workflow_call", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-download-external.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-download-external.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.557Z", "executed": null }, { "name": "Infrastructure: Mirror artifacts", - "description": "This workflow mirrors artifacts from a specified GitHub repository by splitting JSON data into manageable parts, uploading them, and cleaning up older files on designated servers. It retrieves the latest release artifacts, processes them into smaller JSON files, and manages the deployment of these artifacts to remote servers while ensuring that only the latest versions are retained. Additionally, it utilizes SSH for secure file transfers and integrates with external APIs for server information.", + "filename": "infrastructure-mirror-repository-artifacts.yml", + "description": "This workflow mirrors artifacts from a specified repository, splits the JSON data of these artifacts into smaller parts, and uploads them. It also cleans up older files on remote servers based on the latest artifact tags and CDN tags. The workflow includes steps for SSH key management, fetching release information, and orchestrating the upload and cleanup processes.", "execution_method": "workflow_dispatch, repository_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-mirror-repository-artifacts.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-mirror-repository-artifacts.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Infrastructure: Repository update", - "description": "This workflow updates the infrastructure repository by downloading external packages, generating reports, and managing file operations related to .deb files. It performs various tasks such as checking membership, copying files, preparing repositories, fixing permissions, and cleaning up after updates. The workflow also includes steps for managing GPG keys and ensuring proper directory structures and permissions for the repositories.", + "filename": "infrastructure-repository-update.yml", + "description": "This workflow updates an infrastructure repository by downloading external packages, managing file structures, generating reports, and preparing repositories for deployment. It includes steps for checking membership, copying files, fixing permissions, and updating repositories with .deb files. Additionally, it handles cleanup of input directories based on specified conditions.", "execution_method": "workflow_dispatch, repository_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-repository-update.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-repository-update.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Infrastructure: Reusable mirror", - "description": "This workflow defines a reusable process for downloading artifacts, checking API rate limits, installing SSH keys, and uploading files to a CDN based on device configurations. It retrieves a deployment matrix from a specified input file and processes each device to synchronize files using rsync. The workflow ensures that API limits are respected before proceeding with uploads.", + "filename": "infrastructure-reusable-mirror.yml", + "description": "This workflow defines a reusable process for downloading artifacts, checking API rate limits, installing SSH keys, and uploading files to a CDN based on a deployment matrix. It retrieves device information from a specified input file and uses it to manage the deployment of artifacts to defined servers. The workflow also includes steps for ensuring API usage is within limits before proceeding with uploads.", "execution_method": "workflow_call", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-reusable-mirror.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-reusable-mirror.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Infrastructure: Update redirector", - "description": "This workflow updates the redirector configuration by downloading and comparing package and image mirrors from a specified source of truth. It checks for synchronization between local and remote repositories, uploads the results, and generates YAML redirector configurations based on the comparison outcomes. The workflow also manages dependencies and artifacts throughout the process.", + "filename": "infrastructure-update-redirector-config.yml", + "description": "This workflow updates redirector configurations by downloading and comparing package and image mirrors from a specified source of truth. It checks for synchronization between the local and remote repositories, uploads artifacts for any discrepancies, and generates YAML redirector configurations based on the results. The workflow also handles multiple platforms and types of data, ensuring that the latest information is reflected in the redirector setup.", "execution_method": "repository_dispatch, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/infrastructure-update-redirector-config.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/infrastructure-update-redirector-config.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Labels: auto on PR", - "description": "This workflow automatically manages labels on pull requests by categorizing them based on size, file types, and creation date. It removes the 'Ready to merge' label when a PR is updated, applies labels according to a predefined configuration, and assigns size labels based on the number of changed lines. Additionally, it labels PRs with a quarter identifier based on their creation month.", + "filename": "label-auto-on-pr.yml", + "description": "This workflow automatically manages labels on pull requests by assigning labels based on PR size, file categories, and creation date. It removes the 'Ready to merge' label when a PR is updated and adds quarterly labels based on the month of creation. The workflow ensures that the appropriate labels are applied consistently to enhance PR organization and tracking.", "execution_method": "pull_request_target", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-auto-on-pr.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-auto-on-pr.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Label: listen PR review", - "description": "This workflow listens for approved pull request reviews and saves the associated pull request number to a text file. It then uploads this file as an artifact with a unique name that includes the workflow run ID.", + "filename": "label-listen-pr-review.yml", + "description": "This workflow listens for approved pull request reviews and saves the associated pull request number to a file. It then uploads this file as an artifact for further use or reference.", "execution_method": "pull_request_review", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-listen-pr-review.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-listen-pr-review.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Label: on PR approval", - "description": "This workflow labels a pull request as 'Ready to merge' upon approval and removes specific review-related labels. It downloads the pull request number from a previous workflow run and utilizes an action to apply the label based on approval status. Additionally, it cleans up any unnecessary labels that indicate the review process is still ongoing.", + "filename": "label-pr-on-approval.yml", + "description": "This workflow labels a pull request as 'Ready to merge' when it receives approval and removes specific review-related labels. It downloads the pull request number from a previous workflow run and uses it to apply the appropriate labels based on the approval status. The workflow also handles the removal of certain labels if the approval is successful.", "execution_method": "workflow_run", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-pr-on-approval.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-pr-on-approval.yml", - "edited": "2026-01-13T20:02:40.812Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Labels: synhronize", - "description": "This workflow synchronizes GitHub issue and pull request labels based on a specified YAML file. It reads the label definitions from '.github/labels.yml' and applies them to the relevant issues or pull requests, while allowing for a dry-run mode during pull requests to preview changes without applying them. The workflow ensures that labels are kept up-to-date according to the defined configurations.", - "execution_method": "workflow_dispatch, push to main branch, pull_request", + "filename": "label-sync.yml", + "description": "This workflow synchronizes GitHub issue and pull request labels based on a specified YAML configuration file. It reads the label definitions from '.github/labels.yml' and applies them to relevant issues and pull requests, while excluding certain labels as defined in the configuration. The synchronization occurs in a dry-run mode for pull requests to preview changes before applying them.", + "execution_method": "workflow_dispatch, push, pull_request", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/label-sync.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/label-sync.yml", - "edited": "2026-01-13T20:02:40.813Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Maintenance: Clean workflow logs", - "description": "This workflow cleans up workflow logs by deleting runs older than a specified number of days, helping to manage storage and maintain organization. It can be executed on a schedule or manually through a dispatch event, allowing for flexible log management based on user-defined parameters.", + "filename": "maintenance-clean-workflow-logs.yml", + "description": "This workflow is designed to clean up workflow logs by deleting runs that are older than a specified number of days. It can be configured to retain a certain number of recent runs, ensuring that only the necessary logs are kept. The default setting removes logs older than 21 days and retains none.", "execution_method": "schedule, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/maintenance-clean-workflow-logs.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/maintenance-clean-workflow-logs.yml", - "edited": "2026-01-13T20:02:40.813Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Maintenance: Watchdog (cronjob)", - "description": "This workflow monitors specific scripts and restarts any failed GitHub Actions jobs associated with them, up to three attempts. It checks the status of the workflows and reruns failed jobs if they have been canceled or failed, ensuring reliability in the execution of critical tasks. The workflow operates on a schedule and can also be triggered manually.", - "execution_method": "push, schedule, workflow_dispatch", + "filename": "maintenance-watchdog.yml", + "description": "This workflow monitors specific GitHub Actions for failures and attempts to restart them up to three times if they fail or are canceled. It operates on a set of predefined scripts, checking their execution status and rerunning them as necessary. The workflow is designed to ensure reliability and reduce manual intervention for failed actions.", + "execution_method": "push, schedule (cron), workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/maintenance-watchdog.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/maintenance-watchdog.yml", - "edited": "2026-01-13T20:02:40.813Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Monitoring: Runners status", - "description": "This workflow checks the status of self-hosted runners in a GitHub organization and generates a summary report. It retrieves runner information and associated virtual machine details from NetBox, calculates resource totals, and formats the output as an HTML table. The workflow also verifies permissions for the release manager team before executing the main tasks.", + "filename": "monitoring-runners-status.yml", + "description": "This workflow checks the status of self-hosted runners in a GitHub organization and generates a summary report in HTML format. It retrieves runner information and associated virtual machine details from NetBox, calculates resource usage, and formats the output for visibility in the GitHub Actions UI. Additionally, it verifies permissions for accessing the organization before proceeding with the status check.", "execution_method": "push, schedule, workflow_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/monitoring-runners-status.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/monitoring-runners-status.yml", - "edited": "2026-01-13T20:02:40.813Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Reporting: Release summary", - "description": "This workflow generates a summary of merged pull requests (PRs) from specified repositories over a defined period, creating a Markdown digest. It fetches PR data, formats it, and optionally publishes a GitHub release with the summary. Additionally, it can generate a journalistic intro using AI based on the summary content.", + "filename": "reporting-release-summary.yml", + "description": "This workflow generates a summary of merged pull requests (PRs) from specified repositories over a defined period. It fetches PR data, compiles it into a Markdown digest, and optionally publishes a GitHub release with the summary. The summary includes a journalistic intro generated by an AI model based on the PR activity.", "execution_method": "workflow_dispatch, schedule", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/reporting-release-summary.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/reporting-release-summary.yml", - "edited": "2026-01-13T20:02:40.813Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Fetch Armbian kernel package versions", - "description": "This workflow fetches the current and edge versions of the Armbian kernel packages from the Armbian repository, generates corresponding SVG badges, and creates a JSON file with the version information. It commits any changes to a specified directory in the repository and triggers another action for a message of the day update.", + "filename": "repository-status.yaml", + "description": "This workflow fetches the current and edge versions of the Armbian kernel packages from the Armbian repository, generates corresponding SVG badges, and creates a JSON file with the version information. It then commits any changes to the repository and triggers another action for a message of the day update.", "execution_method": "push, repository_dispatch", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/repository-status.yaml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/repository-status.yaml", - "edited": "2026-01-13T20:02:40.813Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Testing: WiFi performance", - "description": "This workflow tests the performance of WiFi devices by powering them on, configuring network settings, and running performance tests using iperf. It collects metrics, generates a summary report, and updates documentation with the results. The workflow also handles the cleanup of network configurations after testing.", + "filename": "testing-wireless-performance-test.yml", + "description": "This workflow performs WiFi performance testing on devices by powering them on, configuring their network settings, running performance tests, and generating a summary report. It retrieves device information from a database, establishes connections, and executes iperf tests to measure network speeds. The results are compiled into a markdown document and uploaded as artifacts, with a subsequent step to update documentation based on the test outcomes.", "execution_method": "workflow_dispatch, schedule", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/testing-wireless-performance-test.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/testing-wireless-performance-test.yml", - "edited": "2026-01-13T20:02:40.813Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null }, { "name": "Validate board images & vendor logos", - "description": "This workflow validates board images and vendor logos by checking their integrity and format. It installs ImageMagick to perform the validation and executes a script that assesses the specified assets. The workflow ensures that only valid images are included in pull requests.", + "filename": "validate-board-assets.yml", + "description": "This workflow validates board images and vendor logos by checking their integrity and format using ImageMagick. It performs a checkout of the repository and runs a validation script on the specified image directories.", "execution_method": "pull_request", "status_link": "https://github.com/armbian/armbian.github.io/actions/workflows/validate-board-assets.yml", "script_link": "https://github.com/armbian/armbian.github.io/blob/main/.github/workflows/validate-board-assets.yml", - "edited": "2026-01-13T20:02:40.813Z", + "edited": "2026-01-13T20:14:21.558Z", "executed": null } ] From c923914e5efac64723896e0673ad328ca696aa17 Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Tue, 13 Jan 2026 21:24:19 +0100 Subject: [PATCH 14/16] File --- index.htm | 293 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 263 insertions(+), 30 deletions(-) diff --git a/index.htm b/index.htm index 479fb23..be1077b 100644 --- a/index.htm +++ b/index.htm @@ -298,6 +298,55 @@ } .toast.show{ display:block; } .error{ border-color: rgba(255,90,90,.45); } + + .repo-selector{ + margin-bottom:14px; + display:flex; + gap:10px; + align-items:center; + } + .repo-selector select{ + flex:1; + background:rgba(255,255,255,.8); + border:1px solid var(--line); + color:var(--text); + padding:10px 12px; + border-radius:12px; + outline:none; + font-size:14px; + } + + .complexity{ + font-size:11px; + color:var(--muted); + margin-top:4px; + display:flex; + align-items:center; + gap:4px; + } + .complexity .bar{ + width:60px; + height:6px; + background:rgba(0,0,0,.1); + border-radius:3px; + overflow:hidden; + } + .complexity .fill{ + height:100%; + background:linear-gradient(90deg, rgba(45,212,191,.6), rgba(124,92,255,.6)); + transition: width 0.2s ease; + } + + .logo{ + height:40px; + width:auto; + vertical-align:middle; + margin-right:12px; + } + .title-row{ + display:flex; + align-items:center; + } @@ -305,19 +354,22 @@
-

- GitHub Actions Report Viewer - 0 items -

+
+ +

+ GitHub Actions Report Viewer + 0 items +

+

Browse GitHub Actions workflows with tabs, search, and quick links. - Default source: actions-report.json + Default source: data

- - + +
@@ -331,6 +383,15 @@

+ + +
@@ -359,6 +420,8 @@

Name Execution Description + Size + Last Run Status Script @@ -380,7 +443,10 @@

// ----------------------------- // State // ----------------------------- - let data = []; + let allData = []; // All repository data + let repositories = []; // List of available repositories + let selectedRepo = ""; // Currently selected repository + let data = []; // Currently displayed data (filtered by repo) let view = []; let activeFilter = "all"; let sortKey = "name"; @@ -419,18 +485,57 @@

return json; } - function normalizeActions(json){ - // Handle new hierarchical structure: { organization, repository, actions } - const actions = json.actions || json; + async function loadMultipleReports(baseUrl){ + // Determine the actions directory based on the base URL + // If baseUrl is "data", look in "data/actions" + // If baseUrl already includes "actions", use it directly + const actionsDir = baseUrl.endsWith('/actions') ? baseUrl : `${baseUrl.replace(/\/$/, '')}/actions`; + + // Try to fetch multiple repository reports + const indexUrl = `${actionsDir.replace(/\/$/, '')}/index.json`; + let repoList = []; - // Store organization and repository for display - if (json.organization) { - el("badgeCount").dataset.org = json.organization; + try { + // Try to get an index file first + const indexRes = await fetch(indexUrl, { cache: "no-store" }); + if (indexRes.ok) { + const index = await indexRes.json(); + repoList = index.repositories || []; + } + } catch {} + + // If no index, try to discover JSON files + if (repoList.length === 0) { + // Common pattern: actions-report-{repo}.json + const tryRepos = ['armbian.github.io', 'build', 'documentation', 'userland']; + for (const repo of tryRepos) { + try { + const url = `${actionsDir}/actions-report-${repo}.json`; + const res = await fetch(url, { method: 'HEAD', cache: "no-store" }); + if (res.ok) repoList.push(repo); + } catch {} + } } - if (json.repository) { - el("badgeCount").dataset.repo = json.repository; + + // Load all repository reports + const reports = []; + for (const repo of repoList) { + try { + const url = `${actionsDir}/actions-report-${repo}.json`; + const json = await loadJsonFrom(url); + reports.push({ repo, data: json }); + } catch (e) { + console.warn(`Failed to load ${repo}:`, e.message); + } } + return reports; + } + + function normalizeActions(json){ + // Handle new hierarchical structure: { organization, repository, actions } + const actions = json.actions || json; + return actions.map((x, idx) => ({ name: String(x.name ?? `item-${idx}`), filename: String(x.filename ?? x.name ?? `item-${idx}`), @@ -438,28 +543,105 @@

execution_method: String(x.execution_method ?? ""), status_link: x.status_link ?? null, script_link: x.script_link ?? null, + filelength: Number(x.filelength ?? 0), + repository: json.repository || "", + organization: json.organization || "", })); } + function getComplexityLevel(size){ + if (size < 1000) return { level: 'Simple', pct: 20, color: '#2dd4bf' }; + if (size < 3000) return { level: 'Medium', pct: 50, color: '#7c5cff' }; + if (size < 8000) return { level: 'Complex', pct: 75, color: '#f59e0b' }; + return { level: 'Very Complex', pct: 100, color: '#ef4444' }; + } + + function formatBytes(bytes){ + if (bytes < 1024) return bytes + ' B'; + if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB'; + return (bytes / (1024 * 1024)).toFixed(1) + ' MB'; + } + + function getDaysSinceLast(executed){ + if (!executed) return null; + const executedDate = new Date(executed); + const now = new Date(); + const diffMs = now - executedDate; + const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24)); + + if (diffDays < 1) return { text: 'Today', color: '#2dd4bf' }; + if (diffDays === 1) return { text: 'Yesterday', color: '#7c5cff' }; + if (diffDays < 7) return { text: `${diffDays} days ago`, color: '#7c5cff' }; + if (diffDays < 30) return { text: `${diffDays} days ago`, color: '#f59e0b' }; + return { text: `${diffDays} days ago`, color: '#ef4444' }; + } + async function reload(){ const url = el("sourceUrl").value.trim(); try{ - toast("Loading JSON…"); - const raw = await loadJsonFrom(url); - data = normalizeActions(raw); + toast("Loading JSON(s)…"); + + // Try loading as directory first + const reports = await loadMultipleReports(url); + + if (reports.length > 0) { + // Multi-repository mode + allData = reports.flatMap(r => normalizeActions(r.data).map(a => ({ + ...a, + repository: r.data.repository || a.repository, + organization: r.data.organization || a.organization, + }))); + + repositories = [...new Set(allData.map(a => a.repository))]; + + // Populate repository selector + el("repoSelect").innerHTML = '' + + repositories.map(r => ``).join(''); + el("repoCount").textContent = `${repositories.length} repos`; + el("repoSelector").style.display = "flex"; + } else { + // Single file mode + const raw = await loadJsonFrom(url); + allData = normalizeActions(raw); + repositories = [...new Set(allData.map(a => a.repository))]; + + if (repositories.length > 0) { + el("repoSelect").innerHTML = '' + + repositories.map(r => ``).join(''); + el("repoCount").textContent = `${repositories.length} repos`; + el("repoSelector").style.display = "flex"; + } else { + el("repoSelector").style.display = "none"; + } + } + + selectedRepo = ""; + data = [...allData]; view = [...data]; renderAll(); - toast(`Loaded ${data.length} items from ${url}`); + toast(`Loaded ${data.length} items from ${repositories.length} repositories`); }catch(err){ + allData = []; data = []; view = []; + repositories = []; renderAll(); - toast(`Failed to load: ${err.message}. If opening locally, use a local web server (see note below).`, "error"); + toast(`Failed to load: ${err.message}`, "error"); } } el("btnLoad").addEventListener("click", reload); + // Repository selector change + el("repoSelect").addEventListener("change", (e) => { + selectedRepo = e.target.value; + data = selectedRepo + ? allData.filter(a => a.repository === selectedRepo) + : [...allData]; + view = [...data]; + renderAll(); + }); + // ----------------------------- // Filters + Search // ----------------------------- @@ -575,12 +757,12 @@

function renderOverview(){ renderStats(); - const org = el("badgeCount").dataset.org || "armbian"; - const repo = el("badgeCount").dataset.repo || "armbian.github.io"; - const repoPath = `${org}/${repo}`; - const items = view; const cards = items.map(item => { + // Use item's own organization and repository for badge URL + const org = item.organization || "armbian"; + const repo = item.repository || "armbian.github.io"; + const repoPath = `${org}/${repo}`; const workflowFilename = item.filename; const badgeUrl = `https://img.shields.io/github/actions/workflow/status/${repoPath}/${workflowFilename}?label=&style=for-the-badge&branch=main&logoColor=white`; @@ -596,6 +778,27 @@

const execIcon = item.execution_method ? `` : ''; const desc = item.description ? item.description : "—"; + // Complexity display + const complexity = item.filelength ? getComplexityLevel(item.filelength) : null; + const complexityHtml = complexity ? ` +
+ ${formatBytes(item.filelength)} • ${complexity.level} +
+
+ ` : ''; + + // Last execution info + let lastExecHtml = ''; + if (item.executed) { + const daysInfo = getDaysSinceLast(item.executed); + lastExecHtml = ` +
+ + ${daysInfo.text} +
+ `; + } + return `

@@ -603,6 +806,8 @@

${execIcon ? `${execIcon}` : ''}

${escapeHtml(desc)}

+ ${complexityHtml} + ${lastExecHtml}
`; @@ -613,11 +818,11 @@

} function renderTable(items){ - const org = el("badgeCount").dataset.org || "armbian"; - const repo = el("badgeCount").dataset.repo || "armbian.github.io"; - const repoPath = `${org}/${repo}`; - const rows = items.map(item => { + // Use item's own organization and repository for badge URL + const org = item.organization || "armbian"; + const repo = item.repository || "armbian.github.io"; + const repoPath = `${org}/${repo}`; const workflowFilename = item.filename; const badgeUrl = `https://img.shields.io/github/actions/workflow/status/${repoPath}/${workflowFilename}?label=&style=for-the-badge&branch=main&logoColor=white`; @@ -630,6 +835,32 @@

const execIcon = item.execution_method ? `` : ''; + // File length/size display + let sizeHtml = ''; + if (item.filelength) { + const complexity = getComplexityLevel(item.filelength); + sizeHtml = ` +
+ ${formatBytes(item.filelength)} +
+
+
+
+ `; + } + + // Last execution display + let lastExecHtml = ''; + if (item.executed) { + const daysInfo = getDaysSinceLast(item.executed); + lastExecHtml = ` +
+ + ${daysInfo.text} +
+ `; + } + return `
${escapeHtml(item.name)}
@@ -638,13 +869,15 @@

${escapeHtml(shorten(item.description || "—", 220))}
${escapeHtml(item.description && item.description.length > 220 ? "… truncated" : "")}
+ ${sizeHtml} + ${lastExecHtml} ${status} ${script} `; }).join(""); - el("tbody").innerHTML = rows || `No rows.`; + el("tbody").innerHTML = rows || `No rows.`; el("rawBox").textContent = JSON.stringify(data, null, 2); } From a7efc88c6a147614be7107d3c1e2868304a904e4 Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Wed, 14 Jan 2026 08:32:09 +0100 Subject: [PATCH 15/16] Fix --- index.htm | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/index.htm b/index.htm index be1077b..7810ae1 100644 --- a/index.htm +++ b/index.htm @@ -491,29 +491,17 @@

// If baseUrl already includes "actions", use it directly const actionsDir = baseUrl.endsWith('/actions') ? baseUrl : `${baseUrl.replace(/\/$/, '')}/actions`; - // Try to fetch multiple repository reports - const indexUrl = `${actionsDir.replace(/\/$/, '')}/index.json`; let repoList = []; - try { - // Try to get an index file first - const indexRes = await fetch(indexUrl, { cache: "no-store" }); - if (indexRes.ok) { - const index = await indexRes.json(); - repoList = index.repositories || []; - } - } catch {} - - // If no index, try to discover JSON files - if (repoList.length === 0) { - // Common pattern: actions-report-{repo}.json - const tryRepos = ['armbian.github.io', 'build', 'documentation', 'userland']; - for (const repo of tryRepos) { - try { - const url = `${actionsDir}/actions-report-${repo}.json`; - const res = await fetch(url, { method: 'HEAD', cache: "no-store" }); - if (res.ok) repoList.push(repo); - } catch {} + // Try to discover JSON files by HEAD requests + const tryRepos = ['armbian.github.io', 'build', 'documentation', 'userland']; + for (const repo of tryRepos) { + try { + const url = `${actionsDir}/actions-report-${repo}.json`; + const res = await fetch(url, { method: 'HEAD', cache: "no-store" }); + if (res.ok) repoList.push(repo); + } catch (e) { + // Ignore errors, just continue trying other repos } } @@ -544,6 +532,8 @@

status_link: x.status_link ?? null, script_link: x.script_link ?? null, filelength: Number(x.filelength ?? 0), + executed: x.executed ?? null, + edited: x.edited ?? null, repository: json.repository || "", organization: json.organization || "", })); From 0eba2618f24885ea052be0a2ffbba879786f34f7 Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Wed, 14 Jan 2026 08:48:28 +0100 Subject: [PATCH 16/16] Perhaps this way --- index.htm | 55 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/index.htm b/index.htm index 7810ae1..49dc861 100644 --- a/index.htm +++ b/index.htm @@ -487,10 +487,12 @@

async function loadMultipleReports(baseUrl){ // Determine the actions directory based on the base URL - // If baseUrl is "data", look in "data/actions" - // If baseUrl already includes "actions", use it directly + // If baseUrl already ends with '/actions', use it directly + // Otherwise, append '/actions' to the baseUrl const actionsDir = baseUrl.endsWith('/actions') ? baseUrl : `${baseUrl.replace(/\/$/, '')}/actions`; + console.log(`[loadMultipleReports] Looking for reports in: ${actionsDir}`); + let repoList = []; // Try to discover JSON files by HEAD requests @@ -499,12 +501,19 @@

try { const url = `${actionsDir}/actions-report-${repo}.json`; const res = await fetch(url, { method: 'HEAD', cache: "no-store" }); - if (res.ok) repoList.push(repo); + if (res.ok) { + console.log(`[loadMultipleReports] Found: ${repo}`); + repoList.push(repo); + } else { + console.log(`[loadMultipleReports] Not found (HTTP ${res.status}): ${repo}`); + } } catch (e) { - // Ignore errors, just continue trying other repos + console.log(`[loadMultipleReports] Error checking ${repo}:`, e.message); } } + console.log(`[loadMultipleReports] Discovered ${repoList.length} repositories:`, repoList); + // Load all repository reports const reports = []; for (const repo of repoList) { @@ -512,17 +521,21 @@

const url = `${actionsDir}/actions-report-${repo}.json`; const json = await loadJsonFrom(url); reports.push({ repo, data: json }); + console.log(`[loadMultipleReports] Loaded: ${repo} with ${json.actions?.length || 0} actions`); } catch (e) { - console.warn(`Failed to load ${repo}:`, e.message); + console.warn(`[loadMultipleReports] Failed to load ${repo}:`, e.message); } } return reports; } - function normalizeActions(json){ + function normalizeActions(json, repoOverride = null, orgOverride = null){ // Handle new hierarchical structure: { organization, repository, actions } + // OR old flat format: just an array of actions const actions = json.actions || json; + const repository = repoOverride || json.repository || "unknown"; + const organization = orgOverride || json.organization || "unknown"; return actions.map((x, idx) => ({ name: String(x.name ?? `item-${idx}`), @@ -534,8 +547,8 @@

filelength: Number(x.filelength ?? 0), executed: x.executed ?? null, edited: x.edited ?? null, - repository: json.repository || "", - organization: json.organization || "", + repository: repository, + organization: organization, })); } @@ -575,12 +588,12 @@

const reports = await loadMultipleReports(url); if (reports.length > 0) { - // Multi-repository mode - allData = reports.flatMap(r => normalizeActions(r.data).map(a => ({ - ...a, - repository: r.data.repository || a.repository, - organization: r.data.organization || a.organization, - }))); + // Multi-repository mode - pass repo/org from report metadata + allData = reports.flatMap(r => { + const repoName = r.repo; // Extract from filename + const orgName = r.data.organization || "armbian"; + return normalizeActions(r.data, repoName, orgName); + }); repositories = [...new Set(allData.map(a => a.repository))]; @@ -590,12 +603,20 @@

el("repoCount").textContent = `${repositories.length} repos`; el("repoSelector").style.display = "flex"; } else { - // Single file mode + // Single file mode - try to extract repo from URL const raw = await loadJsonFrom(url); - allData = normalizeActions(raw); + + // Try to extract repo name from URL path + let repoOverride = null; + const urlMatch = url.match(/actions-report-([^/]+)\.json/); + if (urlMatch) { + repoOverride = urlMatch[1]; + } + + allData = normalizeActions(raw, repoOverride); repositories = [...new Set(allData.map(a => a.repository))]; - if (repositories.length > 0) { + if (repositories.length > 0 && repositories[0] !== "unknown") { el("repoSelect").innerHTML = '' + repositories.map(r => ``).join(''); el("repoCount").textContent = `${repositories.length} repos`;