From ead985a741aac14b5bd82b8b04da8db3bceb6acf Mon Sep 17 00:00:00 2001 From: Philipp Wagner Date: Wed, 8 Jul 2026 21:35:15 +0200 Subject: [PATCH] Website Build with Roadmap. --- .github/workflows/website-build.yml | 21 +- .github/workflows/website-roadmap-rebuild.yml | 58 ++++++ website/_site/about/index.html | 6 +- website/_site/assets/css/main.css | 5 + website/_site/contact/index.html | 6 +- website/_site/download/index.html | 6 +- website/_site/faq/index.html | 6 +- website/_site/features/airscout/index.html | 6 +- website/_site/features/dual-chat/index.html | 6 +- website/_site/features/dx-cluster/index.html | 6 +- website/_site/features/index.html | 6 +- website/_site/features/log-sync/index.html | 6 +- website/_site/features/macros/index.html | 6 +- .../_site/features/priority-score/index.html | 6 +- .../_site/features/sked-reminder/index.html | 6 +- website/_site/features/timeline/index.html | 6 +- website/_site/index.html | 6 +- website/_site/legal-notice/index.html | 6 +- .../manual/de/airscout-integration/index.html | 6 +- .../manual/de/benutzeroberflaeche/index.html | 6 +- website/_site/manual/de/changelog/index.html | 6 +- .../manual/de/dx-cluster-server/index.html | 6 +- website/_site/manual/de/funktionen/index.html | 6 +- website/_site/manual/de/home/index.html | 6 +- website/_site/manual/de/index.html | 6 +- .../_site/manual/de/installation/index.html | 6 +- .../_site/manual/de/konfiguration/index.html | 6 +- .../manual/de/log-synchronisation/index.html | 6 +- .../manual/de/makros-und-variablen/index.html | 6 +- .../manual/en/airscout-integration/index.html | 6 +- website/_site/manual/en/changelog/index.html | 6 +- .../_site/manual/en/configuration/index.html | 6 +- .../manual/en/dx-cluster-server/index.html | 6 +- website/_site/manual/en/features/index.html | 6 +- website/_site/manual/en/home/index.html | 6 +- website/_site/manual/en/index.html | 6 +- .../_site/manual/en/installation/index.html | 6 +- website/_site/manual/en/log-sync/index.html | 6 +- .../manual/en/macros-and-variables/index.html | 6 +- .../_site/manual/en/user-interface/index.html | 6 +- website/_site/manual/index.html | 6 +- .../news/2026-07-website-launch/index.html | 6 +- website/_site/news/index.html | 6 +- website/_site/privacy/index.html | 6 +- website/_site/roadmap/index.html | 189 ++++++++++++++++++ website/_site/screenshots/index.html | 6 +- website/_site/sitemap.xml | 4 + website/src/_data/navigation.js | 1 + website/src/_data/roadmap.js | 84 ++++++++ website/src/assets/css/main.css | 5 + website/src/roadmap/index.njk | 50 +++++ 51 files changed, 540 insertions(+), 129 deletions(-) create mode 100644 .github/workflows/website-roadmap-rebuild.yml create mode 100644 website/_site/roadmap/index.html create mode 100644 website/src/_data/roadmap.js create mode 100644 website/src/roadmap/index.njk diff --git a/.github/workflows/website-build.yml b/.github/workflows/website-build.yml index 7c0123f..ddafb5d 100644 --- a/.github/workflows/website-build.yml +++ b/.github/workflows/website-build.yml @@ -22,10 +22,10 @@ env: concurrency: group: website-build-${{ github.ref }} - cancel-in-progress: true + cancel-in-progress: ${{ github.event_name == 'pull_request' }} permissions: - contents: read + contents: write jobs: build-website: @@ -50,10 +50,25 @@ jobs: - name: Build website working-directory: website run: npm run build + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload website artifact uses: actions/upload-artifact@v4.3.4 with: name: kst4contest-website path: website/_site/ - retention-days: 7 \ No newline at end of file + retention-days: 7 + + - name: Commit rebuilt site + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add website/_site + if git diff --cached --quiet; then + echo "No changes to commit" + else + git commit -m "chore: rebuild website [skip ci]" + git push + fi \ No newline at end of file diff --git a/.github/workflows/website-roadmap-rebuild.yml b/.github/workflows/website-roadmap-rebuild.yml new file mode 100644 index 0000000..b103840 --- /dev/null +++ b/.github/workflows/website-roadmap-rebuild.yml @@ -0,0 +1,58 @@ +name: Rebuild Roadmap + +on: + issues: + types: [opened, edited, closed, reopened, labeled, unlabeled, milestoned, demilestoned] + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + +concurrency: + group: website-build-${{ github.ref }} + cancel-in-progress: false + +permissions: + contents: write + +jobs: + rebuild-roadmap: + name: Rebuild website roadmap + runs-on: ubuntu-latest + # Only worth a rebuild if the "enhancement" label is involved: either the + # issue currently carries it, or this event just added/removed it. + if: contains(github.event.issue.labels.*.name, 'enhancement') || github.event.label.name == 'enhancement' + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + with: + ref: main + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "24" + cache: npm + cache-dependency-path: website/package-lock.json + + - name: Install dependencies + working-directory: website + run: npm ci + + - name: Build website + working-directory: website + run: npm run build + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Commit rebuilt site + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add website/_site + if git diff --cached --quiet; then + echo "No changes to commit" + else + git commit -m "chore: rebuild website roadmap [skip ci]" + git push + fi diff --git a/website/_site/about/index.html b/website/_site/about/index.html index 31b0fde..2d9ae60 100644 --- a/website/_site/about/index.html +++ b/website/_site/about/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/assets/css/main.css b/website/_site/assets/css/main.css index 31e1a8c..763e54e 100644 --- a/website/_site/assets/css/main.css +++ b/website/_site/assets/css/main.css @@ -415,6 +415,11 @@ a:hover { color: var(--muted); } +.roadmap-done a { + color: var(--muted); + text-decoration: line-through; +} + .feature-icon { font-size: 2rem; margin-bottom: 14px; diff --git a/website/_site/contact/index.html b/website/_site/contact/index.html index 486479e..c53435a 100644 --- a/website/_site/contact/index.html +++ b/website/_site/contact/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/download/index.html b/website/_site/download/index.html index 5e9c9b3..21367fe 100644 --- a/website/_site/download/index.html +++ b/website/_site/download/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/faq/index.html b/website/_site/faq/index.html index 89c98f1..e336691 100644 --- a/website/_site/faq/index.html +++ b/website/_site/faq/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/features/airscout/index.html b/website/_site/features/airscout/index.html index 8d1370c..d02d239 100644 --- a/website/_site/features/airscout/index.html +++ b/website/_site/features/airscout/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/features/dual-chat/index.html b/website/_site/features/dual-chat/index.html index cf7cfd8..2a68ae2 100644 --- a/website/_site/features/dual-chat/index.html +++ b/website/_site/features/dual-chat/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/features/dx-cluster/index.html b/website/_site/features/dx-cluster/index.html index b7b3b0a..db93bb7 100644 --- a/website/_site/features/dx-cluster/index.html +++ b/website/_site/features/dx-cluster/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/features/index.html b/website/_site/features/index.html index 0b755b6..e7094cc 100644 --- a/website/_site/features/index.html +++ b/website/_site/features/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/features/log-sync/index.html b/website/_site/features/log-sync/index.html index 45b3d03..b0a2f3f 100644 --- a/website/_site/features/log-sync/index.html +++ b/website/_site/features/log-sync/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/features/macros/index.html b/website/_site/features/macros/index.html index 378fc64..d2c479f 100644 --- a/website/_site/features/macros/index.html +++ b/website/_site/features/macros/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/features/priority-score/index.html b/website/_site/features/priority-score/index.html index d740c41..9bd52cb 100644 --- a/website/_site/features/priority-score/index.html +++ b/website/_site/features/priority-score/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/features/sked-reminder/index.html b/website/_site/features/sked-reminder/index.html index 935d76e..0d7f584 100644 --- a/website/_site/features/sked-reminder/index.html +++ b/website/_site/features/sked-reminder/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/features/timeline/index.html b/website/_site/features/timeline/index.html index 9bde141..5087cc5 100644 --- a/website/_site/features/timeline/index.html +++ b/website/_site/features/timeline/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/index.html b/website/_site/index.html index bf61073..8071582 100644 --- a/website/_site/index.html +++ b/website/_site/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/legal-notice/index.html b/website/_site/legal-notice/index.html index d300e27..f9884d9 100644 --- a/website/_site/legal-notice/index.html +++ b/website/_site/legal-notice/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/airscout-integration/index.html b/website/_site/manual/de/airscout-integration/index.html index d8c58ab..0254a03 100644 --- a/website/_site/manual/de/airscout-integration/index.html +++ b/website/_site/manual/de/airscout-integration/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/benutzeroberflaeche/index.html b/website/_site/manual/de/benutzeroberflaeche/index.html index 49d19bc..3ffe93b 100644 --- a/website/_site/manual/de/benutzeroberflaeche/index.html +++ b/website/_site/manual/de/benutzeroberflaeche/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/changelog/index.html b/website/_site/manual/de/changelog/index.html index acbfc7f..2a2bf75 100644 --- a/website/_site/manual/de/changelog/index.html +++ b/website/_site/manual/de/changelog/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/dx-cluster-server/index.html b/website/_site/manual/de/dx-cluster-server/index.html index b5e3a23..c668bf4 100644 --- a/website/_site/manual/de/dx-cluster-server/index.html +++ b/website/_site/manual/de/dx-cluster-server/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/funktionen/index.html b/website/_site/manual/de/funktionen/index.html index ba733a4..c339986 100644 --- a/website/_site/manual/de/funktionen/index.html +++ b/website/_site/manual/de/funktionen/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/home/index.html b/website/_site/manual/de/home/index.html index b37e516..160938e 100644 --- a/website/_site/manual/de/home/index.html +++ b/website/_site/manual/de/home/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/index.html b/website/_site/manual/de/index.html index 6382f38..a903b7a 100644 --- a/website/_site/manual/de/index.html +++ b/website/_site/manual/de/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/installation/index.html b/website/_site/manual/de/installation/index.html index 690ee07..8cca68d 100644 --- a/website/_site/manual/de/installation/index.html +++ b/website/_site/manual/de/installation/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/konfiguration/index.html b/website/_site/manual/de/konfiguration/index.html index 4aa416f..6306910 100644 --- a/website/_site/manual/de/konfiguration/index.html +++ b/website/_site/manual/de/konfiguration/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/log-synchronisation/index.html b/website/_site/manual/de/log-synchronisation/index.html index 503009d..4aee547 100644 --- a/website/_site/manual/de/log-synchronisation/index.html +++ b/website/_site/manual/de/log-synchronisation/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/de/makros-und-variablen/index.html b/website/_site/manual/de/makros-und-variablen/index.html index e323470..7f55571 100644 --- a/website/_site/manual/de/makros-und-variablen/index.html +++ b/website/_site/manual/de/makros-und-variablen/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/airscout-integration/index.html b/website/_site/manual/en/airscout-integration/index.html index a666900..5d92439 100644 --- a/website/_site/manual/en/airscout-integration/index.html +++ b/website/_site/manual/en/airscout-integration/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/changelog/index.html b/website/_site/manual/en/changelog/index.html index 596e9ab..0be752a 100644 --- a/website/_site/manual/en/changelog/index.html +++ b/website/_site/manual/en/changelog/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/configuration/index.html b/website/_site/manual/en/configuration/index.html index 2c9fde5..86e69a1 100644 --- a/website/_site/manual/en/configuration/index.html +++ b/website/_site/manual/en/configuration/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/dx-cluster-server/index.html b/website/_site/manual/en/dx-cluster-server/index.html index 43aebaa..6d7a499 100644 --- a/website/_site/manual/en/dx-cluster-server/index.html +++ b/website/_site/manual/en/dx-cluster-server/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/features/index.html b/website/_site/manual/en/features/index.html index 851cdf2..d592c16 100644 --- a/website/_site/manual/en/features/index.html +++ b/website/_site/manual/en/features/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/home/index.html b/website/_site/manual/en/home/index.html index 2691068..7481287 100644 --- a/website/_site/manual/en/home/index.html +++ b/website/_site/manual/en/home/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/index.html b/website/_site/manual/en/index.html index 176de5c..b016c12 100644 --- a/website/_site/manual/en/index.html +++ b/website/_site/manual/en/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/installation/index.html b/website/_site/manual/en/installation/index.html index 315512c..48afc27 100644 --- a/website/_site/manual/en/installation/index.html +++ b/website/_site/manual/en/installation/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/log-sync/index.html b/website/_site/manual/en/log-sync/index.html index 473be46..f19810d 100644 --- a/website/_site/manual/en/log-sync/index.html +++ b/website/_site/manual/en/log-sync/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/macros-and-variables/index.html b/website/_site/manual/en/macros-and-variables/index.html index 7873be4..2f427b2 100644 --- a/website/_site/manual/en/macros-and-variables/index.html +++ b/website/_site/manual/en/macros-and-variables/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/en/user-interface/index.html b/website/_site/manual/en/user-interface/index.html index 92bae8b..7c421f7 100644 --- a/website/_site/manual/en/user-interface/index.html +++ b/website/_site/manual/en/user-interface/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/manual/index.html b/website/_site/manual/index.html index 9a8baf7..39887a2 100644 --- a/website/_site/manual/index.html +++ b/website/_site/manual/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/news/2026-07-website-launch/index.html b/website/_site/news/2026-07-website-launch/index.html index 53a286f..72032dc 100644 --- a/website/_site/news/2026-07-website-launch/index.html +++ b/website/_site/news/2026-07-website-launch/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/news/index.html b/website/_site/news/index.html index 4b8ed6b..85c9520 100644 --- a/website/_site/news/index.html +++ b/website/_site/news/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/privacy/index.html b/website/_site/privacy/index.html index 77daec6..e48a823 100644 --- a/website/_site/privacy/index.html +++ b/website/_site/privacy/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/roadmap/index.html b/website/_site/roadmap/index.html new file mode 100644 index 0000000..8be32b9 --- /dev/null +++ b/website/_site/roadmap/index.html @@ -0,0 +1,189 @@ + + + + + KST4Contest Roadmap + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+

