diff --git a/.clocignore b/.clocignore new file mode 100644 index 00000000..ee7c7f1c --- /dev/null +++ b/.clocignore @@ -0,0 +1,5 @@ +"Sophia Script/Sophia Script for Windows 10/Module/Sophia.psm1", +"Sophia Script/Sophia Script for Windows 10 LTSC 2019/Module/Sophia.psm1", +"Sophia Script/Sophia Script for Windows 10 LTSC 2021/Module/Sophia.psm1", +"Sophia Script/Sophia Script for Windows 10 PowerShell 7/Module/Sophia.psm1", +"Sophia Script/Sophia Script for Windows 11 PowerShell 7/Module/Sophia.psm1" diff --git a/.github/workflows/Badge.yml b/.github/workflows/Badge.yml new file mode 100644 index 00000000..8fc32c82 --- /dev/null +++ b/.github/workflows/Badge.yml @@ -0,0 +1,31 @@ +name: Badges + +on: + push: + branches: + - master + +jobs: + update-badges: + name: Update Badges + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@main + - name: Download cloc + run: sudo apt-get update -y && sudo apt-get install -y cloc + - name: Get the Numbers + run: | + chmod +x Scripts/cloc.sh + echo "CODE_LINES=$(Scripts/cloc.sh --loc)" >> $GITHUB_ENV + echo "COMMENT_PERCENTAGE=$(Scripts/cloc.sh --percentage)" >> $GITHUB_ENV + - name: Create Lines-of-Code-Badge + uses: schneegans/dynamic-badges-action@master + with: + auth: ${{ secrets.GIST_SophiaScript }} + gistID: 9852d6b9569a91bf69ceba8a94cc97f4 + filename: SophiaScript.json + label: Lines of Code + message: ${{ env.CODE_LINES }} + namedLogo: PowerShell + color: brightgreen diff --git a/.tokeignore b/.tokeignore deleted file mode 100644 index 000b160c..00000000 --- a/.tokeignore +++ /dev/null @@ -1,15 +0,0 @@ -Sophia Script for Windows 10 LTSC 2019/ -Sophia Script for Windows 10 LTSC 2021/ -Sophia Script for Windows 10 PowerShell 7/ -Sophia Script for Windows 10/ -Sophia Script for Windows 11 PowerShell 7/bin/Start_Layout/ -Sophia Script for Windows 11/bin/Start_Layout/ -Wrapper/ -.github/ -img/ -gitattributes -CHANGELOG.md -.tokeignore -LICENSE -README.md -sophia_script_versions.json diff --git a/Scripts/cloc.sh b/Scripts/cloc.sh new file mode 100644 index 00000000..f311cdc1 --- /dev/null +++ b/Scripts/cloc.sh @@ -0,0 +1,62 @@ +# This scripts counts the lines of code and comments in all JavaScript files. +# The copyright-headers are substracted. It uses the command line tool "cloc". +# You can either pass --loc, --comments or --percentage to show the respective values only. + +# Exit the script when one command fails. +set -e + +# Go to the repo root. +cd "$( cd "$( dirname "$0" )" && pwd )/.." || \ + { echo "ERROR: Could not find the repo root."; exit 1; } + +# Run cloc - this counts code lines, blank lines and comment lines for the specified extensions. +# We are only interested in the summary, therefore the tail -1 +# https://github.com/AlDanial/cloc#options- +SUMMARY="$(cloc --include-ext="psd1" --exclude-list-file=.clocignore . --md | tail -1)" + +# The $SUMMARY is one line of a markdown table and looks like this: +# SUM:|101|3123|2238|10783 +# We use the following command to split it into an array. +IFS='|' read -r -a TOKENS <<< "$SUMMARY" + +# Store the individual tokens for better readability. +NUMBER_OF_FILES=${TOKENS[1]} +COMMENT_LINES=${TOKENS[3]} +LINES_OF_CODE=${TOKENS[4]} + +# To make the estimate of commented lines more accurate, we have to substract the +# copyright header which is included in each file. This header has the length of five lines. +# As cloc does not count inline comments, the overall estimate should be rather conservative. +COMMENT_LINES=$((COMMENT_LINES - 5 * NUMBER_OF_FILES)) + +# Print all results if no arguments are given. +if [[ $# -eq 0 ]] ; then + awk -v a="$LINES_OF_CODE" \ + 'BEGIN {printf "Lines of source code: %6.1fk\n", a/1000}' + awk -v a=$COMMENT_LINES \ + 'BEGIN {printf "Lines of comments: %6.1fk\n", a/1000}' + awk -v a=$COMMENT_LINES -v b="$LINES_OF_CODE" \ + 'BEGIN {printf "Comment Percentage: %6.1f%\n", 100*a/(a+b)}' + exit 0 +fi + +# Show lines of code. +if [[ "$*" == *--loc* ]] +then + awk -v a="$LINES_OF_CODE" \ + 'BEGIN {printf "%.1fk\n", a/1000}' +fi + +# Show lines of comments. +if [[ "$*" == *--comments* ]] +then + awk -v a=$COMMENT_LINES \ + 'BEGIN {printf "%.1fk\n", a/1000}' +fi + +# Show precentage of comments. +if [[ "$*" == *--percentage* ]] +then + awk -v a=$COMMENT_LINES -v b="$LINES_OF_CODE" \ + 'BEGIN {printf "%.1f\n", 100*a/(a+b)}' +fi