From d5ae653ddd266c79460ea82d7e6ec7d48ff653e5 Mon Sep 17 00:00:00 2001 From: Kjeld Schouten Date: Thu, 23 Apr 2026 14:27:02 +0200 Subject: [PATCH] feat(ci): move chart-docs to forgetool --- .github/scripts/chart-docs.sh | 188 -------------------------- .github/workflows/charts-release.yaml | 10 +- 2 files changed, 1 insertion(+), 197 deletions(-) delete mode 100755 .github/scripts/chart-docs.sh diff --git a/.github/scripts/chart-docs.sh b/.github/scripts/chart-docs.sh deleted file mode 100755 index 3ee34eb158d..00000000000 --- a/.github/scripts/chart-docs.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/bash -[ "$DEBUG" == 'true' ] && set -x -[ "$STRICT" == 'true' ] && set -e - -docs_base="website/truecharts/src/content/docs/charts" -tmp_docs_base="tmpwebsite/src/content/docs/charts" -safe_docs=( - "CHANGELOG.md" -) - -keep_docs_safe() { - local train="$1" - local chart="$2" - - mkdir -p "$tmp_docs_base/${train}/${chart}" - echo "Keeping some docs safe..." - for doc in "${safe_docs[@]}"; do - if [ ! -f "$docs_base/${train}/${chart}/${doc}" ]; then - echo "Doc [$doc] does not exist, cannot keep it safe. Skipping." - continue - fi - mv "$docs_base/${train}/${chart}/${doc}" "$tmp_docs_base/${train}/${chart}/${doc}" - done -} - -restore_safe_docs() { - local train="$1" - local chart="$2" - - echo "Restoring safe docs..." - for doc in "${safe_docs[@]}"; do - if [ ! -f "$tmp_docs_base/${train}/${chart}/${doc}" ]; then - echo "Doc [$doc] does not exist, cannot restore it. Skipping." - continue - fi - mv "$tmp_docs_base/${train}/${chart}/${doc}" "$docs_base/${train}/${chart}/${doc}" - done -} - -remove_old_docs() { - local train="$1" - local chart="$2" - - echo "Removing old docs and recreating based on website repo..." - rm -rf $docs_base/*/${chart} || : - mkdir -p $docs_base/${train}/${chart} || echo "chart path already exists, continuing..." -} - -copy_new_docs() { - local $train="$1" - local chart="$2" - - echo "copying new docs to website for ${chart}" - cp -rf charts/${train}/${chart}/docs/* website/truecharts/src/content/docs/charts/${train}/${chart}/ 2>/dev/null || : - cp -rf charts/${train}/${chart}/icon.webp website/truecharts/public/img/hotlink-ok/chart-icons/${chart}.webp 2>/dev/null || : - cp -rf charts/${train}/${chart}/icon-small.webp website/truecharts/public/img/hotlink-ok/chart-icons-small/${chart}.webp 2>/dev/null || : - cp -rf charts/${train}/${chart}/screenshots/* website/truecharts/public/img/hotlink-ok/chart-screenshots/${chart}/ 2>/dev/null || : -} - -check_and_fix_title() { - local file="$1" - - echo "Checking title..." - - ok_title="false" - echo "Getting the first line" - if grep -q "^---$" "${file}"; then - ok_title="true" - elif grep -q "^# " "${file}"; then - echo "Found old-style title, fixing..." - title=$(grep "^# " "${file}" | cut -d " " -f 2-) - # Remove title - sed -i "s/^# ${title}//" "${file}" - content=$(cat "${file}") - echo -e "---\ntitle: ${title}\n---\n${content}" >"${file}" - ok_title="true" - else - ok_title="false" - fi - - if [ ${ok_title} == "false" ]; then - echo "Doc title should use front matter and not # for title, for example" - echo "---" - echo "title: some title" - echo "---" - return 1 - fi - - echo "Title is ok" - - return 0 -} - -process_index() { - local train="$1" - local chart="$2" - - local index_path="$docs_base/${train}/${chart}/index.md" - local chart_yaml_path="charts/${train}/${chart}/Chart.yaml" - - echo "Creating index.md..." - touch $docs_base/${train}/${chart}/index.md - - echo "Adding front matter to index.md..." - echo "---" >>${index_path} - go-yq -i --front-matter=process '.title="'${chart}'"' ${index_path} - echo -e "---\n" >>${index_path} - - echo "Getting data from Chart.yaml..." - version=$(go-yq '.version' ${chart_yaml_path}) - appversion=$(go-yq '.appVersion' ${chart_yaml_path}) - description=$(go-yq -r '.description' ${chart_yaml_path}) - sources=$(go-yq -r '.sources' ${chart_yaml_path}) - - echo "Adding the data to the index.md file..." - echo '![Version: '"${version}"'](https://img.shields.io/badge/Version-'"${version}"'-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: '"${appversion}"'](https://img.shields.io/badge/AppVersion-'"${appversion}"'-informational?style=flat-square)' >>${index_path} - - echo "" >>${index_path} - echo -e "$description\n" >>${index_path} - echo -e "## Chart Sources\n" >>${index_path} - echo -e "$sources\n" >>${index_path} - echo -e "## Available Documentation\n" >>${index_path} - - echo "Iterating over all files in the docs directory..." - for f in $docs_base/${train}/${chart}/*.md*; do - echo "Checking file: ${f}" - filename=$(basename "${f}") - - # If title is not ok, skip - if ! check_and_fix_title "${f}"; then - echo "Title is not ok, skipping..." - continue - fi - - # If file is index.md, skip - if [ "${filename}" == "index.md" ]; then - echo "File is index.md, not adding it to the links" - continue - fi - - title=$(go-yq --front-matter=process '.title' ${f} | head -n 1) - echo "The title is: ${title}" - - echo "Generating markdown links" - - filename="${filename##*/}" - filenameURL=${filename%.*} - filenameURL=${filenameURL,,} - link="[**${title}**](./${filenameURL})" - echo "The link is: ${link}" - echo "- ${link}" >>${index_path} - done - echo "" >>${index_path} - echo "" >>${index_path} - echo "---" >>${index_path} - echo "" >>${index_path} - echo -e "## Readme\n" >>$docs_base/${train}/${chart}/index.md - tail -n +4 "charts/${train}/${chart}/README.md" >>$docs_base/${train}/${chart}/readmetmp.md - sed -i 's/##/###/' "$docs_base/${train}/${chart}/readmetmp.md" - cat "$docs_base/${train}/${chart}/readmetmp.md" >>"$docs_base/${train}/${chart}/index.md" - rm "$docs_base/${train}/${chart}/readmetmp.md" || echo "couldnt delete readmetmp.md" - -} - -main() { - local chart_path="$1" - - IFS='/' read -r -a chart_parts <<<"$chart_path" - train=${chart_parts[0]} - chart=${chart_parts[1]} - - if [ ! -f "charts/${train}"/"${chart}/Chart.yaml" ]; then - echo "chart path does not exist, skipping..." - continue - fi - - echo "copying docs to website for ${chart}" - - keep_docs_safe "$train" "$chart" - remove_old_docs "$train" "$chart" - copy_new_docs "$train" "$chart" - process_index "$train" "$chart" - restore_safe_docs "$train" "$chart" - - echo "Finished processing ${chart}" -} - -main "$1" diff --git a/.github/workflows/charts-release.yaml b/.github/workflows/charts-release.yaml index 40f63d1b6b5..533683f2f4c 100644 --- a/.github/workflows/charts-release.yaml +++ b/.github/workflows/charts-release.yaml @@ -222,15 +222,7 @@ jobs: echo "No directories in ./changelogs. Skipping copy." fi - export DEBUG=false - export STRICT=true - go-yq --version - - for item in charts/*/*/Chart.yaml; do - # TODO: Move all website docs structure generation to charttool - IFS='/' read -r -a chart_parts <<<"$item" - ./.github/scripts/chart-docs.sh "${chart_parts[1]}/${chart_parts[2]}" - done + forgetool charts gendocs --charts-dir ./charts --website-dir ./website rm -rf ./website/truecharts/src/content/docs-common mv ./website/truecharts/src/content/docs/charts/library/common ./website/truecharts/src/content/docs-common