Roadmap

+

What's planned next.

+

+ Generated automatically from the "enhancement" issues in our + GitHub repository, + grouped by their target version milestone. +

+
+ +
+ + + + + + + + + +
+ +
+ + + + \ No newline at end of file diff --git a/website/_site/screenshots/index.html b/website/_site/screenshots/index.html index 1fdc86d..ee1bdb9 100644 --- a/website/_site/screenshots/index.html +++ b/website/_site/screenshots/index.html @@ -17,7 +17,7 @@ - + @@ -47,12 +47,12 @@ Screenshots - Download - Manual News + Roadmap + About FAQ diff --git a/website/_site/sitemap.xml b/website/_site/sitemap.xml index c7cbbc2..d6789b7 100644 --- a/website/_site/sitemap.xml +++ b/website/_site/sitemap.xml @@ -88,4 +88,8 @@ https://kst4contest.hamradioonline.de/download/ 2026-07-07 + + https://kst4contest.hamradioonline.de/roadmap/ + 2026-07-08 + \ No newline at end of file diff --git a/website/src/_data/navigation.js b/website/src/_data/navigation.js index 74293d4..6244641 100644 --- a/website/src/_data/navigation.js +++ b/website/src/_data/navigation.js @@ -4,6 +4,7 @@ module.exports = [ { title: "Screenshots", url: "/screenshots/" }, { title: "Manual", url: "/manual/" }, { title: "News", url: "/news/" }, + { title: "Roadmap", url: "/roadmap/" }, { title: "About", url: "/about/" }, { title: "FAQ", url: "/faq/" } ]; \ No newline at end of file diff --git a/website/src/_data/roadmap.js b/website/src/_data/roadmap.js new file mode 100644 index 0000000..50e400d --- /dev/null +++ b/website/src/_data/roadmap.js @@ -0,0 +1,84 @@ +const REPO = "praktimarc/kst4contest"; +const API = `https://api.github.com/repos/${REPO}`; + +async function githubGet(path) { + const headers = { Accept: "application/vnd.github+json" }; + if (process.env.GITHUB_TOKEN) { + headers.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`; + } + const res = await fetch(`${API}${path}`, { headers }); + if (!res.ok) { + throw new Error(`GitHub API ${path} failed: ${res.status}`); + } + return res.json(); +} + +// Builds the roadmap from all GitHub issues tagged "enhancement", grouped by +// their version milestone (open or already released). Issues without a +// milestone are shown as planned but with no assigned version yet. Issues +// closed as "not planned" are kept, struck through and labeled accordingly. +// Falls back to an empty list if the API is unreachable (e.g. offline build) +// so the site build never fails. +module.exports = async function () { + try { + const issues = await githubGet( + "/issues?labels=enhancement&state=all&per_page=100" + ); + + const groups = new Map(); + + for (const issue of issues) { + if (issue.pull_request) continue; + + const milestone = issue.milestone; + const key = milestone ? milestone.number : "unscheduled"; + + if (!groups.has(key)) { + groups.set(key, { + version: milestone ? milestone.title : null, + description: milestone ? milestone.description : null, + url: milestone ? milestone.html_url : null, + released: milestone ? milestone.state === "closed" : false, + dueOn: milestone && milestone.due_on ? new Date(milestone.due_on) : null, + releasedOn: milestone && milestone.closed_at ? new Date(milestone.closed_at) : null, + enhancements: [] + }); + } + + const notPlanned = issue.state === "closed" && issue.state_reason === "not_planned"; + + groups.get(key).enhancements.push({ + title: issue.title, + url: issue.html_url, + done: issue.state === "closed" && !notPlanned, + notPlanned + }); + } + + const versions = [...groups.values()].filter((v) => v.enhancements.length > 0); + + // Order: upcoming dated versions first (soonest due date), then + // upcoming undated versions, then already released versions (newest + // first), unscheduled enhancements at the very end. + versions.sort((a, b) => { + if (!a.version) return 1; + if (!b.version) return -1; + if (a.released !== b.released) return a.released ? 1 : -1; + + if (!a.released) { + if (a.dueOn && b.dueOn) return a.dueOn - b.dueOn; + if (a.dueOn) return -1; + if (b.dueOn) return 1; + return a.version.localeCompare(b.version); + } + + if (a.releasedOn && b.releasedOn) return b.releasedOn - a.releasedOn; + return b.version.localeCompare(a.version); + }); + + return versions; + } catch (err) { + console.warn(`[roadmap] Could not load GitHub issues: ${err.message}`); + return []; + } +}; diff --git a/website/src/assets/css/main.css b/website/src/assets/css/main.css index 31e1a8c..763e54e 100644 --- a/website/src/assets/css/main.css +++ b/website/src/assets/css/main.css @@ -415,6 +415,11 @@ a:hover { color: var(--muted); } +.roadmap-done a { + color: var(--muted); + text-decoration: line-through; +} + .feature-icon { font-size: 2rem; margin-bottom: 14px; diff --git a/website/src/roadmap/index.njk b/website/src/roadmap/index.njk new file mode 100644 index 0000000..e023eb9 --- /dev/null +++ b/website/src/roadmap/index.njk @@ -0,0 +1,50 @@ +--- +layout: base.njk +title: KST4Contest Roadmap +description: Planned enhancements for upcoming KST4Contest versions, generated from GitHub milestones and issues. +--- + +
+

Roadmap

+

What's planned next.

+

+ Generated automatically from the "enhancement" issues in our + GitHub repository, + grouped by their target version milestone. +

+
+ +
+ {% if roadmap.length == 0 %} +
+

No planned enhancements are currently assigned to a version milestone.

+

+ See all open feature requests on + GitHub. +

+
+ {% endif %} + + {% for version in roadmap %} +
+ {% if version.version %} +

{{ version.version }}

+ {% else %} +

Planned, no version yet

+ {% endif %} + {% if version.description %}

{{ version.description }}

{% endif %} + {% if version.released %} +

Released{% if version.releasedOn %} {{ version.releasedOn | readableDate }}{% endif %}

+ {% elif version.dueOn %} +

Due {{ version.dueOn | readableDate }}

+ {% endif %} +
    + {% for item in version.enhancements %} + + {{ item.title }}{% if item.done %} ✓{% endif %}{% if item.notPlanned %} (not planned){% endif %} + + {% endfor %} +
+
+ {% endfor %} +