From 5779167f616e6e42f3b38127116554d72f1d4504 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 22 Apr 2025 19:23:41 +0000 Subject: [PATCH 01/13] =?UTF-8?q?=F0=9F=8F=86=20Auto:=20Update=20SLIM=20Le?= =?UTF-8?q?aderboards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/slim-ammos-config-leaderboard.md | 189 ++++++++++---------- examples/slim-maap-config-leaderboard.md | 206 +++++++++++----------- examples/slim-opera-config-leaderboard.md | 1 + examples/slim-unity-config-leaderboard.md | 26 +-- 4 files changed, 212 insertions(+), 210 deletions(-) diff --git a/examples/slim-ammos-config-leaderboard.md b/examples/slim-ammos-config-leaderboard.md index 2f41df2..eb3fb5a 100644 --- a/examples/slim-ammos-config-leaderboard.md +++ b/examples/slim-ammos-config-leaderboard.md @@ -1,97 +1,98 @@ # SLIM Best Practices Repository Scan Report -| Owner | Repository | License | Readme | Contributing Guide | Code of Conduct | Issue Templates | PR Templates | Additional Documentation | Changelog | GitHub: Vulnerability Alerts | GitHub: Code Scanning Alerts | GitHub: Secret Scanning Alerts | Secrets Detection | Governance Model | Continuous Testing Plan | -| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| nasa-ammos | AIT-Core | 🟢 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | AIT-GUI | 🟢 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | AIT-DSN | 🟢 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | AIT-CFS | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | MMGIS | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | Unity3DTiles | 🟣 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | CODEX | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | timecraftjs | 🟢 | 🟠 | 🟢 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | 3DTilesRendererJS | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | common-workflow-service | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | VICAR | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | pngcs | 🟢 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | 3DTilesSampleData | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | MGViz | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | AMPCS | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | MCWS | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | openmct-mcws | 🔴 | 🟠 | 🟣 | 🟣 | 🟢 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | LithoSphere | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | quickstart-ammos-smallsat-toolkit | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie | 🟢 | 🟠 | 🔴 | 🟢 | 🟢 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-gateway | 🟢 | 🟠 | 🟣 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-ui | 🟢 | 🟠 | 🟣 | 🟢 | 🟢 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | slim | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | -| nasa-ammos | anms | 🟢 | 🟠 | 🟢 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-ampcs | 🟢 | 🟠 | 🟣 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-ts-user-code-runner | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | ampcs-dict-schemas | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-lander | 🟢 | 🟠 | 🟢 | 🟢 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | SPAR | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-pr-action | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-monaco-editor-customizations | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | CameraModelUtilsJS | 🟢 | 🟠 | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-plan-collaboration-prototype | 🔴 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | DECISION | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-mission-model-template | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-cli | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | slim-starterkit-python | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | -| nasa-ammos | slim-starterkit-java | 🟢 | 🟠 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | slim-starterkit | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | -| nasa-ammos | aerie-docs | 🔴 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | synopsis | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | seq-json-schema | 🟢 | 🟠 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | -| nasa-ammos | AFIDS-POMM | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | xait | 🟢 | 🟠 | 🟣 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | labelocity | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | slim-config-detect-secrets | 🟣 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-pmc | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | slim-detect-secrets | 🟢 | 🟠 | 🟢 | 🟣 | 🟣 | 🟣 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | -| nasa-ammos | multi-mission-utilities-DSN | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | anms-docs | 🟢 | 🟠 | 🟢 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | parent-ammos | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | -| nasa-ammos | anms-adms | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | VECTOR | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-sequence-editor | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-python-prototype | 🔴 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-simple-model-power | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | slim-leaderboard | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | -| nasa-ammos | aerie-simple-model-data | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | VICAR-DOCS | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | MMTC | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-modeling-tutorial | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | cfn-ps-ammos-smallsat-toolkit | 🟢 | 🟠 | 🟣 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | Landform | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | DataDrive-CommandLine | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | KMC | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | mgss-kmc | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | kmc_oci | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | mgss-kmc_oci | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-multimission-models-bb | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | OCS | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | BSL | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | ocs-python-client | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | ocs-js-client | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | slim-cli | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🟠 | -| nasa-ammos | BSL-docs | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | pgcmp | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-ui-plugin-examples | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | slim-docsite-template | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | -| nasa-ammos | aerie-fprime-sequence-adaptation | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-phoenix-adaptation-template | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-phoenix-adaptation-vml | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | OCO3-MOS-dmc | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | Veloserver | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-action-template | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-actions | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | slim-cd-starterkit | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | -| nasa-ammos | aerie-sequence-languages | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa-ammos | aerie-time-utils | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| nasa | FEI | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| rzellem | EXOTIC | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| Repository | License | Readme | Contributing Guide | Code of Conduct | Issue Templates | PR Templates | Additional Documentation | Changelog | GitHub: Vulnerability Alerts | GitHub: Code Scanning Alerts | GitHub: Secret Scanning Alerts | Secrets Detection | Governance Model | Continuous Testing Plan | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| [nasa-ammos/slim-starterkit-python](https://github.com/nasa-ammos/slim-starterkit-python) | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | +| [nasa-ammos/slim](https://github.com/nasa-ammos/slim) | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | +| [nasa-ammos/slim-starterkit](https://github.com/nasa-ammos/slim-starterkit) | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | +| [nasa-ammos/parent-ammos](https://github.com/nasa-ammos/parent-ammos) | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | +| [nasa-ammos/slim-leaderboard](https://github.com/nasa-ammos/slim-leaderboard) | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | +| [nasa-ammos/slim-cli](https://github.com/nasa-ammos/slim-cli) | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🟠 | +| [nasa-ammos/slim-docsite-template](https://github.com/nasa-ammos/slim-docsite-template) | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | +| [nasa-ammos/slim-cd-starterkit](https://github.com/nasa-ammos/slim-cd-starterkit) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | +| [nasa-ammos/MMGIS](https://github.com/nasa-ammos/MMGIS) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/common-workflow-service](https://github.com/nasa-ammos/common-workflow-service) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/VICAR](https://github.com/nasa-ammos/VICAR) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/MGViz](https://github.com/nasa-ammos/MGViz) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/labelocity](https://github.com/nasa-ammos/labelocity) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/3DTilesRendererJS](https://github.com/nasa-ammos/3DTilesRendererJS) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/CameraModelUtilsJS](https://github.com/nasa-ammos/CameraModelUtilsJS) | 🟢 | 🟠 | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/slim-detect-secrets](https://github.com/nasa-ammos/slim-detect-secrets) | 🟢 | 🟠 | 🟢 | 🟣 | 🟣 | 🟣 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | +| [nasa-ammos/DataDrive-CommandLine](https://github.com/nasa-ammos/DataDrive-CommandLine) | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie](https://github.com/nasa-ammos/aerie) | 🟢 | 🟠 | 🔴 | 🟢 | 🟢 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-ui](https://github.com/nasa-ammos/aerie-ui) | 🟢 | 🟠 | 🟣 | 🟢 | 🟢 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/anms](https://github.com/nasa-ammos/anms) | 🟢 | 🟠 | 🟢 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/anms-docs](https://github.com/nasa-ammos/anms-docs) | 🟢 | 🟠 | 🟢 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/BSL-docs](https://github.com/nasa-ammos/BSL-docs) | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [rzellem/EXOTIC](https://github.com/rzellem/EXOTIC) | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/timecraftjs](https://github.com/nasa-ammos/timecraftjs) | 🟢 | 🟠 | 🟢 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/LithoSphere](https://github.com/nasa-ammos/LithoSphere) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-gateway](https://github.com/nasa-ammos/aerie-gateway) | 🟢 | 🟠 | 🟣 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-ampcs](https://github.com/nasa-ammos/aerie-ampcs) | 🟢 | 🟠 | 🟣 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-lander](https://github.com/nasa-ammos/aerie-lander) | 🟢 | 🟠 | 🟢 | 🟢 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/seq-json-schema](https://github.com/nasa-ammos/seq-json-schema) | 🟢 | 🟠 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | +| [nasa-ammos/xait](https://github.com/nasa-ammos/xait) | 🟢 | 🟠 | 🟣 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/cfn-ps-ammos-smallsat-toolkit](https://github.com/nasa-ammos/cfn-ps-ammos-smallsat-toolkit) | 🟢 | 🟠 | 🟣 | 🟢 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/AIT-Core](https://github.com/nasa-ammos/AIT-Core) | 🟢 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/AIT-GUI](https://github.com/nasa-ammos/AIT-GUI) | 🟢 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/AIT-DSN](https://github.com/nasa-ammos/AIT-DSN) | 🟢 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/AIT-CFS](https://github.com/nasa-ammos/AIT-CFS) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/CODEX](https://github.com/nasa-ammos/CODEX) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/pngcs](https://github.com/nasa-ammos/pngcs) | 🟢 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/openmct-mcws](https://github.com/nasa-ammos/openmct-mcws) | 🔴 | 🟠 | 🟣 | 🟣 | 🟢 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-ts-user-code-runner](https://github.com/nasa-ammos/aerie-ts-user-code-runner) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-pr-action](https://github.com/nasa-ammos/aerie-pr-action) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-cli](https://github.com/nasa-ammos/aerie-cli) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-docs](https://github.com/nasa-ammos/aerie-docs) | 🔴 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/synopsis](https://github.com/nasa-ammos/synopsis) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/AFIDS-POMM](https://github.com/nasa-ammos/AFIDS-POMM) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/VECTOR](https://github.com/nasa-ammos/VECTOR) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-simple-model-power](https://github.com/nasa-ammos/aerie-simple-model-power) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/MMTC](https://github.com/nasa-ammos/MMTC) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/Landform](https://github.com/nasa-ammos/Landform) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/Veloserver](https://github.com/nasa-ammos/Veloserver) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-actions](https://github.com/nasa-ammos/aerie-actions) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa/FEI](https://github.com/nasa/FEI) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/Unity3DTiles](https://github.com/nasa-ammos/Unity3DTiles) | 🟣 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/quickstart-ammos-smallsat-toolkit](https://github.com/nasa-ammos/quickstart-ammos-smallsat-toolkit) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/ampcs-dict-schemas](https://github.com/nasa-ammos/ampcs-dict-schemas) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/DECISION](https://github.com/nasa-ammos/DECISION) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-mission-model-template](https://github.com/nasa-ammos/aerie-mission-model-template) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/slim-starterkit-java](https://github.com/nasa-ammos/slim-starterkit-java) | 🟢 | 🟠 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/slim-config-detect-secrets](https://github.com/nasa-ammos/slim-config-detect-secrets) | 🟣 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-pmc](https://github.com/nasa-ammos/aerie-pmc) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/multi-mission-utilities-DSN](https://github.com/nasa-ammos/multi-mission-utilities-DSN) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-simple-model-data](https://github.com/nasa-ammos/aerie-simple-model-data) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/VICAR-DOCS](https://github.com/nasa-ammos/VICAR-DOCS) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-modeling-tutorial](https://github.com/nasa-ammos/aerie-modeling-tutorial) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-multimission-models-bb](https://github.com/nasa-ammos/aerie-multimission-models-bb) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-phoenix-adaptation-template](https://github.com/nasa-ammos/aerie-phoenix-adaptation-template) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-phoenix-adaptation-vml](https://github.com/nasa-ammos/aerie-phoenix-adaptation-vml) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-sequence-languages](https://github.com/nasa-ammos/aerie-sequence-languages) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-time-utils](https://github.com/nasa-ammos/aerie-time-utils) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/3DTilesSampleData](https://github.com/nasa-ammos/3DTilesSampleData) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/AMPCS](https://github.com/nasa-ammos/AMPCS) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/MCWS](https://github.com/nasa-ammos/MCWS) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/SPAR](https://github.com/nasa-ammos/SPAR) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-monaco-editor-customizations](https://github.com/nasa-ammos/aerie-monaco-editor-customizations) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-plan-collaboration-prototype](https://github.com/nasa-ammos/aerie-plan-collaboration-prototype) | 🔴 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/anms-adms](https://github.com/nasa-ammos/anms-adms) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-sequence-editor](https://github.com/nasa-ammos/aerie-sequence-editor) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-python-prototype](https://github.com/nasa-ammos/aerie-python-prototype) | 🔴 | 🔴 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/KMC](https://github.com/nasa-ammos/KMC) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/mgss-kmc](https://github.com/nasa-ammos/mgss-kmc) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/kmc_oci](https://github.com/nasa-ammos/kmc_oci) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/mgss-kmc_oci](https://github.com/nasa-ammos/mgss-kmc_oci) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/OCS](https://github.com/nasa-ammos/OCS) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/BSL](https://github.com/nasa-ammos/BSL) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/ocs-python-client](https://github.com/nasa-ammos/ocs-python-client) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/ocs-js-client](https://github.com/nasa-ammos/ocs-js-client) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/pgcmp](https://github.com/nasa-ammos/pgcmp) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-ui-plugin-examples](https://github.com/nasa-ammos/aerie-ui-plugin-examples) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-fprime-sequence-adaptation](https://github.com/nasa-ammos/aerie-fprime-sequence-adaptation) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/OCO3-MOS-dmc](https://github.com/nasa-ammos/OCO3-MOS-dmc) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-action-template](https://github.com/nasa-ammos/aerie-action-template) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | + # Summary Statistics @@ -114,10 +115,10 @@ | GitHub: Secret Scanning Alerts Score (%) | 0.0 | | Repositories evaluated (count) | 90 | | Best practices checked (count) | 14 | -| NO (count) | 759 | | YES (count) | 232 | -| PR (count) | 197 | +| NO (count) | 759 | | PARTIAL (count) | 72 | +| PR (count) | 197 | # Repository Check Explanation diff --git a/examples/slim-maap-config-leaderboard.md b/examples/slim-maap-config-leaderboard.md index 32344c3..b24fe38 100644 --- a/examples/slim-maap-config-leaderboard.md +++ b/examples/slim-maap-config-leaderboard.md @@ -1,109 +1,109 @@ # SLIM Best Practices Repository Scan Report -| Owner | Repository | License | Readme | Contributing Guide | Code of Conduct | Issue Templates | PR Templates | Additional Documentation | Changelog | GitHub: Vulnerability Alerts | GitHub: Code Scanning Alerts | GitHub: Secret Scanning Alerts | Secrets Detection | Governance Model | Continuous Testing Plan | -| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| MAAP-project | maap-api-nasa | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-styles | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-py | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | earthdata-search | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-ade-common-mapping-client | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-auth-cas | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-portal-esa | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-stack-eclipseche-esa | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-auth-syncope | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-query-service | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | user-metadata-form | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-auth-keycloak | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-eclipseche-ops | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-documentation | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | keycloak-cas-services | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | authorizer | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-auth-example | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | Community | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-ade-tutorials | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | Common-Metadata-Repository | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-dps-installers | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-ade-edscproxy | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-dps-packer-templates | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-ade-esa-test | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | eclipse-che | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | eclipse-che-devfile-registry | 🟢 | 🟠 | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | eclipse-che-dashboard | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | cmr-stac | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | EE-Download | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-documentation-examples | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | Update_broken_urls | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | ept-tools | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | mmt | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | biomass-dashboard-api | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | biomass-dashboard-datasets | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | biomass-earthdata-dashboard | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-data-system-tests | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-edav-esa-front | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | dps-unit-test | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-edav-esa-back | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | dps-register-job | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-workspaces | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-hec-aws | 🟣 | 🟠 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | edsc-jupyter-extension | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | umf-jupyter-extension | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-libs-jupyter-extension | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | user-workspace-management-jupyter-extension | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-wp-plugin | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | research-deforestation-in-drc | 🟣 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | ades-metrics-visualization-jupyter-extension | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | dps-jupyter-extension | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | jupyter-server-extension | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-ui-portal | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | scimaap-ui-portal | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | ipycmc-jupyter-extension | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | gedi-subsetter | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-help-jupyter-extension | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | unity-sps-prototype | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-hec-notebooks | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | stac_ipyleaflet | 🟢 | 🟠 | 🔴 | 🔴 | 🟢 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | nisar-sim | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | algorithms-jupyter-extension | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | user-algorithm-configs | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-eoapi | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | MAAP-STAC-auth | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-data-pipelines | 🟢 | 🟠 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-repo-template | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | flask_ades_wpst | 🟣 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | che-sidebar-visibility-jupyter-extension | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | cache-docker-layers-cdk-gha | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | .github | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | stactools-pipelines | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | dps_tutorial | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | example-dps-daac-access | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | tri_seasonal_s1_sar_composites | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | request_cognito_oauth_token | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | stac-pipeline | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-statuspage | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | lambda-s3-zip | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | s1-example | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | example-dps-stac-from-cog | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | icesat2-boreal-stac | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | gedi-calval-copc | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | get-dem | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | maap-metrics-exporter | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | geotrees-demo | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | sardem-sarsen | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | ogc-app-pack-generator | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| MAAP-project | federated-collection-discovery-deployment | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| Repository | License | Readme | Contributing Guide | Code of Conduct | Issue Templates | PR Templates | Additional Documentation | Changelog | GitHub: Vulnerability Alerts | GitHub: Code Scanning Alerts | GitHub: Secret Scanning Alerts | Secrets Detection | Governance Model | Continuous Testing Plan | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| [MAAP-project/eclipse-che](https://github.com/MAAP-project/eclipse-che) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/unity-sps-prototype](https://github.com/MAAP-project/unity-sps-prototype) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-py](https://github.com/MAAP-project/maap-py) | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/nisar-sim](https://github.com/MAAP-project/nisar-sim) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-repo-template](https://github.com/MAAP-project/maap-repo-template) | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/gedi-calval-copc](https://github.com/MAAP-project/gedi-calval-copc) | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/geotrees-demo](https://github.com/MAAP-project/geotrees-demo) | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/Common-Metadata-Repository](https://github.com/MAAP-project/Common-Metadata-Repository) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/eclipse-che-devfile-registry](https://github.com/MAAP-project/eclipse-che-devfile-registry) | 🟢 | 🟠 | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/gedi-subsetter](https://github.com/MAAP-project/gedi-subsetter) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/che-sidebar-visibility-jupyter-extension](https://github.com/MAAP-project/che-sidebar-visibility-jupyter-extension) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/s1-example](https://github.com/MAAP-project/s1-example) | 🟢 | 🟠 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-api-nasa](https://github.com/MAAP-project/maap-api-nasa) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-documentation](https://github.com/MAAP-project/maap-documentation) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/eclipse-che-dashboard](https://github.com/MAAP-project/eclipse-che-dashboard) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/mmt](https://github.com/MAAP-project/mmt) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/biomass-dashboard-api](https://github.com/MAAP-project/biomass-dashboard-api) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/edsc-jupyter-extension](https://github.com/MAAP-project/edsc-jupyter-extension) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/ades-metrics-visualization-jupyter-extension](https://github.com/MAAP-project/ades-metrics-visualization-jupyter-extension) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/jupyter-server-extension](https://github.com/MAAP-project/jupyter-server-extension) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-help-jupyter-extension](https://github.com/MAAP-project/maap-help-jupyter-extension) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/stac_ipyleaflet](https://github.com/MAAP-project/stac_ipyleaflet) | 🟢 | 🟠 | 🔴 | 🔴 | 🟢 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/algorithms-jupyter-extension](https://github.com/MAAP-project/algorithms-jupyter-extension) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-data-pipelines](https://github.com/MAAP-project/maap-data-pipelines) | 🟢 | 🟠 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-styles](https://github.com/MAAP-project/maap-styles) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/earthdata-search](https://github.com/MAAP-project/earthdata-search) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-ade-common-mapping-client](https://github.com/MAAP-project/maap-ade-common-mapping-client) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-auth-cas](https://github.com/MAAP-project/maap-auth-cas) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-auth-syncope](https://github.com/MAAP-project/maap-auth-syncope) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-query-service](https://github.com/MAAP-project/maap-query-service) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/user-metadata-form](https://github.com/MAAP-project/user-metadata-form) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-auth-keycloak](https://github.com/MAAP-project/maap-auth-keycloak) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-eclipseche-ops](https://github.com/MAAP-project/maap-eclipseche-ops) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/keycloak-cas-services](https://github.com/MAAP-project/keycloak-cas-services) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-ade-tutorials](https://github.com/MAAP-project/maap-ade-tutorials) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-dps-installers](https://github.com/MAAP-project/maap-dps-installers) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/cmr-stac](https://github.com/MAAP-project/cmr-stac) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/EE-Download](https://github.com/MAAP-project/EE-Download) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-documentation-examples](https://github.com/MAAP-project/maap-documentation-examples) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/biomass-dashboard-datasets](https://github.com/MAAP-project/biomass-dashboard-datasets) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/biomass-earthdata-dashboard](https://github.com/MAAP-project/biomass-earthdata-dashboard) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-data-system-tests](https://github.com/MAAP-project/maap-data-system-tests) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-libs-jupyter-extension](https://github.com/MAAP-project/maap-libs-jupyter-extension) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/user-workspace-management-jupyter-extension](https://github.com/MAAP-project/user-workspace-management-jupyter-extension) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/dps-jupyter-extension](https://github.com/MAAP-project/dps-jupyter-extension) | 🟢 | 🟠 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-eoapi](https://github.com/MAAP-project/maap-eoapi) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/stactools-pipelines](https://github.com/MAAP-project/stactools-pipelines) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/dps_tutorial](https://github.com/MAAP-project/dps_tutorial) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-statuspage](https://github.com/MAAP-project/maap-statuspage) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/federated-collection-discovery-deployment](https://github.com/MAAP-project/federated-collection-discovery-deployment) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-portal-esa](https://github.com/MAAP-project/maap-portal-esa) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/authorizer](https://github.com/MAAP-project/authorizer) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/Community](https://github.com/MAAP-project/Community) | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-ade-edscproxy](https://github.com/MAAP-project/maap-ade-edscproxy) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-dps-packer-templates](https://github.com/MAAP-project/maap-dps-packer-templates) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-ade-esa-test](https://github.com/MAAP-project/maap-ade-esa-test) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/Update_broken_urls](https://github.com/MAAP-project/Update_broken_urls) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-edav-esa-front](https://github.com/MAAP-project/maap-edav-esa-front) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/dps-unit-test](https://github.com/MAAP-project/dps-unit-test) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-workspaces](https://github.com/MAAP-project/maap-workspaces) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-hec-aws](https://github.com/MAAP-project/maap-hec-aws) | 🟣 | 🟠 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/umf-jupyter-extension](https://github.com/MAAP-project/umf-jupyter-extension) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-wp-plugin](https://github.com/MAAP-project/maap-wp-plugin) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-ui-portal](https://github.com/MAAP-project/maap-ui-portal) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/ipycmc-jupyter-extension](https://github.com/MAAP-project/ipycmc-jupyter-extension) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-hec-notebooks](https://github.com/MAAP-project/maap-hec-notebooks) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/user-algorithm-configs](https://github.com/MAAP-project/user-algorithm-configs) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/MAAP-STAC-auth](https://github.com/MAAP-project/MAAP-STAC-auth) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/flask_ades_wpst](https://github.com/MAAP-project/flask_ades_wpst) | 🟣 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/cache-docker-layers-cdk-gha](https://github.com/MAAP-project/cache-docker-layers-cdk-gha) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/.github](https://github.com/MAAP-project/.github) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/example-dps-daac-access](https://github.com/MAAP-project/example-dps-daac-access) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/tri_seasonal_s1_sar_composites](https://github.com/MAAP-project/tri_seasonal_s1_sar_composites) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/stac-pipeline](https://github.com/MAAP-project/stac-pipeline) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/lambda-s3-zip](https://github.com/MAAP-project/lambda-s3-zip) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/get-dem](https://github.com/MAAP-project/get-dem) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-metrics-exporter](https://github.com/MAAP-project/maap-metrics-exporter) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/sardem-sarsen](https://github.com/MAAP-project/sardem-sarsen) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/ogc-app-pack-generator](https://github.com/MAAP-project/ogc-app-pack-generator) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-stack-eclipseche-esa](https://github.com/MAAP-project/maap-stack-eclipseche-esa) | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/ept-tools](https://github.com/MAAP-project/ept-tools) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-edav-esa-back](https://github.com/MAAP-project/maap-edav-esa-back) | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/dps-register-job](https://github.com/MAAP-project/dps-register-job) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/research-deforestation-in-drc](https://github.com/MAAP-project/research-deforestation-in-drc) | 🟣 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/scimaap-ui-portal](https://github.com/MAAP-project/scimaap-ui-portal) | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/request_cognito_oauth_token](https://github.com/MAAP-project/request_cognito_oauth_token) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/example-dps-stac-from-cog](https://github.com/MAAP-project/example-dps-stac-from-cog) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/icesat2-boreal-stac](https://github.com/MAAP-project/icesat2-boreal-stac) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | + # Summary Statistics | Metric | Value | | ------ | ----- | -| Overall Best Practice Score (%) | 17.4 | -| License Score (%) | 87.1 | -| Additional Documentation Score (%) | 47.2 | -| Readme Score (%) | 43.3 | -| Contributing Guide Score (%) | 22.5 | -| Changelog Score (%) | 19.7 | -| Issue Templates Score (%) | 10.1 | -| Code of Conduct Score (%) | 9.0 | +| Overall Best Practice Score (%) | 17.5 | +| License Score (%) | 86.9 | +| Additional Documentation Score (%) | 47.7 | +| Readme Score (%) | 43.2 | +| Contributing Guide Score (%) | 22.7 | +| Changelog Score (%) | 20.2 | +| Issue Templates Score (%) | 10.2 | +| Code of Conduct Score (%) | 9.1 | | PR Templates Score (%) | 4.5 | | GitHub: Vulnerability Alerts Score (%) | 0.0 | | GitHub: Code Scanning Alerts Score (%) | 0.0 | @@ -113,10 +113,10 @@ | Continuous Testing Plan Score (%) | 0.0 | | Repositories evaluated (count) | 89 | | Best practices checked (count) | 14 | -| PARTIAL (count) | 77 | -| YES (count) | 176 | -| NO (count) | 985 | -| PR (count) | 8 | +| PARTIAL (count) | 76 | +| YES (count) | 175 | +| NO (count) | 972 | +| PR (count) | 9 | # Repository Check Explanation diff --git a/examples/slim-opera-config-leaderboard.md b/examples/slim-opera-config-leaderboard.md index 65c0975..4c3c7de 100644 --- a/examples/slim-opera-config-leaderboard.md +++ b/examples/slim-opera-config-leaderboard.md @@ -63,6 +63,7 @@ | [OPERA-Cal-Val/dl-with-alos-dswe](https://github.com/OPERA-Cal-Val/dl-with-alos-dswe) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [OPERA-Cal-Val/dswx-hls-pst-workflow](https://github.com/OPERA-Cal-Val/dswx-hls-pst-workflow) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | + # Summary Statistics | Metric | Value | diff --git a/examples/slim-unity-config-leaderboard.md b/examples/slim-unity-config-leaderboard.md index f29d8df..4bc36fb 100644 --- a/examples/slim-unity-config-leaderboard.md +++ b/examples/slim-unity-config-leaderboard.md @@ -61,7 +61,6 @@ | [unity-sds/SBG-unity-isofit](https://github.com/unity-sds/SBG-unity-isofit) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/unity-reference-application](https://github.com/unity-sds/unity-reference-application) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/stac-merge](https://github.com/unity-sds/stac-merge) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| [unity-sds/unity-cs-security](https://github.com/unity-sds/unity-cs-security) | 🟣 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/unity-sps-register_job](https://github.com/unity-sds/unity-sps-register_job) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/unity-backstage](https://github.com/unity-sds/unity-backstage) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/sounder-sips-chirp-workflows](https://github.com/unity-sds/sounder-sips-chirp-workflows) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | @@ -74,19 +73,20 @@ | [unity-sds/unity-cs-monitoring-lambda](https://github.com/unity-sds/unity-cs-monitoring-lambda) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/mdps-tropess-deploy](https://github.com/unity-sds/mdps-tropess-deploy) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | + # Summary Statistics | Metric | Value | | ------ | ----- | -| Overall Best Practice Score (%) | 32.3 | -| License Score (%) | 79.2 | -| Readme Score (%) | 60.9 | -| Additional Documentation Score (%) | 60.6 | -| Changelog Score (%) | 54.9 | -| Contributing Guide Score (%) | 53.2 | -| Code of Conduct Score (%) | 53.2 | -| Issue Templates Score (%) | 45.4 | -| PR Templates Score (%) | 42.6 | +| Overall Best Practice Score (%) | 32.6 | +| License Score (%) | 80.0 | +| Additional Documentation Score (%) | 61.4 | +| Readme Score (%) | 61.1 | +| Changelog Score (%) | 55.4 | +| Contributing Guide Score (%) | 53.6 | +| Code of Conduct Score (%) | 53.6 | +| Issue Templates Score (%) | 45.7 | +| PR Templates Score (%) | 42.9 | | Governance Model Score (%) | 1.4 | | Continuous Testing Plan Score (%) | 1.1 | | GitHub: Vulnerability Alerts Score (%) | 0.0 | @@ -96,9 +96,9 @@ | Repositories evaluated (count) | 71 | | Best practices checked (count) | 14 | | YES (count) | 296 | -| NO (count) | 636 | -| PR (count) | 23 | -| PARTIAL (count) | 39 | +| NO (count) | 629 | +| PR (count) | 17 | +| PARTIAL (count) | 38 | # Repository Check Explanation From 6727cc3a17439c845e134efba159c9434232b381 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 27 Apr 2025 10:20:36 +0000 Subject: [PATCH 02/13] =?UTF-8?q?=F0=9F=8F=86=20Auto:=20Update=20SLIM=20Le?= =?UTF-8?q?aderboards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/slim-ammos-config-leaderboard.md | 10 ++++----- examples/slim-maap-config-leaderboard.md | 23 +++++++++++---------- examples/slim-opera-config-leaderboard.md | 21 ++++++++++--------- examples/slim-unity-config-leaderboard.md | 25 ++++++++++++----------- 4 files changed, 41 insertions(+), 38 deletions(-) diff --git a/examples/slim-ammos-config-leaderboard.md b/examples/slim-ammos-config-leaderboard.md index eb3fb5a..df85b7f 100644 --- a/examples/slim-ammos-config-leaderboard.md +++ b/examples/slim-ammos-config-leaderboard.md @@ -52,6 +52,7 @@ | [nasa-ammos/Landform](https://github.com/nasa-ammos/Landform) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa-ammos/Veloserver](https://github.com/nasa-ammos/Veloserver) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa-ammos/aerie-actions](https://github.com/nasa-ammos/aerie-actions) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [nasa-ammos/aerie-time-utils](https://github.com/nasa-ammos/aerie-time-utils) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa/FEI](https://github.com/nasa/FEI) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa-ammos/Unity3DTiles](https://github.com/nasa-ammos/Unity3DTiles) | 🟣 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🟢 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa-ammos/quickstart-ammos-smallsat-toolkit](https://github.com/nasa-ammos/quickstart-ammos-smallsat-toolkit) | 🟢 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | @@ -69,7 +70,6 @@ | [nasa-ammos/aerie-phoenix-adaptation-template](https://github.com/nasa-ammos/aerie-phoenix-adaptation-template) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa-ammos/aerie-phoenix-adaptation-vml](https://github.com/nasa-ammos/aerie-phoenix-adaptation-vml) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa-ammos/aerie-sequence-languages](https://github.com/nasa-ammos/aerie-sequence-languages) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | -| [nasa-ammos/aerie-time-utils](https://github.com/nasa-ammos/aerie-time-utils) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa-ammos/3DTilesSampleData](https://github.com/nasa-ammos/3DTilesSampleData) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa-ammos/AMPCS](https://github.com/nasa-ammos/AMPCS) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [nasa-ammos/MCWS](https://github.com/nasa-ammos/MCWS) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | @@ -98,8 +98,8 @@ | Metric | Value | | ------ | ----- | -| Overall Best Practice Score (%) | 25.2 | -| Additional Documentation Score (%) | 62.2 | +| Overall Best Practice Score (%) | 25.3 | +| Additional Documentation Score (%) | 63.3 | | License Score (%) | 61.7 | | Readme Score (%) | 47.2 | | Code of Conduct Score (%) | 39.7 | @@ -115,8 +115,8 @@ | GitHub: Secret Scanning Alerts Score (%) | 0.0 | | Repositories evaluated (count) | 90 | | Best practices checked (count) | 14 | -| YES (count) | 232 | -| NO (count) | 759 | +| YES (count) | 233 | +| NO (count) | 758 | | PARTIAL (count) | 72 | | PR (count) | 197 | diff --git a/examples/slim-maap-config-leaderboard.md b/examples/slim-maap-config-leaderboard.md index b24fe38..50619e8 100644 --- a/examples/slim-maap-config-leaderboard.md +++ b/examples/slim-maap-config-leaderboard.md @@ -54,6 +54,7 @@ | [MAAP-project/federated-collection-discovery-deployment](https://github.com/MAAP-project/federated-collection-discovery-deployment) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [MAAP-project/maap-portal-esa](https://github.com/MAAP-project/maap-portal-esa) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [MAAP-project/authorizer](https://github.com/MAAP-project/authorizer) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [MAAP-project/maap-auth-example](https://github.com/MAAP-project/maap-auth-example) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [MAAP-project/Community](https://github.com/MAAP-project/Community) | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [MAAP-project/maap-ade-edscproxy](https://github.com/MAAP-project/maap-ade-edscproxy) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [MAAP-project/maap-dps-packer-templates](https://github.com/MAAP-project/maap-dps-packer-templates) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | @@ -96,14 +97,14 @@ | Metric | Value | | ------ | ----- | -| Overall Best Practice Score (%) | 17.5 | -| License Score (%) | 86.9 | -| Additional Documentation Score (%) | 47.7 | -| Readme Score (%) | 43.2 | -| Contributing Guide Score (%) | 22.7 | -| Changelog Score (%) | 20.2 | -| Issue Templates Score (%) | 10.2 | -| Code of Conduct Score (%) | 9.1 | +| Overall Best Practice Score (%) | 17.4 | +| License Score (%) | 87.1 | +| Additional Documentation Score (%) | 47.2 | +| Readme Score (%) | 43.3 | +| Contributing Guide Score (%) | 22.5 | +| Changelog Score (%) | 19.9 | +| Issue Templates Score (%) | 10.1 | +| Code of Conduct Score (%) | 9.0 | | PR Templates Score (%) | 4.5 | | GitHub: Vulnerability Alerts Score (%) | 0.0 | | GitHub: Code Scanning Alerts Score (%) | 0.0 | @@ -113,9 +114,9 @@ | Continuous Testing Plan Score (%) | 0.0 | | Repositories evaluated (count) | 89 | | Best practices checked (count) | 14 | -| PARTIAL (count) | 76 | -| YES (count) | 175 | -| NO (count) | 972 | +| PARTIAL (count) | 77 | +| YES (count) | 176 | +| NO (count) | 984 | | PR (count) | 9 | diff --git a/examples/slim-opera-config-leaderboard.md b/examples/slim-opera-config-leaderboard.md index 4c3c7de..a851346 100644 --- a/examples/slim-opera-config-leaderboard.md +++ b/examples/slim-opera-config-leaderboard.md @@ -55,6 +55,7 @@ | [OPERA-Cal-Val/next_pass](https://github.com/OPERA-Cal-Val/next_pass) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [opera-adt/CSLC-S1_Specs](https://github.com/opera-adt/CSLC-S1_Specs) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [opera-adt/Static_Layers_CSLC-S1_Specs](https://github.com/opera-adt/Static_Layers_CSLC-S1_Specs) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [opera-adt/dist-s1-model](https://github.com/opera-adt/dist-s1-model) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [OPERA-Cal-Val/.github](https://github.com/OPERA-Cal-Val/.github) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [OPERA-Cal-Val/DSWx-Validation-Dataset-Generation](https://github.com/OPERA-Cal-Val/DSWx-Validation-Dataset-Generation) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [OPERA-Cal-Val/DIST-Validation-Dataset](https://github.com/OPERA-Cal-Val/DIST-Validation-Dataset) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | @@ -68,14 +69,14 @@ | Metric | Value | | ------ | ----- | -| Overall Best Practice Score (%) | 16.2 | -| License Score (%) | 81.7 | +| Overall Best Practice Score (%) | 16.0 | +| License Score (%) | 80.3 | | Readme Score (%) | 46.7 | -| Additional Documentation Score (%) | 40.0 | -| Issue Templates Score (%) | 31.7 | -| Changelog Score (%) | 13.3 | -| PR Templates Score (%) | 10.0 | -| Secrets Detection Score (%) | 1.7 | +| Additional Documentation Score (%) | 39.3 | +| Issue Templates Score (%) | 31.1 | +| Changelog Score (%) | 13.1 | +| PR Templates Score (%) | 9.8 | +| Secrets Detection Score (%) | 1.6 | | Continuous Testing Plan Score (%) | 0.8 | | Contributing Guide Score (%) | 0.4 | | Code of Conduct Score (%) | 0.0 | @@ -83,11 +84,11 @@ | GitHub: Code Scanning Alerts Score (%) | 0.0 | | GitHub: Secret Scanning Alerts Score (%) | 0.0 | | Governance Model Score (%) | 0.0 | -| Repositories evaluated (count) | 60 | +| Repositories evaluated (count) | 61 | | Best practices checked (count) | 14 | -| PARTIAL (count) | 57 | +| PARTIAL (count) | 58 | | YES (count) | 107 | -| NO (count) | 675 | +| NO (count) | 688 | | PR (count) | 1 | diff --git a/examples/slim-unity-config-leaderboard.md b/examples/slim-unity-config-leaderboard.md index 4bc36fb..8715b48 100644 --- a/examples/slim-unity-config-leaderboard.md +++ b/examples/slim-unity-config-leaderboard.md @@ -61,6 +61,7 @@ | [unity-sds/SBG-unity-isofit](https://github.com/unity-sds/SBG-unity-isofit) | 🟢 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/unity-reference-application](https://github.com/unity-sds/unity-reference-application) | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/stac-merge](https://github.com/unity-sds/stac-merge) | 🟢 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | +| [unity-sds/unity-cs-security](https://github.com/unity-sds/unity-cs-security) | 🟣 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/unity-sps-register_job](https://github.com/unity-sds/unity-sps-register_job) | 🔴 | 🟠 | 🟣 | 🟣 | 🟣 | 🟣 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/unity-backstage](https://github.com/unity-sds/unity-backstage) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | | [unity-sds/sounder-sips-chirp-workflows](https://github.com/unity-sds/sounder-sips-chirp-workflows) | 🔴 | 🟠 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | @@ -78,15 +79,15 @@ | Metric | Value | | ------ | ----- | -| Overall Best Practice Score (%) | 32.6 | -| License Score (%) | 80.0 | -| Additional Documentation Score (%) | 61.4 | -| Readme Score (%) | 61.1 | -| Changelog Score (%) | 55.4 | -| Contributing Guide Score (%) | 53.6 | -| Code of Conduct Score (%) | 53.6 | -| Issue Templates Score (%) | 45.7 | -| PR Templates Score (%) | 42.9 | +| Overall Best Practice Score (%) | 32.3 | +| License Score (%) | 79.2 | +| Readme Score (%) | 60.9 | +| Additional Documentation Score (%) | 60.6 | +| Changelog Score (%) | 54.9 | +| Contributing Guide Score (%) | 53.2 | +| Code of Conduct Score (%) | 53.2 | +| Issue Templates Score (%) | 45.4 | +| PR Templates Score (%) | 42.6 | | Governance Model Score (%) | 1.4 | | Continuous Testing Plan Score (%) | 1.1 | | GitHub: Vulnerability Alerts Score (%) | 0.0 | @@ -96,9 +97,9 @@ | Repositories evaluated (count) | 71 | | Best practices checked (count) | 14 | | YES (count) | 296 | -| NO (count) | 629 | -| PR (count) | 17 | -| PARTIAL (count) | 38 | +| NO (count) | 636 | +| PR (count) | 23 | +| PARTIAL (count) | 39 | # Repository Check Explanation From ce14faa990b8f8240b4c651f35ce6e6a99dfe903 Mon Sep 17 00:00:00 2001 From: Kyongsik Yun Date: Wed, 30 Apr 2025 10:37:07 -0700 Subject: [PATCH 03/13] metrics testing --- .github/workflows/metrics.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/metrics.yml diff --git a/.github/workflows/metrics.yml b/.github/workflows/metrics.yml new file mode 100644 index 0000000..ff756a4 --- /dev/null +++ b/.github/workflows/metrics.yml @@ -0,0 +1,14 @@ +name: Collect DORA Metrics + on: + push: + branches: + - main + jobs: + collect-metrics: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Run DORA Metrics Collection + uses: DeveloperMetrics/collect@v1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 7e0807ca0b4de8256fe70ceae53ff47cd2713ec7 Mon Sep 17 00:00:00 2001 From: Kyongsik Yun Date: Wed, 30 Apr 2025 10:55:11 -0700 Subject: [PATCH 04/13] metrics testing --- .github/workflows/metrics.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/metrics.yml b/.github/workflows/metrics.yml index ff756a4..bfaeaaa 100644 --- a/.github/workflows/metrics.yml +++ b/.github/workflows/metrics.yml @@ -1,14 +1,14 @@ name: Collect DORA Metrics - on: - push: - branches: - - main - jobs: - collect-metrics: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Run DORA Metrics Collection - uses: DeveloperMetrics/collect@v1 - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file +on: + push: + branches: + - main +jobs: + collect-metrics: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Run DORA Metrics Collection + uses: DeveloperMetrics/collect@v1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From f135425719fefc85cb03bf920d28609d0f833b0d Mon Sep 17 00:00:00 2001 From: Kyongsik Yun Date: Thu, 1 May 2025 11:03:07 -0700 Subject: [PATCH 05/13] metrics testing --- .github/workflows/metrics.yml | 395 +++++++++++++++++++++++++++++++++- 1 file changed, 387 insertions(+), 8 deletions(-) diff --git a/.github/workflows/metrics.yml b/.github/workflows/metrics.yml index bfaeaaa..9a4cc55 100644 --- a/.github/workflows/metrics.yml +++ b/.github/workflows/metrics.yml @@ -1,14 +1,393 @@ name: Collect DORA Metrics on: - push: - branches: - - main + # Run weekly to track metrics over time + schedule: + - cron: '0 0 * * 0' # Run at midnight every Sunday + # Run after each deployment to production + workflow_run: + workflows: ["Deploy to Production"] + types: + - completed + # Allow manual trigger + workflow_dispatch: + jobs: - collect-metrics: + collect-dora-metrics: runs-on: ubuntu-latest + permissions: + actions: read + contents: write # Required to update badge files + pull-requests: read + issues: read + steps: - - uses: actions/checkout@v2 - - name: Run DORA Metrics Collection - uses: DeveloperMetrics/collect@v1 + - name: Checkout code + uses: actions/checkout@v3 with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + fetch-depth: 0 # Required for accurate git history analysis + + # Create directory for badge data + - name: Create badge directory + run: mkdir -p .github/badges + + ############################################################# + # 1. Deployment Frequency + ############################################################# + + - name: Calculate Deployment Frequency + id: deployment-frequency + uses: DeveloperMetrics/deployment-frequency@main + with: + workflows: 'deploy-to-production' # Replace with your actual production deployment workflow name + actions-token: ${{ secrets.GITHUB_TOKEN }} + days: 30 # Calculate for the last 30 days + + # Extract the deployment frequency value (e.g., "3.5 per week") + - name: Parse Deployment Frequency + id: parse-df + run: | + DF_VALUE=$(cat ${{ steps.deployment-frequency.outputs.markdown-file }} | grep -o '[0-9.]\+ per \(day\|week\|month\)') + echo "df_value=$DF_VALUE" >> $GITHUB_OUTPUT + + # Determine color based on DORA metrics standards + if [[ "$DF_VALUE" == *"per day"* ]]; then + echo "df_color=brightgreen" >> $GITHUB_OUTPUT + echo "df_level=Elite" >> $GITHUB_OUTPUT + elif [[ "$DF_VALUE" == *"per week"* ]]; then + WEEKLY_NUM=$(echo $DF_VALUE | grep -o '[0-9.]\+') + if (( $(echo "$WEEKLY_NUM > 3" | bc -l) )); then + echo "df_color=green" >> $GITHUB_OUTPUT + echo "df_level=High" >> $GITHUB_OUTPUT + else + echo "df_color=yellow" >> $GITHUB_OUTPUT + echo "df_level=Medium" >> $GITHUB_OUTPUT + fi + else + echo "df_color=red" >> $GITHUB_OUTPUT + echo "df_level=Low" >> $GITHUB_OUTPUT + fi + + # Create deployment frequency badge data + - name: Generate Deployment Frequency Badge + run: | + cat > .github/badges/deployment-frequency.json << EOF + { + "schemaVersion": 1, + "label": "Deployment Frequency", + "message": "${{ steps.parse-df.outputs.df_value }} (${{ steps.parse-df.outputs.df_level }})", + "color": "${{ steps.parse-df.outputs.df_color }}" + } + EOF + + ############################################################# + # 2. Lead Time for Changes + ############################################################# + + - name: Calculate Lead Time for Changes + id: lead-time + uses: DeveloperMetrics/lead-time-for-changes@main + with: + workflows: 'deploy-to-production' # Replace with your actual production deployment workflow name + actions-token: ${{ secrets.GITHUB_TOKEN }} + days: 30 # Calculate for the last 30 days + + # Extract the lead time value (e.g., "3.2 days") + - name: Parse Lead Time + id: parse-lt + run: | + LT_HOURS=$(cat ${{ steps.lead-time.outputs.markdown-file }} | grep -o 'is [0-9.]\+ hours' | awk '{print $2}') + # If not found in hours, try to find in days + if [ -z "$LT_HOURS" ]; then + LT_DAYS=$(cat ${{ steps.lead-time.outputs.markdown-file }} | grep -o 'is [0-9.]\+ days' | awk '{print $2}') + LT_VALUE="$LT_DAYS days" + LT_HOURS=$(echo "$LT_DAYS * 24" | bc) + else + LT_VALUE="$LT_HOURS hours" + fi + + echo "lt_value=$LT_VALUE" >> $GITHUB_OUTPUT + + # Determine color based on DORA metrics standards + if (( $(echo "$LT_HOURS < 24" | bc -l) )); then + echo "lt_color=brightgreen" >> $GITHUB_OUTPUT + echo "lt_level=Elite" >> $GITHUB_OUTPUT + elif (( $(echo "$LT_HOURS < 168" | bc -l) )); then + echo "lt_color=green" >> $GITHUB_OUTPUT + echo "lt_level=High" >> $GITHUB_OUTPUT + elif (( $(echo "$LT_HOURS < 720" | bc -l) )); then + echo "lt_color=yellow" >> $GITHUB_OUTPUT + echo "lt_level=Medium" >> $GITHUB_OUTPUT + else + echo "lt_color=red" >> $GITHUB_OUTPUT + echo "lt_level=Low" >> $GITHUB_OUTPUT + fi + + # Create lead time badge data + - name: Generate Lead Time Badge + run: | + cat > .github/badges/lead-time.json << EOF + { + "schemaVersion": 1, + "label": "Lead Time", + "message": "${{ steps.parse-lt.outputs.lt_value }} (${{ steps.parse-lt.outputs.lt_level }})", + "color": "${{ steps.parse-lt.outputs.lt_color }}" + } + EOF + + ############################################################# + # 3. Change Failure Rate + ############################################################# + + # Get recent production deployments (last 30 days) + - name: Get Production Deployments + id: deployments + run: | + # Get date 30 days ago in ISO format + THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") + + # Count completed workflow runs for deploy-to-production in last 30 days + DEPLOY_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/actions/workflows/deploy-to-production.yml/runs?status=completed&created=>$THIRTY_DAYS_AGO" \ + | jq '.total_count') + + if [ -z "$DEPLOY_COUNT" ] || [ "$DEPLOY_COUNT" == "null" ]; then + DEPLOY_COUNT=0 + fi + + echo "deploy_count=$DEPLOY_COUNT" >> $GITHUB_OUTPUT + + # Get incidents/bugs reported in last 30 days + - name: Get Incidents/Bugs + id: incidents + run: | + # Get date 30 days ago in ISO format + THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") + + # Count closed issues with bug or incident labels in last 30 days + INCIDENT_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/issues?state=closed&labels=bug,incident&since=$THIRTY_DAYS_AGO&per_page=100" \ + | jq '. | length') + + if [ -z "$INCIDENT_COUNT" ] || [ "$INCIDENT_COUNT" == "null" ]; then + INCIDENT_COUNT=0 + fi + + echo "incident_count=$INCIDENT_COUNT" >> $GITHUB_OUTPUT + + # Calculate Change Failure Rate + - name: Calculate Change Failure Rate + id: change-failure-rate + run: | + if [ "${{ steps.deployments.outputs.deploy_count }}" -gt 0 ]; then + RATE=$(echo "scale=2; ${{ steps.incidents.outputs.incident_count }} / ${{ steps.deployments.outputs.deploy_count }} * 100" | bc) + echo "failure_rate=${RATE}%" >> $GITHUB_OUTPUT + + # Determine level and color based on DORA metrics standards + if (( $(echo "$RATE <= 15" | bc -l) )); then + echo "cfr_color=brightgreen" >> $GITHUB_OUTPUT + echo "cfr_level=Elite" >> $GITHUB_OUTPUT + elif (( $(echo "$RATE <= 30" | bc -l) )); then + echo "cfr_color=green" >> $GITHUB_OUTPUT + echo "cfr_level=High" >> $GITHUB_OUTPUT + elif (( $(echo "$RATE <= 45" | bc -l) )); then + echo "cfr_color=yellow" >> $GITHUB_OUTPUT + echo "cfr_level=Medium" >> $GITHUB_OUTPUT + else + echo "cfr_color=red" >> $GITHUB_OUTPUT + echo "cfr_level=Low" >> $GITHUB_OUTPUT + fi + else + echo "failure_rate=N/A (No deployments)" >> $GITHUB_OUTPUT + echo "cfr_color=gray" >> $GITHUB_OUTPUT + echo "cfr_level=N/A" >> $GITHUB_OUTPUT + fi + + # Create change failure rate badge data + - name: Generate Change Failure Rate Badge + run: | + cat > .github/badges/change-failure-rate.json << EOF + { + "schemaVersion": 1, + "label": "Change Failure Rate", + "message": "${{ steps.change-failure-rate.outputs.failure_rate }} (${{ steps.change-failure-rate.outputs.cfr_level }})", + "color": "${{ steps.change-failure-rate.outputs.cfr_color }}" + } + EOF + + ############################################################# + # 4. Mean Time to Recovery (MTTR) + ############################################################# + + # Calculate MTTR from Issues + - name: Calculate MTTR from Issues + id: mttr + run: | + # Get all issues labeled as incidents with closed timestamps + ISSUES=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/issues?state=closed&labels=incident&per_page=100") + + # Calculate time from opened to closed + TOTAL_TIME=0 + COUNT=$(echo "$ISSUES" | jq '. | length') + + if [ "$COUNT" -gt 0 ]; then + for i in $(seq 0 $(($COUNT-1))); do + CREATED=$(echo "$ISSUES" | jq -r ".[$i].created_at") + CLOSED=$(echo "$ISSUES" | jq -r ".[$i].closed_at") + + CREATED_TS=$(date -d "$CREATED" +%s) + CLOSED_TS=$(date -d "$CLOSED" +%s) + + DIFF_SECS=$(($CLOSED_TS - $CREATED_TS)) + TOTAL_TIME=$(($TOTAL_TIME + $DIFF_SECS)) + done + + # Convert to hours + AVG_HOURS=$(echo "scale=2; $TOTAL_TIME / $COUNT / 3600" | bc) + echo "mttr=${AVG_HOURS} hours" >> $GITHUB_OUTPUT + + # Determine level and color based on DORA metrics standards + if (( $(echo "$AVG_HOURS < 1" | bc -l) )); then + echo "mttr_color=brightgreen" >> $GITHUB_OUTPUT + echo "mttr_level=Elite" >> $GITHUB_OUTPUT + elif (( $(echo "$AVG_HOURS < 24" | bc -l) )); then + echo "mttr_color=green" >> $GITHUB_OUTPUT + echo "mttr_level=High" >> $GITHUB_OUTPUT + elif (( $(echo "$AVG_HOURS < 168" | bc -l) )); then + echo "mttr_color=yellow" >> $GITHUB_OUTPUT + echo "mttr_level=Medium" >> $GITHUB_OUTPUT + else + echo "mttr_color=red" >> $GITHUB_OUTPUT + echo "mttr_level=Low" >> $GITHUB_OUTPUT + fi + else + echo "mttr=N/A (No incidents)" >> $GITHUB_OUTPUT + echo "mttr_color=gray" >> $GITHUB_OUTPUT + echo "mttr_level=N/A" >> $GITHUB_OUTPUT + fi + + # Create MTTR badge data + - name: Generate MTTR Badge + run: | + cat > .github/badges/mttr.json << EOF + { + "schemaVersion": 1, + "label": "MTTR", + "message": "${{ steps.mttr.outputs.mttr }} (${{ steps.mttr.outputs.mttr_level }})", + "color": "${{ steps.mttr.outputs.mttr_color }}" + } + EOF + + ############################################################# + # 5. Generate combined DORA badge + ############################################################# + + - name: Generate Combined DORA Badge + run: | + cat > .github/badges/dora-metrics.json << EOF + { + "schemaVersion": 1, + "label": "DORA Metrics", + "message": "DF: ${{ steps.parse-df.outputs.df_level }} | LT: ${{ steps.parse-lt.outputs.lt_level }} | CFR: ${{ steps.change-failure-rate.outputs.cfr_level }} | MTTR: ${{ steps.mttr.outputs.mttr_level }}", + "color": "blue" + } + EOF + + ############################################################# + # 6. Create markdown report + ############################################################# + + - name: Create DORA Metrics Report + run: | + echo "# DORA Metrics Report" > dora-metrics.md + echo "Generated on $(date)" >> dora-metrics.md + echo "" >> dora-metrics.md + echo "## Deployment Frequency" >> dora-metrics.md + echo "**Value:** ${{ steps.parse-df.outputs.df_value }}" >> dora-metrics.md + echo "**Performance Level:** ${{ steps.parse-df.outputs.df_level }}" >> dora-metrics.md + echo "" >> dora-metrics.md + echo "## Lead Time for Changes" >> dora-metrics.md + echo "**Value:** ${{ steps.parse-lt.outputs.lt_value }}" >> dora-metrics.md + echo "**Performance Level:** ${{ steps.parse-lt.outputs.lt_level }}" >> dora-metrics.md + echo "" >> dora-metrics.md + echo "## Change Failure Rate" >> dora-metrics.md + echo "**Value:** ${{ steps.change-failure-rate.outputs.failure_rate }}" >> dora-metrics.md + echo "**Performance Level:** ${{ steps.change-failure-rate.outputs.cfr_level }}" >> dora-metrics.md + echo "" >> dora-metrics.md + echo "## Mean Time to Recovery" >> dora-metrics.md + echo "**Value:** ${{ steps.mttr.outputs.mttr }}" >> dora-metrics.md + echo "**Performance Level:** ${{ steps.mttr.outputs.mttr_level }}" >> dora-metrics.md + echo "" >> dora-metrics.md + echo "## How to Add Badges to Your README" >> dora-metrics.md + echo '```markdown' >> dora-metrics.md + echo "" >> dora-metrics.md + echo "![Deployment Frequency](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/deployment-frequency.json)" >> dora-metrics.md + echo "![Lead Time for Changes](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/lead-time.json)" >> dora-metrics.md + echo "![Change Failure Rate](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/change-failure-rate.json)" >> dora-metrics.md + echo "![MTTR](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/mttr.json)" >> dora-metrics.md + echo "![DORA Metrics](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/dora-metrics.json)" >> dora-metrics.md + echo '```' >> dora-metrics.md + + ############################################################# + # 7. Save results + ############################################################# + + # Save metrics report as an artifact + - name: Save DORA Metrics Report + uses: actions/upload-artifact@v3 + with: + name: dora-metrics-report + path: dora-metrics.md + + # Commit badge data files + - name: Commit badge data files + uses: EndBug/add-and-commit@v9 + with: + add: '.github/badges/*.json' + message: 'Update DORA metrics badges [skip ci]' + default_author: github_actions + + # Optionally create GitHub Issue with the report + - name: Create GitHub Issue with Report + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const fs = require('fs'); + const reportContent = fs.readFileSync('dora-metrics.md', 'utf8'); + + // Check if there's an existing open issue with the same title pattern + const issues = await github.rest.issues.listForRepo({ + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open', + labels: 'dora-metrics' + }); + + const today = new Date().toISOString().split('T')[0]; + const issueTitle = `DORA Metrics Report - ${today}`; + + const existingIssue = issues.data.find(issue => + issue.title.startsWith('DORA Metrics Report -')); + + if (existingIssue) { + // Update existing issue + await github.rest.issues.update({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: existingIssue.number, + title: issueTitle, + body: reportContent + }); + console.log(`Updated existing issue #${existingIssue.number}`); + } else { + // Create new issue + await github.rest.issues.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: issueTitle, + body: reportContent, + labels: ['metrics', 'dora-metrics'] + }); + console.log('Created new DORA metrics issue'); + } \ No newline at end of file From a5239124b692cb464fa5badc89c4b15b35adb2d3 Mon Sep 17 00:00:00 2001 From: Kyongsik Yun Date: Thu, 1 May 2025 12:05:14 -0700 Subject: [PATCH 06/13] metrics testing --- .github/workflows/metrics.yml | 286 +++++++++++++++++++--------------- 1 file changed, 158 insertions(+), 128 deletions(-) diff --git a/.github/workflows/metrics.yml b/.github/workflows/metrics.yml index 9a4cc55..9418278 100644 --- a/.github/workflows/metrics.yml +++ b/.github/workflows/metrics.yml @@ -3,11 +3,6 @@ on: # Run weekly to track metrics over time schedule: - cron: '0 0 * * 0' # Run at midnight every Sunday - # Run after each deployment to production - workflow_run: - workflows: ["Deploy to Production"] - types: - - completed # Allow manual trigger workflow_dispatch: @@ -34,38 +29,57 @@ jobs: # 1. Deployment Frequency ############################################################# + # Calculate deployment frequency directly with GitHub API - name: Calculate Deployment Frequency id: deployment-frequency - uses: DeveloperMetrics/deployment-frequency@main - with: - workflows: 'deploy-to-production' # Replace with your actual production deployment workflow name - actions-token: ${{ secrets.GITHUB_TOKEN }} - days: 30 # Calculate for the last 30 days - - # Extract the deployment frequency value (e.g., "3.5 per week") - - name: Parse Deployment Frequency - id: parse-df run: | - DF_VALUE=$(cat ${{ steps.deployment-frequency.outputs.markdown-file }} | grep -o '[0-9.]\+ per \(day\|week\|month\)') - echo "df_value=$DF_VALUE" >> $GITHUB_OUTPUT + # Get date 30 days ago in ISO format + THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") + + # Get workflow runs for the deploy workflow + DEPLOY_WORKFLOW_RUNS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/actions/workflows/deploy-to-production.yml/runs?status=completed&created=>$THIRTY_DAYS_AGO&per_page=100") - # Determine color based on DORA metrics standards - if [[ "$DF_VALUE" == *"per day"* ]]; then - echo "df_color=brightgreen" >> $GITHUB_OUTPUT - echo "df_level=Elite" >> $GITHUB_OUTPUT - elif [[ "$DF_VALUE" == *"per week"* ]]; then - WEEKLY_NUM=$(echo $DF_VALUE | grep -o '[0-9.]\+') - if (( $(echo "$WEEKLY_NUM > 3" | bc -l) )); then - echo "df_color=green" >> $GITHUB_OUTPUT - echo "df_level=High" >> $GITHUB_OUTPUT + # Count successful workflow runs + DEPLOY_COUNT=$(echo "$DEPLOY_WORKFLOW_RUNS" | jq '[.workflow_runs[] | select(.conclusion == "success")] | length') + + if [ -z "$DEPLOY_COUNT" ] || [ "$DEPLOY_COUNT" == "null" ]; then + DEPLOY_COUNT=0 + fi + + # Calculate deployments per day + DEPLOY_PER_DAY=$(echo "scale=2; $DEPLOY_COUNT / 30" | bc) + + # Format the value + if (( $(echo "$DEPLOY_PER_DAY >= 1" | bc -l) )); then + DF_VALUE="$DEPLOY_PER_DAY per day" + DF_LEVEL="Elite" + DF_COLOR="brightgreen" + elif (( $(echo "$DEPLOY_PER_DAY >= 0.14" | bc -l) )); then + DEPLOY_PER_WEEK=$(echo "scale=2; $DEPLOY_PER_DAY * 7" | bc) + DF_VALUE="$DEPLOY_PER_WEEK per week" + DF_LEVEL="High" + DF_COLOR="green" + elif (( $(echo "$DEPLOY_PER_DAY >= 0.03" | bc -l) )); then + DEPLOY_PER_MONTH=$(echo "scale=2; $DEPLOY_PER_DAY * 30" | bc) + DF_VALUE="$DEPLOY_PER_MONTH per month" + DF_LEVEL="Medium" + DF_COLOR="yellow" + else + DEPLOY_PER_MONTH=$(echo "scale=2; $DEPLOY_PER_DAY * 30" | bc) + if [ "$DEPLOY_PER_MONTH" = "0" ] || [ "$DEPLOY_PER_MONTH" = "0.00" ]; then + DF_VALUE="0 per month" else - echo "df_color=yellow" >> $GITHUB_OUTPUT - echo "df_level=Medium" >> $GITHUB_OUTPUT + DF_VALUE="$DEPLOY_PER_MONTH per month" fi - else - echo "df_color=red" >> $GITHUB_OUTPUT - echo "df_level=Low" >> $GITHUB_OUTPUT + DF_LEVEL="Low" + DF_COLOR="red" fi + + echo "deploy_count=$DEPLOY_COUNT" >> $GITHUB_OUTPUT + echo "df_value=$DF_VALUE" >> $GITHUB_OUTPUT + echo "df_level=$DF_LEVEL" >> $GITHUB_OUTPUT + echo "df_color=$DF_COLOR" >> $GITHUB_OUTPUT # Create deployment frequency badge data - name: Generate Deployment Frequency Badge @@ -74,8 +88,8 @@ jobs: { "schemaVersion": 1, "label": "Deployment Frequency", - "message": "${{ steps.parse-df.outputs.df_value }} (${{ steps.parse-df.outputs.df_level }})", - "color": "${{ steps.parse-df.outputs.df_color }}" + "message": "${{ steps.deployment-frequency.outputs.df_value }} (${{ steps.deployment-frequency.outputs.df_level }})", + "color": "${{ steps.deployment-frequency.outputs.df_color }}" } EOF @@ -83,44 +97,70 @@ jobs: # 2. Lead Time for Changes ############################################################# + # Calculate lead time for changes - name: Calculate Lead Time for Changes id: lead-time - uses: DeveloperMetrics/lead-time-for-changes@main - with: - workflows: 'deploy-to-production' # Replace with your actual production deployment workflow name - actions-token: ${{ secrets.GITHUB_TOKEN }} - days: 30 # Calculate for the last 30 days - - # Extract the lead time value (e.g., "3.2 days") - - name: Parse Lead Time - id: parse-lt run: | - LT_HOURS=$(cat ${{ steps.lead-time.outputs.markdown-file }} | grep -o 'is [0-9.]\+ hours' | awk '{print $2}') - # If not found in hours, try to find in days - if [ -z "$LT_HOURS" ]; then - LT_DAYS=$(cat ${{ steps.lead-time.outputs.markdown-file }} | grep -o 'is [0-9.]\+ days' | awk '{print $2}') - LT_VALUE="$LT_DAYS days" - LT_HOURS=$(echo "$LT_DAYS * 24" | bc) - else - LT_VALUE="$LT_HOURS hours" - fi + # Get date 30 days ago in ISO format + THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") - echo "lt_value=$LT_VALUE" >> $GITHUB_OUTPUT + # Get merged PRs in the last 30 days + MERGED_PRS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/pulls?state=closed&sort=updated&direction=desc&per_page=100" | \ + jq '[.[] | select(.merged_at != null) | select(.merged_at > "'"$THIRTY_DAYS_AGO"'")]') + + PR_COUNT=$(echo "$MERGED_PRS" | jq 'length') - # Determine color based on DORA metrics standards - if (( $(echo "$LT_HOURS < 24" | bc -l) )); then - echo "lt_color=brightgreen" >> $GITHUB_OUTPUT - echo "lt_level=Elite" >> $GITHUB_OUTPUT - elif (( $(echo "$LT_HOURS < 168" | bc -l) )); then - echo "lt_color=green" >> $GITHUB_OUTPUT - echo "lt_level=High" >> $GITHUB_OUTPUT - elif (( $(echo "$LT_HOURS < 720" | bc -l) )); then - echo "lt_color=yellow" >> $GITHUB_OUTPUT - echo "lt_level=Medium" >> $GITHUB_OUTPUT + if [ "$PR_COUNT" -gt 0 ]; then + # Calculate total time for all PRs (created to merged) + TOTAL_HOURS=0 + + for i in $(seq 0 $(($PR_COUNT-1))); do + CREATED=$(echo "$MERGED_PRS" | jq -r ".[$i].created_at") + MERGED=$(echo "$MERGED_PRS" | jq -r ".[$i].merged_at") + + CREATED_TS=$(date -d "$CREATED" +%s) + MERGED_TS=$(date -d "$MERGED" +%s) + + DIFF_SECS=$(($MERGED_TS - $CREATED_TS)) + PR_HOURS=$(echo "scale=2; $DIFF_SECS / 3600" | bc) + + TOTAL_HOURS=$(echo "scale=2; $TOTAL_HOURS + $PR_HOURS" | bc) + done + + # Calculate average + AVG_HOURS=$(echo "scale=2; $TOTAL_HOURS / $PR_COUNT" | bc) + + # Format the output + if (( $(echo "$AVG_HOURS < 24" | bc -l) )); then + LT_VALUE="$AVG_HOURS hours" + LT_LEVEL="Elite" + LT_COLOR="brightgreen" + elif (( $(echo "$AVG_HOURS < 168" | bc -l) )); then + AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) + LT_VALUE="$AVG_DAYS days" + LT_LEVEL="High" + LT_COLOR="green" + elif (( $(echo "$AVG_HOURS < 720" | bc -l) )); then + AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) + LT_VALUE="$AVG_DAYS days" + LT_LEVEL="Medium" + LT_COLOR="yellow" + else + AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) + LT_VALUE="$AVG_DAYS days" + LT_LEVEL="Low" + LT_COLOR="red" + fi else - echo "lt_color=red" >> $GITHUB_OUTPUT - echo "lt_level=Low" >> $GITHUB_OUTPUT + LT_VALUE="N/A (No PRs)" + LT_LEVEL="N/A" + LT_COLOR="gray" fi + + echo "lt_value=$LT_VALUE" >> $GITHUB_OUTPUT + echo "lt_level=$LT_LEVEL" >> $GITHUB_OUTPUT + echo "lt_color=$LT_COLOR" >> $GITHUB_OUTPUT # Create lead time badge data - name: Generate Lead Time Badge @@ -129,8 +169,8 @@ jobs: { "schemaVersion": 1, "label": "Lead Time", - "message": "${{ steps.parse-lt.outputs.lt_value }} (${{ steps.parse-lt.outputs.lt_level }})", - "color": "${{ steps.parse-lt.outputs.lt_color }}" + "message": "${{ steps.lead-time.outputs.lt_value }} (${{ steps.lead-time.outputs.lt_level }})", + "color": "${{ steps.lead-time.outputs.lt_color }}" } EOF @@ -138,27 +178,9 @@ jobs: # 3. Change Failure Rate ############################################################# - # Get recent production deployments (last 30 days) - - name: Get Production Deployments - id: deployments - run: | - # Get date 30 days ago in ISO format - THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") - - # Count completed workflow runs for deploy-to-production in last 30 days - DEPLOY_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/${{ github.repository }}/actions/workflows/deploy-to-production.yml/runs?status=completed&created=>$THIRTY_DAYS_AGO" \ - | jq '.total_count') - - if [ -z "$DEPLOY_COUNT" ] || [ "$DEPLOY_COUNT" == "null" ]; then - DEPLOY_COUNT=0 - fi - - echo "deploy_count=$DEPLOY_COUNT" >> $GITHUB_OUTPUT - - # Get incidents/bugs reported in last 30 days - - name: Get Incidents/Bugs - id: incidents + # Calculate Change Failure Rate + - name: Calculate Change Failure Rate + id: change-failure-rate run: | # Get date 30 days ago in ISO format THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") @@ -172,35 +194,35 @@ jobs: INCIDENT_COUNT=0 fi - echo "incident_count=$INCIDENT_COUNT" >> $GITHUB_OUTPUT - - # Calculate Change Failure Rate - - name: Calculate Change Failure Rate - id: change-failure-rate - run: | - if [ "${{ steps.deployments.outputs.deploy_count }}" -gt 0 ]; then - RATE=$(echo "scale=2; ${{ steps.incidents.outputs.incident_count }} / ${{ steps.deployments.outputs.deploy_count }} * 100" | bc) - echo "failure_rate=${RATE}%" >> $GITHUB_OUTPUT + # Check if we have any deployments + if [ "${{ steps.deployment-frequency.outputs.deploy_count }}" -gt 0 ]; then + RATE=$(echo "scale=2; $INCIDENT_COUNT / ${{ steps.deployment-frequency.outputs.deploy_count }} * 100" | bc) - # Determine level and color based on DORA metrics standards + # Format the value if (( $(echo "$RATE <= 15" | bc -l) )); then - echo "cfr_color=brightgreen" >> $GITHUB_OUTPUT - echo "cfr_level=Elite" >> $GITHUB_OUTPUT + CFR_LEVEL="Elite" + CFR_COLOR="brightgreen" elif (( $(echo "$RATE <= 30" | bc -l) )); then - echo "cfr_color=green" >> $GITHUB_OUTPUT - echo "cfr_level=High" >> $GITHUB_OUTPUT + CFR_LEVEL="High" + CFR_COLOR="green" elif (( $(echo "$RATE <= 45" | bc -l) )); then - echo "cfr_color=yellow" >> $GITHUB_OUTPUT - echo "cfr_level=Medium" >> $GITHUB_OUTPUT + CFR_LEVEL="Medium" + CFR_COLOR="yellow" else - echo "cfr_color=red" >> $GITHUB_OUTPUT - echo "cfr_level=Low" >> $GITHUB_OUTPUT + CFR_LEVEL="Low" + CFR_COLOR="red" fi + + FAILURE_RATE="${RATE}%" else - echo "failure_rate=N/A (No deployments)" >> $GITHUB_OUTPUT - echo "cfr_color=gray" >> $GITHUB_OUTPUT - echo "cfr_level=N/A" >> $GITHUB_OUTPUT + FAILURE_RATE="N/A (No deployments)" + CFR_LEVEL="N/A" + CFR_COLOR="gray" fi + + echo "failure_rate=$FAILURE_RATE" >> $GITHUB_OUTPUT + echo "cfr_level=$CFR_LEVEL" >> $GITHUB_OUTPUT + echo "cfr_color=$CFR_COLOR" >> $GITHUB_OUTPUT # Create change failure rate badge data - name: Generate Change Failure Rate Badge @@ -218,7 +240,7 @@ jobs: # 4. Mean Time to Recovery (MTTR) ############################################################# - # Calculate MTTR from Issues + # Calculate MTTR - name: Calculate MTTR from Issues id: mttr run: | @@ -244,27 +266,35 @@ jobs: # Convert to hours AVG_HOURS=$(echo "scale=2; $TOTAL_TIME / $COUNT / 3600" | bc) - echo "mttr=${AVG_HOURS} hours" >> $GITHUB_OUTPUT - # Determine level and color based on DORA metrics standards + # Format output if (( $(echo "$AVG_HOURS < 1" | bc -l) )); then - echo "mttr_color=brightgreen" >> $GITHUB_OUTPUT - echo "mttr_level=Elite" >> $GITHUB_OUTPUT + MTTR_VALUE="${AVG_HOURS} hours" + MTTR_LEVEL="Elite" + MTTR_COLOR="brightgreen" elif (( $(echo "$AVG_HOURS < 24" | bc -l) )); then - echo "mttr_color=green" >> $GITHUB_OUTPUT - echo "mttr_level=High" >> $GITHUB_OUTPUT + MTTR_VALUE="${AVG_HOURS} hours" + MTTR_LEVEL="High" + MTTR_COLOR="green" elif (( $(echo "$AVG_HOURS < 168" | bc -l) )); then - echo "mttr_color=yellow" >> $GITHUB_OUTPUT - echo "mttr_level=Medium" >> $GITHUB_OUTPUT + MTTR_VALUE="${AVG_HOURS} hours" + MTTR_LEVEL="Medium" + MTTR_COLOR="yellow" else - echo "mttr_color=red" >> $GITHUB_OUTPUT - echo "mttr_level=Low" >> $GITHUB_OUTPUT + AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) + MTTR_VALUE="${AVG_DAYS} days" + MTTR_LEVEL="Low" + MTTR_COLOR="red" fi else - echo "mttr=N/A (No incidents)" >> $GITHUB_OUTPUT - echo "mttr_color=gray" >> $GITHUB_OUTPUT - echo "mttr_level=N/A" >> $GITHUB_OUTPUT + MTTR_VALUE="N/A (No incidents)" + MTTR_LEVEL="N/A" + MTTR_COLOR="gray" fi + + echo "mttr_value=$MTTR_VALUE" >> $GITHUB_OUTPUT + echo "mttr_level=$MTTR_LEVEL" >> $GITHUB_OUTPUT + echo "mttr_color=$MTTR_COLOR" >> $GITHUB_OUTPUT # Create MTTR badge data - name: Generate MTTR Badge @@ -273,7 +303,7 @@ jobs: { "schemaVersion": 1, "label": "MTTR", - "message": "${{ steps.mttr.outputs.mttr }} (${{ steps.mttr.outputs.mttr_level }})", + "message": "${{ steps.mttr.outputs.mttr_value }} (${{ steps.mttr.outputs.mttr_level }})", "color": "${{ steps.mttr.outputs.mttr_color }}" } EOF @@ -288,7 +318,7 @@ jobs: { "schemaVersion": 1, "label": "DORA Metrics", - "message": "DF: ${{ steps.parse-df.outputs.df_level }} | LT: ${{ steps.parse-lt.outputs.lt_level }} | CFR: ${{ steps.change-failure-rate.outputs.cfr_level }} | MTTR: ${{ steps.mttr.outputs.mttr_level }}", + "message": "DF: ${{ steps.deployment-frequency.outputs.df_level }} | LT: ${{ steps.lead-time.outputs.lt_level }} | CFR: ${{ steps.change-failure-rate.outputs.cfr_level }} | MTTR: ${{ steps.mttr.outputs.mttr_level }}", "color": "blue" } EOF @@ -303,19 +333,19 @@ jobs: echo "Generated on $(date)" >> dora-metrics.md echo "" >> dora-metrics.md echo "## Deployment Frequency" >> dora-metrics.md - echo "**Value:** ${{ steps.parse-df.outputs.df_value }}" >> dora-metrics.md - echo "**Performance Level:** ${{ steps.parse-df.outputs.df_level }}" >> dora-metrics.md + echo "**Value:** ${{ steps.deployment-frequency.outputs.df_value }}" >> dora-metrics.md + echo "**Performance Level:** ${{ steps.deployment-frequency.outputs.df_level }}" >> dora-metrics.md echo "" >> dora-metrics.md echo "## Lead Time for Changes" >> dora-metrics.md - echo "**Value:** ${{ steps.parse-lt.outputs.lt_value }}" >> dora-metrics.md - echo "**Performance Level:** ${{ steps.parse-lt.outputs.lt_level }}" >> dora-metrics.md + echo "**Value:** ${{ steps.lead-time.outputs.lt_value }}" >> dora-metrics.md + echo "**Performance Level:** ${{ steps.lead-time.outputs.lt_level }}" >> dora-metrics.md echo "" >> dora-metrics.md echo "## Change Failure Rate" >> dora-metrics.md echo "**Value:** ${{ steps.change-failure-rate.outputs.failure_rate }}" >> dora-metrics.md echo "**Performance Level:** ${{ steps.change-failure-rate.outputs.cfr_level }}" >> dora-metrics.md echo "" >> dora-metrics.md echo "## Mean Time to Recovery" >> dora-metrics.md - echo "**Value:** ${{ steps.mttr.outputs.mttr }}" >> dora-metrics.md + echo "**Value:** ${{ steps.mttr.outputs.mttr_value }}" >> dora-metrics.md echo "**Performance Level:** ${{ steps.mttr.outputs.mttr_level }}" >> dora-metrics.md echo "" >> dora-metrics.md echo "## How to Add Badges to Your README" >> dora-metrics.md From e985eee1ceb898bca9e43f2b753c346b5fbe2f75 Mon Sep 17 00:00:00 2001 From: Kyongsik Yun Date: Thu, 1 May 2025 12:17:26 -0700 Subject: [PATCH 07/13] metrics testing --- .github/workflows/metrics.yml | 388 ++++++++-------------------------- 1 file changed, 90 insertions(+), 298 deletions(-) diff --git a/.github/workflows/metrics.yml b/.github/workflows/metrics.yml index 9418278..1936730 100644 --- a/.github/workflows/metrics.yml +++ b/.github/workflows/metrics.yml @@ -1,118 +1,70 @@ -name: Collect DORA Metrics +name: DORA Metrics on: - # Run weekly to track metrics over time schedule: - cron: '0 0 * * 0' # Run at midnight every Sunday - # Allow manual trigger - workflow_dispatch: + workflow_dispatch: # Allow manual trigger jobs: - collect-dora-metrics: + collect-metrics: runs-on: ubuntu-latest permissions: actions: read - contents: write # Required to update badge files + contents: write pull-requests: read issues: read steps: - name: Checkout code uses: actions/checkout@v3 - with: - fetch-depth: 0 # Required for accurate git history analysis - # Create directory for badge data - - name: Create badge directory + - name: Create directory for badges run: mkdir -p .github/badges - ############################################################# - # 1. Deployment Frequency - ############################################################# - - # Calculate deployment frequency directly with GitHub API - - name: Calculate Deployment Frequency - id: deployment-frequency + - name: Calculate DORA Metrics + id: calculate-metrics run: | # Get date 30 days ago in ISO format THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") - # Get workflow runs for the deploy workflow - DEPLOY_WORKFLOW_RUNS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/${{ github.repository }}/actions/workflows/deploy-to-production.yml/runs?status=completed&created=>$THIRTY_DAYS_AGO&per_page=100") - - # Count successful workflow runs - DEPLOY_COUNT=$(echo "$DEPLOY_WORKFLOW_RUNS" | jq '[.workflow_runs[] | select(.conclusion == "success")] | length') - - if [ -z "$DEPLOY_COUNT" ] || [ "$DEPLOY_COUNT" == "null" ]; then - DEPLOY_COUNT=0 - fi - - # Calculate deployments per day - DEPLOY_PER_DAY=$(echo "scale=2; $DEPLOY_COUNT / 30" | bc) + # Calculate Deployment Frequency + echo "Calculating Deployment Frequency..." + DEPLOY_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/actions/runs?status=completed&event=push&branch=main&created=>$THIRTY_DAYS_AGO" | \ + jq '.workflow_runs | length') - # Format the value - if (( $(echo "$DEPLOY_PER_DAY >= 1" | bc -l) )); then - DF_VALUE="$DEPLOY_PER_DAY per day" - DF_LEVEL="Elite" - DF_COLOR="brightgreen" - elif (( $(echo "$DEPLOY_PER_DAY >= 0.14" | bc -l) )); then - DEPLOY_PER_WEEK=$(echo "scale=2; $DEPLOY_PER_DAY * 7" | bc) - DF_VALUE="$DEPLOY_PER_WEEK per week" - DF_LEVEL="High" - DF_COLOR="green" - elif (( $(echo "$DEPLOY_PER_DAY >= 0.03" | bc -l) )); then - DEPLOY_PER_MONTH=$(echo "scale=2; $DEPLOY_PER_DAY * 30" | bc) - DF_VALUE="$DEPLOY_PER_MONTH per month" - DF_LEVEL="Medium" - DF_COLOR="yellow" - else - DEPLOY_PER_MONTH=$(echo "scale=2; $DEPLOY_PER_DAY * 30" | bc) - if [ "$DEPLOY_PER_MONTH" = "0" ] || [ "$DEPLOY_PER_MONTH" = "0.00" ]; then - DF_VALUE="0 per month" + if [ "$DEPLOY_COUNT" -gt 0 ]; then + DEPLOY_PER_DAY=$(echo "scale=2; $DEPLOY_COUNT / 30" | bc) + + if (( $(echo "$DEPLOY_PER_DAY >= 1" | bc -l) )); then + DF_MESSAGE="$DEPLOY_PER_DAY per day (Elite)" + DF_COLOR="brightgreen" + elif (( $(echo "$DEPLOY_PER_DAY >= 0.14" | bc -l) )); then + DEPLOY_PER_WEEK=$(echo "scale=2; $DEPLOY_PER_DAY * 7" | bc) + DF_MESSAGE="$DEPLOY_PER_WEEK per week (High)" + DF_COLOR="green" + elif (( $(echo "$DEPLOY_PER_DAY >= 0.03" | bc -l) )); then + DEPLOY_PER_MONTH=$(echo "scale=2; $DEPLOY_PER_DAY * 30" | bc) + DF_MESSAGE="$DEPLOY_PER_MONTH per month (Medium)" + DF_COLOR="yellow" else - DF_VALUE="$DEPLOY_PER_MONTH per month" + DEPLOY_PER_MONTH=$(echo "scale=2; $DEPLOY_PER_DAY * 30" | bc) + DF_MESSAGE="$DEPLOY_PER_MONTH per month (Low)" + DF_COLOR="red" fi - DF_LEVEL="Low" + else + DF_MESSAGE="No deployments (Low)" DF_COLOR="red" fi - echo "deploy_count=$DEPLOY_COUNT" >> $GITHUB_OUTPUT - echo "df_value=$DF_VALUE" >> $GITHUB_OUTPUT - echo "df_level=$DF_LEVEL" >> $GITHUB_OUTPUT - echo "df_color=$DF_COLOR" >> $GITHUB_OUTPUT - - # Create deployment frequency badge data - - name: Generate Deployment Frequency Badge - run: | - cat > .github/badges/deployment-frequency.json << EOF - { - "schemaVersion": 1, - "label": "Deployment Frequency", - "message": "${{ steps.deployment-frequency.outputs.df_value }} (${{ steps.deployment-frequency.outputs.df_level }})", - "color": "${{ steps.deployment-frequency.outputs.df_color }}" - } - EOF - - ############################################################# - # 2. Lead Time for Changes - ############################################################# - - # Calculate lead time for changes - - name: Calculate Lead Time for Changes - id: lead-time - run: | - # Get date 30 days ago in ISO format - THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") - - # Get merged PRs in the last 30 days + # Calculate Lead Time for Changes + echo "Calculating Lead Time for Changes..." MERGED_PRS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/${{ github.repository }}/pulls?state=closed&sort=updated&direction=desc&per_page=100" | \ - jq '[.[] | select(.merged_at != null) | select(.merged_at > "'"$THIRTY_DAYS_AGO"'")]') + "https://api.github.com/repos/${{ github.repository }}/pulls?state=closed&sort=updated&direction=desc&per_page=30" | \ + jq '[.[] | select(.merged_at != null)]') PR_COUNT=$(echo "$MERGED_PRS" | jq 'length') if [ "$PR_COUNT" -gt 0 ]; then - # Calculate total time for all PRs (created to merged) TOTAL_HOURS=0 for i in $(seq 0 $(($PR_COUNT-1))); do @@ -128,225 +80,115 @@ jobs: TOTAL_HOURS=$(echo "scale=2; $TOTAL_HOURS + $PR_HOURS" | bc) done - # Calculate average AVG_HOURS=$(echo "scale=2; $TOTAL_HOURS / $PR_COUNT" | bc) - # Format the output if (( $(echo "$AVG_HOURS < 24" | bc -l) )); then - LT_VALUE="$AVG_HOURS hours" - LT_LEVEL="Elite" + LT_MESSAGE="$AVG_HOURS hours (Elite)" LT_COLOR="brightgreen" elif (( $(echo "$AVG_HOURS < 168" | bc -l) )); then AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) - LT_VALUE="$AVG_DAYS days" - LT_LEVEL="High" + LT_MESSAGE="$AVG_DAYS days (High)" LT_COLOR="green" elif (( $(echo "$AVG_HOURS < 720" | bc -l) )); then AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) - LT_VALUE="$AVG_DAYS days" - LT_LEVEL="Medium" + LT_MESSAGE="$AVG_DAYS days (Medium)" LT_COLOR="yellow" else AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) - LT_VALUE="$AVG_DAYS days" - LT_LEVEL="Low" + LT_MESSAGE="$AVG_DAYS days (Low)" LT_COLOR="red" fi else - LT_VALUE="N/A (No PRs)" - LT_LEVEL="N/A" + LT_MESSAGE="No PRs" LT_COLOR="gray" fi - echo "lt_value=$LT_VALUE" >> $GITHUB_OUTPUT - echo "lt_level=$LT_LEVEL" >> $GITHUB_OUTPUT - echo "lt_color=$LT_COLOR" >> $GITHUB_OUTPUT - - # Create lead time badge data - - name: Generate Lead Time Badge - run: | - cat > .github/badges/lead-time.json << EOF - { - "schemaVersion": 1, - "label": "Lead Time", - "message": "${{ steps.lead-time.outputs.lt_value }} (${{ steps.lead-time.outputs.lt_level }})", - "color": "${{ steps.lead-time.outputs.lt_color }}" - } - EOF - - ############################################################# - # 3. Change Failure Rate - ############################################################# - - # Calculate Change Failure Rate - - name: Calculate Change Failure Rate - id: change-failure-rate - run: | - # Get date 30 days ago in ISO format - THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") - - # Count closed issues with bug or incident labels in last 30 days - INCIDENT_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/${{ github.repository }}/issues?state=closed&labels=bug,incident&since=$THIRTY_DAYS_AGO&per_page=100" \ - | jq '. | length') + # Calculate Change Failure Rate + echo "Calculating Change Failure Rate..." + BUG_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/issues?state=all&labels=bug&per_page=100" | \ + jq '. | length') - if [ -z "$INCIDENT_COUNT" ] || [ "$INCIDENT_COUNT" == "null" ]; then - INCIDENT_COUNT=0 + if [ -z "$BUG_COUNT" ] || [ "$BUG_COUNT" == "null" ]; then + BUG_COUNT=0 fi - # Check if we have any deployments - if [ "${{ steps.deployment-frequency.outputs.deploy_count }}" -gt 0 ]; then - RATE=$(echo "scale=2; $INCIDENT_COUNT / ${{ steps.deployment-frequency.outputs.deploy_count }} * 100" | bc) + if [ "$DEPLOY_COUNT" -gt 0 ]; then + FAILURE_RATE=$(echo "scale=2; $BUG_COUNT / $DEPLOY_COUNT * 100" | bc) - # Format the value - if (( $(echo "$RATE <= 15" | bc -l) )); then - CFR_LEVEL="Elite" + if (( $(echo "$FAILURE_RATE <= 15" | bc -l) )); then + CFR_MESSAGE="$FAILURE_RATE% (Elite)" CFR_COLOR="brightgreen" - elif (( $(echo "$RATE <= 30" | bc -l) )); then - CFR_LEVEL="High" + elif (( $(echo "$FAILURE_RATE <= 30" | bc -l) )); then + CFR_MESSAGE="$FAILURE_RATE% (High)" CFR_COLOR="green" - elif (( $(echo "$RATE <= 45" | bc -l) )); then - CFR_LEVEL="Medium" + elif (( $(echo "$FAILURE_RATE <= 45" | bc -l) )); then + CFR_MESSAGE="$FAILURE_RATE% (Medium)" CFR_COLOR="yellow" else - CFR_LEVEL="Low" + CFR_MESSAGE="$FAILURE_RATE% (Low)" CFR_COLOR="red" fi - - FAILURE_RATE="${RATE}%" else - FAILURE_RATE="N/A (No deployments)" - CFR_LEVEL="N/A" + CFR_MESSAGE="N/A (No deployments)" CFR_COLOR="gray" fi - echo "failure_rate=$FAILURE_RATE" >> $GITHUB_OUTPUT - echo "cfr_level=$CFR_LEVEL" >> $GITHUB_OUTPUT - echo "cfr_color=$CFR_COLOR" >> $GITHUB_OUTPUT - - # Create change failure rate badge data - - name: Generate Change Failure Rate Badge - run: | - cat > .github/badges/change-failure-rate.json << EOF + # Create badge JSON files + echo "Creating badge files..." + + # Deployment Frequency Badge + cat > .github/badges/deployment-frequency.json << EOF { "schemaVersion": 1, - "label": "Change Failure Rate", - "message": "${{ steps.change-failure-rate.outputs.failure_rate }} (${{ steps.change-failure-rate.outputs.cfr_level }})", - "color": "${{ steps.change-failure-rate.outputs.cfr_color }}" + "label": "Deployment Frequency", + "message": "$DF_MESSAGE", + "color": "$DF_COLOR" } EOF - - ############################################################# - # 4. Mean Time to Recovery (MTTR) - ############################################################# - - # Calculate MTTR - - name: Calculate MTTR from Issues - id: mttr - run: | - # Get all issues labeled as incidents with closed timestamps - ISSUES=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/${{ github.repository }}/issues?state=closed&labels=incident&per_page=100") - # Calculate time from opened to closed - TOTAL_TIME=0 - COUNT=$(echo "$ISSUES" | jq '. | length') - - if [ "$COUNT" -gt 0 ]; then - for i in $(seq 0 $(($COUNT-1))); do - CREATED=$(echo "$ISSUES" | jq -r ".[$i].created_at") - CLOSED=$(echo "$ISSUES" | jq -r ".[$i].closed_at") - - CREATED_TS=$(date -d "$CREATED" +%s) - CLOSED_TS=$(date -d "$CLOSED" +%s) - - DIFF_SECS=$(($CLOSED_TS - $CREATED_TS)) - TOTAL_TIME=$(($TOTAL_TIME + $DIFF_SECS)) - done - - # Convert to hours - AVG_HOURS=$(echo "scale=2; $TOTAL_TIME / $COUNT / 3600" | bc) - - # Format output - if (( $(echo "$AVG_HOURS < 1" | bc -l) )); then - MTTR_VALUE="${AVG_HOURS} hours" - MTTR_LEVEL="Elite" - MTTR_COLOR="brightgreen" - elif (( $(echo "$AVG_HOURS < 24" | bc -l) )); then - MTTR_VALUE="${AVG_HOURS} hours" - MTTR_LEVEL="High" - MTTR_COLOR="green" - elif (( $(echo "$AVG_HOURS < 168" | bc -l) )); then - MTTR_VALUE="${AVG_HOURS} hours" - MTTR_LEVEL="Medium" - MTTR_COLOR="yellow" - else - AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) - MTTR_VALUE="${AVG_DAYS} days" - MTTR_LEVEL="Low" - MTTR_COLOR="red" - fi - else - MTTR_VALUE="N/A (No incidents)" - MTTR_LEVEL="N/A" - MTTR_COLOR="gray" - fi + # Lead Time Badge + cat > .github/badges/lead-time.json << EOF + { + "schemaVersion": 1, + "label": "Lead Time", + "message": "$LT_MESSAGE", + "color": "$LT_COLOR" + } + EOF - echo "mttr_value=$MTTR_VALUE" >> $GITHUB_OUTPUT - echo "mttr_level=$MTTR_LEVEL" >> $GITHUB_OUTPUT - echo "mttr_color=$MTTR_COLOR" >> $GITHUB_OUTPUT - - # Create MTTR badge data - - name: Generate MTTR Badge - run: | - cat > .github/badges/mttr.json << EOF + # Change Failure Rate Badge + cat > .github/badges/change-failure-rate.json << EOF { "schemaVersion": 1, - "label": "MTTR", - "message": "${{ steps.mttr.outputs.mttr_value }} (${{ steps.mttr.outputs.mttr_level }})", - "color": "${{ steps.mttr.outputs.mttr_color }}" + "label": "Change Failure Rate", + "message": "$CFR_MESSAGE", + "color": "$CFR_COLOR" } EOF - - ############################################################# - # 5. Generate combined DORA badge - ############################################################# - - - name: Generate Combined DORA Badge - run: | + + # Combined DORA Metrics Badge cat > .github/badges/dora-metrics.json << EOF { "schemaVersion": 1, "label": "DORA Metrics", - "message": "DF: ${{ steps.deployment-frequency.outputs.df_level }} | LT: ${{ steps.lead-time.outputs.lt_level }} | CFR: ${{ steps.change-failure-rate.outputs.cfr_level }} | MTTR: ${{ steps.mttr.outputs.mttr_level }}", + "message": "Tracked Weekly", "color": "blue" } EOF - - ############################################################# - # 6. Create markdown report - ############################################################# - - - name: Create DORA Metrics Report - run: | + + # Create Summary Markdown echo "# DORA Metrics Report" > dora-metrics.md echo "Generated on $(date)" >> dora-metrics.md echo "" >> dora-metrics.md echo "## Deployment Frequency" >> dora-metrics.md - echo "**Value:** ${{ steps.deployment-frequency.outputs.df_value }}" >> dora-metrics.md - echo "**Performance Level:** ${{ steps.deployment-frequency.outputs.df_level }}" >> dora-metrics.md + echo "**Value:** $DF_MESSAGE" >> dora-metrics.md echo "" >> dora-metrics.md echo "## Lead Time for Changes" >> dora-metrics.md - echo "**Value:** ${{ steps.lead-time.outputs.lt_value }}" >> dora-metrics.md - echo "**Performance Level:** ${{ steps.lead-time.outputs.lt_level }}" >> dora-metrics.md + echo "**Value:** $LT_MESSAGE" >> dora-metrics.md echo "" >> dora-metrics.md echo "## Change Failure Rate" >> dora-metrics.md - echo "**Value:** ${{ steps.change-failure-rate.outputs.failure_rate }}" >> dora-metrics.md - echo "**Performance Level:** ${{ steps.change-failure-rate.outputs.cfr_level }}" >> dora-metrics.md - echo "" >> dora-metrics.md - echo "## Mean Time to Recovery" >> dora-metrics.md - echo "**Value:** ${{ steps.mttr.outputs.mttr_value }}" >> dora-metrics.md - echo "**Performance Level:** ${{ steps.mttr.outputs.mttr_level }}" >> dora-metrics.md + echo "**Value:** $CFR_MESSAGE" >> dora-metrics.md echo "" >> dora-metrics.md echo "## How to Add Badges to Your README" >> dora-metrics.md echo '```markdown' >> dora-metrics.md @@ -354,70 +196,20 @@ jobs: echo "![Deployment Frequency](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/deployment-frequency.json)" >> dora-metrics.md echo "![Lead Time for Changes](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/lead-time.json)" >> dora-metrics.md echo "![Change Failure Rate](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/change-failure-rate.json)" >> dora-metrics.md - echo "![MTTR](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/mttr.json)" >> dora-metrics.md echo "![DORA Metrics](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/dora-metrics.json)" >> dora-metrics.md echo '```' >> dora-metrics.md - ############################################################# - # 7. Save results - ############################################################# - # Save metrics report as an artifact - name: Save DORA Metrics Report uses: actions/upload-artifact@v3 with: name: dora-metrics-report path: dora-metrics.md - - # Commit badge data files + + # Commit and push badge data files - name: Commit badge data files uses: EndBug/add-and-commit@v9 with: add: '.github/badges/*.json' message: 'Update DORA metrics badges [skip ci]' - default_author: github_actions - - # Optionally create GitHub Issue with the report - - name: Create GitHub Issue with Report - uses: actions/github-script@v6 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const fs = require('fs'); - const reportContent = fs.readFileSync('dora-metrics.md', 'utf8'); - - // Check if there's an existing open issue with the same title pattern - const issues = await github.rest.issues.listForRepo({ - owner: context.repo.owner, - repo: context.repo.repo, - state: 'open', - labels: 'dora-metrics' - }); - - const today = new Date().toISOString().split('T')[0]; - const issueTitle = `DORA Metrics Report - ${today}`; - - const existingIssue = issues.data.find(issue => - issue.title.startsWith('DORA Metrics Report -')); - - if (existingIssue) { - // Update existing issue - await github.rest.issues.update({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: existingIssue.number, - title: issueTitle, - body: reportContent - }); - console.log(`Updated existing issue #${existingIssue.number}`); - } else { - // Create new issue - await github.rest.issues.create({ - owner: context.repo.owner, - repo: context.repo.repo, - title: issueTitle, - body: reportContent, - labels: ['metrics', 'dora-metrics'] - }); - console.log('Created new DORA metrics issue'); - } \ No newline at end of file + default_author: github_actions \ No newline at end of file From 8a5a8bf55f49fd011a21a813bd9871fc87d220cd Mon Sep 17 00:00:00 2001 From: Kyongsik Yun Date: Thu, 1 May 2025 12:54:35 -0700 Subject: [PATCH 08/13] metrics testing --- .github/workflows/metrics.yml | 196 ++++++---------------------------- 1 file changed, 33 insertions(+), 163 deletions(-) diff --git a/.github/workflows/metrics.yml b/.github/workflows/metrics.yml index 1936730..eefc866 100644 --- a/.github/workflows/metrics.yml +++ b/.github/workflows/metrics.yml @@ -1,36 +1,31 @@ name: DORA Metrics on: + # Schedule to run weekly schedule: - cron: '0 0 * * 0' # Run at midnight every Sunday - workflow_dispatch: # Allow manual trigger + # Allow manual triggering + workflow_dispatch: jobs: collect-metrics: runs-on: ubuntu-latest - permissions: - actions: read - contents: write - pull-requests: read - issues: read - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Create directory for badges - run: mkdir -p .github/badges - + # No external actions - just direct shell commands - name: Calculate DORA Metrics - id: calculate-metrics run: | + # Create directory for badge files + mkdir -p .github/badges + + # Clone the repository to access its history + git clone https://github.com/${{ github.repository }}.git repo + cd repo + # Get date 30 days ago in ISO format THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") - # Calculate Deployment Frequency + # Calculate deployment frequency (using git commits as a proxy) echo "Calculating Deployment Frequency..." - DEPLOY_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/${{ github.repository }}/actions/runs?status=completed&event=push&branch=main&created=>$THIRTY_DAYS_AGO" | \ - jq '.workflow_runs | length') + DEPLOY_COUNT=$(git log --since="30 days ago" --pretty=format:"%h" | wc -l) if [ "$DEPLOY_COUNT" -gt 0 ]; then DEPLOY_PER_DAY=$(echo "scale=2; $DEPLOY_COUNT / 30" | bc) @@ -42,103 +37,18 @@ jobs: DEPLOY_PER_WEEK=$(echo "scale=2; $DEPLOY_PER_DAY * 7" | bc) DF_MESSAGE="$DEPLOY_PER_WEEK per week (High)" DF_COLOR="green" - elif (( $(echo "$DEPLOY_PER_DAY >= 0.03" | bc -l) )); then + else DEPLOY_PER_MONTH=$(echo "scale=2; $DEPLOY_PER_DAY * 30" | bc) DF_MESSAGE="$DEPLOY_PER_MONTH per month (Medium)" DF_COLOR="yellow" - else - DEPLOY_PER_MONTH=$(echo "scale=2; $DEPLOY_PER_DAY * 30" | bc) - DF_MESSAGE="$DEPLOY_PER_MONTH per month (Low)" - DF_COLOR="red" fi else DF_MESSAGE="No deployments (Low)" DF_COLOR="red" fi - # Calculate Lead Time for Changes - echo "Calculating Lead Time for Changes..." - MERGED_PRS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/${{ github.repository }}/pulls?state=closed&sort=updated&direction=desc&per_page=30" | \ - jq '[.[] | select(.merged_at != null)]') - - PR_COUNT=$(echo "$MERGED_PRS" | jq 'length') - - if [ "$PR_COUNT" -gt 0 ]; then - TOTAL_HOURS=0 - - for i in $(seq 0 $(($PR_COUNT-1))); do - CREATED=$(echo "$MERGED_PRS" | jq -r ".[$i].created_at") - MERGED=$(echo "$MERGED_PRS" | jq -r ".[$i].merged_at") - - CREATED_TS=$(date -d "$CREATED" +%s) - MERGED_TS=$(date -d "$MERGED" +%s) - - DIFF_SECS=$(($MERGED_TS - $CREATED_TS)) - PR_HOURS=$(echo "scale=2; $DIFF_SECS / 3600" | bc) - - TOTAL_HOURS=$(echo "scale=2; $TOTAL_HOURS + $PR_HOURS" | bc) - done - - AVG_HOURS=$(echo "scale=2; $TOTAL_HOURS / $PR_COUNT" | bc) - - if (( $(echo "$AVG_HOURS < 24" | bc -l) )); then - LT_MESSAGE="$AVG_HOURS hours (Elite)" - LT_COLOR="brightgreen" - elif (( $(echo "$AVG_HOURS < 168" | bc -l) )); then - AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) - LT_MESSAGE="$AVG_DAYS days (High)" - LT_COLOR="green" - elif (( $(echo "$AVG_HOURS < 720" | bc -l) )); then - AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) - LT_MESSAGE="$AVG_DAYS days (Medium)" - LT_COLOR="yellow" - else - AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) - LT_MESSAGE="$AVG_DAYS days (Low)" - LT_COLOR="red" - fi - else - LT_MESSAGE="No PRs" - LT_COLOR="gray" - fi - - # Calculate Change Failure Rate - echo "Calculating Change Failure Rate..." - BUG_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/${{ github.repository }}/issues?state=all&labels=bug&per_page=100" | \ - jq '. | length') - - if [ -z "$BUG_COUNT" ] || [ "$BUG_COUNT" == "null" ]; then - BUG_COUNT=0 - fi - - if [ "$DEPLOY_COUNT" -gt 0 ]; then - FAILURE_RATE=$(echo "scale=2; $BUG_COUNT / $DEPLOY_COUNT * 100" | bc) - - if (( $(echo "$FAILURE_RATE <= 15" | bc -l) )); then - CFR_MESSAGE="$FAILURE_RATE% (Elite)" - CFR_COLOR="brightgreen" - elif (( $(echo "$FAILURE_RATE <= 30" | bc -l) )); then - CFR_MESSAGE="$FAILURE_RATE% (High)" - CFR_COLOR="green" - elif (( $(echo "$FAILURE_RATE <= 45" | bc -l) )); then - CFR_MESSAGE="$FAILURE_RATE% (Medium)" - CFR_COLOR="yellow" - else - CFR_MESSAGE="$FAILURE_RATE% (Low)" - CFR_COLOR="red" - fi - else - CFR_MESSAGE="N/A (No deployments)" - CFR_COLOR="gray" - fi - - # Create badge JSON files - echo "Creating badge files..." - - # Deployment Frequency Badge - cat > .github/badges/deployment-frequency.json << EOF + # Create deployment frequency badge file + cat > ../.github/badges/deployment-frequency.json << EOF { "schemaVersion": 1, "label": "Deployment Frequency", @@ -147,69 +57,29 @@ jobs: } EOF - # Lead Time Badge - cat > .github/badges/lead-time.json << EOF - { - "schemaVersion": 1, - "label": "Lead Time", - "message": "$LT_MESSAGE", - "color": "$LT_COLOR" - } - EOF - - # Change Failure Rate Badge - cat > .github/badges/change-failure-rate.json << EOF - { - "schemaVersion": 1, - "label": "Change Failure Rate", - "message": "$CFR_MESSAGE", - "color": "$CFR_COLOR" - } - EOF - - # Combined DORA Metrics Badge - cat > .github/badges/dora-metrics.json << EOF + # Create a combined DORA metrics badge file + cat > ../.github/badges/dora-metrics.json << EOF { "schemaVersion": 1, "label": "DORA Metrics", - "message": "Tracked Weekly", + "message": "Basic Tracking", "color": "blue" } EOF - # Create Summary Markdown - echo "# DORA Metrics Report" > dora-metrics.md - echo "Generated on $(date)" >> dora-metrics.md - echo "" >> dora-metrics.md - echo "## Deployment Frequency" >> dora-metrics.md - echo "**Value:** $DF_MESSAGE" >> dora-metrics.md - echo "" >> dora-metrics.md - echo "## Lead Time for Changes" >> dora-metrics.md - echo "**Value:** $LT_MESSAGE" >> dora-metrics.md - echo "" >> dora-metrics.md - echo "## Change Failure Rate" >> dora-metrics.md - echo "**Value:** $CFR_MESSAGE" >> dora-metrics.md - echo "" >> dora-metrics.md - echo "## How to Add Badges to Your README" >> dora-metrics.md - echo '```markdown' >> dora-metrics.md - echo "" >> dora-metrics.md - echo "![Deployment Frequency](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/deployment-frequency.json)" >> dora-metrics.md - echo "![Lead Time for Changes](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/lead-time.json)" >> dora-metrics.md - echo "![Change Failure Rate](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/change-failure-rate.json)" >> dora-metrics.md - echo "![DORA Metrics](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/dora-metrics.json)" >> dora-metrics.md - echo '```' >> dora-metrics.md - - # Save metrics report as an artifact - - name: Save DORA Metrics Report - uses: actions/upload-artifact@v3 - with: - name: dora-metrics-report - path: dora-metrics.md + echo "DORA metrics calculation complete" + + # Go back to the original directory + cd .. + + # Display instructions for README badges + echo "Add these badges to your README.md:" + echo "![Deployment Frequency](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/deployment-frequency.json)" + echo "![DORA Metrics](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/dora-metrics.json)" - # Commit and push badge data files - - name: Commit badge data files - uses: EndBug/add-and-commit@v9 + # Store badge files as artifacts + - name: Store badge files + uses: actions/upload-artifact@v2 with: - add: '.github/badges/*.json' - message: 'Update DORA metrics badges [skip ci]' - default_author: github_actions \ No newline at end of file + name: badge-files + path: .github/badges/ \ No newline at end of file From 74f915cfe7a0f7b1b9978b28f01cd55866b96da4 Mon Sep 17 00:00:00 2001 From: Kyongsik Yun Date: Thu, 1 May 2025 13:08:26 -0700 Subject: [PATCH 09/13] metrics testing --- .github/workflows/metrics.yml | 410 +++++++++++++++++++++++++++++++--- 1 file changed, 373 insertions(+), 37 deletions(-) diff --git a/.github/workflows/metrics.yml b/.github/workflows/metrics.yml index eefc866..9d60fb7 100644 --- a/.github/workflows/metrics.yml +++ b/.github/workflows/metrics.yml @@ -9,77 +9,413 @@ on: jobs: collect-metrics: runs-on: ubuntu-latest + permissions: + actions: read + contents: write # Required to commit badge files + issues: read # Required to analyze bug/incident issues + steps: - # No external actions - just direct shell commands + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up directory for badge files + run: mkdir -p .github/badges + - name: Calculate DORA Metrics run: | - # Create directory for badge files - mkdir -p .github/badges - - # Clone the repository to access its history - git clone https://github.com/${{ github.repository }}.git repo - cd repo - # Get date 30 days ago in ISO format THIRTY_DAYS_AGO=$(date -d "30 days ago" -u +"%Y-%m-%dT%H:%M:%SZ") - # Calculate deployment frequency (using git commits as a proxy) + echo "=== Calculating DORA Metrics for Last 30 Days ===" + + #========================================================= + # 1. Deployment Frequency + #========================================================= echo "Calculating Deployment Frequency..." - DEPLOY_COUNT=$(git log --since="30 days ago" --pretty=format:"%h" | wc -l) + # Get pushes to main branch in last 30 days as a proxy for deployments + # Or use your actual deployment workflow runs if available + DEPLOY_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/commits?since=$THIRTY_DAYS_AGO&sha=main" | \ + jq '. | length') + + echo "Total deployments in last 30 days: $DEPLOY_COUNT" + + if [ -z "$DEPLOY_COUNT" ] || [ "$DEPLOY_COUNT" == "null" ]; then + DEPLOY_COUNT=0 + fi + + # Calculate per day/week/month metrics if [ "$DEPLOY_COUNT" -gt 0 ]; then DEPLOY_PER_DAY=$(echo "scale=2; $DEPLOY_COUNT / 30" | bc) + DEPLOY_PER_WEEK=$(echo "scale=2; $DEPLOY_COUNT / 4.3" | bc) + DEPLOY_PER_MONTH="$DEPLOY_COUNT" + + echo "Deployments per day: $DEPLOY_PER_DAY" + echo "Deployments per week: $DEPLOY_PER_WEEK" + # Determine DORA level based on deployment frequency if (( $(echo "$DEPLOY_PER_DAY >= 1" | bc -l) )); then - DF_MESSAGE="$DEPLOY_PER_DAY per day (Elite)" + DF_VALUE="$DEPLOY_PER_DAY per day" + DF_LEVEL="Elite" DF_COLOR="brightgreen" - elif (( $(echo "$DEPLOY_PER_DAY >= 0.14" | bc -l) )); then - DEPLOY_PER_WEEK=$(echo "scale=2; $DEPLOY_PER_DAY * 7" | bc) - DF_MESSAGE="$DEPLOY_PER_WEEK per week (High)" + elif (( $(echo "$DEPLOY_PER_WEEK >= 1" | bc -l) )); then + DF_VALUE="$DEPLOY_PER_WEEK per week" + DF_LEVEL="High" DF_COLOR="green" - else - DEPLOY_PER_MONTH=$(echo "scale=2; $DEPLOY_PER_DAY * 30" | bc) - DF_MESSAGE="$DEPLOY_PER_MONTH per month (Medium)" + elif (( $(echo "$DEPLOY_PER_MONTH >= 1" | bc -l) )); then + DF_VALUE="$DEPLOY_PER_MONTH per month" + DF_LEVEL="Medium" DF_COLOR="yellow" + else + DF_VALUE="$DEPLOY_PER_MONTH per month" + DF_LEVEL="Low" + DF_COLOR="red" fi else - DF_MESSAGE="No deployments (Low)" + DF_VALUE="0 per month" + DF_LEVEL="Low" DF_COLOR="red" fi - # Create deployment frequency badge file - cat > ../.github/badges/deployment-frequency.json << EOF + echo "Deployment Frequency: $DF_VALUE ($DF_LEVEL)" + + #========================================================= + # 2. Lead Time for Changes + #========================================================= + echo "Calculating Lead Time for Changes..." + + # Get merged PRs in the last 30 days + MERGED_PRS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/pulls?state=closed&sort=updated&direction=desc&per_page=100" | \ + jq '[.[] | select(.merged_at != null and .merged_at > "'$THIRTY_DAYS_AGO'")]') + + PR_COUNT=$(echo "$MERGED_PRS" | jq 'length') + echo "Merged PRs in last 30 days: $PR_COUNT" + + if [ "$PR_COUNT" -gt 0 ]; then + TOTAL_HOURS=0 + + for i in $(seq 0 $(($PR_COUNT-1))); do + CREATED=$(echo "$MERGED_PRS" | jq -r ".[$i].created_at") + MERGED=$(echo "$MERGED_PRS" | jq -r ".[$i].merged_at") + + CREATED_TS=$(date -d "$CREATED" +%s) + MERGED_TS=$(date -d "$MERGED" +%s) + + DIFF_SECS=$(($MERGED_TS - $CREATED_TS)) + PR_HOURS=$(echo "scale=2; $DIFF_SECS / 3600" | bc) + + TOTAL_HOURS=$(echo "scale=2; $TOTAL_HOURS + $PR_HOURS" | bc) + done + + AVG_HOURS=$(echo "scale=2; $TOTAL_HOURS / $PR_COUNT" | bc) + echo "Average lead time: $AVG_HOURS hours" + + # Determine DORA level based on lead time + if (( $(echo "$AVG_HOURS < 24" | bc -l) )); then + LT_VALUE="$AVG_HOURS hours" + LT_LEVEL="Elite" + LT_COLOR="brightgreen" + elif (( $(echo "$AVG_HOURS < 168" | bc -l) )); then + AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) + LT_VALUE="$AVG_DAYS days" + LT_LEVEL="High" + LT_COLOR="green" + elif (( $(echo "$AVG_HOURS < 730" | bc -l) )); then + AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) + LT_VALUE="$AVG_DAYS days" + LT_LEVEL="Medium" + LT_COLOR="yellow" + else + AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) + LT_VALUE="$AVG_DAYS days" + LT_LEVEL="Low" + LT_COLOR="red" + fi + else + LT_VALUE="No PRs" + LT_LEVEL="N/A" + LT_COLOR="gray" + fi + + echo "Lead Time: $LT_VALUE ($LT_LEVEL)" + + #========================================================= + # 3. Change Failure Rate + #========================================================= + echo "Calculating Change Failure Rate..." + + # Get bugs/incidents reported in the last 30 days + # (Using issues with "bug" or "incident" labels) + BUG_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/issues?state=all&labels=bug&since=$THIRTY_DAYS_AGO&per_page=100" | \ + jq '. | length') + + INCIDENT_COUNT=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/issues?state=all&labels=incident&since=$THIRTY_DAYS_AGO&per_page=100" | \ + jq '. | length') + + if [ -z "$BUG_COUNT" ] || [ "$BUG_COUNT" == "null" ]; then + BUG_COUNT=0 + fi + + if [ -z "$INCIDENT_COUNT" ] || [ "$INCIDENT_COUNT" == "null" ]; then + INCIDENT_COUNT=0 + fi + + TOTAL_FAILURES=$(($BUG_COUNT + $INCIDENT_COUNT)) + echo "Bugs/incidents in last 30 days: $TOTAL_FAILURES" + + if [ "$DEPLOY_COUNT" -gt 0 ]; then + FAILURE_RATE=$(echo "scale=2; $TOTAL_FAILURES / $DEPLOY_COUNT * 100" | bc) + echo "Change failure rate: $FAILURE_RATE%" + + # Determine DORA level based on failure rate + if (( $(echo "$FAILURE_RATE <= 15" | bc -l) )); then + CFR_VALUE="$FAILURE_RATE%" + CFR_LEVEL="Elite" + CFR_COLOR="brightgreen" + elif (( $(echo "$FAILURE_RATE <= 30" | bc -l) )); then + CFR_VALUE="$FAILURE_RATE%" + CFR_LEVEL="High" + CFR_COLOR="green" + elif (( $(echo "$FAILURE_RATE <= 45" | bc -l) )); then + CFR_VALUE="$FAILURE_RATE%" + CFR_LEVEL="Medium" + CFR_COLOR="yellow" + else + CFR_VALUE="$FAILURE_RATE%" + CFR_LEVEL="Low" + CFR_COLOR="red" + fi + else + CFR_VALUE="N/A (No deployments)" + CFR_LEVEL="N/A" + CFR_COLOR="gray" + fi + + echo "Change Failure Rate: $CFR_VALUE ($CFR_LEVEL)" + + #========================================================= + # 4. Mean Time to Recovery (MTTR) + #========================================================= + echo "Calculating Mean Time to Recovery..." + + # Get closed incidents in the last 30 days + CLOSED_INCIDENTS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/issues?state=closed&labels=incident&per_page=100" | \ + jq '[.[] | select(.closed_at > "'$THIRTY_DAYS_AGO'")]') + + INCIDENT_COUNT=$(echo "$CLOSED_INCIDENTS" | jq 'length') + echo "Closed incidents in last 30 days: $INCIDENT_COUNT" + + if [ "$INCIDENT_COUNT" -gt 0 ]; then + TOTAL_MINUTES=0 + + for i in $(seq 0 $(($INCIDENT_COUNT-1))); do + CREATED=$(echo "$CLOSED_INCIDENTS" | jq -r ".[$i].created_at") + CLOSED=$(echo "$CLOSED_INCIDENTS" | jq -r ".[$i].closed_at") + + CREATED_TS=$(date -d "$CREATED" +%s) + CLOSED_TS=$(date -d "$CLOSED" +%s) + + DIFF_MINS=$(echo "scale=2; ($CLOSED_TS - $CREATED_TS) / 60" | bc) + TOTAL_MINUTES=$(echo "scale=2; $TOTAL_MINUTES + $DIFF_MINS" | bc) + done + + AVG_MINUTES=$(echo "scale=2; $TOTAL_MINUTES / $INCIDENT_COUNT" | bc) + AVG_HOURS=$(echo "scale=2; $AVG_MINUTES / 60" | bc) + echo "Average recovery time: $AVG_HOURS hours" + + # Determine DORA level based on recovery time + if (( $(echo "$AVG_HOURS < 1" | bc -l) )); then + MTTR_VALUE="$AVG_MINUTES minutes" + MTTR_LEVEL="Elite" + MTTR_COLOR="brightgreen" + elif (( $(echo "$AVG_HOURS < 24" | bc -l) )); then + MTTR_VALUE="$AVG_HOURS hours" + MTTR_LEVEL="High" + MTTR_COLOR="green" + elif (( $(echo "$AVG_HOURS < 168" | bc -l) )); then + MTTR_VALUE="$AVG_HOURS hours" + MTTR_LEVEL="Medium" + MTTR_COLOR="yellow" + else + AVG_DAYS=$(echo "scale=2; $AVG_HOURS / 24" | bc) + MTTR_VALUE="$AVG_DAYS days" + MTTR_LEVEL="Low" + MTTR_COLOR="red" + fi + else + MTTR_VALUE="N/A (No incidents)" + MTTR_LEVEL="N/A" + MTTR_COLOR="gray" + fi + + echo "Mean Time to Recovery: $MTTR_VALUE ($MTTR_LEVEL)" + + #========================================================= + # Generate Badge Files + #========================================================= + echo "Generating badge files..." + + # Deployment Frequency Badge + cat > .github/badges/deployment-frequency.json << EOF { "schemaVersion": 1, "label": "Deployment Frequency", - "message": "$DF_MESSAGE", + "message": "$DF_VALUE ($DF_LEVEL)", "color": "$DF_COLOR" } EOF - # Create a combined DORA metrics badge file - cat > ../.github/badges/dora-metrics.json << EOF + # Lead Time Badge + cat > .github/badges/lead-time.json << EOF + { + "schemaVersion": 1, + "label": "Lead Time", + "message": "$LT_VALUE ($LT_LEVEL)", + "color": "$LT_COLOR" + } + EOF + + # Change Failure Rate Badge + cat > .github/badges/change-failure-rate.json << EOF + { + "schemaVersion": 1, + "label": "Change Failure Rate", + "message": "$CFR_VALUE ($CFR_LEVEL)", + "color": "$CFR_COLOR" + } + EOF + + # MTTR Badge + cat > .github/badges/mttr.json << EOF + { + "schemaVersion": 1, + "label": "MTTR", + "message": "$MTTR_VALUE ($MTTR_LEVEL)", + "color": "$MTTR_COLOR" + } + EOF + + # Combined DORA Metrics Badge + cat > .github/badges/dora-metrics.json << EOF { "schemaVersion": 1, "label": "DORA Metrics", - "message": "Basic Tracking", + "message": "DF: $DF_LEVEL | LT: $LT_LEVEL | CFR: $CFR_LEVEL | MTTR: $MTTR_LEVEL", "color": "blue" } EOF - echo "DORA metrics calculation complete" + echo "Badge files generated successfully!" + + #========================================================= + # Generate Metrics Report + #========================================================= + echo "Generating metrics report..." + + cat > dora-metrics-report.md << EOF + # DORA Metrics Report + + *Generated on $(date)* + + ## Summary + + | Metric | Value | Performance Level | + |--------|-------|------------------| + | Deployment Frequency | $DF_VALUE | $DF_LEVEL | + | Lead Time for Changes | $LT_VALUE | $LT_LEVEL | + | Change Failure Rate | $CFR_VALUE | $CFR_LEVEL | + | Mean Time to Recovery | $MTTR_VALUE | $MTTR_LEVEL | + + ## How to Add Badges to Your README + + Add the following to your README.md: + + \`\`\`markdown + ![Deployment Frequency](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/deployment-frequency.json) + ![Lead Time](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/lead-time.json) + ![Change Failure Rate](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/change-failure-rate.json) + ![MTTR](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/mttr.json) + ![DORA Metrics](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/dora-metrics.json) + \`\`\` + + ## Details + + ### Deployment Frequency + + - Total deployments in last 30 days: $DEPLOY_COUNT + - Deployments per day: $DEPLOY_PER_DAY + - Performance level: $DF_LEVEL + + ### Lead Time for Changes + + - Merged PRs in last 30 days: $PR_COUNT + - Average lead time: $LT_VALUE + - Performance level: $LT_LEVEL + + ### Change Failure Rate + + - Total failures in last 30 days: $TOTAL_FAILURES + - Change failure rate: $CFR_VALUE + - Performance level: $CFR_LEVEL + + ### Mean Time to Recovery + + - Closed incidents in last 30 days: $INCIDENT_COUNT + - Average recovery time: $MTTR_VALUE + - Performance level: $MTTR_LEVEL + EOF + + echo "Metrics report generated successfully!" + + - name: Create GitHub Issue with Report + run: | + REPORT=$(cat dora-metrics-report.md) + TODAY=$(date +"%Y-%m-%d") + + # Create or update issue with metrics report + ISSUE_DATA=$(cat << EOF + { + "title": "DORA Metrics Report - $TODAY", + "body": $REPORT, + "labels": ["metrics", "dora"] + } + EOF + ) + + # Try to find existing open issue with the same label + EXISTING_ISSUES=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + "https://api.github.com/repos/${{ github.repository }}/issues?state=open&labels=dora") - # Go back to the original directory - cd .. + ISSUE_COUNT=$(echo "$EXISTING_ISSUES" | jq 'length') - # Display instructions for README badges - echo "Add these badges to your README.md:" - echo "![Deployment Frequency](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/deployment-frequency.json)" - echo "![DORA Metrics](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/${{ github.repository }}/main/.github/badges/dora-metrics.json)" + if [ "$ISSUE_COUNT" -gt 0 ]; then + # Update existing issue + ISSUE_NUMBER=$(echo "$EXISTING_ISSUES" | jq -r '.[0].number') + echo "Updating existing issue #$ISSUE_NUMBER" + + curl -s -X PATCH -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + -H "Accept: application/vnd.github.v3+json" \ + -d "$ISSUE_DATA" \ + "https://api.github.com/repos/${{ github.repository }}/issues/$ISSUE_NUMBER" + else + # Create new issue + echo "Creating new DORA metrics issue" + + curl -s -X POST -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + -H "Accept: application/vnd.github.v3+json" \ + -d "$ISSUE_DATA" \ + "https://api.github.com/repos/${{ github.repository }}/issues" + fi - # Store badge files as artifacts - - name: Store badge files - uses: actions/upload-artifact@v2 - with: - name: badge-files - path: .github/badges/ \ No newline at end of file + - name: Commit badge files + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git add .github/badges/ + git commit -m "Update DORA metrics badges [skip ci]" || echo "No changes to commit" + git push \ No newline at end of file From e44dd0c0374bbec91e497ebe8883c6f559ecd3ea Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 1 May 2025 20:09:02 +0000 Subject: [PATCH 10/13] Update DORA metrics badges [skip ci] --- .github/badges/change-failure-rate.json | 6 ++++++ .github/badges/deployment-frequency.json | 6 ++++++ .github/badges/dora-metrics.json | 6 ++++++ .github/badges/lead-time.json | 6 ++++++ .github/badges/mttr.json | 6 ++++++ 5 files changed, 30 insertions(+) create mode 100644 .github/badges/change-failure-rate.json create mode 100644 .github/badges/deployment-frequency.json create mode 100644 .github/badges/dora-metrics.json create mode 100644 .github/badges/lead-time.json create mode 100644 .github/badges/mttr.json diff --git a/.github/badges/change-failure-rate.json b/.github/badges/change-failure-rate.json new file mode 100644 index 0000000..a6f02d5 --- /dev/null +++ b/.github/badges/change-failure-rate.json @@ -0,0 +1,6 @@ +{ + "schemaVersion": 1, + "label": "Change Failure Rate", + "message": "0% (Elite)", + "color": "brightgreen" +} diff --git a/.github/badges/deployment-frequency.json b/.github/badges/deployment-frequency.json new file mode 100644 index 0000000..5107533 --- /dev/null +++ b/.github/badges/deployment-frequency.json @@ -0,0 +1,6 @@ +{ + "schemaVersion": 1, + "label": "Deployment Frequency", + "message": "5.11 per week (High)", + "color": "green" +} diff --git a/.github/badges/dora-metrics.json b/.github/badges/dora-metrics.json new file mode 100644 index 0000000..989b81a --- /dev/null +++ b/.github/badges/dora-metrics.json @@ -0,0 +1,6 @@ +{ + "schemaVersion": 1, + "label": "DORA Metrics", + "message": "DF: High | LT: N/A | CFR: Elite | MTTR: N/A", + "color": "blue" +} diff --git a/.github/badges/lead-time.json b/.github/badges/lead-time.json new file mode 100644 index 0000000..dd719c0 --- /dev/null +++ b/.github/badges/lead-time.json @@ -0,0 +1,6 @@ +{ + "schemaVersion": 1, + "label": "Lead Time", + "message": "No PRs (N/A)", + "color": "gray" +} diff --git a/.github/badges/mttr.json b/.github/badges/mttr.json new file mode 100644 index 0000000..8197419 --- /dev/null +++ b/.github/badges/mttr.json @@ -0,0 +1,6 @@ +{ + "schemaVersion": 1, + "label": "MTTR", + "message": "N/A (No incidents) (N/A)", + "color": "gray" +} From b42e2f06e361f877ca14a0c1b7b55a3aa93b5125 Mon Sep 17 00:00:00 2001 From: Kyongsik Yun Date: Thu, 1 May 2025 14:15:09 -0700 Subject: [PATCH 11/13] automated metrics workflow --- .github/workflows/metrics.yml | 2 +- README.md | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/metrics.yml b/.github/workflows/metrics.yml index 9d60fb7..bcec252 100644 --- a/.github/workflows/metrics.yml +++ b/.github/workflows/metrics.yml @@ -305,7 +305,7 @@ jobs: { "schemaVersion": 1, "label": "DORA Metrics", - "message": "DF: $DF_LEVEL | LT: $LT_LEVEL | CFR: $CFR_LEVEL | MTTR: $MTTR_LEVEL", + "message": "Deployment Frequency: $DF_LEVEL | Lead Time: $LT_LEVEL | Change Failure Rate: $CFR_LEVEL | Mean Time to Recovery: $MTTR_LEVEL", "color": "blue" } EOF diff --git a/README.md b/README.md index cbb4c0c..4c595ce 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,12 @@ -[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](code_of_conduct.md) [![SLIM](https://img.shields.io/badge/Best%20Practices%20from-SLIM-blue)](https://nasa-ammos.github.io/slim/) +[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](code_of_conduct.md) [![SLIM](https://img.shields.io/badge/Best%20Practices%20from-SLIM-blue)](https://nasa-ammos.github.io/slim/) ![DORA Metrics](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/yunks128/slim-leaderboard/main/.github/badges/dora-metrics.json) + + + This repository serves to create a leaderboard report that ranks and showcases how well a given set of GitHub repositories follow [SLIM best practices](https://nasa-ammos.github.io/slim/). @@ -37,6 +42,7 @@ This repository serves to create a leaderboard report that ranks and showcases h - [Changelog](#changelog) - [Frequently Asked Questions (FAQ)](#frequently-asked-questions-faq) - [Contributing](#contributing) + - [Local Development](#local-development) - [License](#license) - [Support](#support) From d7fff026d9935ef560a2c2efee5d4827af726eb8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 1 May 2025 21:16:08 +0000 Subject: [PATCH 12/13] Update DORA metrics badges [skip ci] --- .github/badges/deployment-frequency.json | 2 +- .github/badges/dora-metrics.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/badges/deployment-frequency.json b/.github/badges/deployment-frequency.json index 5107533..2dad33e 100644 --- a/.github/badges/deployment-frequency.json +++ b/.github/badges/deployment-frequency.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, "label": "Deployment Frequency", - "message": "5.11 per week (High)", + "message": "5.58 per week (High)", "color": "green" } diff --git a/.github/badges/dora-metrics.json b/.github/badges/dora-metrics.json index 989b81a..6fd2404 100644 --- a/.github/badges/dora-metrics.json +++ b/.github/badges/dora-metrics.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, "label": "DORA Metrics", - "message": "DF: High | LT: N/A | CFR: Elite | MTTR: N/A", + "message": "Deployment Frequency: High | Lead Time: N/A | Change Failure Rate: Elite | Mean Time to Recovery: N/A", "color": "blue" } From f02d95083f648b2f9416c8107b6f7b3e151640e6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 4 May 2025 01:55:03 +0000 Subject: [PATCH 13/13] Update DORA metrics badges [skip ci] --- .github/badges/deployment-frequency.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/badges/deployment-frequency.json b/.github/badges/deployment-frequency.json index 2dad33e..6d7f36b 100644 --- a/.github/badges/deployment-frequency.json +++ b/.github/badges/deployment-frequency.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, "label": "Deployment Frequency", - "message": "5.58 per week (High)", + "message": "5.81 per week (High)", "color": "green" }