From dc5c33b6c027953ad3e47b10b2aa5f9e4d6bea22 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:17:36 -0600 Subject: [PATCH 01/15] Add Umami analytics blueprint with Docker Compose and configuration --- blueprints/umami/docker-compose.yml | 34 ++++++++++++++++++++++++++++ blueprints/umami/template.yml | 13 +++++++++++ blueprints/umami/umami.png | Bin 0 -> 4179 bytes meta.json | 16 +++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 blueprints/umami/docker-compose.yml create mode 100644 blueprints/umami/template.yml create mode 100644 blueprints/umami/umami.png diff --git a/blueprints/umami/docker-compose.yml b/blueprints/umami/docker-compose.yml new file mode 100644 index 0000000..26efd33 --- /dev/null +++ b/blueprints/umami/docker-compose.yml @@ -0,0 +1,34 @@ +services: + umami: + image: ghcr.io/umami-software/umami:postgresql-v2.16.1 + restart: always + healthcheck: + test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] + interval: 5s + timeout: 5s + retries: 5 + depends_on: + db: + condition: service_healthy + environment: + DATABASE_URL: postgresql://umami:umami@db:5432/umami + DATABASE_TYPE: postgresql + APP_SECRET: ${APP_SECRET} + db: + image: postgres:15-alpine + restart: always + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 5s + retries: 5 + + volumes: + - db-data:/var/lib/postgresql/data + environment: + POSTGRES_DB: umami + POSTGRES_USER: umami + POSTGRES_PASSWORD: umami + +volumes: + db-data: diff --git a/blueprints/umami/template.yml b/blueprints/umami/template.yml new file mode 100644 index 0000000..d9bed62 --- /dev/null +++ b/blueprints/umami/template.yml @@ -0,0 +1,13 @@ +variables: + main_domain: ${randomDomain} + +config: + domains: + - serviceName: umami + port: 3000 + host: ${main_domain} + + env: + APP_SECRET: ${base64:64} + + mounts: [] diff --git a/blueprints/umami/umami.png b/blueprints/umami/umami.png new file mode 100644 index 0000000000000000000000000000000000000000..de2f7615bd66089c2bcf814f3f46ffee1a124f4d GIT binary patch literal 4179 zcmds)`8yO|*#Bq23?WSRoe#;9oe?sY$Sz9O#%@$HC`=<`EFnAD_hqtANG8g@i;#UM z`<5ly%QOA*{r(5f56=(xxzBc;bDjIXuKWEu5hg}DbTk|^004ka_pX*H+1LCtD2Uuv zzmIn&JD|6zjs}4EjcbEE&~moWbulyqh?4tI05HrAK=E%2**M4s0DyCW05I7D|IOus z{@-d%F8KfV|7|oMO~wEKR~vM-)bINNcd{@~SvokoBvQBp!ondUZvt6s->`a#+|3W~ zJ%peQg^f9$rby?=7y z|I1ntTeB-ItE{{`td@>BPR&|V&dK_fHkr_L`S%=t3Zu-whGKnT5)%QsG(#*f&^s_Q zz#RzjFi@BjLs?)mqgZq%13Uz8K}iu~;kF#o%um}c%7<>(6TD7AZ_j5A#0#2pDDk7A z;3^s@SJn4!YP=>}_yfd3c#^gel&cj{4g%?v%Xw)mFi`z39L=o-G6s5JYZ4NecI~7g zZ|LcvaKAk}Z|`5k%S(BA`HwX<=)L24+~uzUwds#f#;Y8=h_;`PwkJOr=iDyJe!00( zloK%JR>b&ot^s>~v=a$Q$q!t5-}E==wfl7KtD{NR9Nb@wre@o>Eal^$v)J{)Jjbq> zkJ*!hgLU4n2w;3mFeD`@iH=iY`+|JM%3HHr&(SswOz*|rZ42bGLnAsnJ7d-Uo@DvX zogNMw|I5Lj^JCU$9w|3%zrmNH^d%b(r=Gm$R(*Ncj0fLv`(A9E;pPL2nGZPMNi@D~ z+3@oB=iSCDFxC944MTYcZ(wyf;Zg; zvQ^2!Sn{2J1@W$NqHZ(TqDujSshYb+O3dsDhJ{ZX`DW2^p}P&ob6+sO6rRnnjaTwD zVUK?rN-k}dy>HwsE%Pe^25AV4+vFiNQy_Y%=|*x$$%#G;U9wotBM=C&x6edg7?PgN zdc8`P82`moco_S0y)R7``+Jl5y3k7d-eOx0W;LxpL(%n-?}KF1p{KL;zX>Ui>i?c? zVGq|CQvhepBQnT{CyGI0%dd`TX>%PU5`*-+aB1Gfc<)u z=`tR|vp)VF>7)mTqXu(3B3aFJJMK8_>>swMv+t1u_IqbqQAQSpFi4XLwR)X0ow_~( zm-7|rL=9@ad!x{=c~!Lrd;H8%*YqIwZHu}*?()yEPAwbUZz)>QG@ncL<^2e`I&BS1 zCv>~UZCF5zgGOmH_w4M;5yKN+d+GNSIE;ZkU+t`qYm-87pVM^&ADClruChw^+1wbLXQ( zkBp6JC$y-$jIg;?n%gjS4o(^>&R!!rG`}1zeV|a3Su;rw2~LQ55Q4nT;amGa$Wy7G zZR>DjxJ{PinvGeV_GsevO`+?mcpbdK#0QO24?aAa_Hd=>qdKiN0K??u)Y)KHCW4Sq zScs*z!(SQfB4V(&w>L07u0@J!Hy=Zw@fQfT8yy{`ouU$N66qE| z^?H!#>9yI)N=rdgzjx>7HFgfZMeR(JkeHPuAZJ%JXBe;loag4Jpc;)jBR^+x~CV^>dtYY}MecQ2? zuxwH1CFFl1-%2g#)!UDY2HSJwozzx|wtfg5GBuxXR~p8qq(Pkq;v2;_3M&ssJS3h> zyJyFnicvNaQjh_4^ZqJMp7!_7->Nu#$Y0JKjtwRvxvecDyc0L+T|BXB~{Jg z%XLrL#IWE47>U)K@1>O#)cnz-pOS73W<;uIji)Z=3#S#1J`tc%T)RIU17C0XzISLH z^IoLi?~-w?4W4Xjan|3S6cG)&(CG^!pCd11EjfnnNIb( zRpwPPSHV3DrWI{cv;fhw?)eZgrks)QrxtlVQ2%Le+8w;!lAt;zt-DRgFM2T;cx#yb zMp0j`pCfHhVZ!ZggXyAlo-Cf!SA6LF9@u9cH|k zCe^|@mUD(IBLl@!Z8-dMGcPIQ9c0-zb9QkzS{rj(wVoF?_`Rb&&d4s9{tfUh^#_`o z9v;kcJmPX5SCEe8nVrvkW>2wKzeO}lG>_;g0(|S?4LGqk!o+WNOkJPL_CM%p)+!r7 zP_q;^pX@Jr_wQyB$LVz@R!aC(mtAr|hZ|nK+cuJ8bJo-(S^qKJNM&4khaWm6srBb2%RO4DMUoUy^^nsV}q4d7e@-IfGjtCh|`kUyOOT5HF62Th^C zVUlqs5F0H|XT>~758)I&d+3Cce>Wj8{-=s}2fgrIlADElzN)1CYkJF zm`n(OKNgM4`J%Pmel=|^K99;%V*P8m#I=Adb%l+~%@Nt@1P12ixx17TwmGbl2X9M* zr}XJB)=#e$lrHP3WP{2pMpX^S?~bzPPx)yHFs}YVo%=Y9{^fXKTHsQCe*04K zRc{acCMxagD-?iTWS-!jKq5#FzI7Qt3BFpmr7%pvwM}9?rMx*?tHh<&L6yO~p)g3n zHG%GzA79Vb7^!%xx-WYn@3U<&OGm#gPXW;n7*JZ{!X6sF&=Zk8IV%LhXj|~Aj-64` zcE-{wK|)7(cO`jCcPPD{Mk7=_MlEzrAQ<$NfiMjbPc+g*?@5{8Cld=Z(I~#FIZlap zUP>@X3BG4Qy$kl}yql8k)kdetmJuTbfhe_SqdIB5si6Zbw>|q)q@z!}*g}Kzq)zq> zk`P3i%A`jpVAneBgg?Kv7Xg^s&C#8i3UdFqy1`D@!MhtQ(bMMMI+ z(sp8|&YR%n78*;Ij?{r`>@KZXn*?+mRFpLh9T5yJip~i*>-j4B3m>xByl{5*((*II zYH%#0$3$g|3d7&)!dD?BWDTWzlG6%e-eKfIo*Y)HjhJ(l2%Do56j zUA(vpGQdRu7IDSQ=s3RHgR0)E29vh*k9Ql-pQSteHP91%dWCBuR)CqAxigb_TU0@Yl-}2sh(6sQwnUmcqBpMwj-dJR1X=zCtT=WI}$;jn)5=Ve9UuJG35 zrfk0-)TEU9=i3vWn}IVQ&@EkaHw9Ak%EdT%@wuY*^h`FKCl7QFf3(q9c@tSl}q&F3+=r^*yq9WqbD zX|q}YViYb*zC0(r*fRHO_2;-SF06LE60MskJk-EJrk~O*2GgrL!j1_4aiT354v}?U zD>}TdMrLNV2c%@}6$D+`ffj>i+){RkH|biQXK+xME02-pKR&B}u>~Lyi8q(zm$F6~ z?Q#<()Gf>40T+Hg%sv}1MqS+2eOg;Rs7RR`g2U`w=HG{2_l}Vk JQNu3ie*m&@+GYR% literal 0 HcmV?d00001 diff --git a/meta.json b/meta.json index 1ae699d..3ebaad8 100644 --- a/meta.json +++ b/meta.json @@ -31,5 +31,21 @@ "analytics", "privacy" ] + }, + { + "id": "umami", + "name": "Umami", + "version": "v2.16.1", + "description": + "Umami is a simple, fast, privacy-focused alternative to Google Analytics.", + "logo": "umami.png", + "links": { + "github": "https://github.com/umami-software/umami", + "website": "https://umami.is", + "docs": "https://umami.is/docs" + }, + "tags": [ + "analytics" + ] } ] From 470e5d96cd938a5e5ed3fb6f12f75733cb2fe7dc Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:21:19 -0600 Subject: [PATCH 02/15] Enhance Base64 templates GitHub Action workflow with improved formatting --- .github/workflows/base64-templates.yml | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/workflows/base64-templates.yml b/.github/workflows/base64-templates.yml index 98f2e22..c96cee1 100644 --- a/.github/workflows/base64-templates.yml +++ b/.github/workflows/base64-templates.yml @@ -2,13 +2,11 @@ name: Generate Base64 Blueprints Table on: pull_request: - paths: - - 'blueprints/**' + branches: + - main push: branches: - main - paths: - - 'blueprints/**' jobs: encode-and-comment: @@ -23,28 +21,33 @@ jobs: run: | echo "### 📝 Blueprints Base64 Table" > comment.md echo '' >> comment.md - echo '| Template | Base64 |' >> comment.md - echo '|----------|--------|' >> comment.md + echo '| Template | Base64 (short) |' >> comment.md + echo '|----------|----------------|' >> comment.md for dir in blueprints/*; do if [ -d "$dir" ]; then TEMPLATE_NAME=$(basename "$dir") - + COMPOSE_FILE="$dir/docker-compose.yml" TEMPLATE_FILE="$dir/template.yml" - + if [ -f "$COMPOSE_FILE" ] && [ -f "$TEMPLATE_FILE" ]; then CONTENT=$(cat "$COMPOSE_FILE" "$TEMPLATE_FILE" | base64 -w 0) - SHORT_CONTENT="${CONTENT:0:50}..." # Primera parte para la tabla + SHORT_CONTENT="${CONTENT:0:50}..." + + # Add table row with short base64 preview echo "| $TEMPLATE_NAME | \`$SHORT_CONTENT\` |" >> comment.md - # Detalle completo + # Add collapsible full base64 section echo '' >> comment.md - echo "#### $TEMPLATE_NAME Full Base64" >> comment.md + echo "
" >> comment.md + echo "🔍 $TEMPLATE_NAME Full Base64" >> comment.md echo '' >> comment.md echo '```' >> comment.md echo "$CONTENT" >> comment.md echo '```' >> comment.md + echo '
' >> comment.md + echo '' fi fi done From 5d441530f01cb85e1934c84b082a7f87b1178876 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:22:55 -0600 Subject: [PATCH 03/15] Modify Base64 templates workflow to encode compose and config as JSON --- .github/workflows/base64-templates.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/base64-templates.yml b/.github/workflows/base64-templates.yml index c96cee1..1ea55ee 100644 --- a/.github/workflows/base64-templates.yml +++ b/.github/workflows/base64-templates.yml @@ -32,8 +32,13 @@ jobs: TEMPLATE_FILE="$dir/template.yml" if [ -f "$COMPOSE_FILE" ] && [ -f "$TEMPLATE_FILE" ]; then - CONTENT=$(cat "$COMPOSE_FILE" "$TEMPLATE_FILE" | base64 -w 0) - SHORT_CONTENT="${CONTENT:0:50}..." + COMPOSE_CONTENT=$(cat "$COMPOSE_FILE") + TEMPLATE_CONTENT=$(cat "$TEMPLATE_FILE") + + JSON="{\"compose\":\"$COMPOSE_CONTENT\",\"config\":\"$TEMPLATE_CONTENT\"}" + + BASE64_JSON=$(echo -n "$JSON" | base64 -w 0) + SHORT_CONTENT="${BASE64_JSON:0:50}..." # Add table row with short base64 preview echo "| $TEMPLATE_NAME | \`$SHORT_CONTENT\` |" >> comment.md @@ -44,7 +49,7 @@ jobs: echo "🔍 $TEMPLATE_NAME Full Base64" >> comment.md echo '' >> comment.md echo '```' >> comment.md - echo "$CONTENT" >> comment.md + echo "$BASE64_JSON" >> comment.md echo '```' >> comment.md echo '' >> comment.md echo '' From 6092fcad2ba9d8a2d2da7c7700edfff72092f6ee Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:26:24 -0600 Subject: [PATCH 04/15] Refactor Base64 templates workflow to improve blueprint base64 presentation --- .github/workflows/base64-templates.yml | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/.github/workflows/base64-templates.yml b/.github/workflows/base64-templates.yml index 1ea55ee..ad32935 100644 --- a/.github/workflows/base64-templates.yml +++ b/.github/workflows/base64-templates.yml @@ -16,13 +16,15 @@ jobs: - name: Checkout repo uses: actions/checkout@v4 - - name: Generate base64 table + - name: Generate base64 for blueprints id: generate run: | echo "### 📝 Blueprints Base64 Table" > comment.md echo '' >> comment.md - echo '| Template | Base64 (short) |' >> comment.md - echo '|----------|----------------|' >> comment.md + + echo "
" >> comment.md + echo "🔍 Show all blueprints base64" >> comment.md + echo '' >> comment.md for dir in blueprints/*; do if [ -d "$dir" ]; then @@ -36,27 +38,20 @@ jobs: TEMPLATE_CONTENT=$(cat "$TEMPLATE_FILE") JSON="{\"compose\":\"$COMPOSE_CONTENT\",\"config\":\"$TEMPLATE_CONTENT\"}" - BASE64_JSON=$(echo -n "$JSON" | base64 -w 0) - SHORT_CONTENT="${BASE64_JSON:0:50}..." - # Add table row with short base64 preview - echo "| $TEMPLATE_NAME | \`$SHORT_CONTENT\` |" >> comment.md - - # Add collapsible full base64 section - echo '' >> comment.md - echo "
" >> comment.md - echo "🔍 $TEMPLATE_NAME Full Base64" >> comment.md + echo "#### $TEMPLATE_NAME" >> comment.md echo '' >> comment.md echo '```' >> comment.md echo "$BASE64_JSON" >> comment.md echo '```' >> comment.md - echo '
' >> comment.md echo '' fi fi done + echo '
' >> comment.md + - name: Post comment to PR uses: marocchino/sticky-pull-request-comment@v2 if: github.event_name == 'pull_request' From 6a836d970ce9407021f455b3da7e5f3dead32c22 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:27:41 -0600 Subject: [PATCH 05/15] Add user guidance for blueprint base64 import in workflow --- .github/workflows/base64-templates.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/base64-templates.yml b/.github/workflows/base64-templates.yml index ad32935..0b5e1d0 100644 --- a/.github/workflows/base64-templates.yml +++ b/.github/workflows/base64-templates.yml @@ -22,6 +22,7 @@ jobs: echo "### 📝 Blueprints Base64 Table" > comment.md echo '' >> comment.md + echo "You can use the base64 value to import the blueprint into the UI." echo "
" >> comment.md echo "🔍 Show all blueprints base64" >> comment.md echo '' >> comment.md From 1476adcbeadb5f7f647e12b7c27040ff14a738e3 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:28:50 -0600 Subject: [PATCH 06/15] Fix base64 templates workflow comment output redirection --- .github/workflows/base64-templates.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/base64-templates.yml b/.github/workflows/base64-templates.yml index 0b5e1d0..b95799c 100644 --- a/.github/workflows/base64-templates.yml +++ b/.github/workflows/base64-templates.yml @@ -22,7 +22,7 @@ jobs: echo "### 📝 Blueprints Base64 Table" > comment.md echo '' >> comment.md - echo "You can use the base64 value to import the blueprint into the UI." + echo "You can use the base64 value to import the blueprint into the UI." >> comment.md echo "
" >> comment.md echo "🔍 Show all blueprints base64" >> comment.md echo '' >> comment.md From ea1f5bddaddff188e4045d042d11730b9d547fcd Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:32:09 -0600 Subject: [PATCH 07/15] Add GitHub Actions workflow to validate blueprint structure and meta.json --- .github/workflows/validate.yml | 101 +++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 .github/workflows/validate.yml diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..381ef1f --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,101 @@ +name: Validate Blueprints Structure and Meta + +on: + pull_request: + branches: + - main + push: + branches: + - main + +jobs: + validate: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Validate blueprint folders + run: | + echo "🔍 Validating blueprints folder structure..." + + ERROR=0 + + # Loop through each blueprint folder + for dir in blueprints/*; do + if [ -d "$dir" ]; then + TEMPLATE_NAME=$(basename "$dir") + + COMPOSE_FILE="$dir/docker-compose.yml" + TEMPLATE_FILE="$dir/template.yml" + + if [ ! -f "$COMPOSE_FILE" ]; then + echo "❌ Missing docker-compose.yml in $TEMPLATE_NAME" + ERROR=1 + fi + + if [ ! -f "$TEMPLATE_FILE" ]; then + echo "❌ Missing template.yml in $TEMPLATE_NAME" + ERROR=1 + fi + fi + done + + if [ $ERROR -eq 1 ]; then + echo "❌ Blueprint folder validation failed." + exit 1 + else + echo "✅ Blueprint folders validated successfully." + fi + + - name: Validate meta.json matches blueprint folders + run: | + echo "🔍 Validating meta.json against blueprint folders..." + + ERROR=0 + + # Read all blueprint folder names into an array + FOLDERS=($(ls -1 blueprints)) + + # Extract ids from meta.json + META_IDS=$(jq -r '.[].id' meta.json) + + # Validate each id in meta.json exists as a folder + for ID in $META_IDS; do + FOUND=0 + for FOLDER in "${FOLDERS[@]}"; do + if [ "$ID" == "$FOLDER" ]; then + FOUND=1 + break + fi + done + + if [ "$FOUND" -eq 0 ]; then + echo "❌ meta.json id \"$ID\" does not match any folder in blueprints/" + ERROR=1 + fi + done + + # Validate each folder has an entry in meta.json + for FOLDER in "${FOLDERS[@]}"; do + FOUND=0 + for ID in $META_IDS; do + if [ "$FOLDER" == "$ID" ]; then + FOUND=1 + break + fi + done + + if [ "$FOUND" -eq 0 ]; then + echo "❌ Folder \"$FOLDER\" has no matching id in meta.json" + ERROR=1 + fi + done + + if [ $ERROR -eq 1 ]; then + echo "❌ meta.json validation failed." + exit 1 + else + echo "✅ meta.json validated successfully." + fi From f190414c1b6f037468ebc4c4e23bea66061c0d51 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:32:55 -0600 Subject: [PATCH 08/15] Remove Umami blueprint template --- blueprints/umami/template.yml | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 blueprints/umami/template.yml diff --git a/blueprints/umami/template.yml b/blueprints/umami/template.yml deleted file mode 100644 index d9bed62..0000000 --- a/blueprints/umami/template.yml +++ /dev/null @@ -1,13 +0,0 @@ -variables: - main_domain: ${randomDomain} - -config: - domains: - - serviceName: umami - port: 3000 - host: ${main_domain} - - env: - APP_SECRET: ${base64:64} - - mounts: [] From 7680b8b3c9ab2b6837a432fe449e69f114327678 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:36:01 -0600 Subject: [PATCH 09/15] refactor: add validation metadata --- .github/workflows/validate.yml | 36 +++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 381ef1f..dfdd0e3 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -16,7 +16,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Validate blueprint folders + - name: Validate blueprint folders and files run: | echo "🔍 Validating blueprints folder structure..." @@ -49,35 +49,39 @@ jobs: echo "✅ Blueprint folders validated successfully." fi - - name: Validate meta.json matches blueprint folders + - name: Validate meta.json matches blueprint folders and logo files run: | - echo "🔍 Validating meta.json against blueprint folders..." + echo "🔍 Validating meta.json against blueprint folders and logos..." ERROR=0 # Read all blueprint folder names into an array FOLDERS=($(ls -1 blueprints)) - # Extract ids from meta.json - META_IDS=$(jq -r '.[].id' meta.json) + # Extract ids and logos from meta.json + IDS_AND_LOGOS=$(jq -c '.[] | {id, logo}' meta.json) # Validate each id in meta.json exists as a folder - for ID in $META_IDS; do - FOUND=0 - for FOLDER in "${FOLDERS[@]}"; do - if [ "$ID" == "$FOLDER" ]; then - FOUND=1 - break - fi - done + for item in $IDS_AND_LOGOS; do + ID=$(echo "$item" | jq -r '.id') + LOGO=$(echo "$item" | jq -r '.logo') - if [ "$FOUND" -eq 0 ]; then - echo "❌ meta.json id \"$ID\" does not match any folder in blueprints/" + # Check if folder exists + if [ ! -d "blueprints/$ID" ]; then + echo "❌ meta.json id \"$ID\" does not have a matching folder in blueprints/" + ERROR=1 + continue + fi + + # Check if logo file exists inside its folder + if [ ! -f "blueprints/$ID/$LOGO" ]; then + echo "❌ Logo \"$LOGO\" defined for \"$ID\" does not exist in blueprints/$ID/" ERROR=1 fi done - # Validate each folder has an entry in meta.json + # Validate each folder has a matching id in meta.json + META_IDS=$(jq -r '.[].id' meta.json) for FOLDER in "${FOLDERS[@]}"; do FOUND=0 for ID in $META_IDS; do From a6adc9d0e90cc91f1d61c6a2b16b291f90bf914c Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:37:47 -0600 Subject: [PATCH 10/15] feat: Add Umami blueprint template --- blueprints/umami/template.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 blueprints/umami/template.yml diff --git a/blueprints/umami/template.yml b/blueprints/umami/template.yml new file mode 100644 index 0000000..ece3e01 --- /dev/null +++ b/blueprints/umami/template.yml @@ -0,0 +1,13 @@ +variables: + main_domain: ${randomDomain} + +config: + domains: + - serviceName: umami + port: 3000 + host: ${main_domain} + + env: + APP_SECRET: ${base64:64} + + mounts: [] \ No newline at end of file From 48239ef42708b19e29bee8c1bd29b8b7550f433e Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:38:28 -0600 Subject: [PATCH 11/15] chore: Update Umami logo filename in meta.json --- meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta.json b/meta.json index 3ebaad8..5d90f1e 100644 --- a/meta.json +++ b/meta.json @@ -38,7 +38,7 @@ "version": "v2.16.1", "description": "Umami is a simple, fast, privacy-focused alternative to Google Analytics.", - "logo": "umami.png", + "logo": "umami2.png", "links": { "github": "https://github.com/umami-software/umami", "website": "https://umami.is", From 22259eed9603eea779d3484a2412f4ff4b82f9c0 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:38:51 -0600 Subject: [PATCH 12/15] chore: Update Umami logo filename --- meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta.json b/meta.json index 5d90f1e..3ebaad8 100644 --- a/meta.json +++ b/meta.json @@ -38,7 +38,7 @@ "version": "v2.16.1", "description": "Umami is a simple, fast, privacy-focused alternative to Google Analytics.", - "logo": "umami2.png", + "logo": "umami.png", "links": { "github": "https://github.com/umami-software/umami", "website": "https://umami.is", From f4450ca57d75c3c17148c80173c753d6d3af771a Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:39:15 -0600 Subject: [PATCH 13/15] chore: Clean up comments in Pocketbase template.yml --- blueprints/pocketbase/template.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blueprints/pocketbase/template.yml b/blueprints/pocketbase/template.yml index 905d080..472ad64 100644 --- a/blueprints/pocketbase/template.yml +++ b/blueprints/pocketbase/template.yml @@ -7,6 +7,6 @@ config: port: 80 host: ${main_domain} - env: {} # No hay variables de entorno por defecto + env: {} - mounts: [] # No hay archivos para montar por defecto + mounts: [] From b9c73f462e86bc4b1b2105786d5ae61249cb4b28 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:52:06 -0600 Subject: [PATCH 14/15] fix: Improve base64 encoding of compose and template files --- .github/workflows/base64-templates.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/base64-templates.yml b/.github/workflows/base64-templates.yml index b95799c..9ffb903 100644 --- a/.github/workflows/base64-templates.yml +++ b/.github/workflows/base64-templates.yml @@ -35,8 +35,8 @@ jobs: TEMPLATE_FILE="$dir/template.yml" if [ -f "$COMPOSE_FILE" ] && [ -f "$TEMPLATE_FILE" ]; then - COMPOSE_CONTENT=$(cat "$COMPOSE_FILE") - TEMPLATE_CONTENT=$(cat "$TEMPLATE_FILE") + COMPOSE_CONTENT=$(jq -Rs . < "$COMPOSE_FILE") + TEMPLATE_CONTENT=$(jq -Rs . < "$TEMPLATE_FILE") JSON="{\"compose\":\"$COMPOSE_CONTENT\",\"config\":\"$TEMPLATE_CONTENT\"}" BASE64_JSON=$(echo -n "$JSON" | base64 -w 0) From eed6aebb850d04671c69e38f849688e62fc6dcd1 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 17:54:06 -0600 Subject: [PATCH 15/15] fix: Correct JSON encoding in base64 templates workflow --- .github/workflows/base64-templates.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/base64-templates.yml b/.github/workflows/base64-templates.yml index 9ffb903..80010d1 100644 --- a/.github/workflows/base64-templates.yml +++ b/.github/workflows/base64-templates.yml @@ -38,7 +38,7 @@ jobs: COMPOSE_CONTENT=$(jq -Rs . < "$COMPOSE_FILE") TEMPLATE_CONTENT=$(jq -Rs . < "$TEMPLATE_FILE") - JSON="{\"compose\":\"$COMPOSE_CONTENT\",\"config\":\"$TEMPLATE_CONTENT\"}" + JSON="{\"compose\":$COMPOSE_CONTENT,\"config\":$TEMPLATE_CONTENT}" BASE64_JSON=$(echo -n "$JSON" | base64 -w 0) echo "#### $TEMPLATE_NAME" >> comment.md