From e70a3a4b4d9c3c6a3772d06b1a24a5f0cf799b4c Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Thu, 9 Jan 2025 09:29:25 +0100 Subject: [PATCH 001/120] Fix Checkmk Version grep (#1341) --- ct/checkmk.sh | 2 +- install/checkmk-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/checkmk.sh b/ct/checkmk.sh index 7822d1355..f1f930b8e 100644 --- a/ct/checkmk.sh +++ b/ct/checkmk.sh @@ -29,7 +29,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | grep -v "*-rc" | tail -n +2 | head -n 1) + RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }') if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Updating ${APP} to v${RELEASE}" omd stop monitoring &>/dev/null diff --git a/install/checkmk-install.sh b/install/checkmk-install.sh index 892c057da..e94f90c55 100644 --- a/install/checkmk-install.sh +++ b/install/checkmk-install.sh @@ -22,7 +22,7 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Install Checkmk" -RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | grep -v "*-rc" | tail -n +2 | head -n 1) +RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }') wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb $STD apt-get install -y /opt/checkmk.deb echo "${RELEASE}" >"/opt/checkmk_version.txt" From 2d3506c7d33ae41ed563936148da00b89f6d81e8 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 09:33:13 +0100 Subject: [PATCH 002/120] Update CHANGELOG.md (#1343) --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94a28fe1e..8119febd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,14 @@ All LXC instances created using this repository come pre-installed with Midnight > [!IMPORTANT] Do not break established syntax in this file, as it is automatically updated by a Github Workflow +## 2025-01-09 + +### Changed + +### 🚀 Updated Scripts + +- Fix Checkmk: Version grep broken [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1341](https://github.com/community-scripts/ProxmoxVE/pull/1341)) + ## 2025-01-08 ### Changed From 3bb26b7b417b9e21b6bbd7cf67d2248364490529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastiaan?= Date: Thu, 9 Jan 2025 09:33:50 +0100 Subject: [PATCH 003/120] only validate scripts in validate-scripts workflow (#1344) --- .github/workflows/validate-scripts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-scripts.yml b/.github/workflows/validate-scripts.yml index c58a5e593..938501c35 100644 --- a/.github/workflows/validate-scripts.yml +++ b/.github/workflows/validate-scripts.yml @@ -38,7 +38,7 @@ jobs: id: changed-files run: | if ${{ github.event_name == 'pull_request_target' }}; then - echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | xargs)" >> $GITHUB_OUTPUT + echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT else echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT fi From 19e7751fb90f0063826245656958efbce57ac0e3 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 09:35:00 +0100 Subject: [PATCH 004/120] Update CHANGELOG.md (#1345) --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8119febd6..3655c70ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,10 @@ Do not break established syntax in this file, as it is automatically updated by - Fix Checkmk: Version grep broken [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1341](https://github.com/community-scripts/ProxmoxVE/pull/1341)) +### 🧰 Maintenance + +- fix: only validate scripts in validate-scripts workflow [@se-bastiaan](https://github.com/se-bastiaan) ([#1344](https://github.com/community-scripts/ProxmoxVE/pull/1344)) + ## 2025-01-08 ### Changed From 6b183c9e4e6ed1f21690ef7fd6581cf36935294d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:36:40 +0100 Subject: [PATCH 005/120] Validate and auto-fix script formatting --- .github/workflows/validate-formatting.yaml | 57 ++++++++-------------- 1 file changed, 21 insertions(+), 36 deletions(-) diff --git a/.github/workflows/validate-formatting.yaml b/.github/workflows/validate-formatting.yaml index 220563976..896653bed 100644 --- a/.github/workflows/validate-formatting.yaml +++ b/.github/workflows/validate-formatting.yaml @@ -1,4 +1,4 @@ -name: Validate script formatting +name: Validate and auto-fix script formatting on: push: @@ -11,9 +11,10 @@ on: jobs: shfmt: - name: Check changed files + name: Check and fix formatting runs-on: ubuntu-latest permissions: + contents: write pull-requests: write steps: @@ -32,13 +33,13 @@ jobs: - name: Checkout code uses: actions/checkout@v4 with: - fetch-depth: 0 # Ensure the full history is fetched for accurate diffing + fetch-depth: 0 ref: ${{ github.event_name == 'pull_request_target' && fromJSON(steps.pr.outputs.result).merge_commit_sha || '' }} - name: Get changed files id: changed-files run: | - if ${{ github.event_name == 'pull_request_target' }}; then + if [ "${{ github.event_name }}" == "pull_request_target" ]; then echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT else echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT @@ -54,42 +55,36 @@ jobs: go install mvdan.cc/sh/v3/cmd/shfmt@latest echo "$GOPATH/bin" >> $GITHUB_PATH - - name: Run shfmt + - name: Fix formatting if: steps.changed-files.outputs.files != '' - id: shfmt run: | - set +e + shfmt -w ${{ steps.changed-files.outputs.files }} - shfmt_output=$(shfmt -d ${{ steps.changed-files.outputs.files }}) - if [[ $? -eq 0 ]]; then - exit 0 - else - echo "diff=\"$(echo -n "$shfmt_output" | base64 -w 0)\"" >> $GITHUB_OUTPUT - printf "%s" "$shfmt_output" - exit 1 - fi + - name: Commit and push changes + if: steps.changed-files.outputs.files != '' && github.event_name == 'pull_request_target' + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add ${{ steps.changed-files.outputs.files }} + git commit -m "chore: auto-fix formatting issues" + git push - name: Post comment with results - if: always() && steps.changed-files.outputs.files != '' && github.event_name == 'pull_request_target' + if: always() && github.event_name == 'pull_request_target' uses: actions/github-script@v7 with: script: | const result = "${{ job.status }}" === "success" ? "success" : "failure"; - const diff = Buffer.from( - ${{ steps.shfmt.outputs.diff }}, - "base64", - ).toString(); const issueNumber = context.payload.pull_request ? context.payload.pull_request.number : null; const commentIdentifier = "validate-formatting"; - let newCommentBody = `\n### Script formatting\n\n`; + let newCommentBody = `\n### Script Formatting Results\n\n`; if (result === "failure") { - newCommentBody += - `:x: We found issues in the formatting of the following changed files:\n\n\`\`\`diff\n${diff}\n\`\`\`\n`; + newCommentBody += `:x: Formatting issues were found and automatically fixed.\n`; } else { - newCommentBody += `:rocket: All changed shell scripts are formatted correctly!\n`; + newCommentBody += `:rocket: All scripts are properly formatted!\n`; } newCommentBody += `\n\n`; @@ -101,20 +96,11 @@ jobs: }); const existingComment = comments.find( - (comment) => comment.user.login === "github-actions[bot]", + (comment) => comment.user.login === "github-actions[bot]" && + comment.body.includes(commentIdentifier) ); if (existingComment) { - if (existingComment.body.includes(commentIdentifier)) { - const re = new RegExp( - String.raw`[\s\S]*?`, - "", - ); - newCommentBody = existingComment.body.replace(re, newCommentBody); - } else { - newCommentBody = existingComment.body + "\n\n---\n\n" + newCommentBody; - } - await github.rest.issues.updateComment({ ...context.repo, comment_id: existingComment.id, @@ -127,4 +113,3 @@ jobs: body: newCommentBody, }); } - } From 2646ea63179db32adf68f378dfd79b0d1a1a8283 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:39:31 +0100 Subject: [PATCH 006/120] Update validate-formatting.yaml --- .github/workflows/validate-formatting.yaml | 60 ++++++++++++++-------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/.github/workflows/validate-formatting.yaml b/.github/workflows/validate-formatting.yaml index 896653bed..8eadd0acf 100644 --- a/.github/workflows/validate-formatting.yaml +++ b/.github/workflows/validate-formatting.yaml @@ -1,4 +1,4 @@ -name: Validate and auto-fix script formatting +name: Validate script formatting on: push: @@ -11,10 +11,10 @@ on: jobs: shfmt: - name: Check and fix formatting + name: Check changed files runs-on: ubuntu-latest permissions: - contents: write + pull-requests: write steps: @@ -33,13 +33,13 @@ jobs: - name: Checkout code uses: actions/checkout@v4 with: - fetch-depth: 0 + fetch-depth: 0 # Ensure the full history is fetched for accurate diffing ref: ${{ github.event_name == 'pull_request_target' && fromJSON(steps.pr.outputs.result).merge_commit_sha || '' }} - name: Get changed files id: changed-files run: | - if [ "${{ github.event_name }}" == "pull_request_target" ]; then + if ${{ github.event_name == 'pull_request_target' }}; then echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT else echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT @@ -55,36 +55,43 @@ jobs: go install mvdan.cc/sh/v3/cmd/shfmt@latest echo "$GOPATH/bin" >> $GITHUB_PATH - - name: Fix formatting + - name: Run shfmt if: steps.changed-files.outputs.files != '' + id: shfmt run: | - shfmt -w ${{ steps.changed-files.outputs.files }} + set +e - - name: Commit and push changes - if: steps.changed-files.outputs.files != '' && github.event_name == 'pull_request_target' - run: | - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add ${{ steps.changed-files.outputs.files }} - git commit -m "chore: auto-fix formatting issues" - git push + + shfmt_output=$(shfmt -d ${{ steps.changed-files.outputs.files }}) + if [[ $? -eq 0 ]]; then + exit 0 + else + echo "diff=\"$(echo -n "$shfmt_output" | base64 -w 0)\"" >> $GITHUB_OUTPUT + printf "%s" "$shfmt_output" + exit 1 + fi - name: Post comment with results - if: always() && github.event_name == 'pull_request_target' + if: always() && steps.changed-files.outputs.files != '' && github.event_name == 'pull_request_target' uses: actions/github-script@v7 with: script: | const result = "${{ job.status }}" === "success" ? "success" : "failure"; + const diff = Buffer.from( + ${{ steps.shfmt.outputs.diff }}, + "base64", + ).toString(); const issueNumber = context.payload.pull_request ? context.payload.pull_request.number : null; const commentIdentifier = "validate-formatting"; - let newCommentBody = `\n### Script Formatting Results\n\n`; + let newCommentBody = `\n### Script formatting\n\n`; if (result === "failure") { - newCommentBody += `:x: Formatting issues were found and automatically fixed.\n`; + newCommentBody += + `:x: We found issues in the formatting of the following changed files:\n\n\`\`\`diff\n${diff}\n\`\`\`\n`; } else { - newCommentBody += `:rocket: All scripts are properly formatted!\n`; + newCommentBody += `:rocket: All changed shell scripts are formatted correctly!\n`; } newCommentBody += `\n\n`; @@ -96,11 +103,21 @@ jobs: }); const existingComment = comments.find( - (comment) => comment.user.login === "github-actions[bot]" && - comment.body.includes(commentIdentifier) + (comment) => comment.user.login === "github-actions[bot]", + ); if (existingComment) { + if (existingComment.body.includes(commentIdentifier)) { + const re = new RegExp( + String.raw`[\s\S]*?`, + "", + ); + newCommentBody = existingComment.body.replace(re, newCommentBody); + } else { + newCommentBody = existingComment.body + "\n\n---\n\n" + newCommentBody; + } + await github.rest.issues.updateComment({ ...context.repo, comment_id: existingComment.id, @@ -113,3 +130,4 @@ jobs: body: newCommentBody, }); } + } From 02401aa35d3c6d31636eb03e08bd074ad9923529 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:42:18 +0100 Subject: [PATCH 007/120] Update validate-scripts.yml --- .github/workflows/validate-scripts.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validate-scripts.yml b/.github/workflows/validate-scripts.yml index 938501c35..d0e129234 100644 --- a/.github/workflows/validate-scripts.yml +++ b/.github/workflows/validate-scripts.yml @@ -186,7 +186,11 @@ jobs: newCommentBody += ':x: We found issues in the following changed files:\n\n'; for (const [check, files] of Object.entries(nonCompliantFiles)) { if (files) { - newCommentBody += `**${check}:**\n${files.trim().split(' ').map(file => `- ${file}`).join('\n')}\n\n`; + newCommentBody += `**${check}:**\n`; + files.trim().split(' ').forEach(file => { + newCommentBody += `- ${file}: ${check}\n`; + }); + newCommentBody += `\n`; } } } else { @@ -205,7 +209,7 @@ jobs: if (existingComment) { if (existingComment.body.includes(commentIdentifier)) { - const re = new RegExp(String.raw`[\s\S]*?`, ""); + const re = new RegExp(String.raw`[\\s\\S]*?`, ""); newCommentBody = existingComment.body.replace(re, newCommentBody); } else { newCommentBody = existingComment.body + '\n\n---\n\n' + newCommentBody; From 37f4a841a664beb41cab8b4df27b1f346e6832f3 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:47:37 +0100 Subject: [PATCH 008/120] Update validate-scripts.yml --- .github/workflows/validate-scripts.yml | 38 ++++++++++++++------------ 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/.github/workflows/validate-scripts.yml b/.github/workflows/validate-scripts.yml index d0e129234..84b697063 100644 --- a/.github/workflows/validate-scripts.yml +++ b/.github/workflows/validate-scripts.yml @@ -16,6 +16,11 @@ jobs: pull-requests: write steps: + - name: Debug event payload + run: | + echo "Event name: ${{ github.event_name }}" + echo "Payload: $(cat $GITHUB_EVENT_PATH)" + - name: Get pull request information if: github.event_name == 'pull_request_target' uses: actions/github-script@v7 @@ -31,16 +36,16 @@ jobs: - name: Checkout code uses: actions/checkout@v4 with: - fetch-depth: 0 # Ensure the full history is fetched for accurate diffing + fetch-depth: 0 ref: ${{ github.event_name == 'pull_request_target' && fromJSON(steps.pr.outputs.result).merge_commit_sha || '' }} - name: Get changed files id: changed-files run: | - if ${{ github.event_name == 'pull_request_target' }}; then - echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT + if [ "${{ github.event_name }}" == "pull_request_target" ]; then + echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT else - echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT + echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT fi - name: Check build.func line @@ -170,12 +175,12 @@ jobs: script: | const result = '${{ job.status }}' === 'success' ? 'success' : 'failure'; const nonCompliantFiles = { - 'Invalid build.func source': "${{ steps.build-func.outputs.files }}", - 'Not executable': "${{ steps.check-executable.outputs.files }}", - 'Copyright header line missing or invalid': "${{ steps.check-copyright.outputs.files }}", - 'Author header line missing or invalid': "${{ steps.check-author.outputs.files }}", - 'License header line missing or invalid': "${{ steps.check-license.outputs.files }}", - 'Source header line missing or invalid': "${{ steps.check-source.outputs.files }}" + 'Invalid build.func source': "${{ steps.build-func.outputs.files || '' }}", + 'Not executable': "${{ steps.check-executable.outputs.files || '' }}", + 'Copyright header line missing or invalid': "${{ steps.check-copyright.outputs.files || '' }}", + 'Author header line missing or invalid': "${{ steps.check-author.outputs.files || '' }}", + 'License header line missing or invalid': "${{ steps.check-license.outputs.files || '' }}", + 'Source header line missing or invalid': "${{ steps.check-source.outputs.files || '' }}" }; const issueNumber = context.payload.pull_request ? context.payload.pull_request.number : null; @@ -205,15 +210,14 @@ jobs: issue_number: issueNumber }); - const existingComment = comments.find(comment => comment.user.login === 'github-actions[bot]'); + const existingComment = comments.find(comment => + comment.body.includes(``) && + comment.user.login === 'github-actions[bot]' + ); if (existingComment) { - if (existingComment.body.includes(commentIdentifier)) { - const re = new RegExp(String.raw`[\\s\\S]*?`, ""); - newCommentBody = existingComment.body.replace(re, newCommentBody); - } else { - newCommentBody = existingComment.body + '\n\n---\n\n' + newCommentBody; - } + const re = new RegExp(String.raw`[\\s\\S]*?`, "m"); + newCommentBody = existingComment.body.replace(re, newCommentBody); await github.rest.issues.updateComment({ ...context.repo, From ec1e5b3a4a7a76ec49071ca6642759f170a8b8c4 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:51:33 +0100 Subject: [PATCH 009/120] Rename validate-scripts.yml to validate-scripts.yml.bak --- .../workflows/{validate-scripts.yml => validate-scripts.yml.bak} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{validate-scripts.yml => validate-scripts.yml.bak} (100%) diff --git a/.github/workflows/validate-scripts.yml b/.github/workflows/validate-scripts.yml.bak similarity index 100% rename from .github/workflows/validate-scripts.yml rename to .github/workflows/validate-scripts.yml.bak From 5af9dd9e45a319c637028bbc5fa6fe352c1ab96f Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:51:54 +0100 Subject: [PATCH 010/120] Rename validate-formatting.yaml to validate-formatting.yaml.bak --- .../{validate-formatting.yaml => validate-formatting.yaml.bak} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{validate-formatting.yaml => validate-formatting.yaml.bak} (100%) diff --git a/.github/workflows/validate-formatting.yaml b/.github/workflows/validate-formatting.yaml.bak similarity index 100% rename from .github/workflows/validate-formatting.yaml rename to .github/workflows/validate-formatting.yaml.bak From d56d8dd369dc53c24cfa70e030d830fab178c683 Mon Sep 17 00:00:00 2001 From: Jesper Dramsch Date: Thu, 9 Jan 2025 15:53:47 +0100 Subject: [PATCH 011/120] Fix: AdventureLog - update script bug (#1334) * refactor: move installation for backup and maintain media and env files * fix: return to working directory * Workdir Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Workdir Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Avoid Workdir Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Avoid Workdir Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Remove old installation (at request of @michelroegl-brunner) Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * rm newline * rm last version --------- Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> --- ct/adventurelog.sh | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/ct/adventurelog.sh b/ct/adventurelog.sh index 5c168ce4e..a9c805420 100644 --- a/ct/adventurelog.sh +++ b/ct/adventurelog.sh @@ -40,19 +40,20 @@ function update_script() { msg_ok "Services Stopped" msg_info "Updating ${APP} to ${RELEASE}" - cp /opt/adventurelog/backend/server/.env /opt/server.env - cp /opt/adventurelog/frontend/.env /opt/frontend.env - wget -q "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip" - unzip -q v${RELEASE}.zip - mv AdventureLog-${RELEASE} /opt/adventurelog - mv /opt/server.env /opt/adventurelog/backend/server/.env + mv /opt/adventurelog/ /opt/adventurelog-backup/ + wget -qO /opt/v${RELEASE}.zip "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip" + unzip -q /opt/v${RELEASE}.zip + mv /opt/AdventureLog-${RELEASE} /opt/adventurelog + + mv /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env + mv /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media cd /opt/adventurelog/backend/server pip install --upgrade pip &>/dev/null pip install -r requirements.txt &>/dev/null python3 manage.py collectstatic --noinput &>/dev/null python3 manage.py migrate &>/dev/null - mv /opt/frontend.env /opt/adventurelog/frontend/.env + mv /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env cd /opt/adventurelog/frontend pnpm install &>/dev/null pnpm run build &>/dev/null @@ -65,7 +66,8 @@ function update_script() { msg_ok "Started Services" msg_info "Cleaning Up" - rm -rf v${RELEASE}.zip + rm -rf /opt/v${RELEASE}.zip + rm -rf /opt/adventurelog-backup msg_ok "Cleaned" msg_ok "Updated Successfully" else @@ -81,4 +83,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" From eb8ebfe7e439c318b1912ca6752673a998fae0bf Mon Sep 17 00:00:00 2001 From: Jeron Wong Date: Thu, 9 Jan 2025 07:21:30 -0800 Subject: [PATCH 012/120] New Script: calibre-server (#960) * init commit * spaghetti * Refactor calibre-server scripts: Update license link, correct variable tag case, and add newline in success message * Update * Update calibre-server.sh * Update calibre-server-install.sh * Update calibre-server.json --------- Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- ct/calibre-server.sh | 63 +++++++++++++++++++++++++++++++ install/calibre-server-install.sh | 59 +++++++++++++++++++++++++++++ json/calibre-server.json | 43 +++++++++++++++++++++ 3 files changed, 165 insertions(+) create mode 100644 ct/calibre-server.sh create mode 100644 install/calibre-server-install.sh create mode 100644 json/calibre-server.json diff --git a/ct/calibre-server.sh b/ct/calibre-server.sh new file mode 100644 index 000000000..b59e89c9e --- /dev/null +++ b/ct/calibre-server.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: thisisjeron +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://calibre-ebook.com + +# App Default Values +APP="Calibre-Server" +var_tags="eBook" +var_cpu="2" +var_ram="1024" +var_disk="4" +var_os="debian" +var_version="12" +var_unprivileged="1" + +# App Output & Base Settings +header_info "$APP" +base_settings + +# Core +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f /etc/systemd/system/calibre-server.service ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Stopping ${APP}" + systemctl stop calibre-server + msg_ok "Stopped ${APP}" + + msg_info "Updating ${APP} Packages" + apt-get update &>/dev/null + apt-get -y upgrade &>/dev/null + msg_ok "Packages updated" + + msg_info "Updating Calibre (latest)" + bash -c "$(curl -fsSL https://download.calibre-ebook.com/linux-installer.sh)" + msg_ok "Updated Calibre" + + msg_info "Starting ${APP}" + systemctl start calibre-server + msg_ok "Started ${APP}" + msg_ok "Updated Successfully" + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8180${CL}" diff --git a/install/calibre-server-install.sh b/install/calibre-server-install.sh new file mode 100644 index 000000000..c9396f30f --- /dev/null +++ b/install/calibre-server-install.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2024 +# Author: thisisjeron +# License: MIT +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE + +source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + sudo \ + curl \ + mc \ + imagemagick \ + xvfb \ + libxcomposite1 +msg_ok "Installed Dependencies" + +msg_info "Installing Calibre" +$STD bash -c "$(curl -fsSL https://download.calibre-ebook.com/linux-installer.sh)" +useradd -c "Calibre Server" -d /opt/calibre -s /bin/bash -m calibre +mkdir -p /opt/calibre/calibre-library +chown -R calibre:calibre /opt/calibre +msg_ok "Installed Calibre" + +msg_info "Creating Service" +cat </etc/systemd/system/calibre-server.service +[Unit] +Description=Calibre Content Server +After=network.target + +[Service] +Type=simple +User=calibre +Group=calibre +ExecStart=/opt/calibre/calibre-server --port=8180 --enable-local-write /opt/calibre/calibre-library +Restart=always + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now calibre-server.service +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" + diff --git a/json/calibre-server.json b/json/calibre-server.json new file mode 100644 index 000000000..2fec344d9 --- /dev/null +++ b/json/calibre-server.json @@ -0,0 +1,43 @@ +{ + "name": "Calibre-Server", + "slug": "calibre-server", + "categories": [ + 12 + ], + "date_created": "2025-01-09", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8180, + "documentation": null, + "website": "https://calibre-ebook.com", + "logo": "https://calibre-ebook.com/resources/icons/calibre_icon.png", + "description": "Calibre content server is used to manage and serve eBooks over the network.", + "install_methods": [ + { + "type": "default", + "script": "ct/calibre-server.sh", + "resources": { + "cpu": 2, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "By default, the Calibre Server runs on port 8180 with no username/password.", + "type": "info" + }, + { + "text": "Use 'calibredb add' from the calibre user or run 'xvfb-run calibredb add ...' if you need to add books while the server is running.", + "type": "info" + } + ] + } From 8dd43ddb810989dbb1b46d0acab5d321374659ec Mon Sep 17 00:00:00 2001 From: liecno Date: Thu, 9 Jan 2025 16:23:18 +0100 Subject: [PATCH 013/120] New script: ps5-mqtt (#1198) * Add ps5-mqtt script * Update location of currently installed version for ps5-mqtt script * Add version number to update information for ps5-mqtt script * Reformat dependencies when installing ps5-mqtt * Remove superfluous information messages when installing ps5-mqtt * Remove superfluous comment from ps5-mqtt install script * Improve wording for the config location for the ps5-mqtt script * Remove superfluous empty lines in ps5-mqtt install script * Reorder code structure for ps5-mqtt script * Remove superfluous .service string vom systemctl calls in ps5-mqtt script * Refactor handling with folders in the ps5-mqtt script * Reorder code in ps5-mqtt script * Reorder the code for getting release version in ps5-mqtt script * Update ps5-mqtt-install.sh * Update ps5-mqtt-install.sh * Update ps5-mqtt.json * Update * Update ps5-mqtt-install.sh * Fix npm * Fix Date in json --------- Co-authored-by: Michel Roegl-Brunner --- ct/ps5-mqtt.sh | 76 +++++++++++++++++++++++++ install/ps5-mqtt-install.sh | 109 ++++++++++++++++++++++++++++++++++++ json/ps5-mqtt.json | 39 +++++++++++++ 3 files changed, 224 insertions(+) create mode 100644 ct/ps5-mqtt.sh create mode 100644 install/ps5-mqtt-install.sh create mode 100644 json/ps5-mqtt.json diff --git a/ct/ps5-mqtt.sh b/ct/ps5-mqtt.sh new file mode 100644 index 000000000..4e75d0a54 --- /dev/null +++ b/ct/ps5-mqtt.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: liecno +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/FunkeyFlo/ps5-mqtt/ + +# App Default Values +APP="PS5-MQTT" +var_tags="smarthome;automation" +var_cpu="1" +var_ram="256" +var_disk="3" +var_os="debian" +var_version="12" +var_unprivileged="1" + +# App Output & Base Settings +header_info "$APP" +base_settings + +# Core +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/ps5-mqtt ]]; then + msg_error "No ${APP} installation found!" + exit + fi + + RELEASE=$(curl -s https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name') + + if [[ "${RELEASE}" != "$(cat /opt/ps5-mqtt_version.txt)" ]]; then + msg_info "Stopping service" + systemctl stop ps5-mqtt + msg_ok "Stopped service" + + msg_info "Updating PS5-MQTT to ${RELEASE}" + wget -P /tmp -q https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz + rm -rf /opt/ps5-mqtt + tar zxf /tmp/${RELEASE}.tar.gz -C /opt + mv /opt/ps5-mqtt-* /opt/ps5-mqtt + rm /tmp/${RELEASE}.tar.gz + echo ${RELEASE} > /opt/ps5-mqtt_version.txt + msg_ok "Updated PS5-MQTT" + + msg_info "Building new PS5-MQTT version" + cd /opt/ps5-mqtt/ps5-mqtt/ + npm install &>/dev/null + npm run build &>/dev/null + msg_ok "Built new PS5-MQTT version" + + msg_info "Starting service" + systemctl start ps5-mqtt + msg_ok "Started service" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8645${CL}" \ No newline at end of file diff --git a/install/ps5-mqtt-install.sh b/install/ps5-mqtt-install.sh new file mode 100644 index 000000000..e3a9295c5 --- /dev/null +++ b/install/ps5-mqtt-install.sh @@ -0,0 +1,109 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: liecno +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/FunkeyFlo/ps5-mqtt/ + +source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + curl \ + sudo \ + mc \ + jq +msg_ok "Installed Dependencies" + +msg_info "Setting up Node.js Repository" +mkdir -p /etc/apt/keyrings +curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +msg_ok "Set up Node.js Repository" + +msg_info "Installing Node.js" +$STD apt-get update +$STD apt-get install -y nodejs +$STD npm i -g playactor +msg_ok "Installed Node.js" + + +msg_info "Installing PS5-MQTT" +RELEASE=$(curl -s https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name') +wget -P /tmp -q https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz +tar zxf /tmp/${RELEASE}.tar.gz -C /opt +mv /opt/ps5-mqtt-* /opt/ps5-mqtt +cd /opt/ps5-mqtt/ps5-mqtt/ +$STD npm install +$STD npm run build +echo ${RELEASE} > /opt/ps5-mqtt_version.txt +msg_ok "Installed PS5-MQTT" + +msg_info "Creating Service" +mkdir -p /opt/.config/ps5-mqtt/ +mkdir -p /opt/.config/ps5-mqtt/playactor +cat < /opt/.config/ps5-mqtt/config.json +{ + "mqtt": { + "host": "", + "port": "", + "user": "", + "pass": "", + "discovery_topic": "homeassistant" + }, + + "device_check_interval": 5000, + "device_discovery_interval": 60000, + "device_discovery_broadcast_address": "", + + "include_ps4_devices": false, + + "psn_accounts": [ + { + "username": "", + "npsso":"" + } + ], + + "account_check_interval": 5000, + + "credentialsStoragePath": "/opt/.config/ps5-mqtt/credentials.json", + "frontendPort": "8645" +} +EOF +cat </etc/systemd/system/ps5-mqtt.service +[Unit] +Description=PS5-MQTT Daemon +After=syslog.target network.target + +[Service] +WorkingDirectory=/opt/ps5-mqtt/ps5-mqtt +Environment="CONFIG_PATH=/opt/.config/ps5-mqtt/config.json" +Environment="DEBUG='@ha:ps5:*'" +Restart=always +RestartSec=5 +Type=simple +ExecStart=node server/dist/index.js +KillMode=process +SyslogIdentifier=ps5-mqtt + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now ps5-mqtt +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +rm /tmp/${RELEASE}.tar.gz +msg_ok "Cleaned" diff --git a/json/ps5-mqtt.json b/json/ps5-mqtt.json new file mode 100644 index 000000000..2371fe158 --- /dev/null +++ b/json/ps5-mqtt.json @@ -0,0 +1,39 @@ +{ + "name": "PS5-MQTT", + "slug": "ps5-mqtt", + "categories": [ + 3 + ], + "date_created": "2025-01-09", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8645, + "documentation": null, + "website": "https://github.com/FunkeyFlo/", + "logo": "https://github.com/FunkeyFlo/ps5-mqtt/blob/main/add-ons/ps5-mqtt/logo.png?raw=true", + "description": "Integrate your Sony Playstation 5 devices with Home Assistant using MQTT.", + "install_methods": [ + { + "type": "default", + "script": "ct/ps5-mqtt.sh", + "resources": { + "cpu": 1, + "ram": 265, + "hdd": 3, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "After installation, the MQTT endpoint must be configured. The configuration file is located within the LXC container at: `/opt/.config/ps5-mqtt/config.json`", + "type": "info" + } + ] +} From e592b80716fb9578254595d8ca772358539ce9e3 Mon Sep 17 00:00:00 2001 From: Andy Grunwald Date: Thu, 9 Jan 2025 16:25:06 +0100 Subject: [PATCH 014/120] New Script: Prometheus Alertmanager (#1272) * New Script: Prometheus Alertmanager * Alertmanager: Append v before Release-Version * Alertmanager: Switch to `/opt` before updating release * Alertmanager: Split `var_tags` by `;` * Alertmanager: Change installation of curl, sudo and mc to a oneliner Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Alertmanager: Set correct copyright * Alertmanager: Change the way how the systemd unit file is written to disk Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Alertmanager: Changed the way on how we move and delete files * Alertmanager: Make files executable * Alertmanager: Set correct license and source header * Update prometheus-alertmanager.json --------- Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- ct/prometheus-alertmanager.sh | 68 ++++++++++++++++++++++ install/prometheus-alertmanager-install.sh | 64 ++++++++++++++++++++ json/prometheus-alertmanager.json | 34 +++++++++++ 3 files changed, 166 insertions(+) create mode 100755 ct/prometheus-alertmanager.sh create mode 100755 install/prometheus-alertmanager-install.sh create mode 100644 json/prometheus-alertmanager.json diff --git a/ct/prometheus-alertmanager.sh b/ct/prometheus-alertmanager.sh new file mode 100755 index 000000000..90858dac1 --- /dev/null +++ b/ct/prometheus-alertmanager.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: Andy Grunwald (andygrunwald) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://prometheus.io/ + +# App Default Values +APP="Prometheus-Alertmanager" +var_tags="monitoring;alerting" +var_cpu="1" +var_ram="1024" +var_disk="2" +var_os="debian" +var_version="12" +var_unprivileged="1" + +# App Output & Base Settings +header_info "$APP" +base_settings + +# Core +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + if [[ ! -f /etc/systemd/system/prometheus-alertmanager.service ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + msg_info "Stopping ${APP}" + systemctl stop prometheus-alertmanager + msg_ok "Stopped ${APP}" + + msg_info "Updating ${APP} to v${RELEASE}" + cd /opt + wget -q https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz + tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz + cd alertmanager-${RELEASE}.linux-amd64 + cp -rf alertmanager amtool /usr/local/bin/ + rm -rf alertmanager-${RELEASE}.linux-amd64 alertmanager-${RELEASE}.linux-amd64.tar.gz + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated ${APP} to ${RELEASE}" + + msg_info "Starting ${APP}" + systemctl start prometheus-alertmanager + msg_ok "Started ${APP}" + msg_ok "Updated Successfully" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9093${CL}" \ No newline at end of file diff --git a/install/prometheus-alertmanager-install.sh b/install/prometheus-alertmanager-install.sh new file mode 100755 index 000000000..3ce9dc0a0 --- /dev/null +++ b/install/prometheus-alertmanager-install.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: Andy Grunwald (andygrunwald) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://prometheus.io/ + +source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + curl \ + sudo \ + mc +msg_ok "Installed Dependencies" + +msg_info "Installing Prometheus Alertmanager" +RELEASE=$(curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +mkdir -p /etc/alertmanager +mkdir -p /var/lib/alertmanager +wget -q https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz +tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz +mv alertmanager-${RELEASE}.linux-amd64/alertmanager alertmanager-${RELEASE}.linux-amd64/amtool /usr/local/bin/ +mv alertmanager-${RELEASE}.linux-amd64/alertmanager.yml /etc/alertmanager/alertmanager.yml +echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +msg_ok "Installed Prometheus Alertmanager" + +msg_info "Creating Service" +cat </etc/systemd/system/prometheus-alertmanager.service +echo "[Unit] +Description=Prometheus Alertmanager +Wants=network-online.target +After=network-online.target + +[Service] +User=root +Restart=always +Type=simple +ExecStart=/usr/local/bin/alertmanager \ + --config.file=/etc/alertmanager/alertmanager.yml \ + --storage.path=/var/lib/alertmanager/ \ + --web.listen-address=0.0.0.0:9093 +ExecReload=/bin/kill -HUP \$MAINPID + +[Install] +WantedBy=multi-user.target" +EOF +systemctl enable -q --now prometheus-alertmanager +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +rm -rf alertmanager-${RELEASE}.linux-amd64 alertmanager-${RELEASE}.linux-amd64.tar.gz +msg_ok "Cleaned" diff --git a/json/prometheus-alertmanager.json b/json/prometheus-alertmanager.json new file mode 100644 index 000000000..d6e152d55 --- /dev/null +++ b/json/prometheus-alertmanager.json @@ -0,0 +1,34 @@ +{ + "name": "Prometheus Alertmanager", + "slug": "prometheus-alertmanager", + "categories": [ + 7 + ], + "date_created": "2025-01-09" + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 9093, + "documentation": "https://prometheus.io/docs/alerting/latest/overview/", + "website": "https://prometheus.io/", + "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/prometheus.svg", + "description": "Alerting with Prometheus is separated into two parts. Alerting rules in Prometheus servers send alerts to an Alertmanager. The Alertmanager then manages those alerts, including silencing, inhibition, aggregation and sending out notifications via methods such as email, on-call notification systems, and chat platforms.", + "install_methods": [ + { + "type": "default", + "script": "ct/prometheus-alertmanager.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 2, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} From 5c1954c85d15230b8d03634423e1083208b448c1 Mon Sep 17 00:00:00 2001 From: Spyros Roum Date: Thu, 9 Jan 2025 17:25:45 +0200 Subject: [PATCH 015/120] Install/update ActualBudget based on releases, not latest master (#1254) * Install/update ActualBudget based on releases, not latest main * Use tarballs for actualbudget install/update --- ct/actualbudget.sh | 11 ++++++++--- install/actualbudget-install.sh | 6 ++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ct/actualbudget.sh b/ct/actualbudget.sh index 8bad74dcd..63c94e3e4 100644 --- a/ct/actualbudget.sh +++ b/ct/actualbudget.sh @@ -34,11 +34,16 @@ function update_script() { fi msg_info "Updating ${APP}" systemctl stop actualbudget.service + RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name') + TEMPD="$(mktemp -d)" + cd "${TEMPD}" + wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz + mv actualbudget-actual-server-*/* /opt/actualbudget/ cd /opt/actualbudget - git pull &>/dev/null yarn install &>/dev/null systemctl start actualbudget.service - msg_ok "Successfully Updated ${APP}" + msg_ok "Successfully Updated ${APP} to ${RELEASE}" + rm -rf "${TEMPD}" exit } @@ -49,4 +54,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5006${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5006${CL}" diff --git a/install/actualbudget-install.sh b/install/actualbudget-install.sh index 64995d5a7..3a62fb5ee 100644 --- a/install/actualbudget-install.sh +++ b/install/actualbudget-install.sh @@ -35,8 +35,10 @@ $STD apt-get install -y nodejs $STD npm install --global yarn msg_ok "Installed Node.js" -msg_info "Installing Actual Budget" -$STD git clone https://github.com/actualbudget/actual-server.git /opt/actualbudget +RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name') +msg_info "Installing Actual Budget $RELEASE" +wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz +mv actualbudget-actual-server-* /opt/actualbudget mkdir -p /opt/actualbudget/server-files chown -R root:root /opt/actualbudget/server-files chmod 755 /opt/actualbudget/server-files From c6efe42eeef2f3a1798b051bdb9d86061dcc98a5 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:28:35 +0100 Subject: [PATCH 016/120] Update CHANGELOG.md (#1352) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3655c70ee..f3fbf04e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,8 +20,16 @@ Do not break established syntax in this file, as it is automatically updated by ### Changed +### ✨ New Scripts + +- New Script: Prometheus Alertmanager [@andygrunwald](https://github.com/andygrunwald) ([#1272](https://github.com/community-scripts/ProxmoxVE/pull/1272)) +- New script: ps5-mqtt [@liecno](https://github.com/liecno) ([#1198](https://github.com/community-scripts/ProxmoxVE/pull/1198)) +- New Script: calibre-server [@ThisIsJeron](https://github.com/ThisIsJeron) ([#960](https://github.com/community-scripts/ProxmoxVE/pull/960)) + ### 🚀 Updated Scripts +- Install/update ActualBudget based on releases, not latest master [@SpyrosRoum](https://github.com/SpyrosRoum) ([#1254](https://github.com/community-scripts/ProxmoxVE/pull/1254)) +- Fix: AdventureLog - update script bug [@JesperDramsch](https://github.com/JesperDramsch) ([#1334](https://github.com/community-scripts/ProxmoxVE/pull/1334)) - Fix Checkmk: Version grep broken [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1341](https://github.com/community-scripts/ProxmoxVE/pull/1341)) ### 🧰 Maintenance From 0ce45140c760896ee1d0c74f43f18991c4e14334 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:29:55 +0100 Subject: [PATCH 017/120] fix space in calbre script --- install/calibre-server-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/calibre-server-install.sh b/install/calibre-server-install.sh index c9396f30f..fa2916f8b 100644 --- a/install/calibre-server-install.sh +++ b/install/calibre-server-install.sh @@ -14,7 +14,7 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ +$STD apt-get install -y \ sudo \ curl \ mc \ From b2ba72a906dbaa9dd516f8c254cbf8091e582ffe Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:33:44 +0100 Subject: [PATCH 018/120] fix certificate issue ps5mqtt --- install/ps5-mqtt-install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/install/ps5-mqtt-install.sh b/install/ps5-mqtt-install.sh index e3a9295c5..be880e463 100644 --- a/install/ps5-mqtt-install.sh +++ b/install/ps5-mqtt-install.sh @@ -18,13 +18,15 @@ $STD apt-get install -y \ curl \ sudo \ mc \ - jq + jq \ + ca-certificates \ + gnupg msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg -echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list msg_ok "Set up Node.js Repository" msg_info "Installing Node.js" From 189dbf67b64595910e2f7bee3af6a5bd002bf55e Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:41:32 +0100 Subject: [PATCH 019/120] add libegl1 --- install/calibre-server-install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install/calibre-server-install.sh b/install/calibre-server-install.sh index fa2916f8b..c2af70fe3 100644 --- a/install/calibre-server-install.sh +++ b/install/calibre-server-install.sh @@ -20,7 +20,8 @@ $STD apt-get install -y \ mc \ imagemagick \ xvfb \ - libxcomposite1 + libxcomposite1 \ + libegl1 msg_ok "Installed Dependencies" msg_info "Installing Calibre" From bfd6b584069f445fddb58f9bed419296511339a8 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:48:06 +0100 Subject: [PATCH 020/120] Increase RAM --- json/ps5-mqtt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/json/ps5-mqtt.json b/json/ps5-mqtt.json index 2371fe158..6151a7486 100644 --- a/json/ps5-mqtt.json +++ b/json/ps5-mqtt.json @@ -19,7 +19,7 @@ "script": "ct/ps5-mqtt.sh", "resources": { "cpu": 1, - "ram": 265, + "ram": 512, "hdd": 3, "os": "debian", "version": "12" From 6653b9297287b7c378a7c5ffb5ec6e9d0aab4a05 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:48:29 +0100 Subject: [PATCH 021/120] Increase RAM --- ct/ps5-mqtt.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/ps5-mqtt.sh b/ct/ps5-mqtt.sh index 4e75d0a54..98e751e4f 100644 --- a/ct/ps5-mqtt.sh +++ b/ct/ps5-mqtt.sh @@ -9,7 +9,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m APP="PS5-MQTT" var_tags="smarthome;automation" var_cpu="1" -var_ram="256" +var_ram="512" var_disk="3" var_os="debian" var_version="12" @@ -73,4 +73,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8645${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8645${CL}" From da071d800bef7ca3e5f0081a917ae81bda292cba Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:52:35 +0100 Subject: [PATCH 022/120] Fix Dependency --- install/calibre-server-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/calibre-server-install.sh b/install/calibre-server-install.sh index c2af70fe3..28cb7fbbe 100644 --- a/install/calibre-server-install.sh +++ b/install/calibre-server-install.sh @@ -21,7 +21,7 @@ $STD apt-get install -y \ imagemagick \ xvfb \ libxcomposite1 \ - libegl1 + libopengl0 msg_ok "Installed Dependencies" msg_info "Installing Calibre" From 179defdd88669dbf7950ebfa741649c2f5da5c8a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:09:47 +0100 Subject: [PATCH 023/120] Update calibre-server-install.sh --- install/calibre-server-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/calibre-server-install.sh b/install/calibre-server-install.sh index 28cb7fbbe..36e28956e 100644 --- a/install/calibre-server-install.sh +++ b/install/calibre-server-install.sh @@ -25,7 +25,7 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Installing Calibre" -$STD bash -c "$(curl -fsSL https://download.calibre-ebook.com/linux-installer.sh)" +wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sh /dev/stdin useradd -c "Calibre Server" -d /opt/calibre -s /bin/bash -m calibre mkdir -p /opt/calibre/calibre-library chown -R calibre:calibre /opt/calibre From d8ad4545ad2c83dbcd961e6592f36ef72e4d32b5 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:10:36 +0100 Subject: [PATCH 024/120] Update calibre-server.sh --- ct/calibre-server.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/calibre-server.sh b/ct/calibre-server.sh index b59e89c9e..e05dd2e73 100644 --- a/ct/calibre-server.sh +++ b/ct/calibre-server.sh @@ -43,7 +43,7 @@ function update_script() { msg_ok "Packages updated" msg_info "Updating Calibre (latest)" - bash -c "$(curl -fsSL https://download.calibre-ebook.com/linux-installer.sh)" + wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sh /dev/stdin &>/dev/null msg_ok "Updated Calibre" msg_info "Starting ${APP}" From 4985fda206a690b4f38247878374d86703aa0a7d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:14:09 +0100 Subject: [PATCH 025/120] Update prometheus-alertmanager.json --- json/prometheus-alertmanager.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/json/prometheus-alertmanager.json b/json/prometheus-alertmanager.json index d6e152d55..d6b0cda58 100644 --- a/json/prometheus-alertmanager.json +++ b/json/prometheus-alertmanager.json @@ -4,7 +4,7 @@ "categories": [ 7 ], - "date_created": "2025-01-09" + "date_created": "2025-01-09", "type": "ct", "updateable": true, "privileged": false, From 045ba815335f122bd31939a6e5ceb4d6dab60643 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:17:18 +0100 Subject: [PATCH 026/120] Update CHANGELOG.md (#1353) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3fbf04e5..b28297bed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,8 +28,8 @@ Do not break established syntax in this file, as it is automatically updated by ### 🚀 Updated Scripts -- Install/update ActualBudget based on releases, not latest master [@SpyrosRoum](https://github.com/SpyrosRoum) ([#1254](https://github.com/community-scripts/ProxmoxVE/pull/1254)) - Fix: AdventureLog - update script bug [@JesperDramsch](https://github.com/JesperDramsch) ([#1334](https://github.com/community-scripts/ProxmoxVE/pull/1334)) +- Install/update ActualBudget based on releases, not latest master [@SpyrosRoum](https://github.com/SpyrosRoum) ([#1254](https://github.com/community-scripts/ProxmoxVE/pull/1254)) - Fix Checkmk: Version grep broken [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1341](https://github.com/community-scripts/ProxmoxVE/pull/1341)) ### 🧰 Maintenance From 9a7dcef25a36f3dfe37f6b2b4e7b8485bda867da Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:20:47 +0100 Subject: [PATCH 027/120] Update calibre-server-install.sh --- install/calibre-server-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/calibre-server-install.sh b/install/calibre-server-install.sh index 36e28956e..0efbcab1d 100644 --- a/install/calibre-server-install.sh +++ b/install/calibre-server-install.sh @@ -21,6 +21,7 @@ $STD apt-get install -y \ imagemagick \ xvfb \ libxcomposite1 \ + libegl1 \ libopengl0 msg_ok "Installed Dependencies" From 5170056078b3a1e11c8d872c720e3014530752c9 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:27:59 +0100 Subject: [PATCH 028/120] Update actualbudget.sh --- ct/actualbudget.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ct/actualbudget.sh b/ct/actualbudget.sh index 63c94e3e4..75dcdb19d 100644 --- a/ct/actualbudget.sh +++ b/ct/actualbudget.sh @@ -32,18 +32,26 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi + if ! command -v jq >/dev/null 2>&1; then + echo "Installing jq..." + apt-get install -y jq >/dev/null 2>&1 + echo "Installed jq..." + fi + msg_info "Updating ${APP}" - systemctl stop actualbudget.service + systemctl stop actualbudget RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name') TEMPD="$(mktemp -d)" cd "${TEMPD}" wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz + mv /opt/actualbudget /opt/actualbudget_bak mv actualbudget-actual-server-*/* /opt/actualbudget/ cd /opt/actualbudget yarn install &>/dev/null - systemctl start actualbudget.service + systemctl start actualbudget msg_ok "Successfully Updated ${APP} to ${RELEASE}" rm -rf "${TEMPD}" + rm -rf /opt/actualbudget_bak exit } From 14e185af8521df1894c47a7f00b00b9c8d8240c6 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Thu, 9 Jan 2025 19:07:31 +0100 Subject: [PATCH 029/120] Update calibre-server-install.sh (#1359) --- install/calibre-server-install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install/calibre-server-install.sh b/install/calibre-server-install.sh index 0efbcab1d..32a40bc3a 100644 --- a/install/calibre-server-install.sh +++ b/install/calibre-server-install.sh @@ -22,7 +22,8 @@ $STD apt-get install -y \ xvfb \ libxcomposite1 \ libegl1 \ - libopengl0 + libopengl0 \ + libxcb-cursor0 msg_ok "Installed Dependencies" msg_info "Installing Calibre" From 0b85f26a4e88bbc523edad7a5b12acc5670b84bc Mon Sep 17 00:00:00 2001 From: Matt Burns <1515005+m6urns@users.noreply.github.com> Date: Thu, 9 Jan 2025 11:10:02 -0700 Subject: [PATCH 030/120] Fix: Stirling-PDF > LibreOffice/unoconv Integration Issues (#1322) * Modify install script to install core libreoffice components. Configure a running libreoffice service and setup env variables so they are accessible to StirlingPDF. Modify stirlingPDF service to wait for libreoffice service to start. Enable and explicitly start libreoffice and stirlingPDF services. * Apply suggestions from code review Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Update stirling-pdf-install.sh --------- Co-authored-by: Michel Roegl-Brunner --- install/stirling-pdf-install.sh | 53 ++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/install/stirling-pdf-install.sh b/install/stirling-pdf-install.sh index 788cb757f..3fb5839a1 100644 --- a/install/stirling-pdf-install.sh +++ b/install/stirling-pdf-install.sh @@ -36,7 +36,11 @@ msg_info "Installing LibreOffice Components" $STD apt-get install -y \ libreoffice-writer \ libreoffice-calc \ - libreoffice-impress + libreoffice-impress \ + libreoffice-core \ + libreoffice-common \ + libreoffice-base-core \ + python3-uno msg_ok "Installed LibreOffice Components" msg_info "Installing Python Dependencies" @@ -75,8 +79,8 @@ msg_ok "Installed Language Packs" msg_info "Installing Stirling-PDF (Additional Patience)" RELEASE=$(curl -s https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz -tar -xzf v$RELEASE.tar.gz +wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${RELEASE}.tar.gz +tar -xzf v${RELEASE}.tar.gz cd Stirling-PDF-$RELEASE chmod +x ./gradlew $STD ./gradlew build @@ -86,37 +90,66 @@ mv ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/ mv scripts /opt/Stirling-PDF/ ln -s /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata -msg_ok "Installed Stirling-PDF v$RELEASE" +msg_ok "Installed Stirling-PDF" msg_info "Creating Service" +# Create LibreOffice listener service +cat </etc/systemd/system/libreoffice-listener.service +[Unit] +Description=LibreOffice Headless Listener Service +After=network.target + +[Service] +Type=simple +User=root +Group=root +ExecStart=/usr/lib/libreoffice/program/soffice --headless --invisible --nodefault --nofirststartwizard --nolockcheck --nologo --accept="socket,host=127.0.0.1,port=2002;urp;StarOffice.ComponentContext" +Restart=always + +[Install] +WantedBy=multi-user.target +EOF + +# Set up environment variables +cat </opt/Stirling-PDF/.env +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/libreoffice/program +UNO_PATH=/usr/lib/libreoffice/program +PYTHONPATH=/usr/lib/python3/dist-packages:/usr/lib/libreoffice/program +LD_LIBRARY_PATH=/usr/lib/libreoffice/program +EOF + cat </etc/systemd/system/stirlingpdf.service [Unit] Description=Stirling-PDF service -After=syslog.target network.target +After=syslog.target network.target libreoffice-listener.service +Requires=libreoffice-listener.service [Service] SuccessExitStatus=143 - +Type=simple User=root Group=root - -Type=simple EnvironmentFile=/opt/Stirling-PDF/.env WorkingDirectory=/opt/Stirling-PDF ExecStart=/usr/bin/java -jar Stirling-PDF.jar ExecStop=/bin/kill -15 %n +Restart=always +RestartSec=10 [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now stirlingpdf.service + +# Enable and start services +systemctl enable -q --now libreoffice-listener +systemctl enable -q --now stirlingpdf msg_ok "Created Service" motd_ssh customize msg_info "Cleaning up" -rm -rf v$RELEASE.tar.gz /zulu-repo_1.0.0-3_all.deb +rm -rf v${RELEASE}.tar.gz /zulu-repo_1.0.0-3_all.deb $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 8a9e162e9b0a34b708205e4f46f36a32b1bca148 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 19:10:24 +0100 Subject: [PATCH 031/120] Update CHANGELOG.md (#1360) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b28297bed..70c219132 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,8 @@ Do not break established syntax in this file, as it is automatically updated by ### 🚀 Updated Scripts +- Fix: Stirling-PDF > LibreOffice/unoconv Integration Issues [@m6urns](https://github.com/m6urns) ([#1322](https://github.com/community-scripts/ProxmoxVE/pull/1322)) +- Update calibre-server-install.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1359](https://github.com/community-scripts/ProxmoxVE/pull/1359)) - Fix: AdventureLog - update script bug [@JesperDramsch](https://github.com/JesperDramsch) ([#1334](https://github.com/community-scripts/ProxmoxVE/pull/1334)) - Install/update ActualBudget based on releases, not latest master [@SpyrosRoum](https://github.com/SpyrosRoum) ([#1254](https://github.com/community-scripts/ProxmoxVE/pull/1254)) - Fix Checkmk: Version grep broken [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1341](https://github.com/community-scripts/ProxmoxVE/pull/1341)) From 3a9d55abf41cee2149d5f79ee459d8b727d46977 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Thu, 9 Jan 2025 20:09:07 +0100 Subject: [PATCH 032/120] Delete calibre (#1362) * Delete ct/calibre-server.sh * Delete json/calibre-server.json * Delete install/calibre-server-install.sh --- ct/calibre-server.sh | 63 ------------------------------- install/calibre-server-install.sh | 62 ------------------------------ json/calibre-server.json | 43 --------------------- 3 files changed, 168 deletions(-) delete mode 100644 ct/calibre-server.sh delete mode 100644 install/calibre-server-install.sh delete mode 100644 json/calibre-server.json diff --git a/ct/calibre-server.sh b/ct/calibre-server.sh deleted file mode 100644 index e05dd2e73..000000000 --- a/ct/calibre-server.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2025 community-scripts ORG -# Author: thisisjeron -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://calibre-ebook.com - -# App Default Values -APP="Calibre-Server" -var_tags="eBook" -var_cpu="2" -var_ram="1024" -var_disk="4" -var_os="debian" -var_version="12" -var_unprivileged="1" - -# App Output & Base Settings -header_info "$APP" -base_settings - -# Core -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -f /etc/systemd/system/calibre-server.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Stopping ${APP}" - systemctl stop calibre-server - msg_ok "Stopped ${APP}" - - msg_info "Updating ${APP} Packages" - apt-get update &>/dev/null - apt-get -y upgrade &>/dev/null - msg_ok "Packages updated" - - msg_info "Updating Calibre (latest)" - wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sh /dev/stdin &>/dev/null - msg_ok "Updated Calibre" - - msg_info "Starting ${APP}" - systemctl start calibre-server - msg_ok "Started ${APP}" - msg_ok "Updated Successfully" - exit -} - -start -build_container -description - -msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8180${CL}" diff --git a/install/calibre-server-install.sh b/install/calibre-server-install.sh deleted file mode 100644 index 32a40bc3a..000000000 --- a/install/calibre-server-install.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2024 -# Author: thisisjeron -# License: MIT -# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE - -source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt-get install -y \ - sudo \ - curl \ - mc \ - imagemagick \ - xvfb \ - libxcomposite1 \ - libegl1 \ - libopengl0 \ - libxcb-cursor0 -msg_ok "Installed Dependencies" - -msg_info "Installing Calibre" -wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sh /dev/stdin -useradd -c "Calibre Server" -d /opt/calibre -s /bin/bash -m calibre -mkdir -p /opt/calibre/calibre-library -chown -R calibre:calibre /opt/calibre -msg_ok "Installed Calibre" - -msg_info "Creating Service" -cat </etc/systemd/system/calibre-server.service -[Unit] -Description=Calibre Content Server -After=network.target - -[Service] -Type=simple -User=calibre -Group=calibre -ExecStart=/opt/calibre/calibre-server --port=8180 --enable-local-write /opt/calibre/calibre-library -Restart=always - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now calibre-server.service -msg_ok "Created Service" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" - diff --git a/json/calibre-server.json b/json/calibre-server.json deleted file mode 100644 index 2fec344d9..000000000 --- a/json/calibre-server.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "Calibre-Server", - "slug": "calibre-server", - "categories": [ - 12 - ], - "date_created": "2025-01-09", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8180, - "documentation": null, - "website": "https://calibre-ebook.com", - "logo": "https://calibre-ebook.com/resources/icons/calibre_icon.png", - "description": "Calibre content server is used to manage and serve eBooks over the network.", - "install_methods": [ - { - "type": "default", - "script": "ct/calibre-server.sh", - "resources": { - "cpu": 2, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "By default, the Calibre Server runs on port 8180 with no username/password.", - "type": "info" - }, - { - "text": "Use 'calibredb add' from the calibre user or run 'xvfb-run calibredb add ...' if you need to add books while the server is running.", - "type": "info" - } - ] - } From 9d2ba6739b389998991ca341452a8d518d445c93 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 20:37:29 +0100 Subject: [PATCH 033/120] [Github Action] Update CHANGELOG.md (#1363) * Update CHANGELOG.md * Aktualisieren von CHANGELOG.md --------- Co-authored-by: github-actions[bot] Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70c219132..163edcaf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,11 +20,15 @@ Do not break established syntax in this file, as it is automatically updated by ### Changed +### 💥 Breaking Changes + +- Delete calibre [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1362](https://github.com/community-scripts/ProxmoxVE/pull/1362)) + ### ✨ New Scripts - New Script: Prometheus Alertmanager [@andygrunwald](https://github.com/andygrunwald) ([#1272](https://github.com/community-scripts/ProxmoxVE/pull/1272)) - New script: ps5-mqtt [@liecno](https://github.com/liecno) ([#1198](https://github.com/community-scripts/ProxmoxVE/pull/1198)) -- New Script: calibre-server [@ThisIsJeron](https://github.com/ThisIsJeron) ([#960](https://github.com/community-scripts/ProxmoxVE/pull/960)) + ### 🚀 Updated Scripts From 2c24952cd2c69e388673cca9216e64eabd6814bf Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 20:38:09 +0100 Subject: [PATCH 034/120] Update CHANGELOG.md (#1364) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 163edcaf8..3a66c2190 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,13 +22,13 @@ Do not break established syntax in this file, as it is automatically updated by ### 💥 Breaking Changes -- Delete calibre [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1362](https://github.com/community-scripts/ProxmoxVE/pull/1362)) +- Removal calibre-server (no Headless Support) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1362](https://github.com/community-scripts/ProxmoxVE/pull/1362)) ### ✨ New Scripts - New Script: Prometheus Alertmanager [@andygrunwald](https://github.com/andygrunwald) ([#1272](https://github.com/community-scripts/ProxmoxVE/pull/1272)) - New script: ps5-mqtt [@liecno](https://github.com/liecno) ([#1198](https://github.com/community-scripts/ProxmoxVE/pull/1198)) - +- New Script: calibre-server [@ThisIsJeron](https://github.com/ThisIsJeron) ([#960](https://github.com/community-scripts/ProxmoxVE/pull/960)) ### 🚀 Updated Scripts From 3ad50eb4273f11895ef34b41c53660771d8ec6f8 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 22:47:26 +0100 Subject: [PATCH 035/120] update CHANGELOG.md --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a66c2190..f7a9ca4e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,6 @@ Do not break established syntax in this file, as it is automatically updated by - New Script: Prometheus Alertmanager [@andygrunwald](https://github.com/andygrunwald) ([#1272](https://github.com/community-scripts/ProxmoxVE/pull/1272)) - New script: ps5-mqtt [@liecno](https://github.com/liecno) ([#1198](https://github.com/community-scripts/ProxmoxVE/pull/1198)) -- New Script: calibre-server [@ThisIsJeron](https://github.com/ThisIsJeron) ([#960](https://github.com/community-scripts/ProxmoxVE/pull/960)) ### 🚀 Updated Scripts From d8f433c94af492bb312e11eebdf9c58b83fc5c2c Mon Sep 17 00:00:00 2001 From: Jesper Dramsch Date: Thu, 9 Jan 2025 22:53:58 +0100 Subject: [PATCH 036/120] fix: unzip to /opt/ (#1370) --- ct/adventurelog.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/adventurelog.sh b/ct/adventurelog.sh index a9c805420..463762f48 100644 --- a/ct/adventurelog.sh +++ b/ct/adventurelog.sh @@ -42,7 +42,7 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" mv /opt/adventurelog/ /opt/adventurelog-backup/ wget -qO /opt/v${RELEASE}.zip "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip" - unzip -q /opt/v${RELEASE}.zip + unzip -q /opt/v${RELEASE}.zip -d /opt/ mv /opt/AdventureLog-${RELEASE} /opt/adventurelog mv /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env From baa578c20a2319c13ff6c81fdefba6f692acd354 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 23:02:06 +0100 Subject: [PATCH 037/120] add invalid / wontdo check --- .github/workflows/changelog-pr.yml | 35 ++++++++++++++++-------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/.github/workflows/changelog-pr.yml b/.github/workflows/changelog-pr.yml index ad4e2c587..097fd3e75 100644 --- a/.github/workflows/changelog-pr.yml +++ b/.github/workflows/changelog-pr.yml @@ -70,22 +70,25 @@ jobs: per_page: 100, }); - pulls.filter((pr) => - pr.merged_at && new Date(pr.merged_at) > latestDateInChangelog - ).forEach((pr) => { - const prLabels = pr.labels.map((label) => label.name.toLowerCase()); - const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`; - - for (const { labels, notes } of categorizedPRs) { - const prHasCategoryLabel = labels.some((label) => prLabels.includes(label)); - const isUnlabelledCategory = labels.length === 0; - const prShouldBeExcluded = prLabels.includes(process.env.AUTOMATED_PR_LABEL); - if ((prHasCategoryLabel || isUnlabelledCategory) && !prShouldBeExcluded) { - notes.push(prNote); - break; - } - }; - }); + const excludedLabels = ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL]; + +pulls.filter((pr) => + pr.merged_at && + new Date(pr.merged_at) > latestDateInChangelog && + !pr.labels.some((label) => excludedLabels.includes(label.name.toLowerCase())) +).forEach((pr) => { + const prLabels = pr.labels.map((label) => label.name.toLowerCase()); + const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`; + + for (const { labels, notes } of categorizedPRs) { + const prHasCategoryLabel = labels.some((label) => prLabels.includes(label)); + const isUnlabelledCategory = labels.length === 0; + if (prHasCategoryLabel || isUnlabelledCategory) { + notes.push(prNote); + break; + } + } +}); return categorizedPRs; From be1821b16f31cd4a4f586db15c7c02f2b2c31731 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 9 Jan 2025 23:05:53 +0100 Subject: [PATCH 038/120] Add invalid/wontdo check --- .github/workflows/changelog-pr.yml | 36 ++++++++++++++---------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/.github/workflows/changelog-pr.yml b/.github/workflows/changelog-pr.yml index 097fd3e75..48cf49972 100644 --- a/.github/workflows/changelog-pr.yml +++ b/.github/workflows/changelog-pr.yml @@ -70,25 +70,23 @@ jobs: per_page: 100, }); - const excludedLabels = ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL]; - -pulls.filter((pr) => - pr.merged_at && - new Date(pr.merged_at) > latestDateInChangelog && - !pr.labels.some((label) => excludedLabels.includes(label.name.toLowerCase())) -).forEach((pr) => { - const prLabels = pr.labels.map((label) => label.name.toLowerCase()); - const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`; - - for (const { labels, notes } of categorizedPRs) { - const prHasCategoryLabel = labels.some((label) => prLabels.includes(label)); - const isUnlabelledCategory = labels.length === 0; - if (prHasCategoryLabel || isUnlabelledCategory) { - notes.push(prNote); - break; - } - } -}); + pulls.filter((pr) => + pr.merged_at && + new Date(pr.merged_at) > latestDateInChangelog && + !pr.labels.some((label) => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase())) + ).forEach((pr) => { + const prLabels = pr.labels.map((label) => label.name.toLowerCase()); + const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`; + + for (const { labels, notes } of categorizedPRs) { + const prHasCategoryLabel = labels.some((label) => prLabels.includes(label)); + const isUnlabelledCategory = labels.length === 0; + if (prHasCategoryLabel || isUnlabelledCategory) { + notes.push(prNote); + break; + } + } + }); return categorizedPRs; From 749e4870326ccf5edf921ec62c1dd43862736f09 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 23:07:00 +0100 Subject: [PATCH 039/120] Update CHANGELOG.md (#1372) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7a9ca4e8..e56c61256 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,8 +31,8 @@ Do not break established syntax in this file, as it is automatically updated by ### 🚀 Updated Scripts +- Fix: AdventureLog: unzip to /opt/ [@JesperDramsch](https://github.com/JesperDramsch) ([#1370](https://github.com/community-scripts/ProxmoxVE/pull/1370)) - Fix: Stirling-PDF > LibreOffice/unoconv Integration Issues [@m6urns](https://github.com/m6urns) ([#1322](https://github.com/community-scripts/ProxmoxVE/pull/1322)) -- Update calibre-server-install.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1359](https://github.com/community-scripts/ProxmoxVE/pull/1359)) - Fix: AdventureLog - update script bug [@JesperDramsch](https://github.com/JesperDramsch) ([#1334](https://github.com/community-scripts/ProxmoxVE/pull/1334)) - Install/update ActualBudget based on releases, not latest master [@SpyrosRoum](https://github.com/SpyrosRoum) ([#1254](https://github.com/community-scripts/ProxmoxVE/pull/1254)) - Fix Checkmk: Version grep broken [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1341](https://github.com/community-scripts/ProxmoxVE/pull/1341)) From 77bac7a9195b00980ef0ebc5a35a618df3be4c61 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:18:04 +0100 Subject: [PATCH 040/120] Fix Actualbudget Update (#1376) --- ct/actualbudget.sh | 2 ++ install/actualbudget-install.sh | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/ct/actualbudget.sh b/ct/actualbudget.sh index 75dcdb19d..8741053c9 100644 --- a/ct/actualbudget.sh +++ b/ct/actualbudget.sh @@ -46,6 +46,8 @@ function update_script() { wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz mv /opt/actualbudget /opt/actualbudget_bak mv actualbudget-actual-server-*/* /opt/actualbudget/ + mv /opt/actualbudget_bak/.env /opt/actualbudget + mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files cd /opt/actualbudget yarn install &>/dev/null systemctl start actualbudget diff --git a/install/actualbudget-install.sh b/install/actualbudget-install.sh index 3a62fb5ee..e5400117d 100644 --- a/install/actualbudget-install.sh +++ b/install/actualbudget-install.sh @@ -20,6 +20,7 @@ $STD apt-get install -y \ mc \ gpg \ git \ + jq \ build-essential msg_ok "Installed Dependencies" @@ -40,10 +41,13 @@ msg_info "Installing Actual Budget $RELEASE" wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz mv actualbudget-actual-server-* /opt/actualbudget mkdir -p /opt/actualbudget/server-files +mkdir -p /opt/actualbudget-data chown -R root:root /opt/actualbudget/server-files chmod 755 /opt/actualbudget/server-files cat < /opt/actualbudget/.env ACTUAL_UPLOAD_DIR=/opt/actualbudget/server-files +ACTUAL_DATA_DIR=/opt/actualbudget-data +ACTUAL_SERVER_FILES_DIR=/opt/actualbudget/server-files PORT=5006 EOF cd /opt/actualbudget From b6402a0bd7bb27b70520d688729d2f542bba3ef2 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:25:00 +0100 Subject: [PATCH 041/120] Update CHANGELOG.md (#1377) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e56c61256..e2d85dbd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,14 @@ All LXC instances created using this repository come pre-installed with Midnight > [!IMPORTANT] Do not break established syntax in this file, as it is automatically updated by a Github Workflow +## 2025-01-10 + +### Changed + +### 🚀 Updated Scripts + +- Fix: ActualBudget Update-Function [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1376](https://github.com/community-scripts/ProxmoxVE/pull/1376)) + ## 2025-01-09 ### Changed From 5e5a81d2ae7a8bfbb0a6805cb07f66326e1e88ef Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Fri, 10 Jan 2025 10:17:41 +0100 Subject: [PATCH 042/120] Update nzbget.json (#1379) --- json/nzbget.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/json/nzbget.json b/json/nzbget.json index ea663fb16..71dfc31bc 100644 --- a/json/nzbget.json +++ b/json/nzbget.json @@ -2,7 +2,7 @@ "name": "NZBGet", "slug": "nzbget", "categories": [ - 0 + 16 ], "date_created": "2024-10-31", "type": "ct", From 160c546002172b1eb56ad5980b5fe7bfaf160360 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 10:33:33 +0100 Subject: [PATCH 043/120] Add initial PR for Contributing & Coding Standard (#920) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * First Design: CONTRIBUTING * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Ideas for CONTRIBUTING.md (#768) * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Add files via upload * fix var_tags * add comments to AppName.sh * Rework Contributing to merge the tow existing Versions * Remove coding_standards.md * Fix broken link * Fix broken link * UPDATE contributing * UPDATE contributing * UPDATE contributing * Update * UPDATE * Update AppName.md * UPDATE CONTRIBUTING.md * UPDATE CONTRIBUTING.md * Fixing some typos * Update Co-authored-by: Sébastiaan * Update Contributing --------- Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Co-authored-by: Michel Roegl-Brunner Co-authored-by: Rémi Bédard-Couture Co-authored-by: Sébastiaan --- .github/CONTRIBUTING.md | 111 +++++- .github/CONTRIBUTOR_GUIDE/ct/AppName.md | 288 ++++++++++++++ .github/CONTRIBUTOR_GUIDE/ct/AppName.sh | 93 +++++ .../install/AppName-install.md | 353 ++++++++++++++++++ .../install/AppName-install.sh | 86 +++++ .github/CONTRIBUTOR_GUIDE/json/AppName.json | 34 ++ .github/CONTRIBUTOR_GUIDE/json/AppName.md | 13 + 7 files changed, 968 insertions(+), 10 deletions(-) create mode 100644 .github/CONTRIBUTOR_GUIDE/ct/AppName.md create mode 100644 .github/CONTRIBUTOR_GUIDE/ct/AppName.sh create mode 100644 .github/CONTRIBUTOR_GUIDE/install/AppName-install.md create mode 100644 .github/CONTRIBUTOR_GUIDE/install/AppName-install.sh create mode 100644 .github/CONTRIBUTOR_GUIDE/json/AppName.json create mode 100644 .github/CONTRIBUTOR_GUIDE/json/AppName.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index b000bd25e..3b1027b12 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,14 +1,105 @@ - -

Contributing to Proxmox VE Helper Scripts

-Everybody is invited and welcome to contribute to Proxmox VE Helper Scripts. +# Community Scripts Contribution Guide -- Pull requests submitted against [**main**](https://github.com/community-scripts/ProxmoxVE/tree/main) are meticulously scrutinized, so please do not take it personally if the project maintainer rejects your request. By adhering to the established patterns and conventions throughout the codebase, you greatly increase the likelihood that your changes will get merged into [**main**](https://github.com/community-scripts/ProxmoxVE/tree/main). +## **Welcome to the communty-scripts Repository!** +📜 These documents outline the essential coding standards for all our scripts and JSON files. Adhering to these standards ensures that our codebase remains consistent, readable, and maintainable. By following these guidelines, we can improve collaboration, reduce errors, and enhance the overall quality of our project. + +### Why Coding Standards Matter + +Coding standards are crucial for several reasons: + +1. **Consistency**: Consistent code is easier to read, understand, and maintain. It helps new team members quickly get up to speed and reduces the learning curve. +2. **Readability**: Clear and well-structured code is easier to debug and extend. It allows developers to quickly identify and fix issues. +3. **Maintainability**: Code that follows a standard structure is easier to refactor and update. It ensures that changes can be made with minimal risk of introducing new bugs. +4. **Collaboration**: When everyone follows the same standards, it becomes easier to collaborate on code. It reduces friction and misunderstandings during code reviews and merges. + +### Scope of These Documents + +These documents cover the coding standards for the following types of files in our project: + +- **`install/$AppName-install.sh` Scripts**: These scripts are responsible for the installation of applications. +- **`ct/$AppName.sh` Scripts**: These scripts handle the creation and updating of containers. +- **`json/$AppName.json`**: These files store structured data and are used for the website. + +Each section provides detailed guidelines on various aspects of coding, including shebang usage, comments, variable naming, function naming, indentation, error handling, command substitution, quoting, script structure, and logging. Additionally, examples are provided to illustrate the application of these standards. + +By following the coding standards outlined in this document, we ensure that our scripts and JSON files are of high quality, making our project more robust and easier to manage. Please refer to this guide whenever you create or update scripts and JSON files to maintain a high standard of code quality across the project. 📚🔍 + +Let's work together to keep our codebase clean, efficient, and maintainable! 💪🚀 + + +## Getting Started + +Before contributing, please ensure that you have the following setup: + +1. **Visual Studio Code** (recommended for script development) +2. **Recommended VS Code Extensions:** + - [Shell Syntax](https://marketplace.visualstudio.com/items?itemName=bmalehorn.shell-syntax) + - [ShellCheck](https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck) + - [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format) + +### Important Notes +- Use [AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/ct/AppName.sh) and [AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh) as templates when creating new scripts. + +--- + +# 🚀 The Application Script (ct/AppName.sh) + +- You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/ct/AppName.md). +- These scripts are responsible for container creation, setting the necessary variables and handling the update of the application once installed. + +--- + +# 🛠 The Installation Script (install/AppName-install.sh) + +- You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.md). +- These scripts are responsible for the installation of the application. + +--- + +## 🚀 Building Your Own Scripts + +Start with the [template script](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh) + +--- + +## 🤝 Contribution Process + +### 1. Fork the repository +Fork to your GitHub account + +### 2. Clone your fork on your local environment +```bash +git clone https://github.com/yourUserName/ForkName +``` + +### 3. Create a new branch +```bash +git switch -c your-feature-branch +``` + +### 4. Change paths in build.func install.func and AppName.sh +To be able to develop from your own branch you need to change `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main` to `https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/head/[BRANCH]`. You need to make this change atleast in misc/build.func misc/install.func and in your ct/AppName.sh. This change is only for testing. Before opening a Pull Request you should change this line change all this back to point to `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`. + +### 4. Commit changes (without build.func and install.func!) +```bash +git commit -m "Your commit message" +``` + +### 5. Push to your fork +```bash +git push origin your-feature-branch +``` + +### 6. Create a Pull Request +Open a Pull Request from your feature branch to the main repository branch. You must only include your **$AppName.sh**, **$AppName-install.sh** and **$AppName.json** files in the pull request. + +--- + +## 📚 Pages + +- [CT Template: AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/ct/AppName.sh) +- [Install Template: AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh) +- [JSON Template: AppName.json](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/json/AppName.json) -- It is important to stress that complaining about a decision after it has been made is not productive behavior for the pull request submitter. It is crucial for all contributors to respect the decision-making process and collaborate effectively towards achieving the best possible outcome for the project. -- The repository will only accept Alpine applications that make use of the Alpine Package Keeper. diff --git a/.github/CONTRIBUTOR_GUIDE/ct/AppName.md b/.github/CONTRIBUTOR_GUIDE/ct/AppName.md new file mode 100644 index 000000000..20d28d869 --- /dev/null +++ b/.github/CONTRIBUTOR_GUIDE/ct/AppName.md @@ -0,0 +1,288 @@ +# **AppName.sh Scripts** + + `AppName.sh` scripts found in the `/ct` directory. These scripts are responsible for the installation of the desired application. For this guide we take `/ct/snipeit.sh` as example. + +## Table of Contents + +- [**AppName.sh Scripts**](#appnamesh-scripts) + - [Table of Contents](#table-of-contents) + - [1. **File Header**](#1-file-header) + - [1.1 **Shebang**](#11-shebang) + - [1.2 **Import Functions**](#12-import-functions) + - [1.3 **Metadata**](#13-metadata) + - [2 **Variables and function import**](#2-variables-and-function-import) + - [2.1 **Default Values**](#21-default-values) + - [2.2 **📋 App output \& base settings**](#22--app-output--base-settings) + - [2.3 **🛠 Core functions**](#23--core-functions) + - [3 **Update function**](#3-update-function) + - [3.1 **Function Header**](#31-function-header) + - [3.2 **Check APP**](#32-check-app) + - [3.3 **Check version**](#33-check-version) + - [3.4 **Verbosity**](#34-verbosity) + - [3.5 **Backups**](#35-backups) + - [3.6 **Cleanup**](#36-cleanup) + - [3.7 **No update function**](#37-no-update-function) + - [4 **End of the script**](#4-end-of-the-script) + - [5. **Contribution checklist**](#5-contribution-checklist) + +## 1. **File Header** + +### 1.1 **Shebang** + +- Use `#!/usr/bin/env bash` as the shebang. + +```bash +#!/usr/bin/env bash +``` + +### 1.2 **Import Functions** + +- Import the build.func file. +- When developing your own script, change the URL to your own repository. + +> [!CAUTION] +> Before opening a Pull Request, change the URL to point to the community-scripts repo. + +Example for development: + +```bash +source <(curl -s https://raw.githubusercontent.com/[USER]/[REPO]/refs/heads/[BRANCH]/misc/build.func) +``` + +Final script: + +```bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +``` + +### 1.3 **Metadata** + +- Add clear comments for script metadata, including author, copyright, and license information. + +Example: + +```bash +# Copyright (c) 2021-2025 community-scripts ORG +# Author: [YourUserName] +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: [SOURCE_URL] +``` + +> [!NOTE]: +> +> - Add your username and source URL +> - For existing scripts, add "| Co-Author [YourUserName]" after the current author + +--- + +## 2 **Variables and function import** +> +> [!NOTE] +> You need to have all this set in your script, otherwise it will not work! + +### 2.1 **Default Values** + +- This section sets the default values for the container. +- `APP` needs to be set to the application name and must be equal to the filenames of your scripts. +- `var_tags`: You can set Tags for the CT wich show up in the Proxmox UI. Don´t overdo it! + +>[!NOTE] +>Description for all Default Values +> +>| Variable | Description | Notes | +>|----------|-------------|-------| +>| `APP` | Application name | Must match ct\AppName.sh | +>| `TAGS` | Proxmox display tags without Spaces, only ; | Limit the number | +>| `var_cpu` | CPU cores | Number of cores | +>| `var_ram` | RAM | In MB | +>| `var_disk` | Disk capacity | In GB | +>| `var_os` | Operating system | alpine, debian, ubuntu | +>| `var_version` | OS version | e.g., 3.20, 11, 12, 20.04 | +>| `var_unprivileged` | Container type | 1 = Unprivileged, 0 = Privileged | + +Example: + +```bash +APP="SnipeIT" +var_tags="asset-management;foss" +var_cpu="2" +var_ram="2048" +var_disk="4" +var_os="debian" +var_version="12" +var_unprivileged="1" +``` + +## 2.2 **📋 App output & base settings** + +```bash +# App Output & Base Settings +header_info "$APP" +base_settings +``` + +- `header_info`: Generates ASCII header for APP +- `base_settings`: Allows overwriting variable values + +## 2.3 **🛠 Core functions** + +```bash +# Core +variables +color +catch_errors +``` + +- `variables`: Processes input and prepares variables +- `color`: Sets icons, colors, and formatting +- `catch_errors`: Enables error handling + +--- + +## 3 **Update function** + +### 3.1 **Function Header** + +- If applicable write a function that updates the application and the OS in the container. +- Each update function starts with the same code: + +```bash +function update_script() { + header_info + check_container_storage + check_container_resources +``` + +### 3.2 **Check APP** + +- Before doing anything update-wise, check if the app is installed in the container. + +Example: + +```bash +if [[ ! -d /opt/snipe-it ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi +``` + +### 3.3 **Check version** + +- Befoer updating, check if a new version exists. + - We use the `${APPLICATION}_version.txt` file created in `/opt` during the install to compare new versions against the currently installed version. + +Example with a Github Release: + +```bash + RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + msg_info "Updating ${APP} to v${RELEASE}" + #DO UPDATE + else + msg_ok "No update required. ${APP} is already at v${RELEASE}." + fi + exit +} +``` + +### 3.4 **Verbosity** + +- Use the appropriate flag (**-q** in the examples) for a command to suppress its output. +Example: + +```bash +wget -q +unzip -q +``` + +- If a command does not come with this functionality use `&>/dev/null` to suppress it's output. + +Example: + +```bash +php artisan migrate --force &>/dev/null +php artisan config:clear &>/dev/null +``` + +### 3.5 **Backups** + +- Backup user data if necessary. +- Move all user data back in the directory when the update is finished. + +>[!NOTE] +>This is not meant to be a permanent backup + +Example backup: + +```bash + mv /opt/snipe-it /opt/snipe-it-backup +``` + +Example config restore: + +```bash + cp /opt/snipe-it-backup/.env /opt/snipe-it/.env + cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/ + cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads +``` + +### 3.6 **Cleanup** + +- Do not forget to remove any temporary files/folders such as zip-files or temporary backups. +Example: + +```bash + rm -rf /opt/v${RELEASE}.zip + rm -rf /opt/snipe-it-backup +``` + +### 3.7 **No update function** + +- In case you can not provide a update function use the following code to provide user feedback. + +```bash +function update_script() { + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/snipeit ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_error "Ther is currently no automatic update function for ${APP}." + exit +} +``` + +--- + +## 4 **End of the script** + +- `start`: Launches Whiptail dialogue +- `build_container`: Collects and integrates user settings +- `description`: Sets LXC container description +- With `echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"` you can point the user to the IP:PORT/folder needed to access the app. + +```bash +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" +``` + +--- + +## 5. **Contribution checklist** + +- [ ] Shebang is correctly set (`#!/usr/bin/env bash`). +- [ ] Correct link to *build.func* +- [ ] Metadata (author, license) is included at the top. +- [ ] Variables follow naming conventions. +- [ ] Update function exists. +- [ ] Update functions checks if app is installed an for new version. +- [ ] Update function up temporary files. +- [ ] Script ends with a helpful message for the user to reach the application. diff --git a/.github/CONTRIBUTOR_GUIDE/ct/AppName.sh b/.github/CONTRIBUTOR_GUIDE/ct/AppName.sh new file mode 100644 index 000000000..bf28d113a --- /dev/null +++ b/.github/CONTRIBUTOR_GUIDE/ct/AppName.sh @@ -0,0 +1,93 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2024 community-scripts ORG +# Author: [YourUserName] +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: [SOURCE_URL] + +# App Default Values +APP="[APP_NAME]" +# Name of the app (e.g. Google, Adventurelog, Apache-Guacamole" +TAGS="[TAGS]" +# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp) +var_cpu="[CPU]" +# Number of cores (1-X) (e.g. 4) - default are 2 +var_ram="[RAM]" +# Amount of used RAM in MB (e.g. 2048 or 4096) +var_disk="[DISK]" +# Amount of used disk space in GB (e.g. 4 or 10) +var_os="[OS]" +# Default OS (e.g. debian, ubuntu, alpine) +var_version="[VERSION]" +# Default OS version (e.g. 12 for debian, 24.04 for ubuntu, 3.20 for alpine) +var_unprivileged="[UNPRIVILEGED]" +# 1 = unprivileged container, 0 = privileged container + +# App Output & Base Settings +header_info "$APP" +base_settings + +# Core +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + # Check if installation is present | -f for file, -d for folder + if [[ ! -f [INSTALLATION_CHECK_PATH] ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + # Crawling the new version and checking whether an update is required + RELEASE=$(curl -fsSL [RELEASE_URL] | [PARSE_RELEASE_COMMAND]) + if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then + msg_info "Updating $APP" + + # Stopping Services + msg_info "Stopping $APP" + systemctl stop [SERVICE_NAME] + msg_ok "Stopped $APP" + + # Creating Backup + msg_info "Creating Backup" + tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" [IMPORTANT_PATHS] + msg_ok "Backup Created" + + # Execute Update + msg_info "Updating $APP to v${RELEASE}" + [UPDATE_COMMANDS] + msg_ok "Updated $APP to v${RELEASE}" + + # Starting Services + msg_info "Starting $APP" + systemctl start [SERVICE_NAME] + sleep 2 + msg_ok "Started $APP" + + # Cleaning up + msg_info "Cleaning Up" + rm -rf [TEMP_FILES] + msg_ok "Cleanup Completed" + + # Last Action + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Update Successful" + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:[PORT]${CL}" diff --git a/.github/CONTRIBUTOR_GUIDE/install/AppName-install.md b/.github/CONTRIBUTOR_GUIDE/install/AppName-install.md new file mode 100644 index 000000000..241cd99ac --- /dev/null +++ b/.github/CONTRIBUTOR_GUIDE/install/AppName-install.md @@ -0,0 +1,353 @@ + +# **AppName-install.sh Scripts** + + `AppName-install.sh` scripts found in the `/install` directory. These scripts are responsible for the installation of the application. For this guide we take `/install/snipeit-install.sh` as example. + +## Table of Contents + +- [**AppName-install.sh Scripts**](#appname-installsh-scripts) + - [Table of Contents](#table-of-contents) + - [1. **File header**](#1-file-header) + - [1.1 **Shebang**](#11-shebang) + - [1.2 **Comments**](#12-comments) + - [1.3 **Variables and function import**](#13-variables-and-function-import) + - [2. **Variable naming and management**](#2-variable-naming-and-management) + - [2.1 **Naming conventions**](#21-naming-conventions) + - [3. **Dependencies**](#3-dependencies) + - [3.1 **Install all at once**](#31-install-all-at-once) + - [3.2 **Collapse dependencies**](#32-collapse-dependencies) + - [4. **Paths to application files**](#4-paths-to-application-files) + - [5. **Version management**](#5-version-management) + - [5.1 **Install the latest release**](#51-install-the-latest-release) + - [5.2 **Save the version for update checks**](#52-save-the-version-for-update-checks) + - [6. **Input and output management**](#6-input-and-output-management) + - [6.1 **User feedback**](#61-user-feedback) + - [6.2 **Verbosity**](#62-verbosity) + - [7. **String/File Manipulation**](#7-stringfile-manipulation) + - [7.1 **File Manipulation**](#71-file-manipulation) + - [8. **Security practices**](#8-security-practices) + - [8.1 **Password generation**](#81-password-generation) + - [8.2 **File permissions**](#82-file-permissions) + - [9. **Service Configuration**](#9-service-configuration) + - [9.1 **Configuration files**](#91-configuration-files) + - [9.2 **Credential management**](#92-credential-management) + - [9.3 **Enviroment files**](#93-enviroment-files) + - [9.4 **Services**](#94-services) + - [10. **Cleanup**](#10-cleanup) + - [10.1 **Remove temporary files**](#101-remove-temporary-files) + - [10.2 **Autoremove and autoclean**](#102-autoremove-and-autoclean) + - [11. **Best Practices Checklist**](#11-best-practices-checklist) + - [Example: High-Level Script Flow](#example-high-level-script-flow) + +## 1. **File header** + +### 1.1 **Shebang** + +- Use `#!/usr/bin/env bash` as the shebang. + +```bash +#!/usr/bin/env bash +``` + +### 1.2 **Comments** + +- Add clear comments for script metadata, including author, copyright, and license information. +- Use meaningful inline comments to explain complex commands or logic. + +Example: + +```bash +# Copyright (c) 2021-2025 community-scripts ORG +# Author: [YourUserName] +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: [SOURCE_URL] +``` + +> [!NOTE]: +> +> - Add your username +> - When updating/reworking scripts, add "| Co-Author [YourUserName]" + +### 1.3 **Variables and function import** + +- This sections adds the support for all needed functions and variables. + +```bash +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os +``` + +--- + +## 2. **Variable naming and management** + +### 2.1 **Naming conventions** + +- Use uppercase names for constants and environment variables. +- Use lowercase names for local script variables. + +Example: + +```bash +DB_NAME=snipeit_db # Environment-like variable (constant) +db_user="snipeit" # Local variable +``` + +--- + +## 3. **Dependencies** + +### 3.1 **Install all at once** + +- Install all dependencies with a single command if possible + +Example: + +```bash +$STD apt-get install -y \ + curl \ + composer \ + git \ + sudo \ + mc \ + nginx +``` + +### 3.2 **Collapse dependencies** + +Collapse dependencies to keep the code readable. + +Example: +Use + +```bash +php8.2-{bcmath,common,ctype} +``` + +instead of + +```bash +php8.2-bcmath php8.2-common php8.2-ctype +``` + +--- + +## 4. **Paths to application files** + +If possible install the app and all necessary files in `/opt/` + +--- + +## 5. **Version management** + +### 5.1 **Install the latest release** + +- Always try and install the latest release +- Do not hardcode any version if not absolutely necessary + +Example for a git release: + +```bash +RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" +``` + +### 5.2 **Save the version for update checks** + +- Write the installed version into a file. +- This is used for the update function in **AppName.sh** to check for if a Update is needed. + +Example: + +```bash +echo "${RELEASE}" >"/opt/AppName_version.txt" +``` + +--- + +## 6. **Input and output management** + +### 6.1 **User feedback** + +- Use standard functions like `msg_info`, `msg_ok` or `msg_error` to print status messages. +- Each `msg_info` must be followed with a `msg_ok` before any other output is made. +- Display meaningful progress messages at key stages. + +Example: + +```bash +msg_info "Installing Dependencies" +$STD apt-get install -y ... +msg_ok "Installed Dependencies" +``` + +### 6.2 **Verbosity** + +- Use the appropiate flag (**-q** in the examples) for a command to suppres its output +Example: + +```bash +wget -q +unzip -q +``` + +- If a command dose not come with such a functionality use `$STD` (a custom standard redirection variable) for managing output verbosity. + +Example: + +```bash +$STD apt-get install -y nginx +``` + +--- + +## 7. **String/File Manipulation** + +### 7.1 **File Manipulation** + +- Use `sed` to replace placeholder values in configuration files. + +Example: + +```bash +sed -i -e "s|^DB_DATABASE=.*|DB_DATABASE=$DB_NAME|" \ + -e "s|^DB_USERNAME=.*|DB_USERNAME=$DB_USER|" \ + -e "s|^DB_PASSWORD=.*|DB_PASSWORD=$DB_PASS|" .env +``` + +--- + +## 8. **Security practices** + +### 8.1 **Password generation** + +- Use `openssl` to generate random passwords. +- Use only alphanumeric values to not introduce unknown behaviour. + +Example: + +```bash +DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +``` + +### 8.2 **File permissions** + +Explicitly set secure ownership and permissions for sensitive files. + +Example: + +```bash +chown -R www-data: /opt/snipe-it +chmod -R 755 /opt/snipe-it +``` + +--- + +## 9. **Service Configuration** + +### 9.1 **Configuration files** + +Use `cat </etc/nginx/conf.d/snipeit.conf +server { + listen 80; + root /opt/snipe-it/public; + index index.php; +} +EOF +``` + +### 9.2 **Credential management** + +Store the generated credentials in a file. + +Example: + +```bash +USERNAME=username +PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +{ + echo "Application-Credentials" + echo "Username: $USERNAME" + echo "Password: $PASSWORD" +} >> ~/application.creds +``` + +### 9.3 **Enviroment files** + +Use `cat </path/to/.env +VARIABLE="value" +PORT=3000 +DB_NAME="${DB_NAME}" +EOF +``` + +### 9.4 **Services** + +Enable affected services after configuration changes and start them right away. + +Example: + +```bash +systemctl enable -q --now nginx +``` + +--- + +## 10. **Cleanup** + +### 10.1 **Remove temporary files** + +Remove temporary files and downloads after use. + +Example: + +```bash +rm -rf /opt/v${RELEASE}.zip +``` + +### 10.2 **Autoremove and autoclean** + +Remove unused dependencies to reduce disk space usage. + +Example: + +```bash +apt-get -y autoremove +apt-get -y autoclean +``` + +--- + +## 11. **Best Practices Checklist** + +- [ ] Shebang is correctly set (`#!/usr/bin/env bash`). +- [ ] Metadata (author, license) is included at the top. +- [ ] Variables follow naming conventions. +- [ ] Sensitive values are dynamically generated. +- [ ] Files and services have proper permissions. +- [ ] Script cleans up temporary files. + +--- + +### Example: High-Level Script Flow + +1. Dependencies installation +2. Database setup +3. Download and configure application +4. Service configuration +5. Final cleanup diff --git a/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh b/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh new file mode 100644 index 000000000..a1d0f8a2d --- /dev/null +++ b/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2024 community-scripts ORG +# Author: [YourUserName] +# License: MIT +# Source: [SOURCE_URL] + +# Import Functions und Setup +source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +# Installing Dependencies with the 3 core dependencies (curl;sudo;mc) +msg_info "Installing Dependencies" +$STD apt-get install -y \ + curl \ + sudo \ + mc \ + [PACKAGE_1] \ + [PACKAGE_2] \ + [PACKAGE_3] +msg_ok "Installed Dependencies" + +# Template: MySQL Database +msg_info "Setting up Database" +DB_NAME=[DB_NAME] +DB_USER=[DB_USER] +DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +$STD mysql -u root -e "CREATE DATABASE $DB_NAME;" +$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');" +$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;" +{ + echo "${APPLICATION} Credentials" + echo "Database User: $DB_USER" + echo "Database Password: $DB_PASS" + echo "Database Name: $DB_NAME" +} >> ~/$APP_NAME.creds +msg_ok "Set up Database" + +# Temp + +# Setup App +msg_info "Setup ${APPLICATION}" +RELEASE=$(curl -s https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +wget -q "https://github.com/[REPO]/archive/refs/tags/${RELEASE}.zip" +unzip -q ${RELEASE}.zip +mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION} +# +# +# +echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +msg_ok "Setup ${APPLICATION}" + +# Creating Service (if needed) +msg_info "Creating Service" +cat </etc/systemd/system/${APPLICATION}.service +[Unit] +Description=${APPLICATION} Service +After=network.target + +[Service] +ExecStart=[START_COMMAND] +Restart=always + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now ${APPLICATION}.service +msg_ok "Created Service" + +motd_ssh +customize + +# Cleanup +msg_info "Cleaning up" +rm -f ${RELEASE}.zip +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" + +motd_ssh +customize diff --git a/.github/CONTRIBUTOR_GUIDE/json/AppName.json b/.github/CONTRIBUTOR_GUIDE/json/AppName.json new file mode 100644 index 000000000..622f370a4 --- /dev/null +++ b/.github/CONTRIBUTOR_GUIDE/json/AppName.json @@ -0,0 +1,34 @@ +{ + "name": "AppName", + "slug": "appname", + "categories": [ + 0 + ], + "date_created": "DATE CREATED", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": DEFAULT-PORT, + "documentation": null, + "website": "LINK TO WEBSITE", + "logo": "LINK TO LOGO", + "description": "Deescription of the app", + "install_methods": [ + { + "type": "default", + "script": "ct/AppName.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/.github/CONTRIBUTOR_GUIDE/json/AppName.md b/.github/CONTRIBUTOR_GUIDE/json/AppName.md new file mode 100644 index 000000000..5b61f5e91 --- /dev/null +++ b/.github/CONTRIBUTOR_GUIDE/json/AppName.md @@ -0,0 +1,13 @@ +# **AppName.json Files** + + `AppName.json` files found in the `/json` directory. These files are used to provide informations for the website. For this guide we take `/json/snipeit.json` as example. + +## Table of Contents + +- [**AppName.json Files**](#appnamejson-files) + - [Table of Contents](#table-of-contents) + - [1. JSON Generator](#1-json-generator) + +## 1. JSON Generator + +Use the [JSON Generator](https://community-scripts.github.io/ProxmoxVE/json-editor) to create this file for your application. From 6f763a5059b5b479445b86890cc66b8cd3210259 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:03:18 +0100 Subject: [PATCH 044/120] Update CHANGELOG.md (#1380) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2d85dbd0..ae5148ce4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,14 @@ Do not break established syntax in this file, as it is automatically updated by - Fix: ActualBudget Update-Function [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1376](https://github.com/community-scripts/ProxmoxVE/pull/1376)) +### 🌐 Website + +- Change Website-Category of nzbget [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1379](https://github.com/community-scripts/ProxmoxVE/pull/1379)) + +### 🧰 Maintenance + +- Add initial PR for Contributing & Coding Standard [@MickLesk](https://github.com/MickLesk) ([#920](https://github.com/community-scripts/ProxmoxVE/pull/920)) + ## 2025-01-09 ### Changed From 44994bb91945be7dcfe8f234b0bee6f7c3c89782 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:44:42 +0100 Subject: [PATCH 045/120] [Core] add Github Action for Generate AppHeaders (figlet remove part 1) (#1382) * add figlet generation files * Update generate-app-headers.yaml * Update generate-app-headers.sh --- .github/workflows/generate-app-headers.sh | 33 +++++++++++++++++ .github/workflows/generate-app-headers.yaml | 41 +++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 .github/workflows/generate-app-headers.sh create mode 100644 .github/workflows/generate-app-headers.yaml diff --git a/.github/workflows/generate-app-headers.sh b/.github/workflows/generate-app-headers.sh new file mode 100644 index 000000000..c548b0fca --- /dev/null +++ b/.github/workflows/generate-app-headers.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +output_file="./misc/.app-headers" +> "$output_file" # Clear or create the file + +current_date=$(date +"%m-%d-%Y") +# Header with date +{ + echo "### Generated on $current_date" + echo "##################################################" + echo +} >> "$output_file" + +# Find only regular .sh files in ./ct, sort them alphabetically +find ./ct -type f -name "*.sh" | sort | while read -r script; do + # Extract the APP name from the APP line + app_name=$(grep -oP '^APP="\K[^"]+' "$script" 2>/dev/null) + + if [[ -n "$app_name" ]]; then + # Generate figlet output + figlet_output=$(figlet -f slant "$app_name") + { + echo "### $(basename "$script")" + echo "APP=$app_name" + echo "$figlet_output" + echo + } >> "$output_file" + else + echo "No APP name found in $script, skipping." + fi +done + +echo "Generated combined file at $output_file" diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml new file mode 100644 index 000000000..6bb4d3c49 --- /dev/null +++ b/.github/workflows/generate-app-headers.yaml @@ -0,0 +1,41 @@ +name: Update .app-headers in /misc + +on: + push: + branches: ["main"] + workflow_dispatch: + +jobs: + update-combined: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Generate a token + id: generate-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.CREATE_HEADER_APP_ID }} + private-key: ${{ CREATE_HEADER_SECRET }} + + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Figlet + run: sudo apt-get install -y figlet + + - name: Run generate-app-headers script + run: | + bash .github/workflows/generate-app-headers.sh + + - name: Commit and push changes + env: + GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add ./misc/.app-headers + git commit -m "Update .app-headers in /misc" || echo "No changes to commit" + git push origin main From 775051b928f5d6fb39797719de0fd1d7ea5b32f0 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:48:08 +0100 Subject: [PATCH 046/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 6bb4d3c49..f80942b41 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -16,7 +16,7 @@ jobs: uses: actions/create-github-app-token@v1 with: app-id: ${{ secrets.CREATE_HEADER_APP_ID }} - private-key: ${{ CREATE_HEADER_SECRET }} + private-key: ${{ secrets.CREATE_HEADER_SECRET }} - name: Checkout repository uses: actions/checkout@v4 From 626aa2f79e2abc25ec809db5f732cd58488f6552 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:50:34 +0100 Subject: [PATCH 047/120] Update CHANGELOG.md (#1383) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae5148ce4..0934867cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ Do not break established syntax in this file, as it is automatically updated by ### 🧰 Maintenance +- [Core] add Github Action for Generate AppHeaders (figlet remove part 1) [@MickLesk](https://github.com/MickLesk) ([#1382](https://github.com/community-scripts/ProxmoxVE/pull/1382)) - Add initial PR for Contributing & Coding Standard [@MickLesk](https://github.com/MickLesk) ([#920](https://github.com/community-scripts/ProxmoxVE/pull/920)) ## 2025-01-09 From 97fb7941f80d29afb3a732cb4baf8eaabf6175fc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 10 Jan 2025 10:59:06 +0000 Subject: [PATCH 048/120] Update .app-headers in /misc --- misc/.app-headers | 2013 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2013 insertions(+) create mode 100644 misc/.app-headers diff --git a/misc/.app-headers b/misc/.app-headers new file mode 100644 index 000000000..f43befdab --- /dev/null +++ b/misc/.app-headers @@ -0,0 +1,2013 @@ +### Generated on 01-10-2025 +################################################## + +### 2fauth.sh +APP=2FAuth + ___ _________ __ __ + |__ \ / ____/ | __ __/ /_/ /_ + __/ // /_ / /| |/ / / / __/ __ \ + / __// __/ / ___ / /_/ / /_/ / / / +/____/_/ /_/ |_\__,_/\__/_/ /_/ + + +### 5etools.sh +APP=5etools + ______ __ __ + / ____/__ / /_____ ____ / /____ + /___ \/ _ \/ __/ __ \/ __ \/ / ___/ + ____/ / __/ /_/ /_/ / /_/ / (__ ) +/_____/\___/\__/\____/\____/_/____/ + + +### actualbudget.sh +APP=Actual Budget + ___ __ __ ____ __ __ + / | _____/ /___ ______ _/ / / __ )__ ______/ /___ ____ / /_ + / /| |/ ___/ __/ / / / __ `/ / / __ / / / / __ / __ `/ _ \/ __/ + / ___ / /__/ /_/ /_/ / /_/ / / / /_/ / /_/ / /_/ / /_/ / __/ /_ +/_/ |_\___/\__/\__,_/\__,_/_/ /_____/\__,_/\__,_/\__, /\___/\__/ + /____/ + +### adguard.sh +APP=Adguard + ___ __ __ + / | ____/ /___ ___ ______ __________/ / + / /| |/ __ / __ `/ / / / __ `/ ___/ __ / + / ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / +/_/ |_\__,_/\__, /\__,_/\__,_/_/ \__,_/ + /____/ + +### adventurelog.sh +APP=AdventureLog + ___ __ __ __ + / | ____/ / _____ ____ / /___ __________ / / ____ ____ _ + / /| |/ __ / | / / _ \/ __ \/ __/ / / / ___/ _ \/ / / __ \/ __ `/ + / ___ / /_/ /| |/ / __/ / / / /_/ /_/ / / / __/ /___/ /_/ / /_/ / +/_/ |_\__,_/ |___/\___/_/ /_/\__/\__,_/_/ \___/_____/\____/\__, / + /____/ + +### agentdvr.sh +APP=AgentDVR + ___ __ ____ _ ______ + / | ____ ____ ____ / /_/ __ \ | / / __ \ + / /| |/ __ `/ _ \/ __ \/ __/ / / / | / / /_/ / + / ___ / /_/ / __/ / / / /_/ /_/ /| |/ / _, _/ +/_/ |_\__, /\___/_/ /_/\__/_____/ |___/_/ |_| + /____/ + +### alpine-docker.sh +APP=Alpine-Docker + ___ __ _ ____ __ + / | / /___ (_)___ ___ / __ \____ _____/ /_____ _____ + / /| | / / __ \/ / __ \/ _ \______/ / / / __ \/ ___/ //_/ _ \/ ___/ + / ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /__/ ,< / __/ / +/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/\___/_/|_|\___/_/ + /_/ + +### alpine-grafana.sh +APP=Alpine-Grafana + ___ __ _ ______ ____ + / | / /___ (_)___ ___ / ____/________ _/ __/___ _____ ____ _ + / /| | / / __ \/ / __ \/ _ \______/ / __/ ___/ __ `/ /_/ __ `/ __ \/ __ `/ + / ___ |/ / /_/ / / / / / __/_____/ /_/ / / / /_/ / __/ /_/ / / / / /_/ / +/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/ \__,_/_/ \__,_/_/ /_/\__,_/ + /_/ + +### alpine-nextcloud.sh +APP=Alpine-Nextcloud + ___ __ _ _ __ __ __ + / | / /___ (_)___ ___ / | / /__ _ __/ /______/ /___ __ __ + / /| | / / __ \/ / __ \/ _ \______/ |/ / _ \| |/_/ __/ ___/ / __ \/ / / / + / ___ |/ / /_/ / / / / / __/_____/ /| / __/> < +/_/ |_/_/ \___/_/ /_/_/ |___/\___/_____/\____/_/|_| + + +### aria2.sh +APP=Aria2 + ___ _ ___ + / | _____(_)___ |__ \ + / /| | / ___/ / __ `/_/ / + / ___ |/ / / / /_/ / __/ +/_/ |_/_/ /_/\__,_/____/ + + +### audiobookshelf.sh +APP=audiobookshelf + ___ __ __ __ ______ + ____ ___ ______/ (_)___ / /_ ____ ____ / /_______/ /_ ___ / / __/ + / __ `/ / / / __ / / __ \/ __ \/ __ \/ __ \/ //_/ ___/ __ \/ _ \/ / /_ +/ /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / ,< (__ ) / / / __/ / __/ +\__,_/\__,_/\__,_/_/\____/_.___/\____/\____/_/|_/____/_/ /_/\___/_/_/ + + +### authentik.sh +APP=Authentik + ___ __ __ __ _ __ + / | __ __/ /_/ /_ ___ ____ / /_(_) /__ + / /| |/ / / / __/ __ \/ _ \/ __ \/ __/ / //_/ + / ___ / /_/ / /_/ / / / __/ / / / /_/ / ,< +/_/ |_\__,_/\__/_/ /_/\___/_/ /_/\__/_/_/|_| + + +### autobrr.sh +APP=Autobrr + ___ __ __ + / | __ __/ /_____ / /_ __________ + / /| |/ / / / __/ __ \/ __ \/ ___/ ___/ + / ___ / /_/ / /_/ /_/ / /_/ / / / / +/_/ |_\__,_/\__/\____/_.___/_/ /_/ + + +### bazarr.sh +APP=Bazarr + ____ + / __ )____ _____ ____ ___________ + / __ / __ `/_ / / __ `/ ___/ ___/ + / /_/ / /_/ / / /_/ /_/ / / / / +/_____/\__,_/ /___/\__,_/_/ /_/ + + +### blocky.sh +APP=Blocky + ____ __ __ + / __ )/ /___ _____/ /____ __ + / __ / / __ \/ ___/ //_/ / / / + / /_/ / / /_/ / /__/ ,< / /_/ / +/_____/_/\____/\___/_/|_|\__, / + /____/ + +### bookstack.sh +APP=Bookstack + ____ __ __ __ + / __ )____ ____ / /_______/ /_____ ______/ /__ + / __ / __ \/ __ \/ //_/ ___/ __/ __ `/ ___/ //_/ + / /_/ / /_/ / /_/ / ,< (__ ) /_/ /_/ / /__/ ,< +/_____/\____/\____/_/|_/____/\__/\__,_/\___/_/|_| + + +### bunkerweb.sh +APP=BunkerWeb + ____ __ _ __ __ + / __ )__ ______ / /_____ ____| | / /__ / /_ + / __ / / / / __ \/ //_/ _ \/ ___/ | /| / / _ \/ __ \ + / /_/ / /_/ / / / / ,< / __/ / | |/ |/ / __/ /_/ / +/_____/\__,_/_/ /_/_/|_|\___/_/ |__/|__/\___/_.___/ + + +### caddy.sh +APP=Caddy + ______ __ __ + / ____/___ _____/ /___/ /_ __ + / / / __ `/ __ / __ / / / / +/ /___/ /_/ / /_/ / /_/ / /_/ / +\____/\__,_/\__,_/\__,_/\__, / + /____/ + +### calibre-web.sh +APP=Calibre-Web + ______ ___ __ _ __ __ + / ____/___ _/ (_) /_ ________ | | / /__ / /_ + / / / __ `/ / / __ \/ ___/ _ \_____| | /| / / _ \/ __ \ +/ /___/ /_/ / / / /_/ / / / __/_____/ |/ |/ / __/ /_/ / +\____/\__,_/_/_/_.___/_/ \___/ |__/|__/\___/_.___/ + + +### casaos.sh +APP=CasaOS + ______ ____ _____ + / ____/___ __________ _/ __ \/ ___/ + / / / __ `/ ___/ __ `/ / / /\__ \ +/ /___/ /_/ (__ ) /_/ / /_/ /___/ / +\____/\__,_/____/\__,_/\____//____/ + + +### changedetection.sh +APP=Change Detection + ________ + / ____/ /_ ____ _____ ____ ____ + / / / __ \/ __ `/ __ \/ __ `/ _ \ +/ /___/ / / / /_/ / / / / /_/ / __/ +\____/_/ /_/\__,_/_/ /_/\__, /\___/ + /____/ + ____ __ __ _ + / __ \___ / /____ _____/ /_(_)___ ____ + / / / / _ \/ __/ _ \/ ___/ __/ / __ \/ __ \ + / /_/ / __/ /_/ __/ /__/ /_/ / /_/ / / / / +/_____/\___/\__/\___/\___/\__/_/\____/_/ /_/ + + +### channels.sh +APP=Channels + ________ __ + / ____/ /_ ____ _____ ____ ___ / /____ + / / / __ \/ __ `/ __ \/ __ \/ _ \/ / ___/ +/ /___/ / / / /_/ / / / / / / / __/ (__ ) +\____/_/ /_/\__,_/_/ /_/_/ /_/\___/_/____/ + + +### checkmk.sh +APP=checkmk + __ __ __ + _____/ /_ ___ _____/ /______ ___ / /__ + / ___/ __ \/ _ \/ ___/ //_/ __ `__ \/ //_/ +/ /__/ / / / __/ /__/ ,< / / / / / / ,< +\___/_/ /_/\___/\___/_/|_/_/ /_/ /_/_/|_| + + +### cloudflared.sh +APP=Cloudflared + ________ ________ __ + / ____/ /___ __ ______/ / __/ /___ _________ ____/ / + / / / / __ \/ / / / __ / /_/ / __ `/ ___/ _ \/ __ / +/ /___/ / /_/ / /_/ / /_/ / __/ / /_/ / / / __/ /_/ / +\____/_/\____/\__,_/\__,_/_/ /_/\__,_/_/ \___/\__,_/ + + +### cockpit.sh +APP=Cockpit + ______ __ _ __ + / ____/___ _____/ /______ (_) /_ + / / / __ \/ ___/ //_/ __ \/ / __/ +/ /___/ /_/ / /__/ ,< / /_/ / / /_ +\____/\____/\___/_/|_/ .___/_/\__/ + /_/ + +### commafeed.sh +APP=CommaFeed + ______ ______ __ + / ____/___ ____ ___ ____ ___ ____ _/ ____/__ ___ ____/ / + / / / __ \/ __ `__ \/ __ `__ \/ __ `/ /_ / _ \/ _ \/ __ / +/ /___/ /_/ / / / / / / / / / / / /_/ / __/ / __/ __/ /_/ / +\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ \___/\___/\__,_/ + + +### cronicle.sh +APP=Cronicle + ______ _ __ + / ____/________ ____ (_)____/ /__ + / / / ___/ __ \/ __ \/ / ___/ / _ \ +/ /___/ / / /_/ / / / / / /__/ / __/ +\____/_/ \____/_/ /_/_/\___/_/\___/ + + +### daemonsync.sh +APP=Daemon Sync + ____ _____ + / __ \____ ____ ____ ___ ____ ____ / ___/__ ______ _____ + / / / / __ `/ _ \/ __ `__ \/ __ \/ __ \ \__ \/ / / / __ \/ ___/ + / /_/ / /_/ / __/ / / / / / /_/ / / / / ___/ / /_/ / / / / /__ +/_____/\__,_/\___/_/ /_/ /_/\____/_/ /_/ /____/\__, /_/ /_/\___/ + /____/ + +### dashy.sh +APP=Dashy + ____ __ + / __ \____ ______/ /_ __ __ + / / / / __ `/ ___/ __ \/ / / / + / /_/ / /_/ (__ ) / / / /_/ / +/_____/\__,_/____/_/ /_/\__, / + /____/ + +### debian.sh +APP=Debian + ____ __ _ + / __ \___ / /_ (_)___ _____ + / / / / _ \/ __ \/ / __ `/ __ \ + / /_/ / __/ /_/ / / /_/ / / / / +/_____/\___/_.___/_/\__,_/_/ /_/ + + +### deconz.sh +APP=deCONZ + __ __________ _ _______ + ____/ /__ / ____/ __ \/ | / /__ / + / __ / _ \/ / / / / / |/ / / / +/ /_/ / __/ /___/ /_/ / /| / / /__ +\__,_/\___/\____/\____/_/ |_/ /____/ + + +### deluge.sh +APP=Deluge + ____ __ + / __ \___ / /_ ______ ____ + / / / / _ \/ / / / / __ `/ _ \ + / /_/ / __/ / /_/ / /_/ / __/ +/_____/\___/_/\__,_/\__, /\___/ + /____/ + +### docker.sh +APP=Docker + ____ __ + / __ \____ _____/ /_____ _____ + / / / / __ \/ ___/ //_/ _ \/ ___/ + / /_/ / /_/ / /__/ ,< / __/ / +/_____/\____/\___/_/|_|\___/_/ + + +### dockge.sh +APP=Dockge + ____ __ + / __ \____ _____/ /______ ____ + / / / / __ \/ ___/ //_/ __ `/ _ \ + / /_/ / /_/ / /__/ ,< / /_/ / __/ +/_____/\____/\___/_/|_|\__, /\___/ + /____/ + +### emby.sh +APP=Emby + ______ __ + / ____/___ ___ / /_ __ __ + / __/ / __ `__ \/ __ \/ / / / + / /___/ / / / / / /_/ / /_/ / +/_____/_/ /_/ /_/_.___/\__, / + /____/ + +### emqx.sh +APP=EMQX + ________ _______ _ __ + / ____/ |/ / __ \ | |/ / + / __/ / /|_/ / / / / | / + / /___/ / / / /_/ / / | +/_____/_/ /_/\___\_\/_/|_| + + +### ersatztv.sh +APP=ErsatzTV + ______ __ _______ __ + / ____/_____________ _/ /_____/_ __/ | / / + / __/ / ___/ ___/ __ `/ __/_ / / / | | / / + / /___/ / (__ ) /_/ / /_ / /_/ / | |/ / +/_____/_/ /____/\__,_/\__/ /___/_/ |___/ + + +### esphome.sh +APP=ESPHome + ___________ ____ __ __ + / ____/ ___// __ \/ / / /___ ____ ___ ___ + / __/ \__ \/ /_/ / /_/ / __ \/ __ `__ \/ _ \ + / /___ ___/ / ____/ __ / /_/ / / / / / / __/ +/_____//____/_/ /_/ /_/\____/_/ /_/ /_/\___/ + + +### evcc.sh +APP=evcc + + ___ _ ____________ + / _ \ | / / ___/ ___/ +/ __/ |/ / /__/ /__ +\___/|___/\___/\___/ + + +### fenrus.sh +APP=Fenrus + ______ + / ____/__ ____ _______ _______ + / /_ / _ \/ __ \/ ___/ / / / ___/ + / __/ / __/ / / / / / /_/ (__ ) +/_/ \___/_/ /_/_/ \__,_/____/ + + +### fhem.sh +APP=FHEM + ________ __________ ___ + / ____/ / / / ____/ |/ / + / /_ / /_/ / __/ / /|_/ / + / __/ / __ / /___/ / / / +/_/ /_/ /_/_____/_/ /_/ + + +### firefly.sh +APP=Firefly + _______ ______ + / ____(_)_______ / __/ /_ __ + / /_ / / ___/ _ \/ /_/ / / / / + / __/ / / / / __/ __/ / /_/ / +/_/ /_/_/ \___/_/ /_/\__, / + /____/ + +### flaresolverr.sh +APP=FlareSolverr + ________ _____ __ + / ____/ /___ _________ / ___/____ / / _____ __________ + / /_ / / __ `/ ___/ _ \\__ \/ __ \/ / | / / _ \/ ___/ ___/ + / __/ / / /_/ / / / __/__/ / /_/ / /| |/ / __/ / / / +/_/ /_/\__,_/_/ \___/____/\____/_/ |___/\___/_/ /_/ + + +### flowiseai.sh +APP=FlowiseAI + ________ _ ___ ____ + / ____/ /___ _ __(_)_______ / | / _/ + / /_ / / __ \ | /| / / / ___/ _ \/ /| | / / + / __/ / / /_/ / |/ |/ / (__ ) __/ ___ |_/ / +/_/ /_/\____/|__/|__/_/____/\___/_/ |_/___/ + + +### forgejo.sh +APP=Forgejo + ______ _ + / ____/___ _________ ____ (_)___ + / /_ / __ \/ ___/ __ `/ _ \ / / __ \ + / __/ / /_/ / / / /_/ / __/ / / /_/ / +/_/ \____/_/ \__, /\___/_/ /\____/ + /____/ /___/ + +### frigate.sh +APP=Frigate + ______ _ __ + / ____/____(_)___ _____ _/ /____ + / /_ / ___/ / __ `/ __ `/ __/ _ \ + / __/ / / / / /_/ / /_/ / /_/ __/ +/_/ /_/ /_/\__, /\__,_/\__/\___/ + /____/ + +### gitea.sh +APP=Gitea + _______ __ + / ____(_) /____ ____ _ + / / __/ / __/ _ \/ __ `/ +/ /_/ / / /_/ __/ /_/ / +\____/_/\__/\___/\__,_/ + + +### glance.sh +APP=Glance + ________ + / ____/ /___ _____ ________ + / / __/ / __ `/ __ \/ ___/ _ \ +/ /_/ / / /_/ / / / / /__/ __/ +\____/_/\__,_/_/ /_/\___/\___/ + + +### glpi.sh +APP=GLPI + ________ ____ ____ + / ____/ / / __ \/ _/ + / / __/ / / /_/ // / +/ /_/ / /___/ ____// / +\____/_____/_/ /___/ + + +### go2rtc.sh +APP=go2rtc + ___ __ + ____ _____ |__ \ _____/ /______ + / __ `/ __ \__/ // ___/ __/ ___/ + / /_/ / /_/ / __// / / /_/ /__ + \__, /\____/____/_/ \__/\___/ +/____/ + +### gokapi.sh +APP=Gokapi + ______ __ _ + / ____/___ / /______ _____ (_) + / / __/ __ \/ //_/ __ `/ __ \/ / +/ /_/ / /_/ / ,< / /_/ / /_/ / / +\____/\____/_/|_|\__,_/ .___/_/ + /_/ + +### gotify.sh +APP=Gotify + ______ __ _ ____ + / ____/___ / /_(_) __/_ __ + / / __/ __ \/ __/ / /_/ / / / +/ /_/ / /_/ / /_/ / __/ /_/ / +\____/\____/\__/_/_/ \__, / + /____/ + +### grafana.sh +APP=Grafana + ______ ____ + / ____/________ _/ __/___ _____ ____ _ + / / __/ ___/ __ `/ /_/ __ `/ __ \/ __ `/ +/ /_/ / / / /_/ / __/ /_/ / / / / /_/ / +\____/_/ \__,_/_/ \__,_/_/ /_/\__,_/ + + +### grist.sh +APP=Grist + ______ _ __ + / ____/____(_)____/ /_ + / / __/ ___/ / ___/ __/ +/ /_/ / / / (__ ) /_ +\____/_/ /_/____/\__/ + + +### grocy.sh +APP=grocy + + ____ __________ _______ __ + / __ `/ ___/ __ \/ ___/ / / / + / /_/ / / / /_/ / /__/ /_/ / + \__, /_/ \____/\___/\__, / +/____/ /____/ + +### headscale.sh +APP=Headscale + __ __ __ __ + / / / /__ ____ _____/ /_____________ _/ /__ + / /_/ / _ \/ __ `/ __ / ___/ ___/ __ `/ / _ \ + / __ / __/ /_/ / /_/ (__ ) /__/ /_/ / / __/ +/_/ /_/\___/\__,_/\__,_/____/\___/\__,_/_/\___/ + + +### heimdall-dashboard.sh +APP=Heimdall-Dashboard + __ __ _ __ ____ ____ __ __ + / / / /__ (_)___ ___ ____/ /___ _/ / / / __ \____ ______/ /_ / /_ + / /_/ / _ \/ / __ `__ \/ __ / __ `/ / /_____/ / / / __ `/ ___/ __ \/ __ \ + / __ / __/ / / / / / / /_/ / /_/ / / /_____/ /_/ / /_/ (__ ) / / / /_/ / +/_/ /_/\___/_/_/ /_/ /_/\__,_/\__,_/_/_/ /_____/\__,_/____/_/ /_/_.___/ + + __ + ____ ____ __________/ / + / __ \/ __ `/ ___/ __ / +/ /_/ / /_/ / / / /_/ / +\____/\__,_/_/ \__,_/ + + +### hivemq.sh +APP=HiveMQ + __ ___ __ _______ + / / / (_) _____ / |/ / __ \ + / /_/ / / | / / _ \/ /|_/ / / / / + / __ / /| |/ / __/ / / / /_/ / +/_/ /_/_/ |___/\___/_/ /_/\___\_\ + + +### hoarder.sh +APP=Hoarder + __ __ __ + / / / /___ ____ __________/ /__ _____ + / /_/ / __ \/ __ `/ ___/ __ / _ \/ ___/ + / __ / /_/ / /_/ / / / /_/ / __/ / +/_/ /_/\____/\__,_/_/ \__,_/\___/_/ + + +### homarr.sh +APP=Homarr + __ __ + / / / /___ ____ ___ ____ ___________ + / /_/ / __ \/ __ `__ \/ __ `/ ___/ ___/ + / __ / /_/ / / / / / / /_/ / / / / +/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/ + + +### homeassistant-core.sh +APP=Home Assistant-Core + __ __ + / / / /___ ____ ___ ___ + / /_/ / __ \/ __ `__ \/ _ \ + / __ / /_/ / / / / / / __/ +/_/ /_/\____/_/ /_/ /_/\___/ + + ___ _ __ __ ______ + / | __________(_)____/ /_____ _____ / /_ / ____/___ ________ + / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ / / __ \/ ___/ _ \ + / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / / / __/ +/_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____/\____/_/ \___/ + + +### homeassistant.sh +APP=Home Assistant + __ __ ___ _ __ __ + / / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_ + / /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ + / __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ +/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ + + +### homebox.sh +APP=HomeBox + __ __ ____ + / / / /___ ____ ___ ___ / __ )____ _ __ + / /_/ / __ \/ __ `__ \/ _ \/ __ / __ \| |/_/ + / __ / /_/ / / / / / / __/ /_/ / /_/ /> < +/_/ /_/\____/_/ /_/ /_/\___/_____/\____/_/|_| + + +### homebridge.sh +APP=Homebridge + __ __ __ _ __ + / / / /___ ____ ___ ___ / /_ _____(_)___/ /___ ____ + / /_/ / __ \/ __ `__ \/ _ \/ __ \/ ___/ / __ / __ `/ _ \ + / __ / /_/ / / / / / / __/ /_/ / / / / /_/ / /_/ / __/ +/_/ /_/\____/_/ /_/ /_/\___/_.___/_/ /_/\__,_/\__, /\___/ + /____/ + +### homepage.sh +APP=Homepage + __ __ + / / / /___ ____ ___ ___ ____ ____ _____ ____ + / /_/ / __ \/ __ `__ \/ _ \/ __ \/ __ `/ __ `/ _ \ + / __ / /_/ / / / / / / __/ /_/ / /_/ / /_/ / __/ +/_/ /_/\____/_/ /_/ /_/\___/ .___/\__,_/\__, /\___/ + /_/ /____/ + +### homer.sh +APP=Homer + __ __ + / / / /___ ____ ___ ___ _____ + / /_/ / __ \/ __ `__ \/ _ \/ ___/ + / __ / /_/ / / / / / / __/ / +/_/ /_/\____/_/ /_/ /_/\___/_/ + + +### hyperhdr.sh +APP=HyperHDR + __ __ __ ______ ____ + / / / /_ ______ ___ _____/ / / / __ \/ __ \ + / /_/ / / / / __ \/ _ \/ ___/ /_/ / / / / /_/ / + / __ / /_/ / /_/ / __/ / / __ / /_/ / _, _/ +/_/ /_/\__, / .___/\___/_/ /_/ /_/_____/_/ |_| + /____/_/ + +### hyperion.sh +APP=Hyperion + __ __ _ + / / / /_ ______ ___ _____(_)___ ____ + / /_/ / / / / __ \/ _ \/ ___/ / __ \/ __ \ + / __ / /_/ / /_/ / __/ / / / /_/ / / / / +/_/ /_/\__, / .___/\___/_/ /_/\____/_/ /_/ + /____/_/ + +### influxdb.sh +APP=InfluxDB + ____ ______ ____ ____ + / _/___ / __/ /_ ___ __/ __ \/ __ ) + / // __ \/ /_/ / / / / |/_/ / / / __ | + _/ // / / / __/ / /_/ /> < +/_/ |_/\___/\__/_____/\____/_/|_| + + +### nextcloudpi.sh +APP=NextCloudPi + _ __ __ ________ ______ _ + / | / /__ _ __/ /_/ ____/ /___ __ ______/ / __ \(_) + / |/ / _ \| |/_/ __/ / / / __ \/ / / / __ / /_/ / / + / /| / __/> < / ____/ / / /_/ /> < +/_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ /_/\__, /_/|_| + /_/ /____/ + +### part-db.sh +APP=Part-DB + ____ __ ____ ____ + / __ \____ ______/ /_ / __ \/ __ ) + / /_/ / __ `/ ___/ __/_____/ / / / __ | + / ____/ /_/ / / / /_/_____/ /_/ / /_/ / +/_/ \__,_/_/ \__/ /_____/_____/ + + +### pbs.sh +APP=PBS + ____ ____ _____ + / __ \/ __ ) ___/ + / /_/ / __ \__ \ + / ____/ /_/ /__/ / +/_/ /_____/____/ + + +### peanut.sh +APP=PeaNUT + ____ _ ____ ________ + / __ \___ ____ _/ | / / / / /_ __/ + / /_/ / _ \/ __ `/ |/ / / / / / / + / ____/ __/ /_/ / /| / /_/ / / / +/_/ \___/\__,_/_/ |_/\____/ /_/ + + +### petio.sh +APP=Petio + ____ __ _ + / __ \___ / /_(_)___ + / /_/ / _ \/ __/ / __ \ + / ____/ __/ /_/ / /_/ / +/_/ \___/\__/_/\____/ + + +### pf2etools.sh +APP=Pf2eTools + ____ _______ ______ __ + / __ \/ __/__ \ ___/_ __/___ ____ / /____ + / /_/ / /_ __/ // _ \/ / / __ \/ __ \/ / ___/ + / ____/ __// __// __/ / / /_/ / /_/ / (__ ) +/_/ /_/ /____/\___/_/ \____/\____/_/____/ + + +### photoprism.sh +APP=PhotoPrism + ____ __ __ ____ _ + / __ \/ /_ ____ / /_____ / __ \_____(_)________ ___ + / /_/ / __ \/ __ \/ __/ __ \/ /_/ / ___/ / ___/ __ `__ \ + / ____/ / / / /_/ / /_/ /_/ / ____/ / / (__ ) / / / / / +/_/ /_/ /_/\____/\__/\____/_/ /_/ /_/____/_/ /_/ /_/ + + +### pialert.sh +APP=PiAlert + ____ _ ___ __ __ + / __ \(_) | / /__ _____/ /_ + / /_/ / / /| | / / _ \/ ___/ __/ + / ____/ / ___ |/ / __/ / / /_ +/_/ /_/_/ |_/_/\___/_/ \__/ + + +### pihole.sh +APP=Pihole + ____ _ __ __ + / __ \(_) /_ ____ / /__ + / /_/ / / __ \/ __ \/ / _ \ + / ____/ / / / / /_/ / / __/ +/_/ /_/_/ /_/\____/_/\___/ + + +### pingvin.sh +APP=Pingvin + ____ _ _ + / __ \(_)___ ____ __ __(_)___ + / /_/ / / __ \/ __ `/ | / / / __ \ + / ____/ / / / / /_/ /| |/ / / / / / +/_/ /_/_/ /_/\__, / |___/_/_/ /_/ + /____/ + +### plex.sh +APP=Plex + ____ __ + / __ \/ /__ _ __ + / /_/ / / _ \| |/_/ + / ____/ / __/> < +/_/ /_/\___/_/|_| + + +### pocketbase.sh +APP=Pocketbase + ____ __ __ __ + / __ \____ _____/ /_____ / /_/ /_ ____ _________ + / /_/ / __ \/ ___/ //_/ _ \/ __/ __ \/ __ `/ ___/ _ \ + / ____/ /_/ / /__/ ,< / __/ /_/ /_/ / /_/ (__ ) __/ +/_/ \____/\___/_/|_|\___/\__/_.___/\__,_/____/\___/ + + +### podman-homeassistant.sh +APP=Podman-Home Assistant + ____ __ __ __ + / __ \____ ____/ /___ ___ ____ _____ / / / /___ ____ ___ ___ + / /_/ / __ \/ __ / __ `__ \/ __ `/ __ \______/ /_/ / __ \/ __ `__ \/ _ \ + / ____/ /_/ / /_/ / / / / / / /_/ / / / /_____/ __ / /_/ / / / / / / __/ +/_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/ /_/ /_/\____/_/ /_/ /_/\___/ + + ___ _ __ __ + / | __________(_)____/ /_____ _____ / /_ + / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ + / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ +/_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ + + +### podman.sh +APP=Podman + ____ __ + / __ \____ ____/ /___ ___ ____ _____ + / /_/ / __ \/ __ / __ `__ \/ __ `/ __ \ + / ____/ /_/ / /_/ / / / / / / /_/ / / / / +/_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/ + + +### postgresql.sh +APP=PostgreSQL + ____ __ _____ ____ __ + / __ \____ _____/ /_____ _________ / ___// __ \ / / + / /_/ / __ \/ ___/ __/ __ `/ ___/ _ \\__ \/ / / / / / + / ____/ /_/ (__ ) /_/ /_/ / / / __/__/ / /_/ / / /___ +/_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/ + /____/ + +### prometheus-alertmanager.sh +APP=Prometheus-Alertmanager + ____ __ __ ___ __ + / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / | / / + / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /| | / / + / ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ___ |/ / +/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ |_/_/ + + __ + ___ _____/ /_____ ___ ____ _____ ____ _____ ____ _____ + / _ \/ ___/ __/ __ `__ \/ __ `/ __ \/ __ `/ __ `/ _ \/ ___/ +/ __/ / / /_/ / / / / / /_/ / / / / /_/ / /_/ / __/ / +\___/_/ \__/_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/ + /____/ + +### prometheus.sh +APP=Prometheus + ____ __ __ + / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ + / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/ + / ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ ) +/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ + + +### prowlarr.sh +APP=Prowlarr + ____ __ + / __ \_________ _ __/ /___ ___________ + / /_/ / ___/ __ \ | /| / / / __ `/ ___/ ___/ + / ____/ / / /_/ / |/ |/ / / /_/ / / / / +/_/ /_/ \____/|__/|__/_/\__,_/_/ /_/ + + +### proxmox-datacenter-manager.sh +APP=proxmox-datacenter-manager + __ __ + ____ _________ _ ______ ___ ____ _ __ ____/ /___ _/ /_____ _ + / __ \/ ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ __ / __ `/ __/ __ `/ + / /_/ / / / /_/ /> < +/____/\__,_/_.___/_.___/_/_/|_| + + +### zammad.sh +APP=Zammad + _____ __ +/__ / ____ _____ ___ ____ ___ ____ _____/ / + / / / __ `/ __ `__ \/ __ `__ \/ __ `/ __ / + / /__/ /_/ / / / / / / / / / / / /_/ / /_/ / +/____/\__,_/_/ /_/ /_/_/ /_/ /_/\__,_/\__,_/ + + +### zigbee2mqtt.sh +APP=Zigbee2MQTT + _____ _ __ ___ __ _______ ____________ +/__ / (_)___ _/ /_ ___ ___ |__ \ / |/ / __ \/_ __/_ __/ + / / / / __ `/ __ \/ _ \/ _ \__/ // /|_/ / / / / / / / / + / /__/ / /_/ / /_/ / __/ __/ __// / / / /_/ / / / / / +/____/_/\__, /_.___/\___/\___/____/_/ /_/\___\_\/_/ /_/ + /____/ + +### zipline.sh +APP=Zipline + _____ _ ___ +/__ / (_)___ / (_)___ ___ + / / / / __ \/ / / __ \/ _ \ + / /__/ / /_/ / / / / / / __/ +/____/_/ .___/_/_/_/ /_/\___/ + /_/ + +### zoraxy.sh +APP=Zoraxy + _____ +/__ / ____ _________ __ ____ __ + / / / __ \/ ___/ __ `/ |/_/ / / / + / /__/ /_/ / / / /_/ /> Date: Fri, 10 Jan 2025 12:04:38 +0100 Subject: [PATCH 049/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 57 +++++++++++++++++---- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index f80942b41..dfef43c55 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -6,17 +6,19 @@ on: workflow_dispatch: jobs: - update-combined: + update-and-merge-pr: runs-on: ubuntu-latest permissions: - contents: write + contents: write + pull-requests: write + steps: - name: Generate a token id: generate-token uses: actions/create-github-app-token@v1 with: app-id: ${{ secrets.CREATE_HEADER_APP_ID }} - private-key: ${{ secrets.CREATE_HEADER_SECRET }} + private-key: ${{ secrets.CREATE_HEADER_SECRET }} - name: Checkout repository uses: actions/checkout@v4 @@ -30,12 +32,45 @@ jobs: run: | bash .github/workflows/generate-app-headers.sh - - name: Commit and push changes - env: - GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} + - name: Create or update branch + run: | + # Check if the branch exists + git fetch origin + git checkout -b update-app-headers || git checkout update-app-headers + + # Make your changes, e.g., update app-headers file + echo "update app-headers to latest" >> misc/.app-headers + + git add misc/.app-headers + git commit -m "update app-headers to latest" + + # Push changes to the branch + git push origin update-app-headers --force + + - name: Create pull request + id: create-pr + run: | + PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') + if [ -z "$PR_EXISTS" ]; then + gh pr create --title "Update app-headers to latest" \ + --body "This PR automatically updates the app-headers file." \ + --head update-app-headers \ + --base main \ + --label "automated" + fi + + - name: Approve pull request + if: steps.create-pr.outputs.pr_exists == 'true' + run: | + PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') + if [ -n "$PR_NUMBER" ]; then + gh pr review $PR_NUMBER --approve --body "Approved automatically by GitHub Action." + fi + + - name: Merge pull request + if: steps.create-pr.outputs.pr_exists == 'true' run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add ./misc/.app-headers - git commit -m "Update .app-headers in /misc" || echo "No changes to commit" - git push origin main + PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') + if [ -n "$PR_NUMBER" ]; then + gh pr merge $PR_NUMBER --merge --auto --delete-branch + fi From 4b6b560bbd7bb0b8f87e66364b82b84e0e93b395 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:06:37 +0100 Subject: [PATCH 050/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index dfef43c55..750108e21 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -38,6 +38,10 @@ jobs: git fetch origin git checkout -b update-app-headers || git checkout update-app-headers + # Configure Git user info + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + # Make your changes, e.g., update app-headers file echo "update app-headers to latest" >> misc/.app-headers From 535a1b0250eba9f05c67d2708e136496c62ddad9 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:08:30 +0100 Subject: [PATCH 051/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 750108e21..594c5dc48 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -53,6 +53,8 @@ jobs: - name: Create pull request id: create-pr + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -z "$PR_EXISTS" ]; then @@ -65,6 +67,8 @@ jobs: - name: Approve pull request if: steps.create-pr.outputs.pr_exists == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -n "$PR_NUMBER" ]; then @@ -73,6 +77,8 @@ jobs: - name: Merge pull request if: steps.create-pr.outputs.pr_exists == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -n "$PR_NUMBER" ]; then From 45f241df2e043e413211ddc86620c0b33d2cfcd3 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:09:27 +0100 Subject: [PATCH 052/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 594c5dc48..67f569908 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -61,8 +61,7 @@ jobs: gh pr create --title "Update app-headers to latest" \ --body "This PR automatically updates the app-headers file." \ --head update-app-headers \ - --base main \ - --label "automated" + --base main fi - name: Approve pull request From 7dc54da8a3022b00f7d1fe3b1fdd12a1e76e2a13 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:13:51 +0100 Subject: [PATCH 053/120] Update checkmk-install.sh (#1385) --- install/checkmk-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/checkmk-install.sh b/install/checkmk-install.sh index e94f90c55..12328af75 100644 --- a/install/checkmk-install.sh +++ b/install/checkmk-install.sh @@ -22,7 +22,7 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" msg_info "Install Checkmk" -RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | head -n 1) wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb $STD apt-get install -y /opt/checkmk.deb echo "${RELEASE}" >"/opt/checkmk_version.txt" From 6fc78dca575cac9bff64928da07c550726fc7b2a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:14:09 +0100 Subject: [PATCH 054/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 67f569908..78d3cb671 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -42,11 +42,8 @@ jobs: git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" - # Make your changes, e.g., update app-headers file - echo "update app-headers to latest" >> misc/.app-headers - git add misc/.app-headers - git commit -m "update app-headers to latest" + git commit -m "[core]: update .app-headers to latest version" # Push changes to the branch git push origin update-app-headers --force @@ -58,28 +55,18 @@ jobs: run: | PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -z "$PR_EXISTS" ]; then - gh pr create --title "Update app-headers to latest" \ + gh pr create --title "[core]: update .app-headers to latest version" \ --body "This PR automatically updates the app-headers file." \ --head update-app-headers \ --base main fi - - name: Approve pull request - if: steps.create-pr.outputs.pr_exists == 'true' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') - if [ -n "$PR_NUMBER" ]; then - gh pr review $PR_NUMBER --approve --body "Approved automatically by GitHub Action." - fi - - - name: Merge pull request + - name: Merge pull request (Squash and Merge) if: steps.create-pr.outputs.pr_exists == 'true' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -n "$PR_NUMBER" ]; then - gh pr merge $PR_NUMBER --merge --auto --delete-branch + gh pr merge $PR_NUMBER --squash --auto --delete-branch fi From 10927e39cea35efe3aac5a821e5a9997a1a5c0f3 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:15:52 +0100 Subject: [PATCH 055/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 78d3cb671..19e261e65 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -42,11 +42,11 @@ jobs: git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add misc/.app-headers - git commit -m "[core]: update .app-headers to latest version" + # Check if there are changes to commit + git diff --quiet || git commit -am "[core]: update .app-headers to latest version" - # Push changes to the branch - git push origin update-app-headers --force + # Push changes to the branch only if there are changes + git push origin update-app-headers --force || echo "No changes to push" - name: Create pull request id: create-pr From 4a3d4a055de5e024c119ffce20f11fa675eaaeac Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:17:44 +0100 Subject: [PATCH 056/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 19e261e65..2e5662ade 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -34,7 +34,7 @@ jobs: - name: Create or update branch run: | - # Check if the branch exists + # Check if the branch exists, and create it if not git fetch origin git checkout -b update-app-headers || git checkout update-app-headers @@ -42,10 +42,10 @@ jobs: git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" - # Check if there are changes to commit + # Make sure there are changes to commit git diff --quiet || git commit -am "[core]: update .app-headers to latest version" - # Push changes to the branch only if there are changes + # Push changes to the branch if there are any git push origin update-app-headers --force || echo "No changes to push" - name: Create pull request @@ -55,6 +55,7 @@ jobs: run: | PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -z "$PR_EXISTS" ]; then + # Create the pull request if it doesn't exist gh pr create --title "[core]: update .app-headers to latest version" \ --body "This PR automatically updates the app-headers file." \ --head update-app-headers \ @@ -66,7 +67,9 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | + # Get the PR number and merge it if it exists PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -n "$PR_NUMBER" ]; then + # Squash and merge the PR automatically gh pr merge $PR_NUMBER --squash --auto --delete-branch fi From 5d0fa7aa160ab14711a5d82465c28a19392ac40c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:19:11 +0100 Subject: [PATCH 057/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 2e5662ade..8ec37e378 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -48,8 +48,19 @@ jobs: # Push changes to the branch if there are any git push origin update-app-headers --force || echo "No changes to push" + - name: Check if there are changes before creating PR + id: check-changes + run: | + git fetch origin + git diff --quiet origin/main..update-app-headers || echo "Changes detected" > changes.txt + if [ ! -f changes.txt ]; then + echo "No changes detected, skipping PR creation." + exit 0 + fi + - name: Create pull request id: create-pr + if: steps.check-changes.outcome == 'success' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | From a78633a0a4b1a8ff4ce279e31ce122bef3223509 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:21:27 +0100 Subject: [PATCH 058/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 8ec37e378..532fa1123 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -71,6 +71,8 @@ jobs: --body "This PR automatically updates the app-headers file." \ --head update-app-headers \ --base main + else + echo "PR already exists, skipping creation." fi - name: Merge pull request (Squash and Merge) @@ -84,3 +86,8 @@ jobs: # Squash and merge the PR automatically gh pr merge $PR_NUMBER --squash --auto --delete-branch fi + + - name: Final Status + if: steps.check-changes.outcome != 'success' + run: | + echo "No changes detected or already merged, workflow completed successfully." From a46503209f0aeae63e1c4b10529e7e4934619fe0 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:22:57 +0100 Subject: [PATCH 059/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 532fa1123..70b98ef3c 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -51,16 +51,17 @@ jobs: - name: Check if there are changes before creating PR id: check-changes run: | + # Check if there are any changes between 'main' and 'update-app-headers' git fetch origin git diff --quiet origin/main..update-app-headers || echo "Changes detected" > changes.txt if [ ! -f changes.txt ]; then echo "No changes detected, skipping PR creation." - exit 0 + exit 0 # Exit successfully if no changes are found fi - name: Create pull request id: create-pr - if: steps.check-changes.outcome == 'success' + if: steps.check-changes.outcome == 'success' # Only create PR if changes are detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | From a65b9c7ba3a14a8c7373a3c930820f295a05cec5 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:37:52 +0100 Subject: [PATCH 060/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 70b98ef3c..25909a3bb 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -76,19 +76,6 @@ jobs: echo "PR already exists, skipping creation." fi - - name: Merge pull request (Squash and Merge) - if: steps.create-pr.outputs.pr_exists == 'true' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - # Get the PR number and merge it if it exists - PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') - if [ -n "$PR_NUMBER" ]; then - # Squash and merge the PR automatically - gh pr merge $PR_NUMBER --squash --auto --delete-branch - fi - - name: Final Status - if: steps.check-changes.outcome != 'success' run: | - echo "No changes detected or already merged, workflow completed successfully." + echo "Workflow completed successfully." From 86b91f626ce45ad758942aff3750a825d8c990ee Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:39:51 +0100 Subject: [PATCH 061/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 25909a3bb..e708c0f6e 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -53,15 +53,17 @@ jobs: run: | # Check if there are any changes between 'main' and 'update-app-headers' git fetch origin - git diff --quiet origin/main..update-app-headers || echo "Changes detected" > changes.txt - if [ ! -f changes.txt ]; then + git diff --quiet origin/main..update-app-headers + if [ $? -eq 0 ]; then echo "No changes detected, skipping PR creation." - exit 0 # Exit successfully if no changes are found + echo "skip_pr_creation=true" >> $GITHUB_ENV + else + echo "Changes detected, proceeding with PR creation." fi - name: Create pull request id: create-pr - if: steps.check-changes.outcome == 'success' # Only create PR if changes are detected + if: env.skip_pr_creation != 'true' # Only create PR if changes are detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | From ef44c2d24316ec801df4bfcef767ce66ad1ed104 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:41:06 +0100 Subject: [PATCH 062/120] Delete misc/.app-headers --- misc/.app-headers | 2013 --------------------------------------------- 1 file changed, 2013 deletions(-) delete mode 100644 misc/.app-headers diff --git a/misc/.app-headers b/misc/.app-headers deleted file mode 100644 index f43befdab..000000000 --- a/misc/.app-headers +++ /dev/null @@ -1,2013 +0,0 @@ -### Generated on 01-10-2025 -################################################## - -### 2fauth.sh -APP=2FAuth - ___ _________ __ __ - |__ \ / ____/ | __ __/ /_/ /_ - __/ // /_ / /| |/ / / / __/ __ \ - / __// __/ / ___ / /_/ / /_/ / / / -/____/_/ /_/ |_\__,_/\__/_/ /_/ - - -### 5etools.sh -APP=5etools - ______ __ __ - / ____/__ / /_____ ____ / /____ - /___ \/ _ \/ __/ __ \/ __ \/ / ___/ - ____/ / __/ /_/ /_/ / /_/ / (__ ) -/_____/\___/\__/\____/\____/_/____/ - - -### actualbudget.sh -APP=Actual Budget - ___ __ __ ____ __ __ - / | _____/ /___ ______ _/ / / __ )__ ______/ /___ ____ / /_ - / /| |/ ___/ __/ / / / __ `/ / / __ / / / / __ / __ `/ _ \/ __/ - / ___ / /__/ /_/ /_/ / /_/ / / / /_/ / /_/ / /_/ / /_/ / __/ /_ -/_/ |_\___/\__/\__,_/\__,_/_/ /_____/\__,_/\__,_/\__, /\___/\__/ - /____/ - -### adguard.sh -APP=Adguard - ___ __ __ - / | ____/ /___ ___ ______ __________/ / - / /| |/ __ / __ `/ / / / __ `/ ___/ __ / - / ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / -/_/ |_\__,_/\__, /\__,_/\__,_/_/ \__,_/ - /____/ - -### adventurelog.sh -APP=AdventureLog - ___ __ __ __ - / | ____/ / _____ ____ / /___ __________ / / ____ ____ _ - / /| |/ __ / | / / _ \/ __ \/ __/ / / / ___/ _ \/ / / __ \/ __ `/ - / ___ / /_/ /| |/ / __/ / / / /_/ /_/ / / / __/ /___/ /_/ / /_/ / -/_/ |_\__,_/ |___/\___/_/ /_/\__/\__,_/_/ \___/_____/\____/\__, / - /____/ - -### agentdvr.sh -APP=AgentDVR - ___ __ ____ _ ______ - / | ____ ____ ____ / /_/ __ \ | / / __ \ - / /| |/ __ `/ _ \/ __ \/ __/ / / / | / / /_/ / - / ___ / /_/ / __/ / / / /_/ /_/ /| |/ / _, _/ -/_/ |_\__, /\___/_/ /_/\__/_____/ |___/_/ |_| - /____/ - -### alpine-docker.sh -APP=Alpine-Docker - ___ __ _ ____ __ - / | / /___ (_)___ ___ / __ \____ _____/ /_____ _____ - / /| | / / __ \/ / __ \/ _ \______/ / / / __ \/ ___/ //_/ _ \/ ___/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /__/ ,< / __/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/\___/_/|_|\___/_/ - /_/ - -### alpine-grafana.sh -APP=Alpine-Grafana - ___ __ _ ______ ____ - / | / /___ (_)___ ___ / ____/________ _/ __/___ _____ ____ _ - / /| | / / __ \/ / __ \/ _ \______/ / __/ ___/ __ `/ /_/ __ `/ __ \/ __ `/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / / / /_/ / __/ /_/ / / / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/ \__,_/_/ \__,_/_/ /_/\__,_/ - /_/ - -### alpine-nextcloud.sh -APP=Alpine-Nextcloud - ___ __ _ _ __ __ __ - / | / /___ (_)___ ___ / | / /__ _ __/ /______/ /___ __ __ - / /| | / / __ \/ / __ \/ _ \______/ |/ / _ \| |/_/ __/ ___/ / __ \/ / / / - / ___ |/ / /_/ / / / / / __/_____/ /| / __/> < -/_/ |_/_/ \___/_/ /_/_/ |___/\___/_____/\____/_/|_| - - -### aria2.sh -APP=Aria2 - ___ _ ___ - / | _____(_)___ |__ \ - / /| | / ___/ / __ `/_/ / - / ___ |/ / / / /_/ / __/ -/_/ |_/_/ /_/\__,_/____/ - - -### audiobookshelf.sh -APP=audiobookshelf - ___ __ __ __ ______ - ____ ___ ______/ (_)___ / /_ ____ ____ / /_______/ /_ ___ / / __/ - / __ `/ / / / __ / / __ \/ __ \/ __ \/ __ \/ //_/ ___/ __ \/ _ \/ / /_ -/ /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / ,< (__ ) / / / __/ / __/ -\__,_/\__,_/\__,_/_/\____/_.___/\____/\____/_/|_/____/_/ /_/\___/_/_/ - - -### authentik.sh -APP=Authentik - ___ __ __ __ _ __ - / | __ __/ /_/ /_ ___ ____ / /_(_) /__ - / /| |/ / / / __/ __ \/ _ \/ __ \/ __/ / //_/ - / ___ / /_/ / /_/ / / / __/ / / / /_/ / ,< -/_/ |_\__,_/\__/_/ /_/\___/_/ /_/\__/_/_/|_| - - -### autobrr.sh -APP=Autobrr - ___ __ __ - / | __ __/ /_____ / /_ __________ - / /| |/ / / / __/ __ \/ __ \/ ___/ ___/ - / ___ / /_/ / /_/ /_/ / /_/ / / / / -/_/ |_\__,_/\__/\____/_.___/_/ /_/ - - -### bazarr.sh -APP=Bazarr - ____ - / __ )____ _____ ____ ___________ - / __ / __ `/_ / / __ `/ ___/ ___/ - / /_/ / /_/ / / /_/ /_/ / / / / -/_____/\__,_/ /___/\__,_/_/ /_/ - - -### blocky.sh -APP=Blocky - ____ __ __ - / __ )/ /___ _____/ /____ __ - / __ / / __ \/ ___/ //_/ / / / - / /_/ / / /_/ / /__/ ,< / /_/ / -/_____/_/\____/\___/_/|_|\__, / - /____/ - -### bookstack.sh -APP=Bookstack - ____ __ __ __ - / __ )____ ____ / /_______/ /_____ ______/ /__ - / __ / __ \/ __ \/ //_/ ___/ __/ __ `/ ___/ //_/ - / /_/ / /_/ / /_/ / ,< (__ ) /_/ /_/ / /__/ ,< -/_____/\____/\____/_/|_/____/\__/\__,_/\___/_/|_| - - -### bunkerweb.sh -APP=BunkerWeb - ____ __ _ __ __ - / __ )__ ______ / /_____ ____| | / /__ / /_ - / __ / / / / __ \/ //_/ _ \/ ___/ | /| / / _ \/ __ \ - / /_/ / /_/ / / / / ,< / __/ / | |/ |/ / __/ /_/ / -/_____/\__,_/_/ /_/_/|_|\___/_/ |__/|__/\___/_.___/ - - -### caddy.sh -APP=Caddy - ______ __ __ - / ____/___ _____/ /___/ /_ __ - / / / __ `/ __ / __ / / / / -/ /___/ /_/ / /_/ / /_/ / /_/ / -\____/\__,_/\__,_/\__,_/\__, / - /____/ - -### calibre-web.sh -APP=Calibre-Web - ______ ___ __ _ __ __ - / ____/___ _/ (_) /_ ________ | | / /__ / /_ - / / / __ `/ / / __ \/ ___/ _ \_____| | /| / / _ \/ __ \ -/ /___/ /_/ / / / /_/ / / / __/_____/ |/ |/ / __/ /_/ / -\____/\__,_/_/_/_.___/_/ \___/ |__/|__/\___/_.___/ - - -### casaos.sh -APP=CasaOS - ______ ____ _____ - / ____/___ __________ _/ __ \/ ___/ - / / / __ `/ ___/ __ `/ / / /\__ \ -/ /___/ /_/ (__ ) /_/ / /_/ /___/ / -\____/\__,_/____/\__,_/\____//____/ - - -### changedetection.sh -APP=Change Detection - ________ - / ____/ /_ ____ _____ ____ ____ - / / / __ \/ __ `/ __ \/ __ `/ _ \ -/ /___/ / / / /_/ / / / / /_/ / __/ -\____/_/ /_/\__,_/_/ /_/\__, /\___/ - /____/ - ____ __ __ _ - / __ \___ / /____ _____/ /_(_)___ ____ - / / / / _ \/ __/ _ \/ ___/ __/ / __ \/ __ \ - / /_/ / __/ /_/ __/ /__/ /_/ / /_/ / / / / -/_____/\___/\__/\___/\___/\__/_/\____/_/ /_/ - - -### channels.sh -APP=Channels - ________ __ - / ____/ /_ ____ _____ ____ ___ / /____ - / / / __ \/ __ `/ __ \/ __ \/ _ \/ / ___/ -/ /___/ / / / /_/ / / / / / / / __/ (__ ) -\____/_/ /_/\__,_/_/ /_/_/ /_/\___/_/____/ - - -### checkmk.sh -APP=checkmk - __ __ __ - _____/ /_ ___ _____/ /______ ___ / /__ - / ___/ __ \/ _ \/ ___/ //_/ __ `__ \/ //_/ -/ /__/ / / / __/ /__/ ,< / / / / / / ,< -\___/_/ /_/\___/\___/_/|_/_/ /_/ /_/_/|_| - - -### cloudflared.sh -APP=Cloudflared - ________ ________ __ - / ____/ /___ __ ______/ / __/ /___ _________ ____/ / - / / / / __ \/ / / / __ / /_/ / __ `/ ___/ _ \/ __ / -/ /___/ / /_/ / /_/ / /_/ / __/ / /_/ / / / __/ /_/ / -\____/_/\____/\__,_/\__,_/_/ /_/\__,_/_/ \___/\__,_/ - - -### cockpit.sh -APP=Cockpit - ______ __ _ __ - / ____/___ _____/ /______ (_) /_ - / / / __ \/ ___/ //_/ __ \/ / __/ -/ /___/ /_/ / /__/ ,< / /_/ / / /_ -\____/\____/\___/_/|_/ .___/_/\__/ - /_/ - -### commafeed.sh -APP=CommaFeed - ______ ______ __ - / ____/___ ____ ___ ____ ___ ____ _/ ____/__ ___ ____/ / - / / / __ \/ __ `__ \/ __ `__ \/ __ `/ /_ / _ \/ _ \/ __ / -/ /___/ /_/ / / / / / / / / / / / /_/ / __/ / __/ __/ /_/ / -\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ \___/\___/\__,_/ - - -### cronicle.sh -APP=Cronicle - ______ _ __ - / ____/________ ____ (_)____/ /__ - / / / ___/ __ \/ __ \/ / ___/ / _ \ -/ /___/ / / /_/ / / / / / /__/ / __/ -\____/_/ \____/_/ /_/_/\___/_/\___/ - - -### daemonsync.sh -APP=Daemon Sync - ____ _____ - / __ \____ ____ ____ ___ ____ ____ / ___/__ ______ _____ - / / / / __ `/ _ \/ __ `__ \/ __ \/ __ \ \__ \/ / / / __ \/ ___/ - / /_/ / /_/ / __/ / / / / / /_/ / / / / ___/ / /_/ / / / / /__ -/_____/\__,_/\___/_/ /_/ /_/\____/_/ /_/ /____/\__, /_/ /_/\___/ - /____/ - -### dashy.sh -APP=Dashy - ____ __ - / __ \____ ______/ /_ __ __ - / / / / __ `/ ___/ __ \/ / / / - / /_/ / /_/ (__ ) / / / /_/ / -/_____/\__,_/____/_/ /_/\__, / - /____/ - -### debian.sh -APP=Debian - ____ __ _ - / __ \___ / /_ (_)___ _____ - / / / / _ \/ __ \/ / __ `/ __ \ - / /_/ / __/ /_/ / / /_/ / / / / -/_____/\___/_.___/_/\__,_/_/ /_/ - - -### deconz.sh -APP=deCONZ - __ __________ _ _______ - ____/ /__ / ____/ __ \/ | / /__ / - / __ / _ \/ / / / / / |/ / / / -/ /_/ / __/ /___/ /_/ / /| / / /__ -\__,_/\___/\____/\____/_/ |_/ /____/ - - -### deluge.sh -APP=Deluge - ____ __ - / __ \___ / /_ ______ ____ - / / / / _ \/ / / / / __ `/ _ \ - / /_/ / __/ / /_/ / /_/ / __/ -/_____/\___/_/\__,_/\__, /\___/ - /____/ - -### docker.sh -APP=Docker - ____ __ - / __ \____ _____/ /_____ _____ - / / / / __ \/ ___/ //_/ _ \/ ___/ - / /_/ / /_/ / /__/ ,< / __/ / -/_____/\____/\___/_/|_|\___/_/ - - -### dockge.sh -APP=Dockge - ____ __ - / __ \____ _____/ /______ ____ - / / / / __ \/ ___/ //_/ __ `/ _ \ - / /_/ / /_/ / /__/ ,< / /_/ / __/ -/_____/\____/\___/_/|_|\__, /\___/ - /____/ - -### emby.sh -APP=Emby - ______ __ - / ____/___ ___ / /_ __ __ - / __/ / __ `__ \/ __ \/ / / / - / /___/ / / / / / /_/ / /_/ / -/_____/_/ /_/ /_/_.___/\__, / - /____/ - -### emqx.sh -APP=EMQX - ________ _______ _ __ - / ____/ |/ / __ \ | |/ / - / __/ / /|_/ / / / / | / - / /___/ / / / /_/ / / | -/_____/_/ /_/\___\_\/_/|_| - - -### ersatztv.sh -APP=ErsatzTV - ______ __ _______ __ - / ____/_____________ _/ /_____/_ __/ | / / - / __/ / ___/ ___/ __ `/ __/_ / / / | | / / - / /___/ / (__ ) /_/ / /_ / /_/ / | |/ / -/_____/_/ /____/\__,_/\__/ /___/_/ |___/ - - -### esphome.sh -APP=ESPHome - ___________ ____ __ __ - / ____/ ___// __ \/ / / /___ ____ ___ ___ - / __/ \__ \/ /_/ / /_/ / __ \/ __ `__ \/ _ \ - / /___ ___/ / ____/ __ / /_/ / / / / / / __/ -/_____//____/_/ /_/ /_/\____/_/ /_/ /_/\___/ - - -### evcc.sh -APP=evcc - - ___ _ ____________ - / _ \ | / / ___/ ___/ -/ __/ |/ / /__/ /__ -\___/|___/\___/\___/ - - -### fenrus.sh -APP=Fenrus - ______ - / ____/__ ____ _______ _______ - / /_ / _ \/ __ \/ ___/ / / / ___/ - / __/ / __/ / / / / / /_/ (__ ) -/_/ \___/_/ /_/_/ \__,_/____/ - - -### fhem.sh -APP=FHEM - ________ __________ ___ - / ____/ / / / ____/ |/ / - / /_ / /_/ / __/ / /|_/ / - / __/ / __ / /___/ / / / -/_/ /_/ /_/_____/_/ /_/ - - -### firefly.sh -APP=Firefly - _______ ______ - / ____(_)_______ / __/ /_ __ - / /_ / / ___/ _ \/ /_/ / / / / - / __/ / / / / __/ __/ / /_/ / -/_/ /_/_/ \___/_/ /_/\__, / - /____/ - -### flaresolverr.sh -APP=FlareSolverr - ________ _____ __ - / ____/ /___ _________ / ___/____ / / _____ __________ - / /_ / / __ `/ ___/ _ \\__ \/ __ \/ / | / / _ \/ ___/ ___/ - / __/ / / /_/ / / / __/__/ / /_/ / /| |/ / __/ / / / -/_/ /_/\__,_/_/ \___/____/\____/_/ |___/\___/_/ /_/ - - -### flowiseai.sh -APP=FlowiseAI - ________ _ ___ ____ - / ____/ /___ _ __(_)_______ / | / _/ - / /_ / / __ \ | /| / / / ___/ _ \/ /| | / / - / __/ / / /_/ / |/ |/ / (__ ) __/ ___ |_/ / -/_/ /_/\____/|__/|__/_/____/\___/_/ |_/___/ - - -### forgejo.sh -APP=Forgejo - ______ _ - / ____/___ _________ ____ (_)___ - / /_ / __ \/ ___/ __ `/ _ \ / / __ \ - / __/ / /_/ / / / /_/ / __/ / / /_/ / -/_/ \____/_/ \__, /\___/_/ /\____/ - /____/ /___/ - -### frigate.sh -APP=Frigate - ______ _ __ - / ____/____(_)___ _____ _/ /____ - / /_ / ___/ / __ `/ __ `/ __/ _ \ - / __/ / / / / /_/ / /_/ / /_/ __/ -/_/ /_/ /_/\__, /\__,_/\__/\___/ - /____/ - -### gitea.sh -APP=Gitea - _______ __ - / ____(_) /____ ____ _ - / / __/ / __/ _ \/ __ `/ -/ /_/ / / /_/ __/ /_/ / -\____/_/\__/\___/\__,_/ - - -### glance.sh -APP=Glance - ________ - / ____/ /___ _____ ________ - / / __/ / __ `/ __ \/ ___/ _ \ -/ /_/ / / /_/ / / / / /__/ __/ -\____/_/\__,_/_/ /_/\___/\___/ - - -### glpi.sh -APP=GLPI - ________ ____ ____ - / ____/ / / __ \/ _/ - / / __/ / / /_/ // / -/ /_/ / /___/ ____// / -\____/_____/_/ /___/ - - -### go2rtc.sh -APP=go2rtc - ___ __ - ____ _____ |__ \ _____/ /______ - / __ `/ __ \__/ // ___/ __/ ___/ - / /_/ / /_/ / __// / / /_/ /__ - \__, /\____/____/_/ \__/\___/ -/____/ - -### gokapi.sh -APP=Gokapi - ______ __ _ - / ____/___ / /______ _____ (_) - / / __/ __ \/ //_/ __ `/ __ \/ / -/ /_/ / /_/ / ,< / /_/ / /_/ / / -\____/\____/_/|_|\__,_/ .___/_/ - /_/ - -### gotify.sh -APP=Gotify - ______ __ _ ____ - / ____/___ / /_(_) __/_ __ - / / __/ __ \/ __/ / /_/ / / / -/ /_/ / /_/ / /_/ / __/ /_/ / -\____/\____/\__/_/_/ \__, / - /____/ - -### grafana.sh -APP=Grafana - ______ ____ - / ____/________ _/ __/___ _____ ____ _ - / / __/ ___/ __ `/ /_/ __ `/ __ \/ __ `/ -/ /_/ / / / /_/ / __/ /_/ / / / / /_/ / -\____/_/ \__,_/_/ \__,_/_/ /_/\__,_/ - - -### grist.sh -APP=Grist - ______ _ __ - / ____/____(_)____/ /_ - / / __/ ___/ / ___/ __/ -/ /_/ / / / (__ ) /_ -\____/_/ /_/____/\__/ - - -### grocy.sh -APP=grocy - - ____ __________ _______ __ - / __ `/ ___/ __ \/ ___/ / / / - / /_/ / / / /_/ / /__/ /_/ / - \__, /_/ \____/\___/\__, / -/____/ /____/ - -### headscale.sh -APP=Headscale - __ __ __ __ - / / / /__ ____ _____/ /_____________ _/ /__ - / /_/ / _ \/ __ `/ __ / ___/ ___/ __ `/ / _ \ - / __ / __/ /_/ / /_/ (__ ) /__/ /_/ / / __/ -/_/ /_/\___/\__,_/\__,_/____/\___/\__,_/_/\___/ - - -### heimdall-dashboard.sh -APP=Heimdall-Dashboard - __ __ _ __ ____ ____ __ __ - / / / /__ (_)___ ___ ____/ /___ _/ / / / __ \____ ______/ /_ / /_ - / /_/ / _ \/ / __ `__ \/ __ / __ `/ / /_____/ / / / __ `/ ___/ __ \/ __ \ - / __ / __/ / / / / / / /_/ / /_/ / / /_____/ /_/ / /_/ (__ ) / / / /_/ / -/_/ /_/\___/_/_/ /_/ /_/\__,_/\__,_/_/_/ /_____/\__,_/____/_/ /_/_.___/ - - __ - ____ ____ __________/ / - / __ \/ __ `/ ___/ __ / -/ /_/ / /_/ / / / /_/ / -\____/\__,_/_/ \__,_/ - - -### hivemq.sh -APP=HiveMQ - __ ___ __ _______ - / / / (_) _____ / |/ / __ \ - / /_/ / / | / / _ \/ /|_/ / / / / - / __ / /| |/ / __/ / / / /_/ / -/_/ /_/_/ |___/\___/_/ /_/\___\_\ - - -### hoarder.sh -APP=Hoarder - __ __ __ - / / / /___ ____ __________/ /__ _____ - / /_/ / __ \/ __ `/ ___/ __ / _ \/ ___/ - / __ / /_/ / /_/ / / / /_/ / __/ / -/_/ /_/\____/\__,_/_/ \__,_/\___/_/ - - -### homarr.sh -APP=Homarr - __ __ - / / / /___ ____ ___ ____ ___________ - / /_/ / __ \/ __ `__ \/ __ `/ ___/ ___/ - / __ / /_/ / / / / / / /_/ / / / / -/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/ - - -### homeassistant-core.sh -APP=Home Assistant-Core - __ __ - / / / /___ ____ ___ ___ - / /_/ / __ \/ __ `__ \/ _ \ - / __ / /_/ / / / / / / __/ -/_/ /_/\____/_/ /_/ /_/\___/ - - ___ _ __ __ ______ - / | __________(_)____/ /_____ _____ / /_ / ____/___ ________ - / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ / / __ \/ ___/ _ \ - / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / / / __/ -/_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____/\____/_/ \___/ - - -### homeassistant.sh -APP=Home Assistant - __ __ ___ _ __ __ - / / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_ - / /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ - / __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ -/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ - - -### homebox.sh -APP=HomeBox - __ __ ____ - / / / /___ ____ ___ ___ / __ )____ _ __ - / /_/ / __ \/ __ `__ \/ _ \/ __ / __ \| |/_/ - / __ / /_/ / / / / / / __/ /_/ / /_/ /> < -/_/ /_/\____/_/ /_/ /_/\___/_____/\____/_/|_| - - -### homebridge.sh -APP=Homebridge - __ __ __ _ __ - / / / /___ ____ ___ ___ / /_ _____(_)___/ /___ ____ - / /_/ / __ \/ __ `__ \/ _ \/ __ \/ ___/ / __ / __ `/ _ \ - / __ / /_/ / / / / / / __/ /_/ / / / / /_/ / /_/ / __/ -/_/ /_/\____/_/ /_/ /_/\___/_.___/_/ /_/\__,_/\__, /\___/ - /____/ - -### homepage.sh -APP=Homepage - __ __ - / / / /___ ____ ___ ___ ____ ____ _____ ____ - / /_/ / __ \/ __ `__ \/ _ \/ __ \/ __ `/ __ `/ _ \ - / __ / /_/ / / / / / / __/ /_/ / /_/ / /_/ / __/ -/_/ /_/\____/_/ /_/ /_/\___/ .___/\__,_/\__, /\___/ - /_/ /____/ - -### homer.sh -APP=Homer - __ __ - / / / /___ ____ ___ ___ _____ - / /_/ / __ \/ __ `__ \/ _ \/ ___/ - / __ / /_/ / / / / / / __/ / -/_/ /_/\____/_/ /_/ /_/\___/_/ - - -### hyperhdr.sh -APP=HyperHDR - __ __ __ ______ ____ - / / / /_ ______ ___ _____/ / / / __ \/ __ \ - / /_/ / / / / __ \/ _ \/ ___/ /_/ / / / / /_/ / - / __ / /_/ / /_/ / __/ / / __ / /_/ / _, _/ -/_/ /_/\__, / .___/\___/_/ /_/ /_/_____/_/ |_| - /____/_/ - -### hyperion.sh -APP=Hyperion - __ __ _ - / / / /_ ______ ___ _____(_)___ ____ - / /_/ / / / / __ \/ _ \/ ___/ / __ \/ __ \ - / __ / /_/ / /_/ / __/ / / / /_/ / / / / -/_/ /_/\__, / .___/\___/_/ /_/\____/_/ /_/ - /____/_/ - -### influxdb.sh -APP=InfluxDB - ____ ______ ____ ____ - / _/___ / __/ /_ ___ __/ __ \/ __ ) - / // __ \/ /_/ / / / / |/_/ / / / __ | - _/ // / / / __/ / /_/ /> < -/_/ |_/\___/\__/_____/\____/_/|_| - - -### nextcloudpi.sh -APP=NextCloudPi - _ __ __ ________ ______ _ - / | / /__ _ __/ /_/ ____/ /___ __ ______/ / __ \(_) - / |/ / _ \| |/_/ __/ / / / __ \/ / / / __ / /_/ / / - / /| / __/> < / ____/ / / /_/ /> < -/_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ /_/\__, /_/|_| - /_/ /____/ - -### part-db.sh -APP=Part-DB - ____ __ ____ ____ - / __ \____ ______/ /_ / __ \/ __ ) - / /_/ / __ `/ ___/ __/_____/ / / / __ | - / ____/ /_/ / / / /_/_____/ /_/ / /_/ / -/_/ \__,_/_/ \__/ /_____/_____/ - - -### pbs.sh -APP=PBS - ____ ____ _____ - / __ \/ __ ) ___/ - / /_/ / __ \__ \ - / ____/ /_/ /__/ / -/_/ /_____/____/ - - -### peanut.sh -APP=PeaNUT - ____ _ ____ ________ - / __ \___ ____ _/ | / / / / /_ __/ - / /_/ / _ \/ __ `/ |/ / / / / / / - / ____/ __/ /_/ / /| / /_/ / / / -/_/ \___/\__,_/_/ |_/\____/ /_/ - - -### petio.sh -APP=Petio - ____ __ _ - / __ \___ / /_(_)___ - / /_/ / _ \/ __/ / __ \ - / ____/ __/ /_/ / /_/ / -/_/ \___/\__/_/\____/ - - -### pf2etools.sh -APP=Pf2eTools - ____ _______ ______ __ - / __ \/ __/__ \ ___/_ __/___ ____ / /____ - / /_/ / /_ __/ // _ \/ / / __ \/ __ \/ / ___/ - / ____/ __// __// __/ / / /_/ / /_/ / (__ ) -/_/ /_/ /____/\___/_/ \____/\____/_/____/ - - -### photoprism.sh -APP=PhotoPrism - ____ __ __ ____ _ - / __ \/ /_ ____ / /_____ / __ \_____(_)________ ___ - / /_/ / __ \/ __ \/ __/ __ \/ /_/ / ___/ / ___/ __ `__ \ - / ____/ / / / /_/ / /_/ /_/ / ____/ / / (__ ) / / / / / -/_/ /_/ /_/\____/\__/\____/_/ /_/ /_/____/_/ /_/ /_/ - - -### pialert.sh -APP=PiAlert - ____ _ ___ __ __ - / __ \(_) | / /__ _____/ /_ - / /_/ / / /| | / / _ \/ ___/ __/ - / ____/ / ___ |/ / __/ / / /_ -/_/ /_/_/ |_/_/\___/_/ \__/ - - -### pihole.sh -APP=Pihole - ____ _ __ __ - / __ \(_) /_ ____ / /__ - / /_/ / / __ \/ __ \/ / _ \ - / ____/ / / / / /_/ / / __/ -/_/ /_/_/ /_/\____/_/\___/ - - -### pingvin.sh -APP=Pingvin - ____ _ _ - / __ \(_)___ ____ __ __(_)___ - / /_/ / / __ \/ __ `/ | / / / __ \ - / ____/ / / / / /_/ /| |/ / / / / / -/_/ /_/_/ /_/\__, / |___/_/_/ /_/ - /____/ - -### plex.sh -APP=Plex - ____ __ - / __ \/ /__ _ __ - / /_/ / / _ \| |/_/ - / ____/ / __/> < -/_/ /_/\___/_/|_| - - -### pocketbase.sh -APP=Pocketbase - ____ __ __ __ - / __ \____ _____/ /_____ / /_/ /_ ____ _________ - / /_/ / __ \/ ___/ //_/ _ \/ __/ __ \/ __ `/ ___/ _ \ - / ____/ /_/ / /__/ ,< / __/ /_/ /_/ / /_/ (__ ) __/ -/_/ \____/\___/_/|_|\___/\__/_.___/\__,_/____/\___/ - - -### podman-homeassistant.sh -APP=Podman-Home Assistant - ____ __ __ __ - / __ \____ ____/ /___ ___ ____ _____ / / / /___ ____ ___ ___ - / /_/ / __ \/ __ / __ `__ \/ __ `/ __ \______/ /_/ / __ \/ __ `__ \/ _ \ - / ____/ /_/ / /_/ / / / / / / /_/ / / / /_____/ __ / /_/ / / / / / / __/ -/_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/ /_/ /_/\____/_/ /_/ /_/\___/ - - ___ _ __ __ - / | __________(_)____/ /_____ _____ / /_ - / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ - / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ -/_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ - - -### podman.sh -APP=Podman - ____ __ - / __ \____ ____/ /___ ___ ____ _____ - / /_/ / __ \/ __ / __ `__ \/ __ `/ __ \ - / ____/ /_/ / /_/ / / / / / / /_/ / / / / -/_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/ - - -### postgresql.sh -APP=PostgreSQL - ____ __ _____ ____ __ - / __ \____ _____/ /_____ _________ / ___// __ \ / / - / /_/ / __ \/ ___/ __/ __ `/ ___/ _ \\__ \/ / / / / / - / ____/ /_/ (__ ) /_/ /_/ / / / __/__/ / /_/ / / /___ -/_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/ - /____/ - -### prometheus-alertmanager.sh -APP=Prometheus-Alertmanager - ____ __ __ ___ __ - / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / | / / - / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /| | / / - / ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ___ |/ / -/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ |_/_/ - - __ - ___ _____/ /_____ ___ ____ _____ ____ _____ ____ _____ - / _ \/ ___/ __/ __ `__ \/ __ `/ __ \/ __ `/ __ `/ _ \/ ___/ -/ __/ / / /_/ / / / / / /_/ / / / / /_/ / /_/ / __/ / -\___/_/ \__/_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/ - /____/ - -### prometheus.sh -APP=Prometheus - ____ __ __ - / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ - / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/ - / ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ ) -/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ - - -### prowlarr.sh -APP=Prowlarr - ____ __ - / __ \_________ _ __/ /___ ___________ - / /_/ / ___/ __ \ | /| / / / __ `/ ___/ ___/ - / ____/ / / /_/ / |/ |/ / / /_/ / / / / -/_/ /_/ \____/|__/|__/_/\__,_/_/ /_/ - - -### proxmox-datacenter-manager.sh -APP=proxmox-datacenter-manager - __ __ - ____ _________ _ ______ ___ ____ _ __ ____/ /___ _/ /_____ _ - / __ \/ ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ __ / __ `/ __/ __ `/ - / /_/ / / / /_/ /> < -/____/\__,_/_.___/_.___/_/_/|_| - - -### zammad.sh -APP=Zammad - _____ __ -/__ / ____ _____ ___ ____ ___ ____ _____/ / - / / / __ `/ __ `__ \/ __ `__ \/ __ `/ __ / - / /__/ /_/ / / / / / / / / / / / /_/ / /_/ / -/____/\__,_/_/ /_/ /_/_/ /_/ /_/\__,_/\__,_/ - - -### zigbee2mqtt.sh -APP=Zigbee2MQTT - _____ _ __ ___ __ _______ ____________ -/__ / (_)___ _/ /_ ___ ___ |__ \ / |/ / __ \/_ __/_ __/ - / / / / __ `/ __ \/ _ \/ _ \__/ // /|_/ / / / / / / / / - / /__/ / /_/ / /_/ / __/ __/ __// / / / /_/ / / / / / -/____/_/\__, /_.___/\___/\___/____/_/ /_/\___\_\/_/ /_/ - /____/ - -### zipline.sh -APP=Zipline - _____ _ ___ -/__ / (_)___ / (_)___ ___ - / / / / __ \/ / / __ \/ _ \ - / /__/ / /_/ / / / / / / __/ -/____/_/ .___/_/_/_/ /_/\___/ - /_/ - -### zoraxy.sh -APP=Zoraxy - _____ -/__ / ____ _________ __ ____ __ - / / / __ \/ ___/ __ `/ |/_/ / / / - / /__/ /_/ / / / /_/ /> Date: Fri, 10 Jan 2025 12:44:25 +0100 Subject: [PATCH 063/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index e708c0f6e..50930396f 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -34,15 +34,25 @@ jobs: - name: Create or update branch run: | - # Check if the branch exists, and create it if not + # Check if the branch exists, create it if it doesn't exist git fetch origin - git checkout -b update-app-headers || git checkout update-app-headers + if ! git show-ref --quiet refs/heads/update-app-headers; then + git checkout -b update-app-headers + else + git checkout update-app-headers + fi # Configure Git user info git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" - # Make sure there are changes to commit + # Check if the file exists, and if not, create it + if [ ! -f "./misc/.app-headers" ]; then + echo "File .app-headers not found, creating it." + touch ./misc/.app-headers + fi + + # Make sure there are changes to commit (whether new or modified file) git diff --quiet || git commit -am "[core]: update .app-headers to latest version" # Push changes to the branch if there are any From 84042b7508646e29872b54b4560d65b1f534f343 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:46:07 +0100 Subject: [PATCH 064/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 50930396f..c1cb8076b 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -25,7 +25,7 @@ jobs: with: fetch-depth: 0 - - name: Set up Figlet + - name: Set up Figlet (Optional, for decoration) run: sudo apt-get install -y figlet - name: Run generate-app-headers script @@ -52,7 +52,7 @@ jobs: touch ./misc/.app-headers fi - # Make sure there are changes to commit (whether new or modified file) + # Commit the changes if there are any git diff --quiet || git commit -am "[core]: update .app-headers to latest version" # Push changes to the branch if there are any From bd5cd844bf4adbd58c4e4c5c9017cb94714dd271 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:49:58 +0100 Subject: [PATCH 065/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 100 +++++++++++--------- 1 file changed, 57 insertions(+), 43 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index c1cb8076b..fe254e7df 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -13,6 +13,14 @@ jobs: pull-requests: write steps: + # Step 1: Setup job (Check environment & install dependencies) + - name: Setup environment + run: | + echo "Setting up the environment for the workflow." + sudo apt-get update + sudo apt-get install -y figlet gh jq + + # Step 2: Generate Token - name: Generate a token id: generate-token uses: actions/create-github-app-token@v1 @@ -20,74 +28,80 @@ jobs: app-id: ${{ secrets.CREATE_HEADER_APP_ID }} private-key: ${{ secrets.CREATE_HEADER_SECRET }} + # Step 3: Checkout repository - name: Checkout repository uses: actions/checkout@v4 with: - fetch-depth: 0 - - - name: Set up Figlet (Optional, for decoration) - run: sudo apt-get install -y figlet + fetch-depth: 0 # Fetch all history to ensure we have full access to the repo history - - name: Run generate-app-headers script + # Step 4: Check or Update Branch (Create or update the update-app-headers branch) + - name: Check or Update Branch run: | - bash .github/workflows/generate-app-headers.sh - - - name: Create or update branch - run: | - # Check if the branch exists, create it if it doesn't exist git fetch origin if ! git show-ref --quiet refs/heads/update-app-headers; then - git checkout -b update-app-headers + echo "Creating the 'update-app-headers' branch as it does not exist." + git checkout -b update-app-headers origin/main else + echo "Switching to the existing 'update-app-headers' branch." git checkout update-app-headers fi - - # Configure Git user info - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - - # Check if the file exists, and if not, create it - if [ ! -f "./misc/.app-headers" ]; then - echo "File .app-headers not found, creating it." - touch ./misc/.app-headers - fi - - # Commit the changes if there are any - git diff --quiet || git commit -am "[core]: update .app-headers to latest version" - - # Push changes to the branch if there are any - git push origin update-app-headers --force || echo "No changes to push" - - name: Check if there are changes before creating PR - id: check-changes + # Step 5: Check if there are changes before + - name: Check if there are any changes before making any modifications run: | - # Check if there are any changes between 'main' and 'update-app-headers' git fetch origin - git diff --quiet origin/main..update-app-headers - if [ $? -eq 0 ]; then - echo "No changes detected, skipping PR creation." - echo "skip_pr_creation=true" >> $GITHUB_ENV - else - echo "Changes detected, proceeding with PR creation." - fi + git diff --exit-code || echo "There are changes to commit." + + # Step 6: Setup Figlet (Install and set up Figlet for text generation) + - name: Set up Figlet + run: sudo apt-get install -y figlet - - name: Create pull request + # Step 7: Run generate-app-headers script + - name: Run generate-app-headers script + run: | + bash .github/workflows/generate-app-headers.sh + + # Step 8: Check if changes are available (Check if the app-headers file has been modified) + - name: Check if changes are available + id: check-changes + run: | + git diff --exit-code || echo "Changes detected." + + # Step 9: Create Pull Request (If changes exist, create a PR) + - name: Create PR id: create-pr - if: env.skip_pr_creation != 'true' # Only create PR if changes are detected + if: steps.check-changes.outcome == 'success' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -z "$PR_EXISTS" ]; then - # Create the pull request if it doesn't exist + echo "Creating a new PR." gh pr create --title "[core]: update .app-headers to latest version" \ --body "This PR automatically updates the app-headers file." \ --head update-app-headers \ --base main else - echo "PR already exists, skipping creation." + echo "PR already exists." fi - - name: Final Status + # Step 10: Final status (Output status to console) + - name: Output final status + run: | + echo "Workflow completed successfully. Branch and PR status updated." + + # Step 11: Post checkout repo (Make sure to clean up the repository state) + - name: Post checkout repo + run: | + echo "Repository check complete." + git status + + # Step 12: Post generate token (Output generated token for logging purposes) + - name: Post generate token + run: | + echo "Generated token: ${GITHUB_TOKEN}" + + # Step 13: Complete (Final confirmation that workflow has finished) + - name: Complete run: | - echo "Workflow completed successfully." + echo "Workflow has completed successfully." From ece84cbe70de397e7ee38aa319e30c4e7cf5016e Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:51:19 +0100 Subject: [PATCH 066/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index fe254e7df..81acca49f 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -67,7 +67,17 @@ jobs: run: | git diff --exit-code || echo "Changes detected." - # Step 9: Create Pull Request (If changes exist, create a PR) + # Step 9: Commit changes if any + - name: Commit changes if any + run: | + git diff --exit-code || git commit -am "[core]: update .app-headers to latest version" + + # Step 10: Push changes to the branch + - name: Push changes to the branch + run: | + git push origin update-app-headers --force || echo "No changes to push" + + # Step 11: Create Pull Request (If changes exist, create a PR) - name: Create PR id: create-pr if: steps.check-changes.outcome == 'success' @@ -85,23 +95,23 @@ jobs: echo "PR already exists." fi - # Step 10: Final status (Output status to console) + # Step 12: Final status (Output status to console) - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." - # Step 11: Post checkout repo (Make sure to clean up the repository state) + # Step 13: Post checkout repo (Make sure to clean up the repository state) - name: Post checkout repo run: | echo "Repository check complete." git status - # Step 12: Post generate token (Output generated token for logging purposes) + # Step 14: Post generate token (Output generated token for logging purposes) - name: Post generate token run: | echo "Generated token: ${GITHUB_TOKEN}" - # Step 13: Complete (Final confirmation that workflow has finished) + # Step 15: Complete (Final confirmation that workflow has finished) - name: Complete run: | echo "Workflow has completed successfully." From 6e56610e2817803f1acacd17237e9c2cc50d710a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:52:59 +0100 Subject: [PATCH 067/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 22 ++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 81acca49f..26c04e693 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -46,11 +46,16 @@ jobs: git checkout update-app-headers fi - # Step 5: Check if there are changes before - - name: Check if there are any changes before making any modifications + # Step 5: Ensure .app-headers file exists (if missing, create it) + - name: Ensure .app-headers file exists run: | - git fetch origin - git diff --exit-code || echo "There are changes to commit." + if [ ! -f ".app-headers" ]; then + echo "The .app-headers file does not exist. Creating it." + touch .app-headers + echo "Generated by CI" > .app-headers + else + echo ".app-headers already exists." + fi # Step 6: Setup Figlet (Install and set up Figlet for text generation) - name: Set up Figlet @@ -61,12 +66,11 @@ jobs: run: | bash .github/workflows/generate-app-headers.sh - # Step 8: Check if changes are available (Check if the app-headers file has been modified) - - name: Check if changes are available - id: check-changes + # Step 8: Check if there are changes + - name: Check for changes run: | git diff --exit-code || echo "Changes detected." - + # Step 9: Commit changes if any - name: Commit changes if any run: | @@ -114,4 +118,4 @@ jobs: # Step 15: Complete (Final confirmation that workflow has finished) - name: Complete run: | - echo "Workflow has completed successfully." + From 7c08ec1fc65a11e1e1828a34f04ad2279ef67512 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:54:31 +0100 Subject: [PATCH 068/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 26c04e693..81ad7c9a1 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -51,7 +51,6 @@ jobs: run: | if [ ! -f ".app-headers" ]; then echo "The .app-headers file does not exist. Creating it." - touch .app-headers echo "Generated by CI" > .app-headers else echo ".app-headers already exists." @@ -66,7 +65,7 @@ jobs: run: | bash .github/workflows/generate-app-headers.sh - # Step 8: Check if there are changes + # Step 8: Check for changes (ensure file is updated) - name: Check for changes run: | git diff --exit-code || echo "Changes detected." @@ -118,4 +117,4 @@ jobs: # Step 15: Complete (Final confirmation that workflow has finished) - name: Complete run: | - + echo "Workflow has completed successfully." From 09f060eb693d37537f78cccc53df17adb139a067 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:56:30 +0100 Subject: [PATCH 069/120] Create .app-headers --- misc/.app-headers | 1 + 1 file changed, 1 insertion(+) create mode 100644 misc/.app-headers diff --git a/misc/.app-headers b/misc/.app-headers new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/misc/.app-headers @@ -0,0 +1 @@ + From bcf981cb339bd627a3f0df737704b6e1c27cae10 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:57:42 +0100 Subject: [PATCH 070/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 81ad7c9a1..f8ae29140 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -46,7 +46,13 @@ jobs: git checkout update-app-headers fi - # Step 5: Ensure .app-headers file exists (if missing, create it) + # Step 4.1: Configure Git user + - name: Configure Git user + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + + # Step 5: Ensure .app-headers file exists - name: Ensure .app-headers file exists run: | if [ ! -f ".app-headers" ]; then From 2e64b89a9b7bd2a72f488f6511c77898f89a655d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:00:27 +0100 Subject: [PATCH 071/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 24 +++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index f8ae29140..9e0d5f055 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -86,10 +86,22 @@ jobs: run: | git push origin update-app-headers --force || echo "No changes to push" - # Step 11: Create Pull Request (If changes exist, create a PR) + # Step 11: Compare branches (Check for differences between main and update-app-headers) + - name: Compare branches (Check for differences between main and update-app-headers) + run: | + git fetch origin + DIFF=$(git diff --quiet origin/main..origin/update-app-headers || echo "Changes detected") + if [[ "$DIFF" == "Changes detected" ]]; then + echo "Changes found between main and update-app-headers. Proceeding with PR creation." + else + echo "No changes found between main and update-app-headers. Skipping PR creation." + exit 0 # Skip PR creation if no changes are found + fi + + # Step 12: Create Pull Request (If changes exist, create a PR) - name: Create PR id: create-pr - if: steps.check-changes.outcome == 'success' + if: steps.compare-branches.outcome == 'success' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | @@ -104,23 +116,23 @@ jobs: echo "PR already exists." fi - # Step 12: Final status (Output status to console) + # Step 13: Final status (Output status to console) - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." - # Step 13: Post checkout repo (Make sure to clean up the repository state) + # Step 14: Post checkout repo (Make sure to clean up the repository state) - name: Post checkout repo run: | echo "Repository check complete." git status - # Step 14: Post generate token (Output generated token for logging purposes) + # Step 15: Post generate token (Output generated token for logging purposes) - name: Post generate token run: | echo "Generated token: ${GITHUB_TOKEN}" - # Step 15: Complete (Final confirmation that workflow has finished) + # Step 16: Complete (Final confirmation that workflow has finished) - name: Complete run: | echo "Workflow has completed successfully." From a1422379bd316ea241c14c1d848a21413cca394e Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:02:36 +0100 Subject: [PATCH 072/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 101 ++++---------------- 1 file changed, 19 insertions(+), 82 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 9e0d5f055..22282eed8 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -6,53 +6,32 @@ on: workflow_dispatch: jobs: - update-and-merge-pr: + update-and-create-pr: runs-on: ubuntu-latest permissions: contents: write pull-requests: write steps: - # Step 1: Setup job (Check environment & install dependencies) - - name: Setup environment - run: | - echo "Setting up the environment for the workflow." - sudo apt-get update - sudo apt-get install -y figlet gh jq - - # Step 2: Generate Token - - name: Generate a token - id: generate-token - uses: actions/create-github-app-token@v1 - with: - app-id: ${{ secrets.CREATE_HEADER_APP_ID }} - private-key: ${{ secrets.CREATE_HEADER_SECRET }} - - # Step 3: Checkout repository + # Step 1: Checkout repository - name: Checkout repository uses: actions/checkout@v4 with: - fetch-depth: 0 # Fetch all history to ensure we have full access to the repo history + fetch-depth: 0 # Ensure we have full access to all branches - # Step 4: Check or Update Branch (Create or update the update-app-headers branch) - - name: Check or Update Branch + # Step 2: Check if update-app-headers branch exists, create if not + - name: Check or Create update-app-headers branch run: | git fetch origin if ! git show-ref --quiet refs/heads/update-app-headers; then - echo "Creating the 'update-app-headers' branch as it does not exist." + echo "Creating 'update-app-headers' branch." git checkout -b update-app-headers origin/main else - echo "Switching to the existing 'update-app-headers' branch." + echo "Switching to 'update-app-headers' branch." git checkout update-app-headers fi - # Step 4.1: Configure Git user - - name: Configure Git user - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - - # Step 5: Ensure .app-headers file exists + # Step 3: Ensure .app-headers file exists (if missing, create it) - name: Ensure .app-headers file exists run: | if [ ! -f ".app-headers" ]; then @@ -62,77 +41,35 @@ jobs: echo ".app-headers already exists." fi - # Step 6: Setup Figlet (Install and set up Figlet for text generation) - - name: Set up Figlet - run: sudo apt-get install -y figlet - - # Step 7: Run generate-app-headers script - - name: Run generate-app-headers script - run: | - bash .github/workflows/generate-app-headers.sh - - # Step 8: Check for changes (ensure file is updated) - - name: Check for changes - run: | - git diff --exit-code || echo "Changes detected." - - # Step 9: Commit changes if any - - name: Commit changes if any - run: | - git diff --exit-code || git commit -am "[core]: update .app-headers to latest version" - - # Step 10: Push changes to the branch - - name: Push changes to the branch - run: | - git push origin update-app-headers --force || echo "No changes to push" - - # Step 11: Compare branches (Check for differences between main and update-app-headers) - - name: Compare branches (Check for differences between main and update-app-headers) + # Step 4: Compare .app-headers with main, commit if changes + - name: Compare with main and commit changes run: | git fetch origin - DIFF=$(git diff --quiet origin/main..origin/update-app-headers || echo "Changes detected") + DIFF=$(git diff --quiet origin/main..origin/update-app-headers -- .app-headers || echo "Changes detected") if [[ "$DIFF" == "Changes detected" ]]; then - echo "Changes found between main and update-app-headers. Proceeding with PR creation." + echo "Changes detected in .app-headers. Committing changes." + git commit -am "[core]: update .app-headers to latest version" + git push origin update-app-headers --force else - echo "No changes found between main and update-app-headers. Skipping PR creation." - exit 0 # Skip PR creation if no changes are found + echo "No changes in .app-headers. Skipping commit." fi - # Step 12: Create Pull Request (If changes exist, create a PR) - - name: Create PR - id: create-pr - if: steps.compare-branches.outcome == 'success' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Step 5: Create Pull Request if changes detected + - name: Create Pull Request if changes detected run: | PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -z "$PR_EXISTS" ]; then echo "Creating a new PR." gh pr create --title "[core]: update .app-headers to latest version" \ - --body "This PR automatically updates the app-headers file." \ + --body "This PR automatically updates the .app-headers file." \ --head update-app-headers \ --base main else echo "PR already exists." fi - # Step 13: Final status (Output status to console) + # Step 6: Final status output - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." - # Step 14: Post checkout repo (Make sure to clean up the repository state) - - name: Post checkout repo - run: | - echo "Repository check complete." - git status - - # Step 15: Post generate token (Output generated token for logging purposes) - - name: Post generate token - run: | - echo "Generated token: ${GITHUB_TOKEN}" - - # Step 16: Complete (Final confirmation that workflow has finished) - - name: Complete - run: | - echo "Workflow has completed successfully." From 24722c7eb811106117a2c7b551834bae67bc5e85 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:03:26 +0100 Subject: [PATCH 073/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 22282eed8..8958f9178 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 # Ensure we have full access to all branches - # Step 2: Check if update-app-headers branch exists, create if not + # Step 2: Check or Create update-app-headers branch - name: Check or Create update-app-headers branch run: | git fetch origin @@ -31,7 +31,7 @@ jobs: git checkout update-app-headers fi - # Step 3: Ensure .app-headers file exists (if missing, create it) + # Step 3: Ensure .app-headers file exists - name: Ensure .app-headers file exists run: | if [ ! -f ".app-headers" ]; then @@ -41,7 +41,7 @@ jobs: echo ".app-headers already exists." fi - # Step 4: Compare .app-headers with main, commit if changes + # Step 4: Compare with main and commit changes - name: Compare with main and commit changes run: | git fetch origin @@ -56,6 +56,8 @@ jobs: # Step 5: Create Pull Request if changes detected - name: Create Pull Request if changes detected + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -z "$PR_EXISTS" ]; then @@ -72,4 +74,3 @@ jobs: - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." - From 2ba1bfa3f10e8ff1315a560a16e07a64626e657b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:04:06 +0100 Subject: [PATCH 074/120] [core]: update .app-headers to latest version (#1389) Co-authored-by: github-actions[bot] --- misc/.app-headers | 2012 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2012 insertions(+) diff --git a/misc/.app-headers b/misc/.app-headers index 8b1378917..f43befdab 100644 --- a/misc/.app-headers +++ b/misc/.app-headers @@ -1 +1,2013 @@ +### Generated on 01-10-2025 +################################################## + +### 2fauth.sh +APP=2FAuth + ___ _________ __ __ + |__ \ / ____/ | __ __/ /_/ /_ + __/ // /_ / /| |/ / / / __/ __ \ + / __// __/ / ___ / /_/ / /_/ / / / +/____/_/ /_/ |_\__,_/\__/_/ /_/ + + +### 5etools.sh +APP=5etools + ______ __ __ + / ____/__ / /_____ ____ / /____ + /___ \/ _ \/ __/ __ \/ __ \/ / ___/ + ____/ / __/ /_/ /_/ / /_/ / (__ ) +/_____/\___/\__/\____/\____/_/____/ + + +### actualbudget.sh +APP=Actual Budget + ___ __ __ ____ __ __ + / | _____/ /___ ______ _/ / / __ )__ ______/ /___ ____ / /_ + / /| |/ ___/ __/ / / / __ `/ / / __ / / / / __ / __ `/ _ \/ __/ + / ___ / /__/ /_/ /_/ / /_/ / / / /_/ / /_/ / /_/ / /_/ / __/ /_ +/_/ |_\___/\__/\__,_/\__,_/_/ /_____/\__,_/\__,_/\__, /\___/\__/ + /____/ + +### adguard.sh +APP=Adguard + ___ __ __ + / | ____/ /___ ___ ______ __________/ / + / /| |/ __ / __ `/ / / / __ `/ ___/ __ / + / ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / +/_/ |_\__,_/\__, /\__,_/\__,_/_/ \__,_/ + /____/ + +### adventurelog.sh +APP=AdventureLog + ___ __ __ __ + / | ____/ / _____ ____ / /___ __________ / / ____ ____ _ + / /| |/ __ / | / / _ \/ __ \/ __/ / / / ___/ _ \/ / / __ \/ __ `/ + / ___ / /_/ /| |/ / __/ / / / /_/ /_/ / / / __/ /___/ /_/ / /_/ / +/_/ |_\__,_/ |___/\___/_/ /_/\__/\__,_/_/ \___/_____/\____/\__, / + /____/ + +### agentdvr.sh +APP=AgentDVR + ___ __ ____ _ ______ + / | ____ ____ ____ / /_/ __ \ | / / __ \ + / /| |/ __ `/ _ \/ __ \/ __/ / / / | / / /_/ / + / ___ / /_/ / __/ / / / /_/ /_/ /| |/ / _, _/ +/_/ |_\__, /\___/_/ /_/\__/_____/ |___/_/ |_| + /____/ + +### alpine-docker.sh +APP=Alpine-Docker + ___ __ _ ____ __ + / | / /___ (_)___ ___ / __ \____ _____/ /_____ _____ + / /| | / / __ \/ / __ \/ _ \______/ / / / __ \/ ___/ //_/ _ \/ ___/ + / ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /__/ ,< / __/ / +/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/\___/_/|_|\___/_/ + /_/ + +### alpine-grafana.sh +APP=Alpine-Grafana + ___ __ _ ______ ____ + / | / /___ (_)___ ___ / ____/________ _/ __/___ _____ ____ _ + / /| | / / __ \/ / __ \/ _ \______/ / __/ ___/ __ `/ /_/ __ `/ __ \/ __ `/ + / ___ |/ / /_/ / / / / / __/_____/ /_/ / / / /_/ / __/ /_/ / / / / /_/ / +/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/ \__,_/_/ \__,_/_/ /_/\__,_/ + /_/ + +### alpine-nextcloud.sh +APP=Alpine-Nextcloud + ___ __ _ _ __ __ __ + / | / /___ (_)___ ___ / | / /__ _ __/ /______/ /___ __ __ + / /| | / / __ \/ / __ \/ _ \______/ |/ / _ \| |/_/ __/ ___/ / __ \/ / / / + / ___ |/ / /_/ / / / / / __/_____/ /| / __/> < +/_/ |_/_/ \___/_/ /_/_/ |___/\___/_____/\____/_/|_| + + +### aria2.sh +APP=Aria2 + ___ _ ___ + / | _____(_)___ |__ \ + / /| | / ___/ / __ `/_/ / + / ___ |/ / / / /_/ / __/ +/_/ |_/_/ /_/\__,_/____/ + + +### audiobookshelf.sh +APP=audiobookshelf + ___ __ __ __ ______ + ____ ___ ______/ (_)___ / /_ ____ ____ / /_______/ /_ ___ / / __/ + / __ `/ / / / __ / / __ \/ __ \/ __ \/ __ \/ //_/ ___/ __ \/ _ \/ / /_ +/ /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / ,< (__ ) / / / __/ / __/ +\__,_/\__,_/\__,_/_/\____/_.___/\____/\____/_/|_/____/_/ /_/\___/_/_/ + + +### authentik.sh +APP=Authentik + ___ __ __ __ _ __ + / | __ __/ /_/ /_ ___ ____ / /_(_) /__ + / /| |/ / / / __/ __ \/ _ \/ __ \/ __/ / //_/ + / ___ / /_/ / /_/ / / / __/ / / / /_/ / ,< +/_/ |_\__,_/\__/_/ /_/\___/_/ /_/\__/_/_/|_| + + +### autobrr.sh +APP=Autobrr + ___ __ __ + / | __ __/ /_____ / /_ __________ + / /| |/ / / / __/ __ \/ __ \/ ___/ ___/ + / ___ / /_/ / /_/ /_/ / /_/ / / / / +/_/ |_\__,_/\__/\____/_.___/_/ /_/ + + +### bazarr.sh +APP=Bazarr + ____ + / __ )____ _____ ____ ___________ + / __ / __ `/_ / / __ `/ ___/ ___/ + / /_/ / /_/ / / /_/ /_/ / / / / +/_____/\__,_/ /___/\__,_/_/ /_/ + + +### blocky.sh +APP=Blocky + ____ __ __ + / __ )/ /___ _____/ /____ __ + / __ / / __ \/ ___/ //_/ / / / + / /_/ / / /_/ / /__/ ,< / /_/ / +/_____/_/\____/\___/_/|_|\__, / + /____/ + +### bookstack.sh +APP=Bookstack + ____ __ __ __ + / __ )____ ____ / /_______/ /_____ ______/ /__ + / __ / __ \/ __ \/ //_/ ___/ __/ __ `/ ___/ //_/ + / /_/ / /_/ / /_/ / ,< (__ ) /_/ /_/ / /__/ ,< +/_____/\____/\____/_/|_/____/\__/\__,_/\___/_/|_| + + +### bunkerweb.sh +APP=BunkerWeb + ____ __ _ __ __ + / __ )__ ______ / /_____ ____| | / /__ / /_ + / __ / / / / __ \/ //_/ _ \/ ___/ | /| / / _ \/ __ \ + / /_/ / /_/ / / / / ,< / __/ / | |/ |/ / __/ /_/ / +/_____/\__,_/_/ /_/_/|_|\___/_/ |__/|__/\___/_.___/ + + +### caddy.sh +APP=Caddy + ______ __ __ + / ____/___ _____/ /___/ /_ __ + / / / __ `/ __ / __ / / / / +/ /___/ /_/ / /_/ / /_/ / /_/ / +\____/\__,_/\__,_/\__,_/\__, / + /____/ + +### calibre-web.sh +APP=Calibre-Web + ______ ___ __ _ __ __ + / ____/___ _/ (_) /_ ________ | | / /__ / /_ + / / / __ `/ / / __ \/ ___/ _ \_____| | /| / / _ \/ __ \ +/ /___/ /_/ / / / /_/ / / / __/_____/ |/ |/ / __/ /_/ / +\____/\__,_/_/_/_.___/_/ \___/ |__/|__/\___/_.___/ + + +### casaos.sh +APP=CasaOS + ______ ____ _____ + / ____/___ __________ _/ __ \/ ___/ + / / / __ `/ ___/ __ `/ / / /\__ \ +/ /___/ /_/ (__ ) /_/ / /_/ /___/ / +\____/\__,_/____/\__,_/\____//____/ + + +### changedetection.sh +APP=Change Detection + ________ + / ____/ /_ ____ _____ ____ ____ + / / / __ \/ __ `/ __ \/ __ `/ _ \ +/ /___/ / / / /_/ / / / / /_/ / __/ +\____/_/ /_/\__,_/_/ /_/\__, /\___/ + /____/ + ____ __ __ _ + / __ \___ / /____ _____/ /_(_)___ ____ + / / / / _ \/ __/ _ \/ ___/ __/ / __ \/ __ \ + / /_/ / __/ /_/ __/ /__/ /_/ / /_/ / / / / +/_____/\___/\__/\___/\___/\__/_/\____/_/ /_/ + + +### channels.sh +APP=Channels + ________ __ + / ____/ /_ ____ _____ ____ ___ / /____ + / / / __ \/ __ `/ __ \/ __ \/ _ \/ / ___/ +/ /___/ / / / /_/ / / / / / / / __/ (__ ) +\____/_/ /_/\__,_/_/ /_/_/ /_/\___/_/____/ + + +### checkmk.sh +APP=checkmk + __ __ __ + _____/ /_ ___ _____/ /______ ___ / /__ + / ___/ __ \/ _ \/ ___/ //_/ __ `__ \/ //_/ +/ /__/ / / / __/ /__/ ,< / / / / / / ,< +\___/_/ /_/\___/\___/_/|_/_/ /_/ /_/_/|_| + + +### cloudflared.sh +APP=Cloudflared + ________ ________ __ + / ____/ /___ __ ______/ / __/ /___ _________ ____/ / + / / / / __ \/ / / / __ / /_/ / __ `/ ___/ _ \/ __ / +/ /___/ / /_/ / /_/ / /_/ / __/ / /_/ / / / __/ /_/ / +\____/_/\____/\__,_/\__,_/_/ /_/\__,_/_/ \___/\__,_/ + + +### cockpit.sh +APP=Cockpit + ______ __ _ __ + / ____/___ _____/ /______ (_) /_ + / / / __ \/ ___/ //_/ __ \/ / __/ +/ /___/ /_/ / /__/ ,< / /_/ / / /_ +\____/\____/\___/_/|_/ .___/_/\__/ + /_/ + +### commafeed.sh +APP=CommaFeed + ______ ______ __ + / ____/___ ____ ___ ____ ___ ____ _/ ____/__ ___ ____/ / + / / / __ \/ __ `__ \/ __ `__ \/ __ `/ /_ / _ \/ _ \/ __ / +/ /___/ /_/ / / / / / / / / / / / /_/ / __/ / __/ __/ /_/ / +\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ \___/\___/\__,_/ + + +### cronicle.sh +APP=Cronicle + ______ _ __ + / ____/________ ____ (_)____/ /__ + / / / ___/ __ \/ __ \/ / ___/ / _ \ +/ /___/ / / /_/ / / / / / /__/ / __/ +\____/_/ \____/_/ /_/_/\___/_/\___/ + + +### daemonsync.sh +APP=Daemon Sync + ____ _____ + / __ \____ ____ ____ ___ ____ ____ / ___/__ ______ _____ + / / / / __ `/ _ \/ __ `__ \/ __ \/ __ \ \__ \/ / / / __ \/ ___/ + / /_/ / /_/ / __/ / / / / / /_/ / / / / ___/ / /_/ / / / / /__ +/_____/\__,_/\___/_/ /_/ /_/\____/_/ /_/ /____/\__, /_/ /_/\___/ + /____/ + +### dashy.sh +APP=Dashy + ____ __ + / __ \____ ______/ /_ __ __ + / / / / __ `/ ___/ __ \/ / / / + / /_/ / /_/ (__ ) / / / /_/ / +/_____/\__,_/____/_/ /_/\__, / + /____/ + +### debian.sh +APP=Debian + ____ __ _ + / __ \___ / /_ (_)___ _____ + / / / / _ \/ __ \/ / __ `/ __ \ + / /_/ / __/ /_/ / / /_/ / / / / +/_____/\___/_.___/_/\__,_/_/ /_/ + + +### deconz.sh +APP=deCONZ + __ __________ _ _______ + ____/ /__ / ____/ __ \/ | / /__ / + / __ / _ \/ / / / / / |/ / / / +/ /_/ / __/ /___/ /_/ / /| / / /__ +\__,_/\___/\____/\____/_/ |_/ /____/ + + +### deluge.sh +APP=Deluge + ____ __ + / __ \___ / /_ ______ ____ + / / / / _ \/ / / / / __ `/ _ \ + / /_/ / __/ / /_/ / /_/ / __/ +/_____/\___/_/\__,_/\__, /\___/ + /____/ + +### docker.sh +APP=Docker + ____ __ + / __ \____ _____/ /_____ _____ + / / / / __ \/ ___/ //_/ _ \/ ___/ + / /_/ / /_/ / /__/ ,< / __/ / +/_____/\____/\___/_/|_|\___/_/ + + +### dockge.sh +APP=Dockge + ____ __ + / __ \____ _____/ /______ ____ + / / / / __ \/ ___/ //_/ __ `/ _ \ + / /_/ / /_/ / /__/ ,< / /_/ / __/ +/_____/\____/\___/_/|_|\__, /\___/ + /____/ + +### emby.sh +APP=Emby + ______ __ + / ____/___ ___ / /_ __ __ + / __/ / __ `__ \/ __ \/ / / / + / /___/ / / / / / /_/ / /_/ / +/_____/_/ /_/ /_/_.___/\__, / + /____/ + +### emqx.sh +APP=EMQX + ________ _______ _ __ + / ____/ |/ / __ \ | |/ / + / __/ / /|_/ / / / / | / + / /___/ / / / /_/ / / | +/_____/_/ /_/\___\_\/_/|_| + + +### ersatztv.sh +APP=ErsatzTV + ______ __ _______ __ + / ____/_____________ _/ /_____/_ __/ | / / + / __/ / ___/ ___/ __ `/ __/_ / / / | | / / + / /___/ / (__ ) /_/ / /_ / /_/ / | |/ / +/_____/_/ /____/\__,_/\__/ /___/_/ |___/ + + +### esphome.sh +APP=ESPHome + ___________ ____ __ __ + / ____/ ___// __ \/ / / /___ ____ ___ ___ + / __/ \__ \/ /_/ / /_/ / __ \/ __ `__ \/ _ \ + / /___ ___/ / ____/ __ / /_/ / / / / / / __/ +/_____//____/_/ /_/ /_/\____/_/ /_/ /_/\___/ + + +### evcc.sh +APP=evcc + + ___ _ ____________ + / _ \ | / / ___/ ___/ +/ __/ |/ / /__/ /__ +\___/|___/\___/\___/ + + +### fenrus.sh +APP=Fenrus + ______ + / ____/__ ____ _______ _______ + / /_ / _ \/ __ \/ ___/ / / / ___/ + / __/ / __/ / / / / / /_/ (__ ) +/_/ \___/_/ /_/_/ \__,_/____/ + + +### fhem.sh +APP=FHEM + ________ __________ ___ + / ____/ / / / ____/ |/ / + / /_ / /_/ / __/ / /|_/ / + / __/ / __ / /___/ / / / +/_/ /_/ /_/_____/_/ /_/ + + +### firefly.sh +APP=Firefly + _______ ______ + / ____(_)_______ / __/ /_ __ + / /_ / / ___/ _ \/ /_/ / / / / + / __/ / / / / __/ __/ / /_/ / +/_/ /_/_/ \___/_/ /_/\__, / + /____/ + +### flaresolverr.sh +APP=FlareSolverr + ________ _____ __ + / ____/ /___ _________ / ___/____ / / _____ __________ + / /_ / / __ `/ ___/ _ \\__ \/ __ \/ / | / / _ \/ ___/ ___/ + / __/ / / /_/ / / / __/__/ / /_/ / /| |/ / __/ / / / +/_/ /_/\__,_/_/ \___/____/\____/_/ |___/\___/_/ /_/ + + +### flowiseai.sh +APP=FlowiseAI + ________ _ ___ ____ + / ____/ /___ _ __(_)_______ / | / _/ + / /_ / / __ \ | /| / / / ___/ _ \/ /| | / / + / __/ / / /_/ / |/ |/ / (__ ) __/ ___ |_/ / +/_/ /_/\____/|__/|__/_/____/\___/_/ |_/___/ + + +### forgejo.sh +APP=Forgejo + ______ _ + / ____/___ _________ ____ (_)___ + / /_ / __ \/ ___/ __ `/ _ \ / / __ \ + / __/ / /_/ / / / /_/ / __/ / / /_/ / +/_/ \____/_/ \__, /\___/_/ /\____/ + /____/ /___/ + +### frigate.sh +APP=Frigate + ______ _ __ + / ____/____(_)___ _____ _/ /____ + / /_ / ___/ / __ `/ __ `/ __/ _ \ + / __/ / / / / /_/ / /_/ / /_/ __/ +/_/ /_/ /_/\__, /\__,_/\__/\___/ + /____/ + +### gitea.sh +APP=Gitea + _______ __ + / ____(_) /____ ____ _ + / / __/ / __/ _ \/ __ `/ +/ /_/ / / /_/ __/ /_/ / +\____/_/\__/\___/\__,_/ + + +### glance.sh +APP=Glance + ________ + / ____/ /___ _____ ________ + / / __/ / __ `/ __ \/ ___/ _ \ +/ /_/ / / /_/ / / / / /__/ __/ +\____/_/\__,_/_/ /_/\___/\___/ + + +### glpi.sh +APP=GLPI + ________ ____ ____ + / ____/ / / __ \/ _/ + / / __/ / / /_/ // / +/ /_/ / /___/ ____// / +\____/_____/_/ /___/ + + +### go2rtc.sh +APP=go2rtc + ___ __ + ____ _____ |__ \ _____/ /______ + / __ `/ __ \__/ // ___/ __/ ___/ + / /_/ / /_/ / __// / / /_/ /__ + \__, /\____/____/_/ \__/\___/ +/____/ + +### gokapi.sh +APP=Gokapi + ______ __ _ + / ____/___ / /______ _____ (_) + / / __/ __ \/ //_/ __ `/ __ \/ / +/ /_/ / /_/ / ,< / /_/ / /_/ / / +\____/\____/_/|_|\__,_/ .___/_/ + /_/ + +### gotify.sh +APP=Gotify + ______ __ _ ____ + / ____/___ / /_(_) __/_ __ + / / __/ __ \/ __/ / /_/ / / / +/ /_/ / /_/ / /_/ / __/ /_/ / +\____/\____/\__/_/_/ \__, / + /____/ + +### grafana.sh +APP=Grafana + ______ ____ + / ____/________ _/ __/___ _____ ____ _ + / / __/ ___/ __ `/ /_/ __ `/ __ \/ __ `/ +/ /_/ / / / /_/ / __/ /_/ / / / / /_/ / +\____/_/ \__,_/_/ \__,_/_/ /_/\__,_/ + + +### grist.sh +APP=Grist + ______ _ __ + / ____/____(_)____/ /_ + / / __/ ___/ / ___/ __/ +/ /_/ / / / (__ ) /_ +\____/_/ /_/____/\__/ + + +### grocy.sh +APP=grocy + + ____ __________ _______ __ + / __ `/ ___/ __ \/ ___/ / / / + / /_/ / / / /_/ / /__/ /_/ / + \__, /_/ \____/\___/\__, / +/____/ /____/ + +### headscale.sh +APP=Headscale + __ __ __ __ + / / / /__ ____ _____/ /_____________ _/ /__ + / /_/ / _ \/ __ `/ __ / ___/ ___/ __ `/ / _ \ + / __ / __/ /_/ / /_/ (__ ) /__/ /_/ / / __/ +/_/ /_/\___/\__,_/\__,_/____/\___/\__,_/_/\___/ + + +### heimdall-dashboard.sh +APP=Heimdall-Dashboard + __ __ _ __ ____ ____ __ __ + / / / /__ (_)___ ___ ____/ /___ _/ / / / __ \____ ______/ /_ / /_ + / /_/ / _ \/ / __ `__ \/ __ / __ `/ / /_____/ / / / __ `/ ___/ __ \/ __ \ + / __ / __/ / / / / / / /_/ / /_/ / / /_____/ /_/ / /_/ (__ ) / / / /_/ / +/_/ /_/\___/_/_/ /_/ /_/\__,_/\__,_/_/_/ /_____/\__,_/____/_/ /_/_.___/ + + __ + ____ ____ __________/ / + / __ \/ __ `/ ___/ __ / +/ /_/ / /_/ / / / /_/ / +\____/\__,_/_/ \__,_/ + + +### hivemq.sh +APP=HiveMQ + __ ___ __ _______ + / / / (_) _____ / |/ / __ \ + / /_/ / / | / / _ \/ /|_/ / / / / + / __ / /| |/ / __/ / / / /_/ / +/_/ /_/_/ |___/\___/_/ /_/\___\_\ + + +### hoarder.sh +APP=Hoarder + __ __ __ + / / / /___ ____ __________/ /__ _____ + / /_/ / __ \/ __ `/ ___/ __ / _ \/ ___/ + / __ / /_/ / /_/ / / / /_/ / __/ / +/_/ /_/\____/\__,_/_/ \__,_/\___/_/ + + +### homarr.sh +APP=Homarr + __ __ + / / / /___ ____ ___ ____ ___________ + / /_/ / __ \/ __ `__ \/ __ `/ ___/ ___/ + / __ / /_/ / / / / / / /_/ / / / / +/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/ + + +### homeassistant-core.sh +APP=Home Assistant-Core + __ __ + / / / /___ ____ ___ ___ + / /_/ / __ \/ __ `__ \/ _ \ + / __ / /_/ / / / / / / __/ +/_/ /_/\____/_/ /_/ /_/\___/ + + ___ _ __ __ ______ + / | __________(_)____/ /_____ _____ / /_ / ____/___ ________ + / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ / / __ \/ ___/ _ \ + / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / / / __/ +/_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____/\____/_/ \___/ + + +### homeassistant.sh +APP=Home Assistant + __ __ ___ _ __ __ + / / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_ + / /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ + / __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ +/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ + + +### homebox.sh +APP=HomeBox + __ __ ____ + / / / /___ ____ ___ ___ / __ )____ _ __ + / /_/ / __ \/ __ `__ \/ _ \/ __ / __ \| |/_/ + / __ / /_/ / / / / / / __/ /_/ / /_/ /> < +/_/ /_/\____/_/ /_/ /_/\___/_____/\____/_/|_| + + +### homebridge.sh +APP=Homebridge + __ __ __ _ __ + / / / /___ ____ ___ ___ / /_ _____(_)___/ /___ ____ + / /_/ / __ \/ __ `__ \/ _ \/ __ \/ ___/ / __ / __ `/ _ \ + / __ / /_/ / / / / / / __/ /_/ / / / / /_/ / /_/ / __/ +/_/ /_/\____/_/ /_/ /_/\___/_.___/_/ /_/\__,_/\__, /\___/ + /____/ + +### homepage.sh +APP=Homepage + __ __ + / / / /___ ____ ___ ___ ____ ____ _____ ____ + / /_/ / __ \/ __ `__ \/ _ \/ __ \/ __ `/ __ `/ _ \ + / __ / /_/ / / / / / / __/ /_/ / /_/ / /_/ / __/ +/_/ /_/\____/_/ /_/ /_/\___/ .___/\__,_/\__, /\___/ + /_/ /____/ + +### homer.sh +APP=Homer + __ __ + / / / /___ ____ ___ ___ _____ + / /_/ / __ \/ __ `__ \/ _ \/ ___/ + / __ / /_/ / / / / / / __/ / +/_/ /_/\____/_/ /_/ /_/\___/_/ + + +### hyperhdr.sh +APP=HyperHDR + __ __ __ ______ ____ + / / / /_ ______ ___ _____/ / / / __ \/ __ \ + / /_/ / / / / __ \/ _ \/ ___/ /_/ / / / / /_/ / + / __ / /_/ / /_/ / __/ / / __ / /_/ / _, _/ +/_/ /_/\__, / .___/\___/_/ /_/ /_/_____/_/ |_| + /____/_/ + +### hyperion.sh +APP=Hyperion + __ __ _ + / / / /_ ______ ___ _____(_)___ ____ + / /_/ / / / / __ \/ _ \/ ___/ / __ \/ __ \ + / __ / /_/ / /_/ / __/ / / / /_/ / / / / +/_/ /_/\__, / .___/\___/_/ /_/\____/_/ /_/ + /____/_/ + +### influxdb.sh +APP=InfluxDB + ____ ______ ____ ____ + / _/___ / __/ /_ ___ __/ __ \/ __ ) + / // __ \/ /_/ / / / / |/_/ / / / __ | + _/ // / / / __/ / /_/ /> < +/_/ |_/\___/\__/_____/\____/_/|_| + + +### nextcloudpi.sh +APP=NextCloudPi + _ __ __ ________ ______ _ + / | / /__ _ __/ /_/ ____/ /___ __ ______/ / __ \(_) + / |/ / _ \| |/_/ __/ / / / __ \/ / / / __ / /_/ / / + / /| / __/> < / ____/ / / /_/ /> < +/_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ /_/\__, /_/|_| + /_/ /____/ + +### part-db.sh +APP=Part-DB + ____ __ ____ ____ + / __ \____ ______/ /_ / __ \/ __ ) + / /_/ / __ `/ ___/ __/_____/ / / / __ | + / ____/ /_/ / / / /_/_____/ /_/ / /_/ / +/_/ \__,_/_/ \__/ /_____/_____/ + + +### pbs.sh +APP=PBS + ____ ____ _____ + / __ \/ __ ) ___/ + / /_/ / __ \__ \ + / ____/ /_/ /__/ / +/_/ /_____/____/ + + +### peanut.sh +APP=PeaNUT + ____ _ ____ ________ + / __ \___ ____ _/ | / / / / /_ __/ + / /_/ / _ \/ __ `/ |/ / / / / / / + / ____/ __/ /_/ / /| / /_/ / / / +/_/ \___/\__,_/_/ |_/\____/ /_/ + + +### petio.sh +APP=Petio + ____ __ _ + / __ \___ / /_(_)___ + / /_/ / _ \/ __/ / __ \ + / ____/ __/ /_/ / /_/ / +/_/ \___/\__/_/\____/ + + +### pf2etools.sh +APP=Pf2eTools + ____ _______ ______ __ + / __ \/ __/__ \ ___/_ __/___ ____ / /____ + / /_/ / /_ __/ // _ \/ / / __ \/ __ \/ / ___/ + / ____/ __// __// __/ / / /_/ / /_/ / (__ ) +/_/ /_/ /____/\___/_/ \____/\____/_/____/ + + +### photoprism.sh +APP=PhotoPrism + ____ __ __ ____ _ + / __ \/ /_ ____ / /_____ / __ \_____(_)________ ___ + / /_/ / __ \/ __ \/ __/ __ \/ /_/ / ___/ / ___/ __ `__ \ + / ____/ / / / /_/ / /_/ /_/ / ____/ / / (__ ) / / / / / +/_/ /_/ /_/\____/\__/\____/_/ /_/ /_/____/_/ /_/ /_/ + + +### pialert.sh +APP=PiAlert + ____ _ ___ __ __ + / __ \(_) | / /__ _____/ /_ + / /_/ / / /| | / / _ \/ ___/ __/ + / ____/ / ___ |/ / __/ / / /_ +/_/ /_/_/ |_/_/\___/_/ \__/ + + +### pihole.sh +APP=Pihole + ____ _ __ __ + / __ \(_) /_ ____ / /__ + / /_/ / / __ \/ __ \/ / _ \ + / ____/ / / / / /_/ / / __/ +/_/ /_/_/ /_/\____/_/\___/ + + +### pingvin.sh +APP=Pingvin + ____ _ _ + / __ \(_)___ ____ __ __(_)___ + / /_/ / / __ \/ __ `/ | / / / __ \ + / ____/ / / / / /_/ /| |/ / / / / / +/_/ /_/_/ /_/\__, / |___/_/_/ /_/ + /____/ + +### plex.sh +APP=Plex + ____ __ + / __ \/ /__ _ __ + / /_/ / / _ \| |/_/ + / ____/ / __/> < +/_/ /_/\___/_/|_| + + +### pocketbase.sh +APP=Pocketbase + ____ __ __ __ + / __ \____ _____/ /_____ / /_/ /_ ____ _________ + / /_/ / __ \/ ___/ //_/ _ \/ __/ __ \/ __ `/ ___/ _ \ + / ____/ /_/ / /__/ ,< / __/ /_/ /_/ / /_/ (__ ) __/ +/_/ \____/\___/_/|_|\___/\__/_.___/\__,_/____/\___/ + + +### podman-homeassistant.sh +APP=Podman-Home Assistant + ____ __ __ __ + / __ \____ ____/ /___ ___ ____ _____ / / / /___ ____ ___ ___ + / /_/ / __ \/ __ / __ `__ \/ __ `/ __ \______/ /_/ / __ \/ __ `__ \/ _ \ + / ____/ /_/ / /_/ / / / / / / /_/ / / / /_____/ __ / /_/ / / / / / / __/ +/_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/ /_/ /_/\____/_/ /_/ /_/\___/ + + ___ _ __ __ + / | __________(_)____/ /_____ _____ / /_ + / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/ + / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_ +/_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ + + +### podman.sh +APP=Podman + ____ __ + / __ \____ ____/ /___ ___ ____ _____ + / /_/ / __ \/ __ / __ `__ \/ __ `/ __ \ + / ____/ /_/ / /_/ / / / / / / /_/ / / / / +/_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/ + + +### postgresql.sh +APP=PostgreSQL + ____ __ _____ ____ __ + / __ \____ _____/ /_____ _________ / ___// __ \ / / + / /_/ / __ \/ ___/ __/ __ `/ ___/ _ \\__ \/ / / / / / + / ____/ /_/ (__ ) /_/ /_/ / / / __/__/ / /_/ / / /___ +/_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/ + /____/ + +### prometheus-alertmanager.sh +APP=Prometheus-Alertmanager + ____ __ __ ___ __ + / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / | / / + / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /| | / / + / ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ___ |/ / +/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ |_/_/ + + __ + ___ _____/ /_____ ___ ____ _____ ____ _____ ____ _____ + / _ \/ ___/ __/ __ `__ \/ __ `/ __ \/ __ `/ __ `/ _ \/ ___/ +/ __/ / / /_/ / / / / / /_/ / / / / /_/ / /_/ / __/ / +\___/_/ \__/_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/ + /____/ + +### prometheus.sh +APP=Prometheus + ____ __ __ + / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ + / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/ + / ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ ) +/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ + + +### prowlarr.sh +APP=Prowlarr + ____ __ + / __ \_________ _ __/ /___ ___________ + / /_/ / ___/ __ \ | /| / / / __ `/ ___/ ___/ + / ____/ / / /_/ / |/ |/ / / /_/ / / / / +/_/ /_/ \____/|__/|__/_/\__,_/_/ /_/ + + +### proxmox-datacenter-manager.sh +APP=proxmox-datacenter-manager + __ __ + ____ _________ _ ______ ___ ____ _ __ ____/ /___ _/ /_____ _ + / __ \/ ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ __ / __ `/ __/ __ `/ + / /_/ / / / /_/ /> < +/____/\__,_/_.___/_.___/_/_/|_| + + +### zammad.sh +APP=Zammad + _____ __ +/__ / ____ _____ ___ ____ ___ ____ _____/ / + / / / __ `/ __ `__ \/ __ `__ \/ __ `/ __ / + / /__/ /_/ / / / / / / / / / / / /_/ / /_/ / +/____/\__,_/_/ /_/ /_/_/ /_/ /_/\__,_/\__,_/ + + +### zigbee2mqtt.sh +APP=Zigbee2MQTT + _____ _ __ ___ __ _______ ____________ +/__ / (_)___ _/ /_ ___ ___ |__ \ / |/ / __ \/_ __/_ __/ + / / / / __ `/ __ \/ _ \/ _ \__/ // /|_/ / / / / / / / / + / /__/ / /_/ / /_/ / __/ __/ __// / / / /_/ / / / / / +/____/_/\__, /_.___/\___/\___/____/_/ /_/\___\_\/_/ /_/ + /____/ + +### zipline.sh +APP=Zipline + _____ _ ___ +/__ / (_)___ / (_)___ ___ + / / / / __ \/ / / __ \/ _ \ + / /__/ / /_/ / / / / / / __/ +/____/_/ .___/_/_/_/ /_/\___/ + /_/ + +### zoraxy.sh +APP=Zoraxy + _____ +/__ / ____ _________ __ ____ __ + / / / __ \/ ___/ __ `/ |/_/ / / / + / /__/ /_/ / / / /_/ /> Date: Fri, 10 Jan 2025 13:04:40 +0100 Subject: [PATCH 075/120] Fix bookstack.sh: Ignore empty folder (#1388) --- ct/bookstack.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ct/bookstack.sh b/ct/bookstack.sh index 0589d2dca..6b5f5c873 100644 --- a/ct/bookstack.sh +++ b/ct/bookstack.sh @@ -44,9 +44,9 @@ function update_script() { unzip -q /opt/v${RELEASE}.zip -d /opt mv /opt/BookStack-${RELEASE} /opt/bookstack cp /opt/bookstack-backup/.env /opt/bookstack/.env - cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ - cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ - cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ + cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ 2>/dev/null || true + cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ 2>/dev/null || true + cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ 2>/dev/null || true cd /opt/bookstack COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev &>/dev/null php artisan migrate --force &>/dev/null From 2c4a61d8283ea111178717624d587e37a3f7104b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:04:57 +0100 Subject: [PATCH 076/120] [core]: update .app-headers to latest version (#1390) Co-authored-by: github-actions[bot] From cb8372da3d919453cb5e6d3ef8f0a6fc15829259 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:06:06 +0100 Subject: [PATCH 077/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 28 ++++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 8958f9178..633a65fa5 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -41,20 +41,24 @@ jobs: echo ".app-headers already exists." fi - # Step 4: Compare with main and commit changes - - name: Compare with main and commit changes + # Step 4: Check for changes between main and update-app-headers + - name: Check if changes are detected + id: check_changes run: | git fetch origin - DIFF=$(git diff --quiet origin/main..origin/update-app-headers -- .app-headers || echo "Changes detected") - if [[ "$DIFF" == "Changes detected" ]]; then - echo "Changes detected in .app-headers. Committing changes." - git commit -am "[core]: update .app-headers to latest version" - git push origin update-app-headers --force - else - echo "No changes in .app-headers. Skipping commit." - fi + git diff --quiet origin/main..HEAD -- .app-headers + echo "Changes detected: $?" + continue-on-error: true # So the workflow continues even if no changes are detected + + # Step 5: Commit changes if detected + - name: Commit changes if detected + if: steps.check_changes.outcome == 'failure' + run: | + echo "Changes detected in .app-headers. Committing changes." + git commit -am "[core]: update .app-headers to latest version" + git push origin update-app-headers --force - # Step 5: Create Pull Request if changes detected + # Step 6: Create Pull Request if changes detected - name: Create Pull Request if changes detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -70,7 +74,7 @@ jobs: echo "PR already exists." fi - # Step 6: Final status output + # Step 7: Final status output - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." From 42375390d63c6c550c8a8b4d161162cee987f374 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:07:06 +0100 Subject: [PATCH 078/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 633a65fa5..3f6ae4639 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -41,11 +41,10 @@ jobs: echo ".app-headers already exists." fi - # Step 4: Check for changes between main and update-app-headers - - name: Check if changes are detected + # Step 4: Check for changes in the .app-headers file content + - name: Check if .app-headers has changes id: check_changes run: | - git fetch origin git diff --quiet origin/main..HEAD -- .app-headers echo "Changes detected: $?" continue-on-error: true # So the workflow continues even if no changes are detected From 7930764ece1711953a65c6f86da08adaf112257e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:08:44 +0100 Subject: [PATCH 079/120] [core]: update .app-headers to latest version (#1393) Co-authored-by: github-actions[bot] From 2dddbaebe43c226d4fbec2aef8eb0dc6a28771a1 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:09:46 +0100 Subject: [PATCH 080/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 46 +++++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 3f6ae4639..896f25ec8 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -31,33 +31,27 @@ jobs: git checkout update-app-headers fi - # Step 3: Ensure .app-headers file exists - - name: Ensure .app-headers file exists + # Step 3: Ensure .app-headers file exists and verify content + - name: Ensure .app-headers file exists and verify content run: | if [ ! -f ".app-headers" ]; then echo "The .app-headers file does not exist. Creating it." echo "Generated by CI" > .app-headers else - echo ".app-headers already exists." + echo ".app-headers already exists. Checking if there are any changes." fi - # Step 4: Check for changes in the .app-headers file content - - name: Check if .app-headers has changes - id: check_changes - run: | - git diff --quiet origin/main..HEAD -- .app-headers - echo "Changes detected: $?" - continue-on-error: true # So the workflow continues even if no changes are detected + # Verifying if there are changes in .app-headers file content + git diff --quiet -- .app-headers || echo "Changes detected in .app-headers" - # Step 5: Commit changes if detected + # Step 4: Commit changes if detected - name: Commit changes if detected - if: steps.check_changes.outcome == 'failure' + if: ${{ steps.verify_changes.outputs.changes_detected == 'true' }} run: | - echo "Changes detected in .app-headers. Committing changes." git commit -am "[core]: update .app-headers to latest version" git push origin update-app-headers --force - # Step 6: Create Pull Request if changes detected + # Step 5: Create Pull Request if changes detected - name: Create Pull Request if changes detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -65,14 +59,30 @@ jobs: PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') if [ -z "$PR_EXISTS" ]; then echo "Creating a new PR." - gh pr create --title "[core]: update .app-headers to latest version" \ - --body "This PR automatically updates the .app-headers file." \ - --head update-app-headers \ - --base main + PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ + --body "This PR automatically updates the .app-headers file." \ + --head update-app-headers \ + --base main --json url -q .url) + echo "PR created: $PR_URL" else echo "PR already exists." fi + # Step 6: Automatically merge the PR if no conflicts + - name: Automatically merge PR + if: ${{ steps.verify_changes.outputs.changes_detected == 'true' }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "Attempting to merge PR." + PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') + if [ -n "$PR_NUMBER" ]; then + gh pr merge "$PR_NUMBER" --merge --admin --delete-branch + echo "PR merged successfully." + else + echo "No PR found to merge." + fi + # Step 7: Final status output - name: Output final status run: | From f7d9fe7c3a6762af6f93919dbfdaabdb6d064647 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:11:02 +0100 Subject: [PATCH 081/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 896f25ec8..29137007f 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -38,17 +38,13 @@ jobs: echo "The .app-headers file does not exist. Creating it." echo "Generated by CI" > .app-headers else - echo ".app-headers already exists. Checking if there are any changes." + echo ".app-headers already exists." fi - # Verifying if there are changes in .app-headers file content - git diff --quiet -- .app-headers || echo "Changes detected in .app-headers" - - # Step 4: Commit changes if detected - - name: Commit changes if detected - if: ${{ steps.verify_changes.outputs.changes_detected == 'true' }} + # Step 4: Commit and push changes (if any) + - name: Commit and push changes (if any) run: | - git commit -am "[core]: update .app-headers to latest version" + git diff --quiet -- .app-headers || git commit -am "[core]: update .app-headers to latest version" git push origin update-app-headers --force # Step 5: Create Pull Request if changes detected @@ -68,9 +64,8 @@ jobs: echo "PR already exists." fi - # Step 6: Automatically merge the PR if no conflicts + # Step 6: Automatically merge PR - name: Automatically merge PR - if: ${{ steps.verify_changes.outputs.changes_detected == 'true' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | From 0c44d2d23c2ac15198b64d0119c56d1a21d0b190 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:11:55 +0100 Subject: [PATCH 082/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 29137007f..efe3bd6c7 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -52,13 +52,13 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') + PR_EXISTS=$(gh pr list --head "update-app-headers" | grep -o '[0-9]\+') if [ -z "$PR_EXISTS" ]; then echo "Creating a new PR." PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ --body "This PR automatically updates the .app-headers file." \ --head update-app-headers \ - --base main --json url -q .url) + --base main -q .url) echo "PR created: $PR_URL" else echo "PR already exists." @@ -70,7 +70,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "Attempting to merge PR." - PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') + PR_NUMBER=$(gh pr list --head "update-app-headers" | grep -o '[0-9]\+') if [ -n "$PR_NUMBER" ]; then gh pr merge "$PR_NUMBER" --merge --admin --delete-branch echo "PR merged successfully." From 34f375032a8a4eb402bd00350421e86876ca3ca7 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:17:44 +0100 Subject: [PATCH 083/120] [core]: add support for custom tags (#1384) * Add support for custom tags * Add support for custom tags * Update advanced Tags --- misc/build.func | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/misc/build.func b/misc/build.func index d83c99e82..26937e767 100644 --- a/misc/build.func +++ b/misc/build.func @@ -626,6 +626,17 @@ advanced_settings() { exit_script fi + if ADV_TAGS=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Custom Tags?[If you remove all, there will be no tags!]" 8 58 ${TAGS} --title "Advanced Tags" 3>&1 1>&2 2>&3); then + if [ -n "${ADV_TAGS}" ]; then + ADV_TAGS=${ADV_TAGS:-""} + ADV_TAGS=$(echo "$ADV_TAGS" | tr -d '[:space:]') + TAGS="community-script;${ADV_TAGS}" + fi + echo -e "${NETWORK}${BOLD}${DGN}Tags: ${BGN}$TAGS${CL}" + else + exit_script + fi + if [[ "$PW" == -password* ]]; then if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH ACCESS" --yesno "Enable Root SSH Access?" 10 58); then SSH="yes" From 88336a2c3b5afb199258f5c480c29b1fcbcffa71 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:23:33 +0100 Subject: [PATCH 084/120] Update CHANGELOG.md (#1387) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0934867cb..fb1419f7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ Do not break established syntax in this file, as it is automatically updated by ### 🚀 Updated Scripts +- Fix: checkmk-install.sh: Version crawling. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1385](https://github.com/community-scripts/ProxmoxVE/pull/1385)) +- Fix: bookstack.sh - Ignore empty folder [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1388](https://github.com/community-scripts/ProxmoxVE/pull/1388)) - Fix: ActualBudget Update-Function [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1376](https://github.com/community-scripts/ProxmoxVE/pull/1376)) ### 🌐 Website @@ -30,8 +32,9 @@ Do not break established syntax in this file, as it is automatically updated by ### 🧰 Maintenance -- [Core] add Github Action for Generate AppHeaders (figlet remove part 1) [@MickLesk](https://github.com/MickLesk) ([#1382](https://github.com/community-scripts/ProxmoxVE/pull/1382)) +- [core]: add support for custom tags [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1384](https://github.com/community-scripts/ProxmoxVE/pull/1384)) - Add initial PR for Contributing & Coding Standard [@MickLesk](https://github.com/MickLesk) ([#920](https://github.com/community-scripts/ProxmoxVE/pull/920)) +- [Core] add Github Action for Generate AppHeaders (figlet remove part 1) [@MickLesk](https://github.com/MickLesk) ([#1382](https://github.com/community-scripts/ProxmoxVE/pull/1382)) ## 2025-01-09 From cb60c7fed237c9318834fd8a14abee67dbebf70f Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:36:20 +0100 Subject: [PATCH 085/120] Create check_and_update_json_date.yml (#1395) --- .../workflows/check_and_update_json_date.yml | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/check_and_update_json_date.yml diff --git a/.github/workflows/check_and_update_json_date.yml b/.github/workflows/check_and_update_json_date.yml new file mode 100644 index 000000000..b2ff16e2d --- /dev/null +++ b/.github/workflows/check_and_update_json_date.yml @@ -0,0 +1,43 @@ +name: Check and Update JSON Date + +on: + pull_request: + types: [synchronize, opened, edited] + +jobs: + update-date: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.12 + + - name: Install dependencies + run: pip install jq + + - name: Find and Update JSON files + run: | + TODAY=$(date +%Y-%m-%d) + for file in $(git diff --diff-filter=A --name-only HEAD | grep '\.json$'); do + if jq -e '.date_created' $file > /dev/null 2>&1; then + echo "Updating date_created in $file" + jq --arg date "$TODAY" '.date_created = $date' $file > temp.json && mv temp.json $file + git add $file + fi + done + + - name: Commit changes + run: | + git config user.name "GitHub Action" + git config user.email "action@github.com" + git commit -m "Update date_created in new JSON files" || echo "No changes to commit" + + - name: Push changes + uses: ad-m/github-push-action@v0.6.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} From f275cdd62c3466a3c667a41b990bd0f1b623e7b2 Mon Sep 17 00:00:00 2001 From: fabrice1236 <87321357+fabrice1236@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:38:03 +0100 Subject: [PATCH 086/120] New script : Ghost (#1361) * add Ghost installation and update scripts * remove unnecessary installation check * Fixed link for testing * Set up testing. * Refactor Ghost installation script to streamline MySQL configuration and consolidate Node.js and npm installation steps * Update MySQL configuration in installation script to use password for flushing privileges * Bug fix * Remove separate npm installation step * Add ghost-user creation and modify Ghost installation to run as new user * Create ghost-user with proper permissions and update Ghost setup commands * Update Ghost installation script to include URL and modify service execution * Update Ghost installation to Ubuntu 24.04 and modify service execution * Downgrade Ubuntu installation version from 24.04 to 22.04 * Add npm installation check to Ghost installation script * Update Ghost installation script to install npm alongside Node.js * Add update to package list * Use ghost-cli's systemd set up * Add NOPASSWD for ghost-user during install and enable Ghost on all interfaces * Update ghost-user sudoers configuration to temporarely allow all commands without password * Fix syntax error * Update ghost version retrieval and configure MySQL with random password * Update ghost.json and clean ghost-install.sh * Update ghost installation script to use dynamic database password * Fix MySQL flush privileges command to use dynamic database password * Fix variable name for database password in ghost installation script * Add update success message only if ghost was actually updated * Remove unnecessary shellcheck directive from ghost.sh * Change back to community-scripts URLs * Update ct/ghost.sh Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Update install/ghost-install.sh Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Update ct/ghost.sh Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Update install/ghost-install.sh Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Update install/ghost-install.sh Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Update install/ghost-install.sh Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Update json/ghost.json Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Add link to detailed license + Change to Debian 12 * Update license comment format in ghost-install.sh * remove unneeded spaces * change date --------- Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- ct/ghost.sh | 57 +++++++++++++++++++++++++++++++ install/ghost-install.sh | 73 ++++++++++++++++++++++++++++++++++++++++ json/ghost.json | 41 ++++++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 ct/ghost.sh create mode 100644 install/ghost-install.sh create mode 100644 json/ghost.json diff --git a/ct/ghost.sh b/ct/ghost.sh new file mode 100644 index 000000000..29f748c09 --- /dev/null +++ b/ct/ghost.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: fabrice1236 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://ghost.org/ + +# App Default Values +APP="Ghost" +var_tags="cms;blog" +var_cpu="2" +var_ram="1024" +var_disk="5" +var_os="debian" +var_version="12" +var_unprivileged="1" + +# App Output & Base Settings +header_info "$APP" +base_settings + +# Core +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + msg_info "Updating ${APP} LXC" + + if command -v ghost &> /dev/null; then + current_version=$(ghost version | grep 'Ghost-CLI version' | awk '{print $3}') + latest_version=$(npm show ghost-cli version) + if [ "$current_version" != "$latest_version" ]; then + msg_info "Updating ${APP} from version v${current_version} to v${latest_version}" + npm install -g ghost-cli@latest &> /dev/null + msg_ok "Updated Successfully" + else + msg_ok "${APP} is already at v${current_version}" + fi + else + msg_error "No ${APP} Installation Found!" + exit + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2368${CL}" \ No newline at end of file diff --git a/install/ghost-install.sh b/install/ghost-install.sh new file mode 100644 index 000000000..bce232ce9 --- /dev/null +++ b/install/ghost-install.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: fabrice1236 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://ghost.org/ + +# Import Functions und Setup +source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + curl \ + sudo \ + mc \ + nginx \ + mysql-server \ + ca-certificates \ + gnupg +msg_ok "Installed Dependencies" + + +msg_info "Configuring MySQL" +DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +$STD mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '$DB_PASS';" +$STD mysql -u root -p"$DB_PASS" -e "FLUSH PRIVILEGES;" +{ + echo "MySQL-Credentials" + echo "Username: root" + echo "Password: $DB_PASS" +} >> ~/mysql.creds +msg_ok "Configured MySQL" + +msg_info "Setting up Node.js Repository" +mkdir -p /etc/apt/keyrings +curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +msg_ok "Set up Node.js Repository" + +msg_info "Setup Node.js" +$STD apt-get update +$STD apt-get install -y nodejs +msg_ok "Setup Node.js" + +msg_info "Installing Ghost CLI" +$STD npm install ghost-cli@latest -g +msg_ok "Installed Ghost CLI" + +msg_info "Creating Service" +$STD adduser --disabled-password --gecos "Ghost user" ghost-user +$STD usermod -aG sudo ghost-user +echo "ghost-user ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/ghost-user +mkdir -p /var/www/ghost +chown -R ghost-user:ghost-user /var/www/ghost +chmod 775 /var/www/ghost +sudo -u ghost-user -H sh -c "cd /var/www/ghost && ghost install --db=mysql --dbhost=localhost --dbuser=root --dbpass=$DB_PASS --dbname=ghost --url=http://localhost:2368 --no-prompt --no-setup-nginx --no-setup-ssl --no-setup-mysql --enable --start --ip 0.0.0.0" +rm /etc/sudoers.d/ghost-user +msg_ok "Creating Service" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/json/ghost.json b/json/ghost.json new file mode 100644 index 000000000..45db52080 --- /dev/null +++ b/json/ghost.json @@ -0,0 +1,41 @@ +{ + "name": "Ghost", + "slug": "ghost", + "categories": [ + 12 + ], + "date_created": "2025-01-10", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 2368, + "documentation": "https://ghost.org/docs/", + "website": "https://ghost.org", + "logo": "https://raw.githubusercontent.com/TryGhost/Ghost/b6fe724b577e84f7dd174646d0323dabdcdf576e/apps/shade/src/assets/images/ghost-orb.svg", + "description": "Ghost is a powerful app for professional publishers to create, share, and grow a business around their content. It comes with modern tools to build a website, publish content, send newsletters & offer paid subscriptions to members.", + "install_methods": [ + { + "type": "default", + "script": "ct/ghost.sh", + "resources": { + "cpu": 2, + "ram": 1024, + "hdd": 5, + "os": "Debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "To run Ghost-CLI commands, first set a password for the ghost-user by running `sudo passwd ghost-user`. Then, switch to the ghost-user with `sudo -su ghost-user`.", + "type": "info" + } + ] +} + + From 7a2f5f55e8bc51b21461026602a1213a5306502d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:42:55 +0100 Subject: [PATCH 087/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 54 ++++++++++++--------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index efe3bd6c7..66efc59dc 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -17,37 +17,48 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 with: - fetch-depth: 0 # Ensure we have full access to all branches + fetch-depth: 0 # Fetch all branches for full context - # Step 2: Check or Create update-app-headers branch - - name: Check or Create update-app-headers branch + # Step 2: Set up Git user + - name: Configure Git user + run: | + git config --global user.name "GitHub Actions" + git config --global user.email "actions@github.com" + + # Step 3: Check or create update-app-headers branch + - name: Check or create update-app-headers branch run: | git fetch origin - if ! git show-ref --quiet refs/heads/update-app-headers; then - echo "Creating 'update-app-headers' branch." - git checkout -b update-app-headers origin/main - else + if git show-ref --quiet refs/heads/update-app-headers; then echo "Switching to 'update-app-headers' branch." git checkout update-app-headers + else + echo "Creating 'update-app-headers' branch." + git checkout -b update-app-headers origin/main fi - # Step 3: Ensure .app-headers file exists and verify content - - name: Ensure .app-headers file exists and verify content + # Step 4: Merge main into update-app-headers + - name: Merge main into update-app-headers + run: | + git merge origin/main --no-edit || echo "No changes to merge from main." + + # Step 5: Ensure .app-headers file exists + - name: Ensure .app-headers file exists run: | if [ ! -f ".app-headers" ]; then - echo "The .app-headers file does not exist. Creating it." - echo "Generated by CI" > .app-headers + echo "Creating .app-headers file." + echo "Generated by CI on $(date)" > .app-headers else - echo ".app-headers already exists." + echo ".app-headers file already exists." fi - # Step 4: Commit and push changes (if any) - - name: Commit and push changes (if any) + # Step 6: Commit and push changes (if any) + - name: Commit and push changes run: | git diff --quiet -- .app-headers || git commit -am "[core]: update .app-headers to latest version" git push origin update-app-headers --force - # Step 5: Create Pull Request if changes detected + # Step 7: Create Pull Request if changes detected - name: Create Pull Request if changes detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -55,16 +66,15 @@ jobs: PR_EXISTS=$(gh pr list --head "update-app-headers" | grep -o '[0-9]\+') if [ -z "$PR_EXISTS" ]; then echo "Creating a new PR." - PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ - --body "This PR automatically updates the .app-headers file." \ - --head update-app-headers \ - --base main -q .url) - echo "PR created: $PR_URL" + gh pr create --title "[core]: update .app-headers to latest version" \ + --body "This PR automatically updates the .app-headers file." \ + --head update-app-headers \ + --base main else echo "PR already exists." fi - # Step 6: Automatically merge PR + # Step 8: Automatically merge PR - name: Automatically merge PR env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -78,7 +88,7 @@ jobs: echo "No PR found to merge." fi - # Step 7: Final status output + # Step 9: Final status output - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." From 5d6bba3db8060e2359e505fbb231441fd9e5d10f Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:44:13 +0100 Subject: [PATCH 088/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 66efc59dc..7ba94340c 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -1,8 +1,16 @@ name: Update .app-headers in /misc on: - push: - branches: ["main"] + pull_request: + types: + - closed + branches: + - main + # Stellen sicher, dass nur gemergte PRs den Workflow auslösen + # Triggern nur wenn der PR gemerged wurde + if: github.event.pull_request.merged == true + schedule: + - cron: "59 23 * * *" # Führen den Workflow täglich um 23:59 UTC aus workflow_dispatch: jobs: From cfda535a580756f4a6b3f472770aed68ce995727 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:45:36 +0100 Subject: [PATCH 089/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 7ba94340c..f76f2b7ad 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -71,13 +71,16 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - PR_EXISTS=$(gh pr list --head "update-app-headers" | grep -o '[0-9]\+') + echo "Checking if PR exists." + PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') + echo "PR_EXISTS: $PR_EXISTS" if [ -z "$PR_EXISTS" ]; then echo "Creating a new PR." - gh pr create --title "[core]: update .app-headers to latest version" \ - --body "This PR automatically updates the .app-headers file." \ - --head update-app-headers \ - --base main + PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ + --body "This PR automatically updates the .app-headers file." \ + --head update-app-headers \ + --base main -q .url) + echo "PR created: $PR_URL" else echo "PR already exists." fi @@ -88,14 +91,14 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "Attempting to merge PR." - PR_NUMBER=$(gh pr list --head "update-app-headers" | grep -o '[0-9]\+') + PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') + echo "Found PR number: $PR_NUMBER" if [ -n "$PR_NUMBER" ]; then gh pr merge "$PR_NUMBER" --merge --admin --delete-branch echo "PR merged successfully." else echo "No PR found to merge." fi - # Step 9: Final status output - name: Output final status run: | From 8c6f0ac1de6180f92c3664d57052c941a1cbeab6 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:46:37 +0100 Subject: [PATCH 090/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index f76f2b7ad..942bd8321 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -6,8 +6,7 @@ on: - closed branches: - main - # Stellen sicher, dass nur gemergte PRs den Workflow auslösen - # Triggern nur wenn der PR gemerged wurde + # Trigger nur, wenn der PR gemerged wurde if: github.event.pull_request.merged == true schedule: - cron: "59 23 * * *" # Führen den Workflow täglich um 23:59 UTC aus @@ -79,7 +78,7 @@ jobs: PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ --body "This PR automatically updates the .app-headers file." \ --head update-app-headers \ - --base main -q .url) + --base main) echo "PR created: $PR_URL" else echo "PR already exists." @@ -99,6 +98,7 @@ jobs: else echo "No PR found to merge." fi + # Step 9: Final status output - name: Output final status run: | From 31b253e99ffad8ec77535e941e4f1bffbf259f36 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:15:22 +0100 Subject: [PATCH 091/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 51 ++++++++++++++++++--- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 942bd8321..871c7a2a3 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -49,9 +49,42 @@ jobs: run: | git merge origin/main --no-edit || echo "No changes to merge from main." - # Step 5: Ensure .app-headers file exists - - name: Ensure .app-headers file exists + # Step 5: Identify changes in .sh files + - name: Check for .sh files and extract app names + id: detect_sh_files run: | + # Get the list of changed files in the PR + CHANGED_FILES=$(git diff --name-only HEAD origin/main) + + # Find .sh files and extract app names + CHANGED_SH_FILES=$(echo "$CHANGED_FILES" | grep '\.sh$') + + if [ -z "$CHANGED_SH_FILES" ]; then + echo "No .sh files changed." + exit 0 + else + echo "Changed .sh files detected:" + echo "$CHANGED_SH_FILES" + + # Extract app names from the file names or content + APP_NAMES="" + for FILE in $CHANGED_SH_FILES; do + # Assuming the app name is part of the file name (e.g., 'appName.sh') + APP_NAME=$(basename "$FILE" .sh) + APP_NAMES="$APP_NAMES$APP_NAME " + done + + echo "App names to process: $APP_NAMES" + echo "::set-output name=app_names::$APP_NAMES" + fi + + # Step 6: Process the app names and update .app-headers + - name: Process app names and update .app-headers + if: steps.detect_sh_files.outputs.app_names != '' + run: | + APP_NAMES="${{ steps.detect_sh_files.outputs.app_names }}" + + # Ensure .app-headers file exists if [ ! -f ".app-headers" ]; then echo "Creating .app-headers file." echo "Generated by CI on $(date)" > .app-headers @@ -59,13 +92,19 @@ jobs: echo ".app-headers file already exists." fi - # Step 6: Commit and push changes (if any) + # For each app name, run figlet and append to .app-headers + for APP_NAME in $APP_NAMES; do + echo "Processing app: $APP_NAME" + echo "$(figlet $APP_NAME)" >> .app-headers + done + + # Step 7: Commit and push changes (if any) - name: Commit and push changes run: | git diff --quiet -- .app-headers || git commit -am "[core]: update .app-headers to latest version" git push origin update-app-headers --force - # Step 7: Create Pull Request if changes detected + # Step 8: Create Pull Request if changes detected - name: Create Pull Request if changes detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -84,7 +123,7 @@ jobs: echo "PR already exists." fi - # Step 8: Automatically merge PR + # Step 9: Automatically merge PR - name: Automatically merge PR env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -99,7 +138,7 @@ jobs: echo "No PR found to merge." fi - # Step 9: Final status output + # Step 10: Final status output - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." From 860c541606514321d0a06821b9bea8977383c935 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:15:53 +0100 Subject: [PATCH 092/120] Update CHANGELOG.md (#1396) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb1419f7a..86f49d0d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,10 @@ Do not break established syntax in this file, as it is automatically updated by ### Changed +### ✨ New Scripts + +- New script : Ghost [@fabrice1236](https://github.com/fabrice1236) ([#1361](https://github.com/community-scripts/ProxmoxVE/pull/1361)) + ### 🚀 Updated Scripts - Fix: checkmk-install.sh: Version crawling. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1385](https://github.com/community-scripts/ProxmoxVE/pull/1385)) @@ -32,6 +36,7 @@ Do not break established syntax in this file, as it is automatically updated by ### 🧰 Maintenance +- [core]: check json date of new prs & update it [@MickLesk](https://github.com/MickLesk) ([#1395](https://github.com/community-scripts/ProxmoxVE/pull/1395)) - [core]: add support for custom tags [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1384](https://github.com/community-scripts/ProxmoxVE/pull/1384)) - Add initial PR for Contributing & Coding Standard [@MickLesk](https://github.com/MickLesk) ([#920](https://github.com/community-scripts/ProxmoxVE/pull/920)) - [Core] add Github Action for Generate AppHeaders (figlet remove part 1) [@MickLesk](https://github.com/MickLesk) ([#1382](https://github.com/community-scripts/ProxmoxVE/pull/1382)) From 02f480998e5769be62a443aa23b579677f6e25eb Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:17:40 +0100 Subject: [PATCH 093/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 25 ++++++++++----------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 871c7a2a3..38c82e073 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -6,7 +6,6 @@ on: - closed branches: - main - # Trigger nur, wenn der PR gemerged wurde if: github.event.pull_request.merged == true schedule: - cron: "59 23 * * *" # Führen den Workflow täglich um 23:59 UTC aus @@ -49,26 +48,26 @@ jobs: run: | git merge origin/main --no-edit || echo "No changes to merge from main." - # Step 5: Identify changes in .sh files - - name: Check for .sh files and extract app names + # Step 5: Identify added .sh files and extract app names + - name: Check for added .sh files and extract app names id: detect_sh_files run: | - # Get the list of changed files in the PR - CHANGED_FILES=$(git diff --name-only HEAD origin/main) + # Get the list of added files in the PR (new .sh files) + ADDED_FILES=$(git diff --name-only --diff-filter=A HEAD origin/main) - # Find .sh files and extract app names - CHANGED_SH_FILES=$(echo "$CHANGED_FILES" | grep '\.sh$') + # Filter out the .sh files + ADDED_SH_FILES=$(echo "$ADDED_FILES" | grep '\.sh$') - if [ -z "$CHANGED_SH_FILES" ]; then - echo "No .sh files changed." + if [ -z "$ADDED_SH_FILES" ]; then + echo "No new .sh files added." exit 0 else - echo "Changed .sh files detected:" - echo "$CHANGED_SH_FILES" + echo "New .sh files added:" + echo "$ADDED_SH_FILES" - # Extract app names from the file names or content + # Extract app names from the file names APP_NAMES="" - for FILE in $CHANGED_SH_FILES; do + for FILE in $ADDED_SH_FILES; do # Assuming the app name is part of the file name (e.g., 'appName.sh') APP_NAME=$(basename "$FILE" .sh) APP_NAMES="$APP_NAMES$APP_NAME " From 70ab9ab09e890f38d351d11995e914ed120ec09f Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:20:05 +0100 Subject: [PATCH 094/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 48 +++++++-------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 38c82e073..ff9ba6187 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -48,41 +48,23 @@ jobs: run: | git merge origin/main --no-edit || echo "No changes to merge from main." - # Step 5: Identify added .sh files and extract app names - - name: Check for added .sh files and extract app names - id: detect_sh_files + # Step 5: Check all .sh files in ct/ directory that contain APP= + - name: Check .sh files in ct/ that contain APP= run: | - # Get the list of added files in the PR (new .sh files) - ADDED_FILES=$(git diff --name-only --diff-filter=A HEAD origin/main) - - # Filter out the .sh files - ADDED_SH_FILES=$(echo "$ADDED_FILES" | grep '\.sh$') - - if [ -z "$ADDED_SH_FILES" ]; then - echo "No new .sh files added." + echo "Checking .sh files in ct/ directory that contain APP=." + SH_FILES=$(find ct/ -type f -name "*.sh" -exec grep -l "APP=" {} \;) + + if [ -z "$SH_FILES" ]; then + echo "No .sh files with APP= found in ct/ directory." exit 0 else - echo "New .sh files added:" - echo "$ADDED_SH_FILES" - - # Extract app names from the file names - APP_NAMES="" - for FILE in $ADDED_SH_FILES; do - # Assuming the app name is part of the file name (e.g., 'appName.sh') - APP_NAME=$(basename "$FILE" .sh) - APP_NAMES="$APP_NAMES$APP_NAME " - done - - echo "App names to process: $APP_NAMES" - echo "::set-output name=app_names::$APP_NAMES" + echo "Found .sh files with APP= in ct/ directory:" + echo "$SH_FILES" fi - # Step 6: Process the app names and update .app-headers - - name: Process app names and update .app-headers - if: steps.detect_sh_files.outputs.app_names != '' + # Step 6: Overwrite .app-headers + - name: Overwrite .app-headers file run: | - APP_NAMES="${{ steps.detect_sh_files.outputs.app_names }}" - # Ensure .app-headers file exists if [ ! -f ".app-headers" ]; then echo "Creating .app-headers file." @@ -91,9 +73,11 @@ jobs: echo ".app-headers file already exists." fi - # For each app name, run figlet and append to .app-headers - for APP_NAME in $APP_NAMES; do - echo "Processing app: $APP_NAME" + # Overwrite .app-headers with figlet output of each .sh file name containing APP= + echo "Overwriting .app-headers with new entries." + > .app-headers # Clear the existing file + for FILE in $SH_FILES; do + APP_NAME=$(basename "$FILE" .sh) echo "$(figlet $APP_NAME)" >> .app-headers done From d8931fef4d622423e97b95e656bd9dc540564866 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:20:42 +0100 Subject: [PATCH 095/120] Update check_and_update_json_date.yml --- .github/workflows/check_and_update_json_date.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check_and_update_json_date.yml b/.github/workflows/check_and_update_json_date.yml index b2ff16e2d..3b72eb7a6 100644 --- a/.github/workflows/check_and_update_json_date.yml +++ b/.github/workflows/check_and_update_json_date.yml @@ -2,7 +2,7 @@ name: Check and Update JSON Date on: pull_request: - types: [synchronize, opened, edited] + types: [synchronize, opened, reopened, edited] jobs: update-date: @@ -20,10 +20,10 @@ jobs: - name: Install dependencies run: pip install jq - - name: Find and Update JSON files + - name: Find and Update JSON files in /json folder run: | TODAY=$(date +%Y-%m-%d) - for file in $(git diff --diff-filter=A --name-only HEAD | grep '\.json$'); do + for file in $(git diff --diff-filter=A --name-only HEAD | grep '^json/.*\.json$'); do if jq -e '.date_created' $file > /dev/null 2>&1; then echo "Updating date_created in $file" jq --arg date "$TODAY" '.date_created = $date' $file > temp.json && mv temp.json $file From 1a9320ced83a1e3f0943cd701d5a8bddd83e4724 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:23:29 +0100 Subject: [PATCH 096/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index ff9ba6187..8922b8b0d 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -81,11 +81,17 @@ jobs: echo "$(figlet $APP_NAME)" >> .app-headers done - # Step 7: Commit and push changes (if any) - - name: Commit and push changes + # Step 7: Check if there are changes to commit + - name: Check for changes and commit run: | - git diff --quiet -- .app-headers || git commit -am "[core]: update .app-headers to latest version" - git push origin update-app-headers --force + git diff --exit-code --quiet .app-headers + if [ $? -eq 1 ]; then + echo ".app-headers has been updated, committing changes." + git commit -am "[core]: update .app-headers to latest version" + git push origin update-app-headers --force + else + echo "No changes to .app-headers detected, skipping commit." + fi # Step 8: Create Pull Request if changes detected - name: Create Pull Request if changes detected From 0d2db00dc6df677bbb8bc3adb37d384fbd685790 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:25:27 +0100 Subject: [PATCH 097/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 8922b8b0d..89461e434 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -81,14 +81,14 @@ jobs: echo "$(figlet $APP_NAME)" >> .app-headers done - # Step 7: Check if there are changes to commit + # Step 7: Check for changes and commit - name: Check for changes and commit run: | git diff --exit-code --quiet .app-headers if [ $? -eq 1 ]; then echo ".app-headers has been updated, committing changes." git commit -am "[core]: update .app-headers to latest version" - git push origin update-app-headers --force + git push origin update-app-headers else echo "No changes to .app-headers detected, skipping commit." fi From d22727731149342892a2e8a6e336256149f90e9e Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:28:50 +0100 Subject: [PATCH 098/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 104 ++++++-------------- 1 file changed, 32 insertions(+), 72 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 89461e434..146c7e0a3 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -1,14 +1,11 @@ name: Update .app-headers in /misc on: - pull_request: - types: - - closed + push: + paths: + - 'ct/*' # Action wird ausgelöst, wenn sich etwas in ct/ ändert branches: - main - if: github.event.pull_request.merged == true - schedule: - - cron: "59 23 * * *" # Führen den Workflow täglich um 23:59 UTC aus workflow_dispatch: jobs: @@ -23,103 +20,66 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 with: - fetch-depth: 0 # Fetch all branches for full context + fetch-depth: 0 # Ensure we have full access to all branches - # Step 2: Set up Git user - - name: Configure Git user - run: | - git config --global user.name "GitHub Actions" - git config --global user.email "actions@github.com" - - # Step 3: Check or create update-app-headers branch - - name: Check or create update-app-headers branch - run: | - git fetch origin - if git show-ref --quiet refs/heads/update-app-headers; then - echo "Switching to 'update-app-headers' branch." - git checkout update-app-headers - else - echo "Creating 'update-app-headers' branch." - git checkout -b update-app-headers origin/main - fi - - # Step 4: Merge main into update-app-headers + # Step 2: Merge main into update-app-headers branch - name: Merge main into update-app-headers run: | - git merge origin/main --no-edit || echo "No changes to merge from main." + git fetch origin + git checkout update-app-headers || git checkout -b update-app-headers + git merge origin/main --no-ff --no-edit + git push origin update-app-headers --force - # Step 5: Check all .sh files in ct/ directory that contain APP= - - name: Check .sh files in ct/ that contain APP= + # Step 3: Ensure .app-headers file exists and initialize it + - name: Initialize .app-headers file run: | - echo "Checking .sh files in ct/ directory that contain APP=." - SH_FILES=$(find ct/ -type f -name "*.sh" -exec grep -l "APP=" {} \;) - - if [ -z "$SH_FILES" ]; then - echo "No .sh files with APP= found in ct/ directory." - exit 0 - else - echo "Found .sh files with APP= in ct/ directory:" - echo "$SH_FILES" + if [ ! -f "ct/.app-headers" ]; then + echo "Creating .app-headers file" + touch ct/.app-headers fi - # Step 6: Overwrite .app-headers - - name: Overwrite .app-headers file + # Step 4: Loop through ct/ scripts and execute figlet if APP= is found + - name: Update .app-headers with figlet output run: | - # Ensure .app-headers file exists - if [ ! -f ".app-headers" ]; then - echo "Creating .app-headers file." - echo "Generated by CI on $(date)" > .app-headers - else - echo ".app-headers file already exists." - fi - - # Overwrite .app-headers with figlet output of each .sh file name containing APP= - echo "Overwriting .app-headers with new entries." - > .app-headers # Clear the existing file - for FILE in $SH_FILES; do - APP_NAME=$(basename "$FILE" .sh) - echo "$(figlet $APP_NAME)" >> .app-headers + echo "Updating .app-headers with figlet output." + for file in ct/*.sh; do + if grep -q "APP=" "$file"; then + APP_NAME=$(grep -oP 'APP=\K.*' "$file") + echo "Processing $file for APP: $APP_NAME" + figlet "$APP_NAME" >> ct/.app-headers + fi done - - # Step 7: Check for changes and commit - - name: Check for changes and commit + + # Step 5: Commit the changes to .app-headers + - name: Commit updated .app-headers run: | - git diff --exit-code --quiet .app-headers - if [ $? -eq 1 ]; then - echo ".app-headers has been updated, committing changes." - git commit -am "[core]: update .app-headers to latest version" - git push origin update-app-headers - else - echo "No changes to .app-headers detected, skipping commit." - fi + git diff --quiet -- ct/.app-headers || git commit -am "[core]: update .app-headers to latest version" + git push origin update-app-headers --force - # Step 8: Create Pull Request if changes detected + # Step 6: Create Pull Request to merge changes into main - name: Create Pull Request if changes detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - echo "Checking if PR exists." PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') - echo "PR_EXISTS: $PR_EXISTS" if [ -z "$PR_EXISTS" ]; then echo "Creating a new PR." PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ --body "This PR automatically updates the .app-headers file." \ --head update-app-headers \ - --base main) + --base main --no-edit -q .url) echo "PR created: $PR_URL" else echo "PR already exists." fi - # Step 9: Automatically merge PR + # Step 7: Automatically merge PR - name: Automatically merge PR env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "Attempting to merge PR." PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') - echo "Found PR number: $PR_NUMBER" if [ -n "$PR_NUMBER" ]; then gh pr merge "$PR_NUMBER" --merge --admin --delete-branch echo "PR merged successfully." @@ -127,7 +87,7 @@ jobs: echo "No PR found to merge." fi - # Step 10: Final status output + # Step 8: Final status output - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." From 51cbfbdc4faa2ebfdc63a126a60af2037b04bc9d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:30:04 +0100 Subject: [PATCH 099/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 146c7e0a3..abab2c501 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -22,7 +22,13 @@ jobs: with: fetch-depth: 0 # Ensure we have full access to all branches - # Step 2: Merge main into update-app-headers branch + # Step 2: Configure git user + - name: Configure Git user + run: | + git config --global user.name "GitHub Actions" + git config --global user.email "actions@github.com" + + # Step 3: Merge main into update-app-headers - name: Merge main into update-app-headers run: | git fetch origin @@ -30,7 +36,7 @@ jobs: git merge origin/main --no-ff --no-edit git push origin update-app-headers --force - # Step 3: Ensure .app-headers file exists and initialize it + # Step 4: Ensure .app-headers file exists and initialize it - name: Initialize .app-headers file run: | if [ ! -f "ct/.app-headers" ]; then @@ -38,7 +44,7 @@ jobs: touch ct/.app-headers fi - # Step 4: Loop through ct/ scripts and execute figlet if APP= is found + # Step 5: Loop through ct/ scripts and execute figlet if APP= is found - name: Update .app-headers with figlet output run: | echo "Updating .app-headers with figlet output." @@ -50,13 +56,13 @@ jobs: fi done - # Step 5: Commit the changes to .app-headers + # Step 6: Commit the changes to .app-headers - name: Commit updated .app-headers run: | git diff --quiet -- ct/.app-headers || git commit -am "[core]: update .app-headers to latest version" git push origin update-app-headers --force - # Step 6: Create Pull Request to merge changes into main + # Step 7: Create Pull Request to merge changes into main - name: Create Pull Request if changes detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -73,7 +79,7 @@ jobs: echo "PR already exists." fi - # Step 7: Automatically merge PR + # Step 8: Automatically merge PR - name: Automatically merge PR env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -87,7 +93,7 @@ jobs: echo "No PR found to merge." fi - # Step 8: Final status output + # Step 9: Final status output - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." From 32bc4a3ab5ac6d4c82e0cb62183cb59a6286aab1 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:31:45 +0100 Subject: [PATCH 100/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index abab2c501..772975253 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -28,7 +28,13 @@ jobs: git config --global user.name "GitHub Actions" git config --global user.email "actions@github.com" - # Step 3: Merge main into update-app-headers + # Step 3: Install figlet + - name: Install figlet + run: | + sudo apt-get update + sudo apt-get install -y figlet + + # Step 4: Merge main into update-app-headers - name: Merge main into update-app-headers run: | git fetch origin @@ -36,7 +42,7 @@ jobs: git merge origin/main --no-ff --no-edit git push origin update-app-headers --force - # Step 4: Ensure .app-headers file exists and initialize it + # Step 5: Ensure .app-headers file exists and initialize it - name: Initialize .app-headers file run: | if [ ! -f "ct/.app-headers" ]; then @@ -44,7 +50,7 @@ jobs: touch ct/.app-headers fi - # Step 5: Loop through ct/ scripts and execute figlet if APP= is found + # Step 6: Loop through ct/ scripts and execute figlet if APP= is found - name: Update .app-headers with figlet output run: | echo "Updating .app-headers with figlet output." @@ -56,13 +62,13 @@ jobs: fi done - # Step 6: Commit the changes to .app-headers + # Step 7: Commit the changes to .app-headers - name: Commit updated .app-headers run: | git diff --quiet -- ct/.app-headers || git commit -am "[core]: update .app-headers to latest version" git push origin update-app-headers --force - # Step 7: Create Pull Request to merge changes into main + # Step 8: Create Pull Request to merge changes into main - name: Create Pull Request if changes detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -79,7 +85,7 @@ jobs: echo "PR already exists." fi - # Step 8: Automatically merge PR + # Step 9: Automatically merge PR - name: Automatically merge PR env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -93,7 +99,7 @@ jobs: echo "No PR found to merge." fi - # Step 9: Final status output + # Step 10: Final status output - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated." From 7218c3b90afac6aabeb10dd67e619a46f89d65d2 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:34:18 +0100 Subject: [PATCH 101/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 772975253..69ddc9322 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -79,7 +79,7 @@ jobs: PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ --body "This PR automatically updates the .app-headers file." \ --head update-app-headers \ - --base main --no-edit -q .url) + --base main -q .url) echo "PR created: $PR_URL" else echo "PR already exists." From aacb6ca2c9a3db4947c6525b16ebd08f60bce8d7 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:36:06 +0100 Subject: [PATCH 102/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 69ddc9322..c6294a571 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -3,7 +3,7 @@ name: Update .app-headers in /misc on: push: paths: - - 'ct/*' # Action wird ausgelöst, wenn sich etwas in ct/ ändert + - 'ct/*' branches: - main workflow_dispatch: @@ -79,7 +79,7 @@ jobs: PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ --body "This PR automatically updates the .app-headers file." \ --head update-app-headers \ - --base main -q .url) + --base main) echo "PR created: $PR_URL" else echo "PR already exists." From 0c0225a052d376c953d03b8b137c9fe7f35995ac Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:52:32 +0100 Subject: [PATCH 103/120] Update generate-app-headers.yaml --- .github/workflows/generate-app-headers.yaml | 93 ++++++--------------- 1 file changed, 27 insertions(+), 66 deletions(-) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index c6294a571..0c9f53320 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -1,79 +1,59 @@ -name: Update .app-headers in /misc +name: Auto Update .app-headers and Create PR on: push: - paths: - - 'ct/*' branches: - main - workflow_dispatch: + paths: + - 'ct/**.sh' jobs: - update-and-create-pr: + update-app-headers: runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - steps: - # Step 1: Checkout repository + # Step 1: Checkout the repository - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Ensure we have full access to all branches + uses: actions/checkout@v2 - # Step 2: Configure git user - - name: Configure Git user + # Step 2: Set up Git user for committing changes + - name: Set up Git run: | git config --global user.name "GitHub Actions" git config --global user.email "actions@github.com" - # Step 3: Install figlet - - name: Install figlet - run: | - sudo apt-get update - sudo apt-get install -y figlet - - # Step 4: Merge main into update-app-headers - - name: Merge main into update-app-headers + # Step 3: Ensure .app-headers file exists + - name: Ensure .app-headers file exists run: | - git fetch origin - git checkout update-app-headers || git checkout -b update-app-headers - git merge origin/main --no-ff --no-edit - git push origin update-app-headers --force - - # Step 5: Ensure .app-headers file exists and initialize it - - name: Initialize .app-headers file - run: | - if [ ! -f "ct/.app-headers" ]; then - echo "Creating .app-headers file" + if [ ! -f ct/.app-headers ]; then + echo "Creating .app-headers file." touch ct/.app-headers fi - # Step 6: Loop through ct/ scripts and execute figlet if APP= is found + # Step 4: Process the ct/*.sh files and update .app-headers - name: Update .app-headers with figlet output run: | echo "Updating .app-headers with figlet output." - for file in ct/*.sh; do - if grep -q "APP=" "$file"; then - APP_NAME=$(grep -oP 'APP=\K.*' "$file") - echo "Processing $file for APP: $APP_NAME" + for script in ct/*.sh; do + if grep -q 'APP=' "$script"; then + APP_NAME=$(grep -oP 'APP=\K\w+' "$script") + echo "Processing $script for APP: \"$APP_NAME\"" figlet "$APP_NAME" >> ct/.app-headers fi done - - # Step 7: Commit the changes to .app-headers - - name: Commit updated .app-headers + + # Step 5: Check out and merge main into the update-app-headers branch without committing + - name: Merge main into update-app-headers run: | - git diff --quiet -- ct/.app-headers || git commit -am "[core]: update .app-headers to latest version" - git push origin update-app-headers --force + git fetch origin + git checkout update-app-headers + git merge origin/main --no-ff --no-commit -m "Merge main into update-app-headers" + echo "Merge complete. Please review and commit the changes manually." - # Step 8: Create Pull Request to merge changes into main - - name: Create Pull Request if changes detected - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Step 6: Check if a PR exists and create one if it doesn't + - name: Create Pull Request if not exists run: | PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') + if [ -z "$PR_EXISTS" ]; then echo "Creating a new PR." PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ @@ -84,22 +64,3 @@ jobs: else echo "PR already exists." fi - - # Step 9: Automatically merge PR - - name: Automatically merge PR - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - echo "Attempting to merge PR." - PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') - if [ -n "$PR_NUMBER" ]; then - gh pr merge "$PR_NUMBER" --merge --admin --delete-branch - echo "PR merged successfully." - else - echo "No PR found to merge." - fi - - # Step 10: Final status output - - name: Output final status - run: | - echo "Workflow completed successfully. Branch and PR status updated." From 111436c0a08ecbc0532fb7f7b43fb8ee89553f59 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Fri, 10 Jan 2025 16:47:06 +0100 Subject: [PATCH 104/120] Update komodo.sh (#1403) --- ct/komodo.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ct/komodo.sh b/ct/komodo.sh index 2a5508924..03e6729bc 100644 --- a/ct/komodo.sh +++ b/ct/komodo.sh @@ -34,9 +34,9 @@ function update_script() { fi msg_info "Updating ${APP}" COMPOSE_FILE="" - for file in *.compose.yaml; do + for file in /opt/komodo/*.compose.yaml; do if [[ "$file" != "compose.env" ]]; then - COMPOSE_FILE="$file" + COMPOSE_FILE="${file#/opt/komodo/}" break fi done @@ -47,15 +47,15 @@ function update_script() { fi BACKUP_FILE="${COMPOSE_FILE}.bak_$(date +%Y%m%d_%H%M%S)" - mv "$COMPOSE_FILE" "$BACKUP_FILE" || { + mv "/opt/komodo/$COMPOSE_FILE" "/opt/komodo/$BACKUP_FILE" || { msg_error "Failed to create backup of $COMPOSE_FILE!" exit 1 } - GITHUB_URL="https://raw.githubusercontent.com/mbecker20/komodo/main/compose/$COMPOSE_FILE" - wget -q -O "$COMPOSE_FILE" "$GITHUB_URL" || { - msg_error "Failed to download $COMPOSE_FILE from GitHub!" - mv "$BACKUP_FILE" "$COMPOSE_FILE" + GITHUB_URL="https://raw.githubusercontent.com/mbecker20/komodo/main/compose/${COMPOSE_FILE}" + wget -q -O "/opt/komodo/${COMPOSE_FILE}" "$GITHUB_URL" || { + msg_error "Failed to download ${COMPOSE_FILE} from GitHub!" + mv "/opt/komodo/${BACKUP_FILE}" "/opt/komodo/${COMPOSE_FILE}" exit 1 } From b7a8d3453a3d71cd6c87f0b99620840b71ffce4b Mon Sep 17 00:00:00 2001 From: Andy Grunwald Date: Fri, 10 Jan 2025 16:49:53 +0100 Subject: [PATCH 105/120] Visual Studio Code: Set Workspace recommended extensions (#1398) Codify the Recommended VS Code Extensions: - [Shell Syntax](https://marketplace.visualstudio.com/items?itemName=bmalehorn.shell-syntax) - [ShellCheck](https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck) - [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format) Documentation: https://code.visualstudio.com/docs/editor/extension-marketplace#_workspace-recommended-extensions --- .vscode/extensions.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .vscode/extensions.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..1949e6fc5 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "bmalehorn.shell-syntax", + "timonwong.shellcheck", + "foxundermoon.shell-format" + ], + "unwantedRecommendations": [] +} From 9a4d35b1f2f6b00ec94879e030d043ab97d95330 Mon Sep 17 00:00:00 2001 From: Andy Grunwald Date: Fri, 10 Jan 2025 16:54:58 +0100 Subject: [PATCH 106/120] Prometheus + Alertmanager: Unify scripts for easier maintenance (#1402) --- ct/prometheus-alertmanager.sh | 7 +++---- ct/prometheus.sh | 13 ++++++------- install/prometheus-install.sh | 25 +++++++++++++------------ 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/ct/prometheus-alertmanager.sh b/ct/prometheus-alertmanager.sh index 90858dac1..adcd77a46 100755 --- a/ct/prometheus-alertmanager.sh +++ b/ct/prometheus-alertmanager.sh @@ -42,18 +42,17 @@ function update_script() { cd /opt wget -q https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz - cd alertmanager-${RELEASE}.linux-amd64 - cp -rf alertmanager amtool /usr/local/bin/ + cp -rf alertmanager-${RELEASE}.linux-amd64/alertmanager alertmanager-${RELEASE}.linux-amd64/amtool /usr/local/bin/ rm -rf alertmanager-${RELEASE}.linux-amd64 alertmanager-${RELEASE}.linux-amd64.tar.gz echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ${APP} to ${RELEASE}" + msg_ok "Updated ${APP} to v${RELEASE}" msg_info "Starting ${APP}" systemctl start prometheus-alertmanager msg_ok "Started ${APP}" msg_ok "Updated Successfully" else - msg_ok "No update required. ${APP} is already at ${RELEASE}" + msg_ok "No update required. ${APP} is already at v${RELEASE}" fi exit } diff --git a/ct/prometheus.sh b/ct/prometheus.sh index d03e070be..7e1a78582 100644 --- a/ct/prometheus.sh +++ b/ct/prometheus.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2025 tteck +# Copyright (c) 2021-2025 community-scripts ORG # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://prometheus.io/ @@ -38,22 +38,21 @@ function update_script() { systemctl stop prometheus msg_ok "Stopped ${APP}" - msg_info "Updating ${APP} to ${RELEASE}" + msg_info "Updating ${APP} to v${RELEASE}" + cd /opt wget -q https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz - cd prometheus-${RELEASE}.linux-amd64 - cp -rf prometheus promtool /usr/local/bin/ - cd ~ + cp -rf prometheus-${RELEASE}.linux-amd64/prometheus prometheus-${RELEASE}.linux-amd64/promtool /usr/local/bin/ rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ${APP} to ${RELEASE}" + msg_ok "Updated ${APP} to v${RELEASE}" msg_info "Starting ${APP}" systemctl start prometheus msg_ok "Started ${APP}" msg_ok "Updated Successfully" else - msg_ok "No update required. ${APP} is already at ${RELEASE}" + msg_ok "No update required. ${APP} is already at v${RELEASE}" fi exit } diff --git a/install/prometheus-install.sh b/install/prometheus-install.sh index 94e0e273c..959b1602a 100644 --- a/install/prometheus-install.sh +++ b/install/prometheus-install.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -# Copyright (c) 2021-2025 tteck +# Copyright (c) 2021-2025 community-scripts ORG # Author: tteck (tteckster) -# License: MIT -# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://prometheus.io/ source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color @@ -14,9 +14,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc +$STD apt-get install -y \ + curl \ + sudo \ + mc msg_ok "Installed Dependencies" msg_info "Installing Prometheus" @@ -25,14 +26,13 @@ mkdir -p /etc/prometheus mkdir -p /var/lib/prometheus wget -q https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz -cd prometheus-${RELEASE}.linux-amd64 -mv prometheus promtool /usr/local/bin/ -mv prometheus.yml /etc/prometheus/prometheus.yml +mv prometheus-${RELEASE}.linux-amd64/prometheus prometheus-${RELEASE}.linux-amd64/promtool /usr/local/bin/ +mv prometheus-${RELEASE}.linux-amd64/prometheus.yml /etc/prometheus/prometheus.yml echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Installed Prometheus" msg_info "Creating Service" -service_path="/etc/systemd/system/prometheus.service" +cat </etc/systemd/system/prometheus.service" echo "[Unit] Description=Prometheus Wants=network-online.target @@ -49,7 +49,8 @@ ExecStart=/usr/local/bin/prometheus \ ExecReload=/bin/kill -HUP \$MAINPID [Install] -WantedBy=multi-user.target" >$service_path +WantedBy=multi-user.target" +EOF systemctl enable -q --now prometheus msg_ok "Created Service" @@ -59,5 +60,5 @@ customize msg_info "Cleaning up" $STD apt-get -y autoremove $STD apt-get -y autoclean -rm -rf ../prometheus-${RELEASE}.linux-amd64 ../prometheus-${RELEASE}.linux-amd64.tar.gz +rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz msg_ok "Cleaned" From a0eb6b860c680f39fabf80bb8127968f4f1c3eb9 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Fri, 10 Jan 2025 16:55:21 +0100 Subject: [PATCH 107/120] Update check_and_update_json_date.yml: Change path to /json (#1399) --- .github/workflows/check_and_update_json_date.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/check_and_update_json_date.yml b/.github/workflows/check_and_update_json_date.yml index 3b72eb7a6..696c60257 100644 --- a/.github/workflows/check_and_update_json_date.yml +++ b/.github/workflows/check_and_update_json_date.yml @@ -3,6 +3,8 @@ name: Check and Update JSON Date on: pull_request: types: [synchronize, opened, reopened, edited] + paths: + - "json/*.json" jobs: update-date: From 5090b62113e7192728cd93aca4d0e7187b88bbd3 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 16:57:04 +0100 Subject: [PATCH 108/120] add mariadb-server --- install/ghost-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/ghost-install.sh b/install/ghost-install.sh index bce232ce9..d569ac28a 100644 --- a/install/ghost-install.sh +++ b/install/ghost-install.sh @@ -21,7 +21,7 @@ $STD apt-get install -y \ sudo \ mc \ nginx \ - mysql-server \ + mariadb-server \ ca-certificates \ gnupg msg_ok "Installed Dependencies" From ad3214acfbc0c2a2367c1e555d62ef71c51a8b34 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:00:16 +0100 Subject: [PATCH 109/120] Create App_Header_Merge_Main_Into_update-app-headers --- ..._Header_Merge_Main_Into_update-app-headers | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/App_Header_Merge_Main_Into_update-app-headers diff --git a/.github/workflows/App_Header_Merge_Main_Into_update-app-headers b/.github/workflows/App_Header_Merge_Main_Into_update-app-headers new file mode 100644 index 000000000..c4f72692c --- /dev/null +++ b/.github/workflows/App_Header_Merge_Main_Into_update-app-headers @@ -0,0 +1,29 @@ +name: App-Header: Merge main into update-app-headers + +on: + push: + branches: + - main + paths: + - 'ct/**.sh' + +jobs: + merge-main: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Git + run: | + git config --global user.name "GitHub Actions" + git config --global user.email "actions@github.com" + + - name: Merge main into update-app-headers silently + run: | + git fetch origin + git checkout update-app-headers + git merge origin/main --no-ff --no-commit -m "Merge main into update-app-headers" + git push origin update-app-headers > /dev/null 2>&1 || true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 5d7e524578f6bcbf7ccde7bd4207d5168b4ace74 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:01:28 +0100 Subject: [PATCH 110/120] Create App_Header_Merge_update .app-headers inupdate-app-headers --- ...e_update .app-headers inupdate-app-headers | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/App_Header_Merge_update .app-headers inupdate-app-headers diff --git a/.github/workflows/App_Header_Merge_update .app-headers inupdate-app-headers b/.github/workflows/App_Header_Merge_update .app-headers inupdate-app-headers new file mode 100644 index 000000000..f28aa406c --- /dev/null +++ b/.github/workflows/App_Header_Merge_update .app-headers inupdate-app-headers @@ -0,0 +1,31 @@ +name: Update .app-headers with figlet output + +on: + workflow_run: + workflows: ["Merge main into update-app-headers"] + types: + - completed + +jobs: + update-app-headers: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Ensure .app-headers file exists silently + run: | + if [ ! -f ct/.app-headers ]; then + touch ct/.app-headers + fi + + - name: Update .app-headers with figlet output silently + run: | + for script in ct/*.sh; do + if grep -q 'APP=' "$script"; then + APP_NAME=$(grep -oP 'APP=\K\w+' "$script") + figlet "$APP_NAME" >> ct/.app-headers 2>/dev/null + fi + done + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 9b2180857d78110513ec142926f84b1c57fd7fe4 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:01:52 +0100 Subject: [PATCH 111/120] Rename App_Header_Merge_update .app-headers inupdate-app-headers to App_Header_Merge_update .app-headers_in_update-app-headers --- ...=> App_Header_Merge_update .app-headers_in_update-app-headers} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{App_Header_Merge_update .app-headers inupdate-app-headers => App_Header_Merge_update .app-headers_in_update-app-headers} (100%) diff --git a/.github/workflows/App_Header_Merge_update .app-headers inupdate-app-headers b/.github/workflows/App_Header_Merge_update .app-headers_in_update-app-headers similarity index 100% rename from .github/workflows/App_Header_Merge_update .app-headers inupdate-app-headers rename to .github/workflows/App_Header_Merge_update .app-headers_in_update-app-headers From e3d0fb58c91b98e793f80e444aed45484674f58d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:03:46 +0100 Subject: [PATCH 112/120] Rename generate-app-headers.yaml to App_Header_Merge_Into_main.yaml --- ...{generate-app-headers.yaml => App_Header_Merge_Into_main.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{generate-app-headers.yaml => App_Header_Merge_Into_main.yaml} (100%) diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/App_Header_Merge_Into_main.yaml similarity index 100% rename from .github/workflows/generate-app-headers.yaml rename to .github/workflows/App_Header_Merge_Into_main.yaml From 5fc78853477b420ec7555391dd5f26cacf8268b7 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:05:42 +0100 Subject: [PATCH 113/120] Update and rename App_Header_Merge_Main_Into_update-app-headers to merge-main.yml --- ...Header_Merge_Main_Into_update-app-headers => merge-main.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{App_Header_Merge_Main_Into_update-app-headers => merge-main.yml} (93%) diff --git a/.github/workflows/App_Header_Merge_Main_Into_update-app-headers b/.github/workflows/merge-main.yml similarity index 93% rename from .github/workflows/App_Header_Merge_Main_Into_update-app-headers rename to .github/workflows/merge-main.yml index c4f72692c..736d555d8 100644 --- a/.github/workflows/App_Header_Merge_Main_Into_update-app-headers +++ b/.github/workflows/merge-main.yml @@ -1,4 +1,4 @@ -name: App-Header: Merge main into update-app-headers +name: Merge main into update-app-headers on: push: From 4ead90ef0bb5e4d024b36858cc91d5a7f43c39f4 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:07:48 +0100 Subject: [PATCH 114/120] little fix tianji --- ct/tianji.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ct/tianji.sh b/ct/tianji.sh index 1ac59203f..96b2d5675 100644 --- a/ct/tianji.sh +++ b/ct/tianji.sh @@ -36,7 +36,8 @@ function update_script() { msg_info "Stopping ${APP} Service" systemctl stop tianji msg_ok "Stopped ${APP} Service" - msg_info "Updating ${APP} to ${RELEASE}" + + msg_info "Updating ${APP} to v${RELEASE}" cd /opt cp /opt/tianji/src/server/.env /opt/.env mv /opt/tianji /opt/tianji_bak @@ -54,10 +55,12 @@ function update_script() { cd src/server pnpm db:migrate:apply >/dev/null 2>&1 echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ${APP} to ${RELEASE}" + msg_ok "Updated ${APP} to v${RELEASE}" + msg_info "Starting ${APP}" systemctl start tianji msg_ok "Started ${APP}" + msg_info "Cleaning up" rm -R /opt/v${RELEASE}.zip rm -rf /opt/tianji_bak @@ -67,7 +70,7 @@ function update_script() { msg_ok "Cleaned" msg_ok "Updated Successfully" else - msg_ok "No update required. ${APP} is already at ${RELEASE}." + msg_ok "No update required. ${APP} is already at v${RELEASE}." fi exit } @@ -79,4 +82,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:12345${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:12345${CL}" From 698177466260e0f7fce9c18ec95987c4e1ce83ed Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:09:58 +0100 Subject: [PATCH 115/120] Update merge-main.yml --- .github/workflows/merge-main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/merge-main.yml b/.github/workflows/merge-main.yml index 736d555d8..fa8a984ba 100644 --- a/.github/workflows/merge-main.yml +++ b/.github/workflows/merge-main.yml @@ -23,7 +23,7 @@ jobs: run: | git fetch origin git checkout update-app-headers - git merge origin/main --no-ff --no-commit -m "Merge main into update-app-headers" + git merge origin/main --allow-unrelated-histories --no-commit -m "Merge main into update-app-headers" git push origin update-app-headers > /dev/null 2>&1 || true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 5855cff8e4608e2d1b5fe388441526ac83514e8a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:10:24 +0100 Subject: [PATCH 116/120] Update App_Header_Merge_update .app-headers_in_update-app-headers --- ...pp_Header_Merge_update .app-headers_in_update-app-headers | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/App_Header_Merge_update .app-headers_in_update-app-headers b/.github/workflows/App_Header_Merge_update .app-headers_in_update-app-headers index f28aa406c..e93b2abc3 100644 --- a/.github/workflows/App_Header_Merge_update .app-headers_in_update-app-headers +++ b/.github/workflows/App_Header_Merge_update .app-headers_in_update-app-headers @@ -24,7 +24,10 @@ jobs: for script in ct/*.sh; do if grep -q 'APP=' "$script"; then APP_NAME=$(grep -oP 'APP=\K\w+' "$script") - figlet "$APP_NAME" >> ct/.app-headers 2>/dev/null + if [ ! -z "$APP_NAME" ]; then + echo "Adding $APP_NAME to .app-headers" + figlet "$APP_NAME" >> ct/.app-headers 2>/dev/null || echo "figlet failed for $APP_NAME" + fi fi done env: From 376fd6522a5165991021c650a79f59dea6572bf9 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:13:49 +0100 Subject: [PATCH 117/120] Update ghost-install.sh --- install/ghost-install.sh | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/install/ghost-install.sh b/install/ghost-install.sh index d569ac28a..8ac54169a 100644 --- a/install/ghost-install.sh +++ b/install/ghost-install.sh @@ -27,15 +27,20 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" -msg_info "Configuring MySQL" +msg_info "Configuring Database" +DB_NAME=ghost +DB_USER=ghostuser DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) -$STD mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '$DB_PASS';" -$STD mysql -u root -p"$DB_PASS" -e "FLUSH PRIVILEGES;" +mariadb -u root -e "CREATE DATABASE $DB_NAME;" +mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';" +mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;" + { - echo "MySQL-Credentials" - echo "Username: root" - echo "Password: $DB_PASS" -} >> ~/mysql.creds + echo "Ghost-Credentials" + echo "Ghost Database User: $DB_USER" + echo "Ghost Database Password: $DB_PASS" + echo "Ghost Database Name: $DB_NAME" +} >> ~/ghost.creds msg_ok "Configured MySQL" msg_info "Setting up Node.js Repository" From ca391d74485e1649876e8f7973b042dde2548ed4 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:15:22 +0100 Subject: [PATCH 118/120] little fix --- ct/wastebin.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/wastebin.sh b/ct/wastebin.sh index 9e4162377..88de3fb7b 100644 --- a/ct/wastebin.sh +++ b/ct/wastebin.sh @@ -55,7 +55,7 @@ function update_script() { msg_ok "Cleaned" msg_ok "Updated Successfully" else - msg_ok "No update required. ${APP} is already at ${RELEASE}" + msg_ok "No update required. ${APP} is already at v${RELEASE}" fi exit } @@ -67,4 +67,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8088${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8088${CL}" From 1932f5ebcc003404b8fea4ee680d37c46f7cecb1 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 18:15:03 +0100 Subject: [PATCH 119/120] Update CHANGELOG.md (#1405) --- CHANGELOG.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86f49d0d2..ce0ebc224 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,9 +26,11 @@ Do not break established syntax in this file, as it is automatically updated by ### 🚀 Updated Scripts -- Fix: checkmk-install.sh: Version crawling. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1385](https://github.com/community-scripts/ProxmoxVE/pull/1385)) -- Fix: bookstack.sh - Ignore empty folder [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1388](https://github.com/community-scripts/ProxmoxVE/pull/1388)) +- Update Prometheus + Alertmanager: Unify scripts for easier maintenance [@andygrunwald](https://github.com/andygrunwald) ([#1402](https://github.com/community-scripts/ProxmoxVE/pull/1402)) +- Update komodo.sh: Fix broken paths in update_script(). [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1403](https://github.com/community-scripts/ProxmoxVE/pull/1403)) - Fix: ActualBudget Update-Function [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1376](https://github.com/community-scripts/ProxmoxVE/pull/1376)) +- Fix: bookstack.sh - Ignore empty folder [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1388](https://github.com/community-scripts/ProxmoxVE/pull/1388)) +- Fix: checkmk-install.sh: Version crawling. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1385](https://github.com/community-scripts/ProxmoxVE/pull/1385)) ### 🌐 Website @@ -36,8 +38,10 @@ Do not break established syntax in this file, as it is automatically updated by ### 🧰 Maintenance -- [core]: check json date of new prs & update it [@MickLesk](https://github.com/MickLesk) ([#1395](https://github.com/community-scripts/ProxmoxVE/pull/1395)) +- Update check_and_update_json_date.yml: Change path to /json [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1399](https://github.com/community-scripts/ProxmoxVE/pull/1399)) +- Visual Studio Code: Set Workspace recommended extensions [@andygrunwald](https://github.com/andygrunwald) ([#1398](https://github.com/community-scripts/ProxmoxVE/pull/1398)) - [core]: add support for custom tags [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1384](https://github.com/community-scripts/ProxmoxVE/pull/1384)) +- [core]: check json date of new prs & update it [@MickLesk](https://github.com/MickLesk) ([#1395](https://github.com/community-scripts/ProxmoxVE/pull/1395)) - Add initial PR for Contributing & Coding Standard [@MickLesk](https://github.com/MickLesk) ([#920](https://github.com/community-scripts/ProxmoxVE/pull/920)) - [Core] add Github Action for Generate AppHeaders (figlet remove part 1) [@MickLesk](https://github.com/MickLesk) ([#1382](https://github.com/community-scripts/ProxmoxVE/pull/1382)) From 3051720f58ff2ca7ece09f359a23737579239953 Mon Sep 17 00:00:00 2001 From: fabrice1236 <87321357+fabrice1236@users.noreply.github.com> Date: Fri, 10 Jan 2025 18:22:38 +0100 Subject: [PATCH 120/120] Fix user in ghost-cli install command (#1408) --- install/ghost-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/ghost-install.sh b/install/ghost-install.sh index 8ac54169a..9bc6829af 100644 --- a/install/ghost-install.sh +++ b/install/ghost-install.sh @@ -65,7 +65,7 @@ echo "ghost-user ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/ghost-user mkdir -p /var/www/ghost chown -R ghost-user:ghost-user /var/www/ghost chmod 775 /var/www/ghost -sudo -u ghost-user -H sh -c "cd /var/www/ghost && ghost install --db=mysql --dbhost=localhost --dbuser=root --dbpass=$DB_PASS --dbname=ghost --url=http://localhost:2368 --no-prompt --no-setup-nginx --no-setup-ssl --no-setup-mysql --enable --start --ip 0.0.0.0" +sudo -u ghost-user -H sh -c "cd /var/www/ghost && ghost install --db=mysql --dbhost=localhost --dbuser=$DB_USER --dbpass=$DB_PASS --dbname=ghost --url=http://localhost:2368 --no-prompt --no-setup-nginx --no-setup-ssl --no-setup-mysql --enable --start --ip 0.0.0.0" rm /etc/sudoers.d/ghost-user msg_ok "Creating Service"