generateAppList.sh 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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 extra vid oweb odoc type Arch
  23. # Get app json
  24. appconf=$( jq '.' "$appfile" )
  25. # App Title
  26. App=$( echo "$appconf" | jq '.title' | tr -d '"' )
  27. # App Architecture
  28. # tag with no specific architecture is added to all of them
  29. if echo "$appconf" | jq -e '.image' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile' &> /dev/null ; then
  30. Arch='Arm32<br>Arm64<br>Amd64'
  31. # Parse tags with specific architectures
  32. else
  33. # Arm32
  34. if echo "$appconf" | jq -e '.image_arm32' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile_arm32' &> /dev/null ; then Arch='Arm32' ; fi
  35. # Arm64
  36. if echo "$appconf" | jq -e '.image_arm64' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile_arm64' &> /dev/null ; then
  37. Arch="$([[ -n "$Arch" ]] && echo "$Arch<br>" )Arm64"
  38. fi
  39. # Amd64
  40. if echo "$appconf" | jq -e '.image_amd64' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile_amd64' &> /dev/null ; then
  41. Arch="$([[ -n "$Arch" ]] && echo "$Arch<br>" )Amd64"
  42. fi
  43. fi
  44. # Apps Type
  45. apptype=$( echo "$appconf" | jq '.type' | tr -d '"' )
  46. # Get App Webpage from app info
  47. oweb=$(echo "$appconf" | jq ".webpage" | tr -d '"' )
  48. if [ "$oweb" != "null" ]; then
  49. oweb="[$App]($oweb)"
  50. else
  51. oweb="$App"
  52. fi
  53. # Get App Official Doc from app info
  54. odoc=$(echo "$appconf" | jq ".officialDoc" | tr -d '"' )
  55. if [ "$odoc" != "null" ]; then
  56. odoc="[$docIconBlue]($odoc)"
  57. else
  58. unset odoc
  59. fi
  60. # Get Doc from app info
  61. doc=$(echo "$appconf" | jq ".piHostedDoc" | tr -d '"' )
  62. if [ "$doc" != "null" ]; then
  63. doc="[$docIconRed]($Docs$doc)"
  64. else
  65. unset doc
  66. fi
  67. # Get Install Script from app info
  68. script=$(echo "$appconf" | jq ".preInstallScript" | tr -d '"' )
  69. if [ "$script" != "null" ]; then
  70. script="[$scriptIcon]($Scripts$script)"
  71. else
  72. unset script
  73. fi
  74. # Get Extra Script from app info
  75. if ExtraScript=$( echo "$appconf" | jq -e '.extraScript' ) ; then
  76. # If only one entry
  77. if [ "$(echo "$ExtraScript" | wc -l )" == "1" ]; then
  78. extra="[${ExtraScript:1:-1}]($Extras${ExtraScript:1:-1})"
  79. # If multiples entries
  80. else
  81. n_ext=$(echo "$ExtraScript" | jq '. | length')
  82. for n in $(seq 0 $(( n_ext - 1 ))); do
  83. ext=$(echo "$ExtraScript" | jq ".[$n]" | tr -d '"')
  84. if [ "$n" == "0" ]; then
  85. extra="[$ext]($Extras$ext)"
  86. else
  87. extra="$extra<br>[$ext]($Extras$ext)"
  88. fi
  89. done
  90. fi
  91. else
  92. unset extra n_ext ExtraScript
  93. fi
  94. # Get Video from app info
  95. vid=$(echo "$appconf" | jq ".videoID")
  96. if [ "$vid" != "null" ] ; then
  97. vidURL=$(jq ".youtube[] | select(.ID==$vid) | .URL" "$appinfo" | tr -d '"')
  98. vid="[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)]($vidURL)"
  99. else
  100. unset vid
  101. fi
  102. # Building App Line
  103. line="|$oweb|$Arch|$apptype| $odoc | $doc | $script | $extra | $vid |"
  104. # Change container type to string (Default to Container when not set)
  105. line="${line//|1|/|Container|}"
  106. line="${line//|null|/|Container|}"
  107. line="${line//|3|/|Stack|}"
  108. # Add line to List
  109. echo "$line" >> "$AppList"
  110. done 9< <( LC_COLLATE=en_US.utf8 ls $appsfolder/*.json )