generateAppList.sh 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #!/bin/bash
  2. # start script from it's folder
  3. cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null || exit
  4. # Standard file locations
  5. homedir='../../'
  6. . ../env.sh
  7. docIconBlue="![](../build/images/blue_doc_icon.png)"
  8. docIconRed="![](../build/images/red_doc_icon.png)"
  9. scriptIcon="![](../build/images/script_icon.png)"
  10. # Create AppList title
  11. cp -f "$AppList_TEMPLATE" "$AppList"
  12. # Total apps per arch
  13. for Arch in {arm32,arm64,amd64}; do
  14. total=$(grep -lE '"(image|stackfile)(_'"$Arch"')?":' "$appsfolder"/*.json | wc -l )
  15. sed -i "s/XXX_${Arch}_XXX/$total/" "$AppList"
  16. done
  17. total=$(find "$appsfolder" -type f -iname '*.json' | wc -l )
  18. sed -i "s/XXX_total_XXX/$total/" "$AppList"
  19. # Generate App Table
  20. while IFS='' read -u 9 -r appfile || [[ -n $appfile ]]; do
  21. # Clear previous variables
  22. unset doc script vid oweb odoc type
  23. hasArm32=':x:'
  24. hasArm64=':x:'
  25. hasAmd64=':x:'
  26. # Get app json
  27. appconf=$( jq '.' "$appfile" )
  28. # App Title
  29. App=$( echo "$appconf" | jq '.title' | tr -d '"' )
  30. # App Architecture
  31. # tag with no specific architecture is added to all of them
  32. if echo "$appconf" | jq -e '.image' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile' &> /dev/null ; then
  33. hasArm32=':heavy_check_mark:'
  34. hasArm64=':heavy_check_mark:'
  35. hasAmd64=':heavy_check_mark:'
  36. # Parse tags with specific architectures
  37. else
  38. # Arm32
  39. if echo "$appconf" | jq -e '.image_arm32' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile_arm32' &> /dev/null ; then hasArm32=':heavy_check_mark:' ; fi
  40. # Arm64
  41. if echo "$appconf" | jq -e '.image_arm64' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile_arm64' &> /dev/null ; then hasArm64=':heavy_check_mark:' ; fi
  42. # Amd64
  43. if echo "$appconf" | jq -e '.image_amd64' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile_amd64' &> /dev/null ; then hasAmd64=':heavy_check_mark:' ; fi
  44. fi
  45. # Apps Type
  46. apptype=$( echo "$appconf" | jq '.type' | tr -d '"' )
  47. # Get App Webpage from app info
  48. oweb=$(echo "$appconf" | jq ".webpage" | tr -d '"' )
  49. if [ "$oweb" != "null" ]; then
  50. oweb="[$App]($oweb)"
  51. else
  52. oweb="$App"
  53. fi
  54. # Get App Official Doc from app info
  55. odoc=$(echo "$appconf" | jq ".officialDoc" | tr -d '"' )
  56. if [ "$odoc" != "null" ]; then
  57. odoc="[$docIconBlue]($odoc)"
  58. else
  59. unset odoc
  60. fi
  61. # Get Doc from app info
  62. doc=$(echo "$appconf" | jq ".piHostedDoc" | tr -d '"' )
  63. if [ "$doc" != "null" ]; then
  64. doc="[$docIconRed]($Docs$doc)"
  65. else
  66. unset doc
  67. fi
  68. # Get Install Script from app info
  69. script=$(echo "$appconf" | jq ".preInstallScript" | tr -d '"' )
  70. if [ "$script" != "null" ]; then
  71. script="[$scriptIcon]($Scripts$script)"
  72. else
  73. unset script
  74. fi
  75. # Get Video from app info
  76. if vidlist=$( echo "$appconf" | jq -e ".videoID" ) ; then
  77. # If only one entry
  78. if [ "$(echo "$vidlist" | wc -l )" == "1" ]; then
  79. vidURL=$(jq ".youtube[] | select(.ID==$vidlist) | .URL" "$appinfo" | tr -d '"')
  80. vidTitle=$(jq ".youtube[] | select(.ID==$vidlist) | .Title" "$appinfo" | tr -d '"')
  81. vidCh=$(jq ".youtube[] | select(.ID==$vidlist) | .Channel" "$appinfo" | tr -d '"')
  82. vid="[![$vidTitle](../build/images/yt-badge-${vidCh}.png \"$vidTitle\")]($vidURL)"
  83. # If multiple entries
  84. else
  85. n_vid=$(echo "$vidlist" | jq '. | length')
  86. for n in $(seq 0 $(( n_vid - 1 ))); do
  87. vidd=$(echo "$vidlist" | jq ".[$n]" )
  88. vidURL=$(jq ".youtube[] | select(.ID==$vidd) | .URL" "$appinfo" | tr -d '"')
  89. vidTitle=$(jq ".youtube[] | select(.ID==$vidd) | .Title" "$appinfo" | tr -d '"')
  90. vidCh=$(jq ".youtube[] | select(.ID==$vidd) | .Channel" "$appinfo" | tr -d '"')
  91. if [ "$n" == "0" ] ; then
  92. vid="[![$vidTitle](../build/images/yt-badge-${vidCh}.png \"$vidTitle\")]($vidURL)"
  93. else
  94. vid="$vid<br>[![$vidTitle](../build/images/yt-badge-${vidCh}.png \"$vidTitle\")]($vidURL)"
  95. fi
  96. done
  97. fi
  98. else
  99. unset vid
  100. fi
  101. # Building App Line
  102. line="|$oweb|$hasArm32|$hasArm64|$hasAmd64|$apptype| $odoc | $doc | $script | $vid |"
  103. # Change container type to string (Default to Container when not set)
  104. line="${line//|1|/|Container|}"
  105. line="${line//|null|/|Container|}"
  106. line="${line//|3|/|Stack|}"
  107. # Add line to List
  108. echo "$line" >> "$AppList"
  109. done 9< <( LC_COLLATE=en_US.utf8 ls $appsfolder/*.json )