Compare commits

..

2 Commits

875 changed files with 19352 additions and 14677 deletions

458
.github/AUTOLABELER_FEATURES.md generated vendored
View File

@@ -1,458 +0,0 @@
# 🤖 Autolabeler Features
This document describes the automated features of our PR labeling system.
## 🎯 All Features
### 1. **Label Cleanup** ✨
Automatically removes outdated or conflicting labels when PR is updated.
**Example:**
- PR initially labeled with `feature` and `bugfix`
- User updates PR and only checks `bugfix`
- Bot removes `feature` label automatically
**Benefits:**
- Prevents label confusion
- Ensures accurate changelog categorization
- Maintains label consistency
---
### 2. **Commit Message Analysis** 📝
Automatically detects change types from conventional commit messages.
**Supported Formats:**
- `fix:` or `fix(scope):` → adds `bugfix` label
- `feat:` or `feat(scope):` → adds `feature` label
- `refactor:` or `refactor(scope):` → adds `refactor` label
- `BREAKING CHANGE:` or `feat!:` → adds `breaking change` label
**Example:**
```
feat(docker): add support for custom networks
This adds support for user-defined networks
```
→ Automatically labeled with `feature`
**Benefits:**
- Works even if checkboxes are forgotten
- Supports standard Git conventions
- Combines with template checkboxes
---
### 3. **Size Labels** 📏
Automatically adds size labels based on total lines changed.
**Size Categories:**
- `size: XS` → 1-10 lines (🟢 Green)
- `size: S` → 11-50 lines (🟢 Yellow-Green)
- `size: M` → 51-200 lines (🟡 Yellow)
- `size: L` → 201-500 lines (🟠 Orange)
- `size: XL` → 500+ lines (🔴 Red)
**Benefits:**
- Helps reviewers prioritize
- Quick visual indication of PR complexity
- Automatic and consistent
**Note:** Labels need to be created in repository first. See [SETUP_NEW_LABELS.md](SETUP_NEW_LABELS.md)
---
### 4. **First-Time Contributor Welcome** 🎉
Special welcome message for contributors making their first PR.
**Example:**
```markdown
## 🎉 Welcome to the Community!
Thank you @username for your first contribution! 🙌
A maintainer will review your PR soon. Here are some helpful resources:
- Contributing Guide
- Code of Conduct
```
**Benefits:**
- Better onboarding experience
- Increases contributor retention
- Builds community
---
### 5. **Documentation Check** 📚
Warns when code changes don't include documentation updates.
**Triggers Warning When:**
- Code files modified (`.sh`, `.func`, `.js`, `.go`, etc.)
- No documentation files modified (`.md`, `README`, etc.)
- Not a bugfix or refactor (features should have docs!)
**Example Warning:**
```markdown
📚 **Documentation update recommended**: Consider updating documentation
for these code changes.
```
**Benefits:**
- Improves documentation coverage
- Reminds contributors about docs
- Better project maintainability
---
### 6. **Related Issues Detection** 🔗
Automatically finds and links related open issues.
**How it works:**
- Extracts script names from changed files
- Searches open issues for matching names
- Links up to 5 most relevant issues
**Example:**
```markdown
## 🔗 Related Issues
This PR may be related to the following open issues:
- #123: Docker script fails on Ubuntu 22.04
- #456: Add network configuration options
```
**Benefits:**
- Better context for reviewers
- Automatic cross-referencing
- Helps track issue resolution
---
### 7. **Validation Warnings** ⚠️
Provides helpful warnings when PR information is incomplete or inconsistent.
**Checks:**
- ✅ Change type checkbox is selected for script updates
- ✅ Website checkbox matches file changes
- ✅ Required labels are present
- ✅ Documentation updated for new features
**Example Warning:**
```markdown
## ⚠️ Validation Warnings
⚠️ **Missing change type**: Please check one of the change type checkboxes
(Bug fix, New feature, Refactoring, or Breaking change) in the PR description.
```
---
### 8. **Changelog Preview** 📝
Shows contributors exactly how their PR will appear in the changelog.
**Example Preview:**
```markdown
## 📝 Changelog Preview
This PR will appear in the changelog as:
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix docker script issue @username ([#123](url))
```
**Benefits:**
- Contributors see immediate feedback
- Reduces changelog errors
- Improves PR quality
---
## 🏷️ Label Priority System
When multiple change types are checked, only the highest priority label is applied:
1. 🐞 **Bugfix** (highest priority)
2. 🔧 **Refactor**
3.**Feature**
4. 💥 **Breaking Change** (lowest priority)
**Rationale:**
- Bug fixes are most important for users
- Prevents PRs from appearing in multiple subcategories
- Maintains clean changelog structure
**Note:** This applies to both template checkboxes AND conventional commit messages!
---
## 📊 Changelog Categories
The bot automatically determines which changelog category your PR belongs to:
| Files Changed | Category | Note |
| ------------------------------------ | ------------------------------- | ------------------ |
| `ct/`, `vm/`, `install/`, `turnkey/` | 🚀 Updated Scripts | Standard scripts |
| `tools/` | 🛠️ Updated Tools | Utility tools |
| `misc/` | 🔧 Core Updates | Core functionality |
| `frontend/` (not JSON) | 🌐 Website | Frontend changes |
| `frontend/public/json/` | 🌐 Website > Script Information | Metadata updates |
| Documentation files | 🧰 Maintenance | Docs, README, etc. |
**Multi-Category PRs:**
PRs that change files in multiple categories will appear in each relevant category.
---
## 🔄 Bot Behavior
### When PR is Opened/Edited:
1. ✅ Analyzes changed files
2. ✅ Parses PR template checkboxes
3. ✅ Analyzes commit messages (conventional commits)
4. ✅ Calculates size label
5. ✅ Checks if first-time contributor
6. ✅ Applies appropriate labels
7. ✅ Removes conflicting labels
8. ✅ Checks for validation issues
9. ✅ Finds related issues
10. ✅ Posts/updates comment with all info
### Comment Structure:
A single bot comment contains (in order):
1. 🎉 Welcome message (if first-time contributor)
2. ⚠️ Validation warnings (if any)
3. 📝 Changelog preview (always)
4. 🔗 Related issues (if found)
5. Footer with PR size
### Comment Updates:
- Bot updates its own comment when PR is edited (no spam)
- Only posts new comment if none exists
- Welcome message is preserved across updates
---
## 📝 Complete Example
Here's what a first-time contributor might see:
```markdown
## 🎉 Welcome to the Community!
Thank you @newuser for your first contribution! 🙌
A maintainer will review your PR soon. Here are some helpful resources:
- Contributing Guide
- Code of Conduct
---
## ⚠️ Validation Warnings
📚 **Documentation update recommended**: Consider updating documentation
for these code changes.
---
## 📝 Changelog Preview
This PR will appear in the changelog as:
### 🚀 Updated Scripts
- #### ✨ New Features
- Add Docker network support @newuser ([#789](url))
---
## 🔗 Related Issues
This PR may be related to the following open issues:
- #456: Docker networking not working
- #123: Request: Custom network support
---
_This is an automated message from the PR labeler bot. PR size: size: M_
```
---
## 🛠️ For Maintainers
### Debugging Label Issues
If labels aren't being applied correctly:
1. Check PR template checkboxes are properly formatted
2. Verify commit messages use conventional format
3. Look for bot comment explaining label decisions
4. Check GitHub Actions logs for errors
5. Verify all required labels exist in repository
### Modifying Label Behavior
**Config files:**
- `.github/autolabeler-config.json` - File path → label mappings
- `.github/changelog-pr-config.json` - Changelog categories
- `.github/workflows/autolabeler.yml` - Core logic
**Priority order** can be changed in `autolabeler.yml`:
```javascript
const priorityOrder = ["bugfix", "refactor", "feature", "breaking change"];
```
**Size thresholds** can be adjusted:
```javascript
if (totalChanges <= 10) labelsToAdd.add("size: XS");
else if (totalChanges <= 50) labelsToAdd.add("size: S");
// etc.
```
### Creating Required Labels
Run these commands to create all size labels:
```bash
gh label create "size: XS" --description "1-10 lines" --color "00ff00"
gh label create "size: S" --description "11-50 lines" --color "7fff00"
gh label create "size: M" --description "51-200 lines" --color "ffff00"
gh label create "size: L" --description "201-500 lines" --color "ff8c00"
gh label create "size: XL" --description "500+ lines" --color "ff0000"
```
See [SETUP_NEW_LABELS.md](SETUP_NEW_LABELS.md) for full setup guide.
---
## 🧪 Testing Scenarios
### Test 1: Conventional Commits
```bash
# Commit with conventional format
git commit -m "feat: add new feature"
# Expected: feature label, even without checkbox
```
### Test 2: Size Labels
```bash
# Small PR (< 50 lines)
# Expected: size: S label
```
### Test 3: First-Time Contributor
```bash
# Create PR from new contributor account
# Expected: Welcome message in bot comment
```
### Test 4: Documentation Check
```bash
# Change .sh file, no .md changes
# Expected: Warning about missing docs
```
### Test 5: Related Issues
```bash
# PR changes "docker.sh"
# Expected: Links to issues mentioning "docker"
```
---
## 🎉 Benefits Summary
**Automation**: Less manual work for maintainers
**Consistency**: All PRs follow same standard
**Quality**: Multiple validation checks
**Transparency**: Contributors see what happens
**Community**: Better onboarding for new contributors
**Context**: Automatic issue linking
**Clean Changelogs**: Priority system prevents duplication
---
## 🐛 Troubleshooting
**Labels not applied?**
- Check if PR template checkboxes are properly formatted
- Try using conventional commit messages
- Ensure files changed match expected patterns
- Look for validation warnings in bot comment
**Size label missing?**
- Labels need to be created first (see setup guide)
- Check if label was removed manually
- Verify workflow has permissions to add labels
**Wrong category?**
- Verify file paths (tools/ vs ct/ vs misc/)
- Check if multiple categories apply (intended behavior)
- Review `.github/changelog-pr-config.json`
**Bot comment not appearing?**
- Check GitHub Actions logs
- Verify bot has comment permissions
- May take a few seconds after PR creation
- Check if PR is from a fork (requires pull_request_target)
**Related issues not found?**
- Script name must match issue title/body
- Only searches open issues
- Limited to top 5 results
---
**Questions?** Check the workflow logs or ask in the repository discussions.

View File

@@ -13,6 +13,7 @@ body:
Thank you for taking the time to report an issue! Please provide as much detail as possible to help us address the problem efficiently.
- type: input
id: guidelines
attributes:
@@ -33,7 +34,8 @@ body:
id: script_command
attributes:
label: 📂 What was the exact command used to execute the script?
placeholder: 'e.g., bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/zigbee2mqtt.sh)" or "update"'
placeholder: "e.g., bash -c \"$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/zigbee2mqtt.sh)\" or \"update\""
validations:
required: true
- type: checkboxes
@@ -61,8 +63,7 @@ body:
- Debian 13
- Ubuntu 22.04
- Ubuntu 24.04
- Ubuntu 25.04
- Other
- Ubuntu 24.10
validations:
required: true

79
.github/SETUP_NEW_LABELS.md generated vendored
View File

@@ -1,79 +0,0 @@
# 🏷️ Setup New Labels
The autolabeler now uses additional size labels. These need to be created in your repository.
## Required Labels
### Size Labels (New)
These labels are automatically added based on the number of lines changed:
| Label | Lines Changed | Color | Description |
| ---------- | ------------- | --------- | ----------------------------- |
| `size: XS` | 1-10 | `#00ff00` | Extra Small - Minimal changes |
| `size: S` | 11-50 | `#7fff00` | Small - Minor changes |
| `size: M` | 51-200 | `#ffff00` | Medium - Moderate changes |
| `size: L` | 201-500 | `#ff8c00` | Large - Significant changes |
| `size: XL` | 500+ | `#ff0000` | Extra Large - Major changes |
## Quick Setup Commands
Run these commands in your terminal to create all labels at once:
```bash
# Create size labels
gh label create "size: XS" --description "Extra Small - 1-10 lines changed" --color "00ff00"
gh label create "size: S" --description "Small - 11-50 lines changed" --color "7fff00"
gh label create "size: M" --description "Medium - 51-200 lines changed" --color "ffff00"
gh label create "size: L" --description "Large - 201-500 lines changed" --color "ff8c00"
gh label create "size: XL" --description "Extra Large - 500+ lines changed" --color "ff0000"
```
## Manual Setup (GitHub UI)
1. Go to: `https://github.com/community-scripts/ProxmoxVE/labels`
2. Click "New label" for each label
3. Fill in:
- **Name**: Use exact names from table above
- **Description**: Copy from table
- **Color**: Use hex codes from table (without #)
## Verification
After creating labels, test by:
1. Creating a small PR (< 10 lines) → should get `size: XS`
2. Check that bot comment includes size in footer
## Optional: Label Sync
For automated label management, consider using [github-label-sync](https://github.com/Financial-Times/github-label-sync):
```json
{
"size: XS": {
"color": "00ff00",
"description": "Extra Small - 1-10 lines changed"
},
"size: S": {
"color": "7fff00",
"description": "Small - 11-50 lines changed"
},
"size: M": {
"color": "ffff00",
"description": "Medium - 51-200 lines changed"
},
"size: L": {
"color": "ff8c00",
"description": "Large - 201-500 lines changed"
},
"size: XL": {
"color": "ff0000",
"description": "Extra Large - 500+ lines changed"
}
}
```
---
**Note**: The autolabeler will work even if labels don't exist yet, but they won't be visible on PRs until created.

13
.github/autolabeler-config.json generated vendored
View File

@@ -101,11 +101,20 @@
"excludeGlobs": []
}
],
"tools": [
"addon": [
{
"fileStatus": null,
"includeGlobs": [
"tools/**"
"tools/addon/**"
],
"excludeGlobs": []
}
],
"pve-tool": [
{
"fileStatus": null,
"includeGlobs": [
"tools/pve/**"
],
"excludeGlobs": []
}

175
.github/changelog-pr-config.json generated vendored
View File

@@ -10,10 +10,6 @@
"labels": [
"update script"
],
"excludeLabels": [
"tools",
"core"
],
"subCategories": [
{
"title": "🐞 Bug Fixes",
@@ -22,13 +18,6 @@
],
"notes": []
},
{
"title": "🔧 Refactor",
"labels": [
"refactor"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": [
@@ -42,61 +31,6 @@
"breaking change"
],
"notes": []
}
]
},
{
"title": "🛠️ Updated Tools",
"labels": [
"update script",
"tools"
],
"requireAllLabels": true,
"subCategories": [
{
"title": "<22> Bug Fixes",
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "<22>🔧 Refactor",
"labels": [
"refactor"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": [
"feature"
],
"notes": []
},
{
"title": "💥 Breaking Changes",
"labels": [
"breaking change"
],
"notes": []
}
]
},
{
"title": "🔧 Core Updates",
"labels": [
"update script",
"core"
],
"requireAllLabels": true,
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "🔧 Refactor",
@@ -104,63 +38,6 @@
"refactor"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": [
"feature"
],
"notes": []
},
{
"title": "💥 Breaking Changes",
"labels": [
"breaking change"
],
"notes": []
}
]
},
{
"title": "🌐 Website",
"labels": [
"website"
],
"subCategories": [
{
"title": "<22> Bug Fixes",
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "<22> Refactor",
"labels": [
"refactor"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": [
"feature"
],
"notes": []
},
{
"title": "<22> Breaking Changes",
"labels": [
"breaking change"
],
"notes": []
},
{
"title": "<22> Script Information",
"labels": [
"json"
],
"notes": []
}
]
},
@@ -177,13 +54,6 @@
],
"notes": []
},
{
"title": "🔧 Refactor",
"labels": [
"refactor"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": [
@@ -199,7 +69,7 @@
"notes": []
},
{
"title": "<EFBFBD> API",
"title": "📡 API",
"labels": [
"api"
],
@@ -225,6 +95,49 @@
"maintenance"
],
"notes": []
},
{
"title": "🔧 Refactor",
"labels": [
"refactor"
],
"notes": []
}
]
},
{
"title": "🌐 Website",
"labels": [
"website"
],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": [
"feature"
],
"notes": []
},
{
"title": "💥 Breaking Changes",
"labels": [
"breaking change"
],
"notes": []
},
{
"title": "📝 Script Information",
"labels": [
"json"
],
"notes": []
}
]
},

308
.github/workflows/autolabeler.yml generated vendored
View File

@@ -35,7 +35,6 @@ jobs:
const prNumber = context.payload.pull_request.number;
const prBody = context.payload.pull_request.body || "";
const prAuthor = context.payload.pull_request.user.login;
let labelsToAdd = new Set();
@@ -46,24 +45,6 @@ jobs:
});
const prFiles = prListFilesResponse.data;
// Get commits for commit message analysis
const { data: commits } = await github.rest.pulls.listCommits({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});
// Check if this is a first-time contributor
const { data: prsByAuthor } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'all',
per_page: 5
});
const isFirstTimeContributor = !prsByAuthor.some(pr =>
pr.user.login === prAuthor && pr.number !== prNumber && pr.merged_at
);
for (const [label, rules] of Object.entries(autolabelerConfig)) {
const shouldAddLabel = prFiles.some((prFile) => {
return rules.some((rule) => {
@@ -76,48 +57,28 @@ jobs:
if (shouldAddLabel) {
labelsToAdd.add(label);
if (label === "update script" || label === "new script") {
if (label === "update script") {
for (const prFile of prFiles) {
const filename = prFile.filename;
if (filename.startsWith("vm/")) labelsToAdd.add("vm");
if (filename.startsWith("tools/")) labelsToAdd.add("tools");
if (filename.startsWith("misc/")) labelsToAdd.add("core");
if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon");
if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool");
}
}
}
}
// Feature 2: Analyze commit messages for conventional commits
const commitMessages = commits.map(c => c.commit.message).join('\n');
const conventionalCommitLabels = [];
if (/^fix(\(.*?\))?:/im.test(commitMessages)) {
conventionalCommitLabels.push("bugfix");
}
if (/^feat(\(.*?\))?:/im.test(commitMessages)) {
conventionalCommitLabels.push("feature");
}
if (/^refactor(\(.*?\))?:/im.test(commitMessages)) {
conventionalCommitLabels.push("refactor");
}
if (/BREAKING[:\s]CHANGE/i.test(commitMessages) || /^[a-z]+(\(.*?\))?!:/im.test(commitMessages)) {
conventionalCommitLabels.push("breaking change");
}
// Parse PR template for content type labels (bugfix, feature, refactor, breaking change)
if (labelsToAdd.size < 2) {
const templateLabelMappings = {
"🐞 **Bug fix**": "bugfix",
"✨ **New feature**": "feature",
"💥 **Breaking change**": "breaking change",
"🆕 **New script**": "new script",
"🌍 **Website update**": "website",
"🌍 **Website update**": "website", // handled special
"🔧 **Refactoring / Code Cleanup**": "refactor",
"📝 **Documentation update**": "documentation"
"📝 **Documentation update**": "documentation" // mapped to maintenance
};
const contentLabels = ["bugfix", "feature", "refactor", "breaking change"];
const checkedContentLabels = [];
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i");
@@ -125,267 +86,20 @@ jobs:
if (regex.test(prBody)) {
if (label === "website") {
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
const hasUpdateScript = labelsToAdd.has("update script");
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
if (!(hasUpdateScript && hasContentLabel)) {
labelsToAdd.add(hasJson ? "json" : "website");
}
} else if (label === "documentation") {
labelsToAdd.add("maintenance");
} else if (label === "new script") {
labelsToAdd.add("new script");
} else if (contentLabels.includes(label)) {
checkedContentLabels.push(label);
} else {
labelsToAdd.add(label);
}
}
}
// Priority system: Combine template checkboxes and conventional commits
// Merge both sources
const allCheckedLabels = [...new Set([...checkedContentLabels, ...conventionalCommitLabels])];
// Priority: bugfix > refactor > feature > breaking change
if (allCheckedLabels.length > 0) {
const priorityOrder = ["bugfix", "refactor", "feature", "breaking change"];
const highestPriorityLabel = priorityOrder.find(label => allCheckedLabels.includes(label));
if (highestPriorityLabel) {
labelsToAdd.add(highestPriorityLabel);
}
}
// Feature 3: Add size labels based on changes
const totalChanges = prFiles.reduce((sum, file) => sum + file.additions + file.deletions, 0);
if (totalChanges <= 10) {
labelsToAdd.add("size: XS");
} else if (totalChanges <= 50) {
labelsToAdd.add("size: S");
} else if (totalChanges <= 200) {
labelsToAdd.add("size: M");
} else if (totalChanges <= 500) {
labelsToAdd.add("size: L");
} else {
labelsToAdd.add("size: XL");
}
// Get current PR labels
const { data: currentPR } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});
const currentLabels = currentPR.labels.map(label => label.name.toLowerCase());
// Label Cleanup: Remove outdated content labels and size labels
const allContentLabels = ["bugfix", "feature", "refactor", "breaking change"];
const allSizeLabels = ["size: XS", "size: S", "size: M", "size: L", "size: XL"];
const labelsToRemove = [
...allContentLabels.filter(label => currentLabels.includes(label) && !labelsToAdd.has(label)),
...allSizeLabels.filter(label => currentLabels.includes(label.toLowerCase()) && !labelsToAdd.has(label))
];
for (const label of labelsToRemove) {
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
name: label,
});
} catch (error) {
// Label might not exist, ignore
}
}
// Validation: Check for missing information
const warnings = [];
const hasUpdateOrNewScript = labelsToAdd.has("update script") || labelsToAdd.has("new script");
const hasContentLabel = allContentLabels.some(label => labelsToAdd.has(label));
if (hasUpdateOrNewScript && !hasContentLabel && !labelsToAdd.has("new script")) {
warnings.push("⚠️ **Missing change type**: Please check one of the change type checkboxes (Bug fix, New feature, Refactoring, or Breaking change) in the PR description.");
}
if (labelsToAdd.has("website") && !labelsToAdd.has("json") && prFiles.some(f => f.filename.includes("frontend/"))) {
const hasCheckbox = /- \[(x|X)\]\s*🌍 \*\*Website update\*\*/i.test(prBody);
if (!hasCheckbox) {
warnings.push("⚠️ **Missing checkbox**: Please check the '🌍 Website update' checkbox in the PR description.");
}
}
// Feature 5: Documentation check
const codeFiles = prFiles.filter(f => /\.(sh|func|go|js|ts|tsx|jsx)$/.test(f.filename));
const docFiles = prFiles.filter(f => /\.(md|txt)$/i.test(f.filename) || f.filename.includes('README'));
if (codeFiles.length > 0 && docFiles.length === 0 && !labelsToAdd.has("refactor") && !labelsToAdd.has("bugfix")) {
warnings.push("📚 **Documentation update recommended**: Consider updating documentation for these code changes.");
}
// Feature 6: Related issues detection
let relatedIssuesText = "";
const scriptFiles = prFiles.filter(f => /\.(sh|func)$/.test(f.filename));
if (scriptFiles.length > 0) {
const scriptNames = scriptFiles.map(f => {
const match = f.filename.match(/([^\/]+)\.(sh|func)$/);
return match ? match[1] : null;
}).filter(Boolean);
if (scriptNames.length > 0) {
try {
const { data: openIssues } = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
per_page: 100
});
const related = [];
for (const scriptName of scriptNames) {
const matchingIssues = openIssues.filter(issue =>
!issue.pull_request &&
(issue.title.toLowerCase().includes(scriptName.toLowerCase()) ||
(issue.body || '').toLowerCase().includes(scriptName.toLowerCase()))
);
related.push(...matchingIssues);
}
const uniqueRelated = [...new Map(related.map(i => [i.number, i])).values()];
if (uniqueRelated.length > 0) {
relatedIssuesText = "\n\n## 🔗 Related Issues\n\n";
relatedIssuesText += "This PR may be related to the following open issues:\n";
uniqueRelated.slice(0, 5).forEach(issue => {
relatedIssuesText += `- #${issue.number}: ${issue.title}\n`;
});
if (uniqueRelated.length > 5) {
relatedIssuesText += `- _...and ${uniqueRelated.length - 5} more_\n`;
}
}
} catch (error) {
console.error("Error fetching related issues:", error);
}
}
}
// Generate Changelog Preview
let changelogPreview = "## 📝 Changelog Preview\n\n";
changelogPreview += "This PR will appear in the changelog as:\n\n";
const categories = [];
if (labelsToAdd.has("new script")) {
changelogPreview += "### 🆕 New Scripts\n";
changelogPreview += `- ${currentPR.title} @${currentPR.user.login} ([#${prNumber}](${currentPR.html_url}))\n\n`;
} else {
if (labelsToAdd.has("update script")) {
if (labelsToAdd.has("tools")) {
categories.push({ name: "🛠️ Updated Tools", label: labelsToAdd });
} else if (labelsToAdd.has("core")) {
categories.push({ name: "🔧 Core Updates", label: labelsToAdd });
} else {
categories.push({ name: "🚀 Updated Scripts", label: labelsToAdd });
}
}
if (labelsToAdd.has("website") || labelsToAdd.has("json")) {
categories.push({ name: "🌐 Website", label: labelsToAdd });
}
if (labelsToAdd.has("maintenance")) {
categories.push({ name: "🧰 Maintenance", label: labelsToAdd });
}
for (const category of categories) {
changelogPreview += `### ${category.name}\n`;
const subCategoryMap = {
"bugfix": " - #### 🐞 Bug Fixes",
"refactor": " - #### 🔧 Refactor",
"feature": " - #### ✨ New Features",
"breaking change": " - #### 💥 Breaking Changes"
};
const matchedSubCat = allContentLabels.find(label => labelsToAdd.has(label));
if (matchedSubCat && subCategoryMap[matchedSubCat]) {
changelogPreview += `${subCategoryMap[matchedSubCat]}\n`;
}
if (labelsToAdd.has("json")) {
changelogPreview += " - #### 📝 Script Information\n";
}
changelogPreview += ` - ${currentPR.title} @${currentPR.user.login} ([#${prNumber}](${currentPR.html_url}))\n\n`;
}
if (categories.length === 0) {
changelogPreview += "_This PR may not appear in the changelog. Please ensure proper labels are set._\n\n";
}
}
// Post comment with warnings and changelog preview
if (warnings.length > 0 || changelogPreview || relatedIssuesText || isFirstTimeContributor) {
let commentBody = "";
// Feature 4: First-time contributor welcome
if (isFirstTimeContributor) {
commentBody += "## 🎉 Welcome to the Community!\n\n";
commentBody += `Thank you **@${prAuthor}** for your first contribution! 🙌\n\n`;
commentBody += "A maintainer will review your PR soon. Here are some helpful resources:\n";
commentBody += "- [Contributing Guide](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md)\n";
commentBody += "- [Code of Conduct](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CODE_OF_CONDUCT.md)\n\n";
commentBody += "---\n\n";
}
if (warnings.length > 0) {
commentBody += "## ⚠️ Validation Warnings\n\n";
commentBody += warnings.join("\n\n") + "\n\n---\n\n";
}
commentBody += changelogPreview;
if (relatedIssuesText) {
commentBody += relatedIssuesText;
}
commentBody += "\n\n---\n";
commentBody += `_This is an automated message from the PR labeler bot. PR size: ${Array.from(labelsToAdd).find(l => l.startsWith('size:')) || 'unknown'}_`;
// Check if we already posted a comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
});
const botComment = comments.find(comment =>
comment.user.login === "github-actions[bot]" &&
(comment.body.includes("Changelog Preview") || comment.body.includes("Welcome to the Community"))
);
if (botComment) {
// Update existing comment (but keep welcome message if it was there)
let updatedBody = commentBody;
if (botComment.body.includes("Welcome to the Community") && !isFirstTimeContributor) {
// Preserve welcome message from original comment
const welcomeSection = botComment.body.match(/## 🎉 Welcome to the Community![\s\S]*?---\n\n/);
if (welcomeSection) {
updatedBody = welcomeSection[0] + commentBody;
}
}
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: updatedBody,
});
} else {
// Create new comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: commentBody,
});
}
}
if (labelsToAdd.size === 0) {
labelsToAdd.add("needs triage");
}

86
.github/workflows/changelog-pr.yml generated vendored
View File

@@ -67,12 +67,29 @@ jobs:
const categorizedPRs = changelogConfig.map(obj => ({
...obj,
notes: [],
requireAllLabels: obj.requireAllLabels ?? false,
excludeLabels: obj.excludeLabels ?? [],
subCategories: obj.subCategories ? obj.subCategories.map(sub => ({
...sub,
notes: []
})) : []
subCategories: obj.subCategories ?? (
obj.labels.includes("update script") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "🔧 Refactor", labels: ["refactor"], notes: [] },
] :
obj.labels.includes("maintenance") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "📡 API", labels: ["api"], notes: [] },
{ title: "Github", labels: ["github"], notes: [] },
{ title: "📝 Documentation", labels: ["maintenance"], notes: [] },
{ title: "🔧 Refactor", labels: ["refactor"], notes: [] }
] :
obj.labels.includes("website") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "Script Information", labels: ["json"], notes: [] }
] : []
)
}));
const latestDateInChangelog = new Date(process.env.LATEST_DATE);
@@ -98,9 +115,8 @@ jobs:
for (const pr of filteredPRs) {
const prLabels = pr.labels.map(label => label.name.toLowerCase());
let prNote;
if (pr.user.login.includes("push-app-to-main[bot]")) {
const scriptName = pr.title;
try {
const { data: relatedIssues } = await github.rest.issues.listForRepo({
@@ -116,57 +132,34 @@ jobs:
if (matchingIssue) {
const issueAuthor = matchingIssue.user.login;
prNote = `- ${pr.title} @${issueAuthor} ([#${pr.number}](${pr.html_url}))`;
} else {
const issueAuthorUrl = `https://github.com/${issueAuthor}`;
prNote = `- ${pr.title} [@${issueAuthor}](${issueAuthorUrl}) ([#${pr.number}](${pr.html_url}))`;
}
else {
prNote = `- ${pr.title} ([#${pr.number}](${pr.html_url}))`;
}
} catch (error) {
console.error(`Error fetching related issues: ${error}`);
prNote = `- ${pr.title} ([#${pr.number}](${pr.html_url}))`;
}
} else {
prNote = `- ${pr.title} @${pr.user.login} ([#${pr.number}](${pr.html_url}))`;
}else{
prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
}
// Handle "new script" separately - always goes to New Scripts category
if (prLabels.includes("new script")) {
const newScriptCategory = categorizedPRs.find(category =>
category.title === "🆕 New Scripts" || category.labels.includes("new script")
);
category.title === "New Scripts" || category.labels.includes("new script"));
if (newScriptCategory) {
newScriptCategory.notes.push(prNote);
}
continue;
}
// For other PRs, check all applicable categories (can appear in multiple)
for (const category of categorizedPRs) {
// Skip "new script" and unlabelled categories
if (category.labels.includes("new script") || category.labels.length === 0) {
continue;
}
// Check if PR matches category requirements
let matchesCategory = false;
if (category.requireAllLabels) {
// All labels must be present
matchesCategory = category.labels.every(label => prLabels.includes(label));
} else {
// At least one label must be present
matchesCategory = category.labels.some(label => prLabels.includes(label));
}
// Check exclude labels
if (matchesCategory && category.excludeLabels.length > 0) {
const hasExcludedLabel = category.excludeLabels.some(label => prLabels.includes(label));
if (hasExcludedLabel) {
matchesCategory = false;
}
}
if (matchesCategory) {
// Try to find matching subcategory
let categorized = false;
const priorityCategories = categorizedPRs.slice();
for (const category of priorityCategories) {
if (categorized) break;
if (category.labels.some(label => prLabels.includes(label))) {
if (category.subCategories && category.subCategories.length > 0) {
const subCategory = category.subCategories.find(sub =>
sub.labels.some(label => prLabels.includes(label))
@@ -175,17 +168,18 @@ jobs:
if (subCategory) {
subCategory.notes.push(prNote);
} else {
// No matching subcategory, add to main category
category.notes.push(prNote);
}
} else {
// No subcategories, add to main category
category.notes.push(prNote);
}
categorized = true;
}
}
}
}
return categorizedPRs;
}

View File

@@ -1,59 +0,0 @@
name: Auto-Close Wrong Template Issues
on:
issues:
types: [opened]
jobs:
close_tteck_issues:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: ubuntu-latest
steps:
- name: Auto-close if wrong Template issue detected
uses: actions/github-script@v7
with:
script: |
const issue = context.payload.issue;
const content = `${issue.title}\n${issue.body}`;
const issueNumber = issue.number;
// Regex patterns (case-insensitive, flexible versioning)
const patterns = [
/Template\s+debian-13-standard_[\d.]+-[\d]+_amd64\.tar\.zst\s*\[(online|local)\]/i,
/Template\s+debian-13-standard_[\d.]+-[\d]+_amd64\.tar\.zst\s+is\s+missing\s+or\s+corrupted/i,
/Container\s+creation\s+failed\.?\s+Checking\s+if\s+template\s+is\s+corrupted\s+or\s+incomplete/i,
/Template\s+is\s+valid,\s+but\s+container\s+creation\s+still\s+failed/i,
/exit\s+code\s+0:\s+while\s+executing\s+command\s+bash\s+-c\s+"\$?\(curl\s+-fsSL\s+https:\/\/raw\.githubusercontent\.com\/[\w/-]+\/create_lxc\.sh\)"/i
];
const matched = patterns.some((regex) => regex.test(content));
if (matched) {
const message = `👋 Hello!
It looks like you are referencing a **container creation issue with a Debian 13 template** (e.g. \`debian-13-standard_13.x-x_amd64.tar.zst\`).
We receive many similar reports about this, and its not related to the scripts themselves but to **a Proxmox base template bug**.
Please refer to [discussion #8126](https://github.com/community-scripts/ProxmoxVE/discussions/8126) for details.
If your issue persists after following the guidance there, feel free to reopen this issue.
_This issue was automatically closed by a bot._`;
await github.rest.issues.createComment({
...context.repo,
issue_number: issueNumber,
body: message
});
await github.rest.issues.addLabels({
...context.repo,
issue_number: issueNumber,
labels: ["not planned"]
});
await github.rest.issues.update({
...context.repo,
issue_number: issueNumber,
state: "closed"
});
}

12
.github/workflows/frontend-cicd.yml generated vendored
View File

@@ -109,13 +109,15 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Setup Node
uses: actions/setup-node@v4
with:
bun-version: latest
node-version: "20"
cache: npm
cache-dependency-path: frontend/package-lock.json
- name: Install dependencies
run: bun install --frozen-lockfile
run: npm ci --prefer-offline --legacy-peer-deps
- name: Configure Next.js for pages
uses: actions/configure-pages@v5
@@ -123,7 +125,7 @@ jobs:
static_site_generator: next
- name: Build with Next.js
run: bun run build
run: npm run build
- name: Upload artifact
if: github.ref == 'refs/heads/main'

View File

@@ -10,476 +10,6 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-11-04
## 2025-11-03
### 🆕 New Scripts
- Donetick ([#8835](https://github.com/community-scripts/ProxmoxVE/pull/8835))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin version to 2.2.2 [@vhsdream](https://github.com/vhsdream) ([#8848](https://github.com/community-scripts/ProxmoxVE/pull/8848))
- Asterisk: handle errors in version retrieval commands [@MickLesk](https://github.com/MickLesk) ([#8844](https://github.com/community-scripts/ProxmoxVE/pull/8844))
- linkstack: fix wrong directory installation [@omertahaoztop](https://github.com/omertahaoztop) ([#8814](https://github.com/community-scripts/ProxmoxVE/pull/8814))
- Remove BOM from shebang lines in ct scripts [@MickLesk](https://github.com/MickLesk) ([#8833](https://github.com/community-scripts/ProxmoxVE/pull/8833))
- #### 💥 Breaking Changes
- Removed: MeTube [@MickLesk](https://github.com/MickLesk) ([#8830](https://github.com/community-scripts/ProxmoxVE/pull/8830))
## 2025-11-02
### 🚀 Updated Scripts
- Zigbee2MQTT: fix: pnpm workspace in update [@fkroeger](https://github.com/fkroeger) ([#8825](https://github.com/community-scripts/ProxmoxVE/pull/8825))
- #### 🐞 Bug Fixes
- Pangolin: Fix install and database migration [@tremor021](https://github.com/tremor021) ([#8828](https://github.com/community-scripts/ProxmoxVE/pull/8828))
- MediaManager: fix BASE_PATH error preventing main page load [@vhsdream](https://github.com/vhsdream) ([#8821](https://github.com/community-scripts/ProxmoxVE/pull/8821))
## 2025-11-01
### 🆕 New Scripts
- Pangolin ([#8809](https://github.com/community-scripts/ProxmoxVE/pull/8809))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- VictoriaMetrics: Fix release fetching for Victori Logs add-on [@tremor021](https://github.com/tremor021) ([#8807](https://github.com/community-scripts/ProxmoxVE/pull/8807))
- Immich: Pin version to 2.2.1 [@vhsdream](https://github.com/vhsdream) ([#8800](https://github.com/community-scripts/ProxmoxVE/pull/8800))
- jellyfin: fix: initial update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8784](https://github.com/community-scripts/ProxmoxVE/pull/8784))
### 🌐 Website
- frontend: chore: bump debian OS [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8798](https://github.com/community-scripts/ProxmoxVE/pull/8798))
## 2025-10-31
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Reitti: Fix missing data directory [@tremor021](https://github.com/tremor021) ([#8787](https://github.com/community-scripts/ProxmoxVE/pull/8787))
- omada: fix update script with mongodb 8 [@MickLesk](https://github.com/MickLesk) ([#8724](https://github.com/community-scripts/ProxmoxVE/pull/8724))
- Booklore: Fix port configuration for Nginx [@tremor021](https://github.com/tremor021) ([#8780](https://github.com/community-scripts/ProxmoxVE/pull/8780))
- Fix paths in grist.sh [@mrinaldi](https://github.com/mrinaldi) ([#8777](https://github.com/community-scripts/ProxmoxVE/pull/8777))
### 🌐 Website
- #### 📝 Script Information
- Removed errant ` from wireguard.json [@AndrewDragonCh](https://github.com/AndrewDragonCh) ([#8791](https://github.com/community-scripts/ProxmoxVE/pull/8791))
## 2025-10-30
### 🆕 New Scripts
- Livebook ([#8739](https://github.com/community-scripts/ProxmoxVE/pull/8739))
- Reitti ([#8736](https://github.com/community-scripts/ProxmoxVE/pull/8736))
- BentoPDF ([#8735](https://github.com/community-scripts/ProxmoxVE/pull/8735))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Open Archiver: Fix missing daemon-reload [@tremor021](https://github.com/tremor021) ([#8768](https://github.com/community-scripts/ProxmoxVE/pull/8768))
- Open Archiver: Fix missing command in update procedure [@tremor021](https://github.com/tremor021) ([#8765](https://github.com/community-scripts/ProxmoxVE/pull/8765))
- Kimai: Fix database connection string [@tremor021](https://github.com/tremor021) ([#8758](https://github.com/community-scripts/ProxmoxVE/pull/8758))
- Add explicit exit calls to update_script functions [@MickLesk](https://github.com/MickLesk) ([#8752](https://github.com/community-scripts/ProxmoxVE/pull/8752))
- kimai: Set global SQL mode to empty in install script [@MickLesk](https://github.com/MickLesk) ([#8747](https://github.com/community-scripts/ProxmoxVE/pull/8747))
- #### ✨ New Features
- Immich: Updates for v2.2.0 [@vhsdream](https://github.com/vhsdream) ([#8770](https://github.com/community-scripts/ProxmoxVE/pull/8770))
- Standardize update success messages in scripts [@MickLesk](https://github.com/MickLesk) ([#8757](https://github.com/community-scripts/ProxmoxVE/pull/8757))
- core: add function cleanup_lxc [@MickLesk](https://github.com/MickLesk) ([#8749](https://github.com/community-scripts/ProxmoxVE/pull/8749))
- Asterisk: add interactive version selection to installer [@MickLesk](https://github.com/MickLesk) ([#8726](https://github.com/community-scripts/ProxmoxVE/pull/8726))
### 🌐 Website
- #### 📝 Script Information
- Cronicle: Update default credentials [@tremor021](https://github.com/tremor021) ([#8720](https://github.com/community-scripts/ProxmoxVE/pull/8720))
## 2025-10-29
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Docker-VM: add workaround for libguestfs issue on Proxmox VE 9+ [@MickLesk](https://github.com/MickLesk) ([#8722](https://github.com/community-scripts/ProxmoxVE/pull/8722))
- Dispatcharr: add folders in installer / add more build ressources [@MickLesk](https://github.com/MickLesk) ([#8708](https://github.com/community-scripts/ProxmoxVE/pull/8708))
- LibreTranslate: bump torch version [@MickLesk](https://github.com/MickLesk) ([#8710](https://github.com/community-scripts/ProxmoxVE/pull/8710))
- #### ✨ New Features
- Archivebox: add Chromium and Node modules [@MickLesk](https://github.com/MickLesk) ([#8725](https://github.com/community-scripts/ProxmoxVE/pull/8725))
- #### 🔧 Refactor
- tracktor: refactor envfile [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8711](https://github.com/community-scripts/ProxmoxVE/pull/8711))
- Kimai / Ghost / ManageMyDamnLife: Switch to MariaDB [@MickLesk](https://github.com/MickLesk) ([#8712](https://github.com/community-scripts/ProxmoxVE/pull/8712))
## 2025-10-28
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update alpine-komodo.sh fixing missing pull images command [@glopes](https://github.com/glopes) ([#8689](https://github.com/community-scripts/ProxmoxVE/pull/8689))
- #### ✨ New Features
- Update SABnzbd. Include par2cmdline-turbo [@burgerga](https://github.com/burgerga) ([#8648](https://github.com/community-scripts/ProxmoxVE/pull/8648))
- jotty: Add more ENV VARS (disabled) [@vhsdream](https://github.com/vhsdream) ([#8688](https://github.com/community-scripts/ProxmoxVE/pull/8688))
- Bump bazarr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8677](https://github.com/community-scripts/ProxmoxVE/pull/8677))
- Update flaresolverr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8672](https://github.com/community-scripts/ProxmoxVE/pull/8672))
## 2025-10-27
### 🆕 New Scripts
- Dispatcharr ([#8658](https://github.com/community-scripts/ProxmoxVE/pull/8658))
- Garage | Alpine-Garage ([#8656](https://github.com/community-scripts/ProxmoxVE/pull/8656))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Add typescript and esbuild to browserless setup [@MickLesk](https://github.com/MickLesk) ([#8666](https://github.com/community-scripts/ProxmoxVE/pull/8666))
- jellyfin: fix: intel deps [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8657](https://github.com/community-scripts/ProxmoxVE/pull/8657))
## 2025-10-26
### 🆕 New Scripts
- ComfyUI ([#8633](https://github.com/community-scripts/ProxmoxVE/pull/8633))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- PiHole: Bump to Debian 12 [@MickLesk](https://github.com/MickLesk) ([#8649](https://github.com/community-scripts/ProxmoxVE/pull/8649))
- #### 🔧 Refactor
- Refactor: Mylar3 [@tremor021](https://github.com/tremor021) ([#8642](https://github.com/community-scripts/ProxmoxVE/pull/8642))
## 2025-10-25
### 🆕 New Scripts
- PatchMon ([#8632](https://github.com/community-scripts/ProxmoxVE/pull/8632))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- UrBackup Server: Fix install going interactive [@tremor021](https://github.com/tremor021) ([#8622](https://github.com/community-scripts/ProxmoxVE/pull/8622))
## 2025-10-24
### 🌐 Website
- #### 📝 Script Information
- Fix config path for BunkerWeb [@Nonolanlan1007](https://github.com/Nonolanlan1007) ([#8618](https://github.com/community-scripts/ProxmoxVE/pull/8618))
- Update logo URL in guardian.json [@HydroshieldMKII](https://github.com/HydroshieldMKII) ([#8615](https://github.com/community-scripts/ProxmoxVE/pull/8615))
## 2025-10-23
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Radicale: Update dependencies [@ilofX](https://github.com/ilofX) ([#8603](https://github.com/community-scripts/ProxmoxVE/pull/8603))
- Various Downgrades to Debian 12 (MySQL / OMW / Technitium) [@MickLesk](https://github.com/MickLesk) ([#8595](https://github.com/community-scripts/ProxmoxVE/pull/8595))
- MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589))
- #### 🔧 Refactor
- Refactor: Kavita + Updated tools.func (no-same-owner) [@MickLesk](https://github.com/MickLesk) ([#8594](https://github.com/community-scripts/ProxmoxVE/pull/8594))
- tools.func: update update_check messages for clarity [@MickLesk](https://github.com/MickLesk) ([#8588](https://github.com/community-scripts/ProxmoxVE/pull/8588))
## 2025-10-22
### 🚀 Updated Scripts
- Refactor: Full Change & Feature-Bump of tools.func [@MickLesk](https://github.com/MickLesk) ([#8409](https://github.com/community-scripts/ProxmoxVE/pull/8409))
- #### 🐞 Bug Fixes
- part-db: use helper-script php function [@MickLesk](https://github.com/MickLesk) ([#8575](https://github.com/community-scripts/ProxmoxVE/pull/8575))
- omada: remove static mongodb install [@MickLesk](https://github.com/MickLesk) ([#8577](https://github.com/community-scripts/ProxmoxVE/pull/8577))
## 2025-10-21
### 🆕 New Scripts
- rwMarkable: migrate from rwMarkable => jotty [@vhsdream](https://github.com/vhsdream) ([#8554](https://github.com/community-scripts/ProxmoxVE/pull/8554))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Guardian: Added validation before copying file and fix build command error [@HydroshieldMKII](https://github.com/HydroshieldMKII) ([#8553](https://github.com/community-scripts/ProxmoxVE/pull/8553))
- Unifi: Bump libssl debian version to new update [@fastiuk](https://github.com/fastiuk) ([#8547](https://github.com/community-scripts/ProxmoxVE/pull/8547))
- Alpine-TeamSpeak-Server: Fix release version fetching [@tremor021](https://github.com/tremor021) ([#8537](https://github.com/community-scripts/ProxmoxVE/pull/8537))
- jellyfin: fix opencl dep for ubuntu [@MickLesk](https://github.com/MickLesk) ([#8535](https://github.com/community-scripts/ProxmoxVE/pull/8535))
- #### ✨ New Features
- Refactor: ProjectSend [@tremor021](https://github.com/tremor021) ([#8552](https://github.com/community-scripts/ProxmoxVE/pull/8552))
### 🌐 Website
- #### 📝 Script Information
- Open Archiver: Fix application icon [@tremor021](https://github.com/tremor021) ([#8542](https://github.com/community-scripts/ProxmoxVE/pull/8542))
## 2025-10-20
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- jellyfin: fix: version conflict [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8520](https://github.com/community-scripts/ProxmoxVE/pull/8520))
- Paperless-AI: Increase CPU and RAM [@MickLesk](https://github.com/MickLesk) ([#8507](https://github.com/community-scripts/ProxmoxVE/pull/8507))
- #### ✨ New Features
- Enhance error message for container creation failure [@MickLesk](https://github.com/MickLesk) ([#8511](https://github.com/community-scripts/ProxmoxVE/pull/8511))
- Filebrowser-Quantum: change initial config to newer default [@MickLesk](https://github.com/MickLesk) ([#8497](https://github.com/community-scripts/ProxmoxVE/pull/8497))
- #### 💥 Breaking Changes
- Remove: GoMFT [@MickLesk](https://github.com/MickLesk) ([#8499](https://github.com/community-scripts/ProxmoxVE/pull/8499))
- #### 🔧 Refactor
- palmr: update node to v24 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8521](https://github.com/community-scripts/ProxmoxVE/pull/8521))
- jellyfin: add: intel dependencies [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8508](https://github.com/community-scripts/ProxmoxVE/pull/8508))
- Jellyfin: ensure libjemalloc is used / increase hdd space [@MickLesk](https://github.com/MickLesk) ([#8494](https://github.com/community-scripts/ProxmoxVE/pull/8494))
## 2025-10-19
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- rwMarkable: Increase RAM [@vhsdream](https://github.com/vhsdream) ([#8482](https://github.com/community-scripts/ProxmoxVE/pull/8482))
- changedetection: fix: update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8480](https://github.com/community-scripts/ProxmoxVE/pull/8480))
## 2025-10-18
### 🆕 New Scripts
- Open-Archiver ([#8452](https://github.com/community-scripts/ProxmoxVE/pull/8452))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Cronicle: Dont copy init.d service file [@tremor021](https://github.com/tremor021) ([#8451](https://github.com/community-scripts/ProxmoxVE/pull/8451))
- #### 🔧 Refactor
- Refactor: Nginx Proxy Manager [@MickLesk](https://github.com/MickLesk) ([#8453](https://github.com/community-scripts/ProxmoxVE/pull/8453))
## 2025-10-17
### 🚀 Updated Scripts
- Revert back to debian 12 template for various apps [@tremor021](https://github.com/tremor021) ([#8431](https://github.com/community-scripts/ProxmoxVE/pull/8431))
- #### 🐞 Bug Fixes
- [FIX]Pulse: replace policykit-1 with polkitd [@vhsdream](https://github.com/vhsdream) ([#8439](https://github.com/community-scripts/ProxmoxVE/pull/8439))
- MySpeed: Fix build step [@tremor021](https://github.com/tremor021) ([#8427](https://github.com/community-scripts/ProxmoxVE/pull/8427))
- #### ✨ New Features
- GLPI: Bump to Debian 13 base [@tremor021](https://github.com/tremor021) ([#8443](https://github.com/community-scripts/ProxmoxVE/pull/8443))
- #### 🔧 Refactor
- refactor: fix pve-scripts local install script [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#8418](https://github.com/community-scripts/ProxmoxVE/pull/8418))
### 🌐 Website
- #### 📝 Script Information
- PLANKA: Fix config path [@tremor021](https://github.com/tremor021) ([#8422](https://github.com/community-scripts/ProxmoxVE/pull/8422))
## 2025-10-16
### 🚀 Updated Scripts
- post-pve/post-pbs: Disable 'pve-enterprise' and 'ceph enterprise' repositories [@MickLesk](https://github.com/MickLesk) ([#8399](https://github.com/community-scripts/ProxmoxVE/pull/8399))
- #### 🐞 Bug Fixes
- fix: changedetection: fix for tsc and esbuild not found [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8407](https://github.com/community-scripts/ProxmoxVE/pull/8407))
- paperless-ngx: remove unneeded deps, use static ghostscript [@MickLesk](https://github.com/MickLesk) ([#8397](https://github.com/community-scripts/ProxmoxVE/pull/8397))
- UmlautAdaptarr: Revert back to bookworm repo [@tremor021](https://github.com/tremor021) ([#8392](https://github.com/community-scripts/ProxmoxVE/pull/8392))
- #### 🔧 Refactor
- Enhance nginx proxy manager install script [@MickLesk](https://github.com/MickLesk) ([#8400](https://github.com/community-scripts/ProxmoxVE/pull/8400))
## 2025-10-15
### 🆕 New Scripts
- LimeSurvey ([#8364](https://github.com/community-scripts/ProxmoxVE/pull/8364))
- Guardian ([#8365](https://github.com/community-scripts/ProxmoxVE/pull/8365))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update omada-install.sh to use correct libssl version [@punctualwesley](https://github.com/punctualwesley) ([#8380](https://github.com/community-scripts/ProxmoxVE/pull/8380))
- zigbee2mqtt: Use hardlinks for PNPM packages [@mikeage](https://github.com/mikeage) ([#8357](https://github.com/community-scripts/ProxmoxVE/pull/8357))
- #### ✨ New Features
- Bump Q to S-Scripts to Debian 13 (Trixie) [@MickLesk](https://github.com/MickLesk) ([#8366](https://github.com/community-scripts/ProxmoxVE/pull/8366))
- Bump O to P-Scripts to Debian 13 (Trixie) [@MickLesk](https://github.com/MickLesk) ([#8367](https://github.com/community-scripts/ProxmoxVE/pull/8367))
- Bump L to N-Scripts to Debian 13 (Trixie) [@MickLesk](https://github.com/MickLesk) ([#8368](https://github.com/community-scripts/ProxmoxVE/pull/8368))
- Immich: v2.1.0 - VectorChord 0.5+ support [@vhsdream](https://github.com/vhsdream) ([#8348](https://github.com/community-scripts/ProxmoxVE/pull/8348))
## 2025-10-14
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- MediaManager: Use managed Python 3.13 [@vhsdream](https://github.com/vhsdream) ([#8343](https://github.com/community-scripts/ProxmoxVE/pull/8343))
- #### 🔧 Refactor
- Update cockpit installation/update [@burgerga](https://github.com/burgerga) ([#8346](https://github.com/community-scripts/ProxmoxVE/pull/8346))
## 2025-10-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- GLPI: fix version 11 [@opastorello](https://github.com/opastorello) ([#8238](https://github.com/community-scripts/ProxmoxVE/pull/8238))
- Keycloak: Fix typo in update function [@tremor021](https://github.com/tremor021) ([#8316](https://github.com/community-scripts/ProxmoxVE/pull/8316))
- #### 🔧 Refactor
- fix: adjust configarr to use binaries [@BlackDark](https://github.com/BlackDark) ([#8254](https://github.com/community-scripts/ProxmoxVE/pull/8254))
## 2025-10-12
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: add Debian Testing repo [@vhsdream](https://github.com/vhsdream) ([#8310](https://github.com/community-scripts/ProxmoxVE/pull/8310))
- Tinyauth: Fix install issues for v4 [@tremor021](https://github.com/tremor021) ([#8309](https://github.com/community-scripts/ProxmoxVE/pull/8309))
## 2025-10-11
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Zabbix: various bugfixes agent1/agent2 [@MickLesk](https://github.com/MickLesk) ([#8294](https://github.com/community-scripts/ProxmoxVE/pull/8294))
- wger: fix python and pip install [@MickLesk](https://github.com/MickLesk) ([#8295](https://github.com/community-scripts/ProxmoxVE/pull/8295))
- searxng: add msgspec as dependency [@MickLesk](https://github.com/MickLesk) ([#8293](https://github.com/community-scripts/ProxmoxVE/pull/8293))
- keycloak: fix update check [@MickLesk](https://github.com/MickLesk) ([#8275](https://github.com/community-scripts/ProxmoxVE/pull/8275))
- komga: fix update check [@MickLesk](https://github.com/MickLesk) ([#8285](https://github.com/community-scripts/ProxmoxVE/pull/8285))
- #### ✨ New Features
- host-backup.sh: Added "ALL" option and include timestamp in backup filename [@stumpyofpain](https://github.com/stumpyofpain) ([#8276](https://github.com/community-scripts/ProxmoxVE/pull/8276))
- Komga: Update dependencies and enable RAR5 support [@tremor021](https://github.com/tremor021) ([#8257](https://github.com/community-scripts/ProxmoxVE/pull/8257))
### 🌐 Website
- Update script count in metadata and page content from 300+ to 400+ [@BramSuurdje](https://github.com/BramSuurdje) ([#8279](https://github.com/community-scripts/ProxmoxVE/pull/8279))
- Refactor CI workflow to use Bun instead of Node.js. [@BramSuurdje](https://github.com/BramSuurdje) ([#8277](https://github.com/community-scripts/ProxmoxVE/pull/8277))
## 2025-10-10
### 🆕 New Scripts
- Prometheus-Blackbox-Exporter ([#8255](https://github.com/community-scripts/ProxmoxVE/pull/8255))
- SonarQube ([#8256](https://github.com/community-scripts/ProxmoxVE/pull/8256))
### 🚀 Updated Scripts
- Unifi installation script fix [@knightfall](https://github.com/knightfall) ([#8242](https://github.com/community-scripts/ProxmoxVE/pull/8242))
- #### 🐞 Bug Fixes
- Docmost: Fix env variables [@tremor021](https://github.com/tremor021) ([#8244](https://github.com/community-scripts/ProxmoxVE/pull/8244))
- #### 🔧 Refactor
- Harmonize Service MSG-Blocks [@MickLesk](https://github.com/MickLesk) ([#8233](https://github.com/community-scripts/ProxmoxVE/pull/8233))
## 2025-10-09
### 🆕 New Scripts
- New Script: rwMarkable ([#8215](https://github.com/community-scripts/ProxmoxVE/pull/8215))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Alpine-Tinyauth: Fixes for v4 release [@tremor021](https://github.com/tremor021) ([#8225](https://github.com/community-scripts/ProxmoxVE/pull/8225))
- #### ✨ New Features
- Bump U-T Scripts to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#8227](https://github.com/community-scripts/ProxmoxVE/pull/8227))
## 2025-10-08
### 🚀 Updated Scripts
- MyIP: Increase resources [@tremor021](https://github.com/tremor021) ([#8199](https://github.com/community-scripts/ProxmoxVE/pull/8199))
- #### 🐞 Bug Fixes
- Wireguard: Fix sysctl for Trixie [@tremor021](https://github.com/tremor021) ([#8209](https://github.com/community-scripts/ProxmoxVE/pull/8209))
- Update prompt for Stirling-PDF login option [@EarMaster](https://github.com/EarMaster) ([#8196](https://github.com/community-scripts/ProxmoxVE/pull/8196))
- #### 🔧 Refactor
- Refactor: Fixed incorrect tag variables in several scripts [@tremor021](https://github.com/tremor021) ([#8182](https://github.com/community-scripts/ProxmoxVE/pull/8182))
- ZeroTier One: Fix install output [@tremor021](https://github.com/tremor021) ([#8179](https://github.com/community-scripts/ProxmoxVE/pull/8179))
## 2025-10-07
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Alpine-Caddy: remove functions [@MickLesk](https://github.com/MickLesk) ([#8177](https://github.com/community-scripts/ProxmoxVE/pull/8177))
- Palmr: Fix NodeJS setup [@tremor021](https://github.com/tremor021) ([#8173](https://github.com/community-scripts/ProxmoxVE/pull/8173))
- GLPI: Fix UNBOUND variable [@tremor021](https://github.com/tremor021) ([#8167](https://github.com/community-scripts/ProxmoxVE/pull/8167))
- BookLore: upgrade to Java 25/Gradle 9 [@vhsdream](https://github.com/vhsdream) ([#8165](https://github.com/community-scripts/ProxmoxVE/pull/8165))
- Alpine-Wireguard: Fix for update failing in normal mode [@tremor021](https://github.com/tremor021) ([#8160](https://github.com/community-scripts/ProxmoxVE/pull/8160))
- #### ✨ New Features
- Bump W-V Scripts to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#8176](https://github.com/community-scripts/ProxmoxVE/pull/8176))
- Bump Z-Y Scripts to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#8174](https://github.com/community-scripts/ProxmoxVE/pull/8174))
- Docmost: Fixes and updates [@tremor021](https://github.com/tremor021) ([#8158](https://github.com/community-scripts/ProxmoxVE/pull/8158))
## 2025-10-06
### 🚀 Updated Scripts
@@ -495,12 +25,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- Navidrome: bump to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#8139](https://github.com/community-scripts/ProxmoxVE/pull/8139))
- pve-scripts-local: add update function [@MickLesk](https://github.com/MickLesk) ([#8138](https://github.com/community-scripts/ProxmoxVE/pull/8138))
### 🌐 Website
- #### 📝 Script Information
- Update config_path for Zigbee2MQTT configuration [@MickLesk](https://github.com/MickLesk) ([#8153](https://github.com/community-scripts/ProxmoxVE/pull/8153))
## 2025-10-05
### 🚀 Updated Scripts

View File

@@ -66,7 +66,7 @@ function update_script() {
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleanup Completed"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -32,19 +32,18 @@ function update_script() {
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ -f /opt/actualbudget-data/config.json ]]; then
if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then
msg_info "Stopping Service"
msg_info "Stopping ${APP}"
systemctl stop actualbudget
msg_ok "Stopped Service"
msg_ok "${APP} Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
$STD npm update -g @actual-app/sync-server
echo "${RELEASE}" >/opt/actualbudget_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start actualbudget
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Restarted ${APP}"
else
msg_info "${APP} is already up to date"
fi
@@ -52,7 +51,7 @@ function update_script() {
msg_info "Old Installation Found, you need to migrate your data and recreate to a new container"
msg_info "Please follow the instructions on the ${APP} website to migrate your data"
msg_info "https://actualbudget.org/docs/backup-restore/backup"
exit
exit 1
fi
exit
}

View File

@@ -73,7 +73,7 @@ function update_script() {
msg_info "Cleaning Up"
rm -rf /opt/adventurelog-backup
msg_ok "Cleaned"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -39,14 +39,15 @@ function update_script() {
curl -fsSL "$RELEASE" -o $(basename "$RELEASE")
$STD unzip -o Agent_Linux64*.zip
chmod +x ./Agent
echo $RELEASE >~/.agentdvr
echo $RELEASE > ~/.agentdvr
rm -rf Agent_Linux64*.zip
msg_ok "Updated $APP"
msg_info "Starting service"
systemctl start AgentDVR
msg_ok "Service started"
msg_ok "Updated successfully!"
msg_ok "Updated $APP successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi

View File

@@ -32,7 +32,7 @@ function update_script() {
msg_info "Restarting AdGuard Home"
$STD rc-service adguardhome restart
msg_ok "Restarted AdGuard Home"
msg_ok "Updated successfully!"
exit 0
}

View File

@@ -24,7 +24,7 @@ function update_script() {
if [[ ! -d /opt/bitmagnet ]]; then
msg_error "No ${APP} Installation Found!"
exit
exit 1
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then
@@ -71,10 +71,11 @@ function update_script() {
rm -f "$temp_file"
echo "${RELEASE}" >/opt/bitmagnet_version.txt
$STD service bitmagnet start
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}

View File

@@ -21,6 +21,8 @@ catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /etc/caddy ]]; then
msg_error "No ${APP} Installation Found!"
exit
@@ -32,8 +34,7 @@ function update_script() {
msg_info "Restarting Caddy"
rc-service caddy restart
msg_ok "Restarted Caddy"
msg_ok "Updated successfully!"
exit 0
exit
}
start

View File

@@ -37,12 +37,10 @@ function update_script() {
case $CHOICE in
1)
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit
;;
esac
done
exit 0
}
start

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting Forgejo"
$STD rc-service forgejo restart
msg_ok "Restarted Forgejo"
msg_ok "Updated successfully!"
exit 0
}

View File

@@ -1,63 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://garagehq.deuxfleurs.fr/
APP="Alpine-Garage"
var_tags="${var_tags:-alpine;object-storage}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-5}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
if [[ ! -f /usr/local/bin/garage ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
msg_info "Stopping Service"
rc-service garage stop || true
msg_ok "Stopped Service"
msg_info "Backing Up Data"
cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
msg_ok "Backed Up Data"
msg_info "Updating Garage"
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
chmod +x /usr/local/bin/garage
echo "${GITEA_RELEASE}" >~/.garage
msg_ok "Updated Garage"
msg_info "Starting Service"
rc-service garage start || rc-service garage restart
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. Garage is already at ${GITEA_RELEASE}"
fi
exit 0
}
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}"

View File

@@ -24,7 +24,7 @@ function update_script() {
if [[ ! -d /opt/gatus ]]; then
msg_error "No ${APP} Installation Found!"
exit
exit 1
fi
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then
@@ -44,10 +44,11 @@ function update_script() {
rm -f "$temp_file"
echo "${RELEASE}" >/opt/gatus_version.txt
$STD service gatus start
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}

View File

@@ -32,8 +32,6 @@ function update_script() {
msg_info "Restarting Gitea"
rc-service gitea restart
msg_ok "Restarted Gitea"
msg_ok "Updated successfully!"
exit 0
}
start

View File

@@ -40,24 +40,20 @@ function update_script() {
case $CHOICE in
1)
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit
;;
2)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
service grafana restart
msg_ok "Allowed listening on all interfaces!"
exit
;;
3)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
service grafana restart
msg_ok "Allowed listening only on ${LXCIP}!"
exit
;;
esac
done
exit 0
}
start

View File

@@ -24,7 +24,7 @@ function update_script() {
if [ ! -d /usr/share/nginx/html ]; then
msg_error "No ${APP} Installation Found!"
exit
exit 1
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/sharevb/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
@@ -37,10 +37,11 @@ function update_script() {
cp -r /tmp/dist/* /usr/share/nginx/html
rm -rf /tmp/dist
rm -f it-tools.zip
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}

View File

@@ -22,14 +22,14 @@ catch_errors
function update_script() {
[[ -d /opt/komodo ]] || {
msg_error "No ${APP} Installation Found!"
exit
exit 1
}
msg_info "Updating ${APP}"
COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
if [[ -z "$COMPOSE_FILE" ]]; then
msg_error "No valid compose file found in /opt/komodo!"
exit
exit 1
fi
COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
@@ -38,25 +38,23 @@ function update_script() {
echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
echo -e "${YW}Please follow the migration guide:${CL}"
echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
exit
exit 1
fi
BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
exit
exit 1
}
GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}"
if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then
msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!"
mv "$BACKUP_FILE" "$COMPOSE_FILE"
exit
exit 1
fi
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
msg_ok "Updated Alpine-Komodo"
msg_ok "Updated successfully!"
exit 0
msg_ok "Updated ${APP}"
exit
}
start

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting MariaDB"
$STD rc-service mariadb restart
msg_ok "Restarted MariaDB"
msg_ok "Updated successfully!"
exit 0
}

View File

@@ -50,7 +50,6 @@ function update_script() {
;;
esac
done
exit 0
}
start

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Updating Node-RED"
$STD npm install -g --unsafe-perm node-red
msg_ok "Updated Node-RED"
msg_ok "Updated successfully!"
exit 0
}

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting PostgreSQL"
$STD rc-service postgresql restart
msg_ok "Restarted PostgreSQL"
msg_ok "Updated successfully!"
exit 0
}

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting Prometheus"
$STD rc-service prometheus restart
msg_ok "Restarted Prometheus"
msg_ok "Updated successfully!"
exit 0
}

View File

@@ -24,7 +24,7 @@ function update_script() {
header_info
if [ ! -d /opt/rclone ]; then
msg_error "No ${APP} Installation Found!"
exit
exit 1
fi
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then
@@ -34,10 +34,11 @@ function update_script() {
$STD unzip -o "$temp_file" '*/**' -d /opt/rclone
rm -f "$temp_file"
echo "${RELEASE}" >/opt/rclone_version.txt
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}

View File

@@ -42,7 +42,7 @@ function update_script() {
msg_info "Updating Redis"
apk update && apk upgrade redis
rc-service redis restart
msg_ok "Updated successfully!"
msg_ok "Redis updated successfully!"
exit
;;
2)

View File

@@ -32,17 +32,18 @@ function update_script() {
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_info "Stopping Service"
msg_info "Stopping ${APP} Service"
$STD rc-service redlib stop
msg_ok "Stopped Service"
msg_ok "Stopped ${APP} Service"
fetch_and_deploy_gh_release "redlib" "redlib-org/redlib" "prebuild" "latest" "/opt/redlib" "redlib-x86_64-unknown-linux-musl.tar.gz"
msg_info "Starting Service"
msg_info "Starting ${APP} Service"
$STD rc-service redlib start
msg_ok "Started Service"
msg_ok "Updated successfully!"
exit 0
msg_ok "Started ${APP} Service"
msg_ok "Update Successful"
exit
}
start

View File

@@ -23,7 +23,7 @@ function update_script() {
header_info
if [[ ! -d /opt/rustdesk-server ]]; then
msg_error "No ${APP} Installation Found!"
exit
exit 1
fi
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')

View File

@@ -31,8 +31,8 @@ function update_script() {
msg_info "Restarting Syncthing"
$STD rc-service syncthing restart
msg_ok "Restarted Syncthing"
msg_ok "Updated successfully!"
exit 0
exit 1
}
start

View File

@@ -24,10 +24,10 @@ function update_script() {
if [[ ! -d /opt/teamspeak-server ]]; then
msg_error "No ${APP} Installation Found!"
exit
exit 1
fi
set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | head -1) && set -o pipefail
set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.teamspeak3-server_linux_amd64-([0-9]+.[0-9]+.[0-9]+)./\1/p' | head -1) && set -o pipefail
if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then
msg_info "Updating ${APP} LXC"
@@ -40,10 +40,11 @@ function update_script() {
rm -rf teamspeak3-server_linux_amd64
echo "${RELEASE}" >~/.teamspeak-server
$STD service teamspeak start
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}

View File

@@ -22,30 +22,26 @@ catch_errors
function update_script() {
if [[ ! -d /opt/tinyauth ]]; then
msg_error "No ${APP} Installation Found!"
exit
exit 1
fi
msg_info "Updating packages"
$STD apk -U upgrade
msg_ok "Updated packages"
RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat ~/.tinyauth 2>/dev/null)" ] || [ ! -f ~/.tinyauth ]; then
msg_info "Stopping Service"
$STD service tinyauth stop
msg_ok "Service Stopped"
msg_info "Updating Tinyauth"
RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/tinyauth_version.txt)" ] || [ ! -f /opt/tinyauth_version.txt ]; then
$STD service tinyauth stop
rm -f /opt/tinyauth/tinyauth
curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
chmod +x /opt/tinyauth/tinyauth
echo "${RELEASE}" >~/.tinyauth
msg_ok "Updated Tinyauth"
echo "${RELEASE}" >/opt/tinyauth_version.txt
msg_info "Restarting Tinyauth"
$STD service tinyauth start
msg_ok "Restarted Tinyauth"
msg_ok "Updated successfully!"
msg_ok "Updated Tinyauth"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi

View File

@@ -25,11 +25,10 @@ function update_script() {
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_info "Updating traefik from edge"
msg_info "Upgrading traefik from edge"
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
msg_ok "Updated traefik"
msg_ok "Updated successfully!"
exit 0
msg_ok "Upgraded traefik"
exit
}
start

View File

@@ -31,8 +31,8 @@ function update_script() {
msg_info "Restarting Transmission"
$STD rc-service transmission-daemon restart
msg_ok "Restarted Transmission"
msg_ok "Updated successfully!"
exit 0
exit 1
}
start

View File

@@ -32,10 +32,11 @@ function update_script() {
if [[ -d /etc/wgdashboard/src ]]; then
msg_info "update WGDashboard"
cd /etc/wgdashboard/src
echo "y" | ./wgd.sh update >/dev/null 2>&1
$STD echo "y" | ./wgd.sh update
$STD ./wgd.sh start
msg_ok "WGDashboard updated"
fi
exit 0
}

View File

@@ -29,8 +29,7 @@ function update_script() {
header_info
if [ "$UPD" == "1" ]; then
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit 0
exit
fi
}

View File

@@ -29,9 +29,9 @@ function update_script() {
fi
RELEASE="$(curl -fsSL https://dlcdn.apache.org/tika/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1)"
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
msg_info "Stopping ${APP}"
systemctl stop apache-tika
msg_ok "Stopped Service"
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to v${RELEASE}"
cd /opt/apache-tika
@@ -41,13 +41,13 @@ function update_script() {
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start apache-tika
msg_ok "Started Service"
msg_ok "Started ${APP}"
msg_info "Cleaning Up"
rm -rf /opt/apache-tika/tika-server-standard-prev-version.jar
msg_ok "Cleanup Completed"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi

View File

@@ -31,7 +31,6 @@ function update_script() {
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -28,18 +28,12 @@ function update_script() {
exit
fi
NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" setup_nodejs
NODE_VERSION="22" setup_nodejs
PYTHON_VERSION="3.13" setup_uv
if ! dpkg -l | grep -q "^ii chromium "; then
msg_info "Installing System Dependencies"
$STD apt-get install -y chromium
msg_ok "Installed System Dependencies"
fi
msg_info "Stopping Service"
msg_info "Stopping ArchiveBox"
systemctl stop archivebox
msg_ok "Stopped Service"
msg_ok "Stopped ArchiveBox"
msg_info "Upgrading Playwright"
$STD uv pip install playwright --system
@@ -52,10 +46,11 @@ function update_script() {
sudo -u archivebox archivebox init
msg_ok "Updated ArchiveBox"
msg_info "Starting Service"
msg_info "Starting ArchiveBox"
systemctl start archivebox
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started ArchiveBox"
msg_ok "Updated Successfully"
exit
}

View File

@@ -37,7 +37,7 @@ function update_script() {
msg_info "Starting service"
systemctl start argus
msg_ok "Service started"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -31,7 +31,6 @@ function update_script() {
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -32,7 +32,6 @@ function update_script() {
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Source: https://www.authelia.com/
APP="Authelia"
var_tags="${var_tags:-authenticator}"
TAGS=""
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
@@ -25,7 +25,7 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /etc/authelia/ ]]; then
if [[ ! -d "/etc/authelia/" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
@@ -40,7 +40,7 @@ function update_script() {
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup Completed"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -29,16 +29,16 @@ function update_script() {
fi
if check_for_gh_release "autobrr" "autobrr/autobrr"; then
msg_info "Stopping Service"
msg_info "Stopping ${APP} LXC"
systemctl stop autobrr
msg_ok "Stopped Service"
msg_ok "Stopped ${APP} LXC"
fetch_and_deploy_gh_release "autobrr" "autobrr/autobrr" "prebuild" "latest" "/usr/local/bin" "autobrr_*_linux_x86_64.tar.gz"
msg_info "Starting Service"
msg_info "Starting ${APP} LXC"
systemctl start autobrr
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started ${APP} LXC"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -68,7 +68,7 @@ function update_script() {
systemctl start autocaliweb metadata-change-detector acw-ingest-service acw-auto-zipper
msg_ok "Started Services"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -61,7 +61,7 @@ function update_script() {
systemctl start uwsgi
systemctl start nginx
msg_ok "Services Started"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -29,9 +29,9 @@ function update_script() {
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/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 Service"
msg_info "Stopping ${APP}"
systemctl stop backrest
msg_ok "Stopped Service"
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to ${RELEASE}"
temp_file=$(mktemp)
@@ -42,14 +42,14 @@ function update_script() {
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start backrest
msg_ok "Started Service"
msg_ok "Started ${APP}"
msg_info "Cleaning up"
rm -f "$temp_file"
msg_ok "Cleaned up"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi

View File

@@ -56,7 +56,7 @@ function update_script() {
msg_info "Cleaning up"
rm -rf /opt/baikal-backup
msg_ok "Cleaned"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -102,7 +102,7 @@ function update_script() {
msg_info "Starting Meilisearch"
systemctl start meilisearch
msg_ok "Started Meilisearch"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -54,7 +54,7 @@ function update_script() {
msg_info "Cleaning up"
rm -r /opt/barcodebuddy-backup
msg_ok "Cleaned"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -28,29 +28,16 @@ function update_script() {
exit
fi
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
msg_info "Stopping Service"
systemctl stop bazarr
msg_ok "Stopped Service"
PYTHON_VERSION="3.12" setup_uv
PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
msg_info "Setup Bazarr"
mkdir -p /var/lib/bazarr/
chmod 775 /opt/bazarr /var/lib/bazarr/
if [[ ! -d /opt/bazarr/venv/ ]]; then
$STD uv venv /opt/bazarr/venv --python 3.12
sed -i "s|ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py|ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py|g" /etc/systemd/system/bazarr.service
systemctl daemon-reload
fi
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
$STD uv pip install -r /opt/bazarr/requirements.txt --system
msg_ok "Setup Bazarr"
msg_info "Starting Service"
systemctl start bazarr
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -27,19 +27,19 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping Service"
msg_info "Stopping $APP"
systemctl stop beszel-hub
msg_info "Stopped Service"
msg_ok "Stopped $APP"
msg_info "Updating $APP"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated $APP"
msg_info "Starting Service"
msg_info "Starting $APP"
systemctl start beszel-hub
msg_ok "Successfully started $APP"
msg_ok "Updated successfully!"
msg_ok "Update Successful"
exit
}

View File

@@ -74,7 +74,7 @@ function update_script() {
msg_info "Starting Service"
systemctl start bitmagnet-web
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -49,7 +49,7 @@ function update_script() {
msg_info "Starting Service"
systemctl start blocky
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -29,9 +29,9 @@ function update_script() {
exit
fi
if check_for_gh_release "booklore" "booklore-app/BookLore"; then
msg_info "Stopping Service"
msg_info "Stopping $APP"
systemctl stop booklore
msg_info "Stopped Service"
msg_ok "Stopped $APP"
msg_info "backup old install"
mv /opt/booklore /opt/booklore_bak
@@ -45,8 +45,6 @@ function update_script() {
$STD npm run build --configuration=production
msg_ok "Built Frontend"
JAVA_VERSION="25" setup_java
msg_info "Building Backend"
cd /opt/booklore/booklore-api
APP_VERSION=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
@@ -56,17 +54,17 @@ function update_script() {
JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1)
if [[ -z "$JAR_PATH" ]]; then
msg_error "Backend JAR not found"
exit
exit 1
fi
cp "$JAR_PATH" /opt/booklore/dist/app.jar
msg_ok "Built Backend"
msg_info "Starting Service"
msg_info "Starting $APP"
systemctl start booklore
systemctl reload nginx
rm -rf /opt/booklore_bak
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started $APP"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -66,7 +66,7 @@ function update_script() {
msg_info "Cleaning Up"
rm -rf /opt/bookstack-backup
msg_ok "Cleaned"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -41,7 +41,7 @@ EOF
apt-get install -y --allow-downgrades bunkerweb=${RELEASE}
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi

View File

@@ -54,9 +54,8 @@ function update_script() {
msg_error "PLEASE MAKE A BACKUP FIRST!"
exit
fi
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}
start

View File

@@ -30,7 +30,6 @@ function update_script() {
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated successfully!"
msg_ok "Updated $APP LXC"
if command -v xcaddy >/dev/null 2>&1; then
@@ -44,7 +43,6 @@ function update_script() {
rm -f "xcaddy_${VERSION}_linux_amd64.deb"
$STD xcaddy build
msg_ok "Updated xCaddy"
msg_ok "Updated successfully!"
fi
exit
}

View File

@@ -27,9 +27,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping Service"
msg_info "Stopping ${APP}"
systemctl stop cps
msg_ok "Stopped Service"
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP}"
cd /opt/kepubify
@@ -104,7 +104,7 @@ function update_script() {
;;
*)
echo "Unsupported item $CHOICE!" >&2
exit
exit 1
;;
esac
done
@@ -121,10 +121,10 @@ function update_script() {
$STD pip install --upgrade calibreweb
fi
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start cps
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
exit
}

View File

@@ -31,7 +31,6 @@ function update_script() {
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -57,7 +57,6 @@ function update_script() {
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force msedge
$STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit
$STD npm install --prefix /opt/browserless esbuild typescript ts-node @types/node --save-dev
$STD npm run build --prefix /opt/browserless
$STD npm run build:function --prefix /opt/browserless
$STD npm prune production --prefix /opt/browserless
@@ -68,7 +67,7 @@ function update_script() {
fi
systemctl restart changedetection
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
exit
}

View File

@@ -40,7 +40,7 @@ function update_script() {
$STD omd cleanup
rm -rf /opt/checkmk.deb
msg_ok "Updated ${APP}"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
exit
}

View File

@@ -28,16 +28,16 @@ function update_script() {
exit
fi
if check_for_gh_release "cleanuparr" "Cleanuparr/Cleanuparr"; then
msg_info "Stopping Service"
msg_info "Stopping ${APP}"
systemctl stop cleanuparr
msg_ok "Stopped Service"
msg_ok "Stopped ${APP}"
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip"
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start cleanuparr
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -31,7 +31,6 @@ function update_script() {
$STD apt update
$STD apt -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -29,16 +29,16 @@ function update_script() {
exit
fi
if check_for_gh_release "cloudreve" "cloudreve/cloudreve"; then
msg_info "Stopping Service"
msg_info "Stopping $APP"
systemctl stop cloudreve
msg_info "Stopped Service"
msg_ok "Stopped $APP"
fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz"
msg_info "Starting Service"
msg_info "Starting $APP"
systemctl start cloudreve
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started $APP"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -27,13 +27,73 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
"1" "Update LXC" ON \
"2" "Install cockpit-file-sharing" OFF \
"3" "Install cockpit-identities" OFF \
"4" "Install cockpit-navigator" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated ${APP} LXC"
msg_ok "Updated successfully!"
exit
fi
if [ "$UPD" == "2" ]; then
msg_info "Installing dependencies (patience)"
$STD apt install -y \
attr \
nfs-kernel-server \
samba \
samba-common-bin \
winbind \
gawk
msg_ok "Installed dependencies"
msg_info "Installing Cockpit file sharing"
URL=$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
FILE=$(basename "$URL")
curl -fsSL "$URL" -o "$FILE"
$STD dpkg -i "$FILE" || $STD apt install -f -y
rm -f "$FILE"
msg_ok "Installed Cockpit file sharing"
exit
fi
if [ "$UPD" == "3" ]; then
msg_info "Installing dependencies (patience)"
$STD apt install -y \
psmisc \
samba \
samba-common-bin
msg_ok "Installed dependencies"
msg_info "Installing Cockpit identities"
URL=$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
FILE=$(basename "$URL")
curl -fsSL "$URL" -o "$FILE"
$STD dpkg -i "$FILE" || $STD apt install -f -y
rm -f "$FILE"
msg_ok "Installed Cockpit identities"
exit
fi
if [ "$UPD" == "4" ]; then
msg_info "Installing dependencies"
$STD apt install -y \
rsync \
zip
msg_ok "Installed dependencies"
msg_info "Installing Cockpit navigator"
URL=$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
FILE=$(basename "$URL")
curl -fsSL "$URL" -o "$FILE"
$STD dpkg -i "$FILE" || $STD apt install -f -y
rm -f "$FILE"
msg_ok "Installed Cockpit navigator"
exit
fi
}
start

View File

@@ -1,42 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: jdacode
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/comfyanonymous/ComfyUI
APP="ComfyUI"
var_tags="${var_tags:-ai}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-8192}"
var_disk="${var_disk:-25}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/${APP} ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "To update use the ${APP} Manager."
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}:8188${CL}"

View File

@@ -29,9 +29,9 @@ function update_script() {
exit
fi
if check_for_gh_release "commafeed" "Athou/commafeed"; then
msg_info "Stopping Service"
msg_info "Stopping ${APP}"
systemctl stop commafeed
msg_ok "Stopped Service"
msg_ok "Stopped ${APP}"
if ! [[ $(dpkg -s rsync 2>/dev/null) ]]; then
msg_info "Installing Dependencies"
@@ -54,10 +54,10 @@ function update_script() {
msg_ok "Restored data"
fi
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start commafeed
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -10,7 +10,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -28,20 +28,27 @@ function update_script() {
exit
fi
if check_for_gh_release "configarr" "raydak-labs/configarr"; then
msg_info "Stopping Service"
msg_info "Stopping $APP"
systemctl stop configarr-task.timer
msg_ok "Stopped Service"
msg_ok "Stopped $APP"
msg_info "Updating $APP"
mkdir -p /opt/backup/
mv /opt/configarr/{config.yml,secrets.yml,.env} /opt/backup/
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr" "prebuild" "latest" "/opt/configarr" "configarr-linux-x64.tar.xz"
mv /opt/backup/{config.yml,secrets.yml,.env} /opt/configarr/
rm -rf /opt/backup
mv /opt/configarr/{config.yml,secrets.yml,.env} "/opt/backup/"
rm -rf /opt/configarr
fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr"
mv /opt/backup/{config.yml,secrets.yml,.env} "/opt/configarr/"
cd /opt/configarr
$STD pnpm install
$STD pnpm run build
msg_ok "Updated $APP"
msg_info "Starting Service"
msg_info "Starting $APP"
systemctl start configarr-task.timer
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started configarr"
rm -rf /opt/backup
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -28,9 +28,9 @@ function update_script() {
exit
fi
if check_for_gh_release "ConvertX" "C4illin/ConvertX"; then
msg_info "Stopping Service"
msg_info "Stopping $APP"
systemctl stop convertx
msg_info "Stopped Service"
msg_ok "Stopped $APP"
msg_info "Move data-Folder"
if [[ -d /opt/convertx/data ]]; then
@@ -48,10 +48,10 @@ function update_script() {
$STD bun install
msg_ok "Updated $APP"
msg_info "Starting Service"
msg_info "Starting $APP"
systemctl start convertx
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started $APP"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -28,7 +28,6 @@ function update_script() {
exit
fi
msg_ok "${APP} updates itself automatically!"
exit
}
start

View File

@@ -67,7 +67,7 @@ function update_script() {
systemctl start crafty-controller
msg_ok "Started Crafty-Controller"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi

View File

@@ -61,7 +61,11 @@ function update_script() {
$STD node bin/build.js dist
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
$STD /opt/cronicle/bin/control.sh start
$STD cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled
chmod 775 /etc/init.d/cronicled
$STD update-rc.d cronicled defaults
msg_ok "Installed Cronicle Worker"
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
exit
fi

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Updating ${APP} from version v${current_version} to v${latest_version}"
$STD npm install -g cross-seed@latest
systemctl restart cross-seed
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "${APP} is already at v${current_version}"
fi

View File

@@ -29,9 +29,9 @@ function update_script() {
exit
fi
if check_for_gh_release "cryptpad" "cryptpad/cryptpad"; then
msg_info "Stopping Service"
msg_info "Stopping $APP"
systemctl stop cryptpad
msg_info "Stopped Service"
msg_ok "Stopped $APP"
msg_info "Backing up configuration"
[ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/
@@ -50,10 +50,10 @@ function update_script() {
mv /opt/config.js /opt/cryptpad/config/
msg_ok "Configuration restored"
msg_info "Starting Service"
msg_info "Starting $APP"
systemctl start cryptpad
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started $APP"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -31,7 +31,6 @@ function update_script() {
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -28,9 +28,9 @@ function update_script() {
exit
fi
if check_for_gh_release "dashy" "Lissy93/dashy"; then
msg_info "Stopping Service"
msg_info "Stopping ${APP}"
systemctl stop dashy
msg_ok "Stopped Service"
msg_ok "Stopped ${APP}"
msg_info "Backing up conf.yml"
cd ~
@@ -62,7 +62,7 @@ function update_script() {
msg_info "Starting Dashy"
systemctl start dashy
msg_ok "Started Dashy"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -31,7 +31,6 @@ function update_script() {
$STD apt update
$STD apt -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -31,7 +31,6 @@ function update_script() {
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -31,7 +31,6 @@ function update_script() {
$STD apt-get update
pip3 install deluge[all] --upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -1,136 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: ekke85 | MickLesk
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Dispatcharr/Dispatcharr
APP="Dispatcharr"
var_tags="${var_tags:-media;arr}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d "/opt/dispatcharr" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
setup_uv
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "Dispatcharr" "Dispatcharr/Dispatcharr"; then
msg_info "Stopping Services"
systemctl stop dispatcharr-celery
systemctl stop dispatcharr-celerybeat
systemctl stop dispatcharr-daphne
systemctl stop dispatcharr
msg_ok "Stopped Services"
msg_info "Creating Backup"
BACKUP_FILE="/opt/dispatcharr_backup_$(date +%F_%H-%M-%S).tar.gz"
if [[ -f /opt/dispatcharr/.env ]]; then
cp /opt/dispatcharr/.env /tmp/dispatcharr.env.backup
fi
if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then
cp /opt/dispatcharr/start-gunicorn.sh /tmp/start-gunicorn.sh.backup
fi
if [[ -f /opt/dispatcharr/start-celery.sh ]]; then
cp /opt/dispatcharr/start-celery.sh /tmp/start-celery.sh.backup
fi
if [[ -f /opt/dispatcharr/start-celerybeat.sh ]]; then
cp /opt/dispatcharr/start-celerybeat.sh /tmp/start-celerybeat.sh.backup
fi
if [[ -f /opt/dispatcharr/start-daphne.sh ]]; then
cp /opt/dispatcharr/start-daphne.sh /tmp/start-daphne.sh.backup
fi
if [[ -f /opt/dispatcharr/.env ]]; then
set -o allexport
source /opt/dispatcharr/.env
set +o allexport
if [[ -n "$POSTGRES_DB" ]] && [[ -n "$POSTGRES_USER" ]] && [[ -n "$POSTGRES_PASSWORD" ]]; then
PGPASSWORD=$POSTGRES_PASSWORD pg_dump -U $POSTGRES_USER -h ${POSTGRES_HOST:-localhost} $POSTGRES_DB >/tmp/dispatcharr_db_$(date +%F).sql
msg_info "Database backup created"
fi
fi
$STD tar -czf "$BACKUP_FILE" -C /opt dispatcharr /tmp/dispatcharr_db_*.sql
msg_ok "Backup created: $BACKUP_FILE"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
msg_info "Updating Dispatcharr Backend"
if [[ -f /tmp/dispatcharr.env.backup ]]; then
mv /tmp/dispatcharr.env.backup /opt/dispatcharr/.env
fi
if [[ -f /tmp/start-gunicorn.sh.backup ]]; then
mv /tmp/start-gunicorn.sh.backup /opt/dispatcharr/start-gunicorn.sh
fi
if [[ -f /tmp/start-celery.sh.backup ]]; then
mv /tmp/start-celery.sh.backup /opt/dispatcharr/start-celery.sh
fi
if [[ -f /tmp/start-celerybeat.sh.backup ]]; then
mv /tmp/start-celerybeat.sh.backup /opt/dispatcharr/start-celerybeat.sh
fi
if [[ -f /tmp/start-daphne.sh.backup ]]; then
mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
fi
cd /opt/dispatcharr
rm -rf .venv
$STD uv venv
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
$STD uv pip install gunicorn gevent celery redis daphne
msg_ok "Updated Dispatcharr Backend"
msg_info "Building Frontend"
cd /opt/dispatcharr/frontend
$STD npm install --legacy-peer-deps
$STD npm run build
msg_ok "Built Frontend"
msg_info "Running Django Migrations"
cd /opt/dispatcharr
if [[ -f .env ]]; then
set -o allexport
source .env
set +o allexport
fi
$STD uv run python manage.py migrate --noinput
$STD uv run python manage.py collectstatic --noinput
msg_ok "Migrations Complete"
msg_info "Starting Services"
systemctl start dispatcharr
systemctl start dispatcharr-celery
systemctl start dispatcharr-celerybeat
systemctl start dispatcharr-daphne
msg_ok "Started Services"
msg_info "Cleaning up"
rm -f /tmp/dispatcharr_db_*.sql
msg_ok "Cleanup completed"
msg_ok "Updated successfully!"
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}${CL}"

View File

@@ -81,7 +81,6 @@ function update_script() {
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup complete"
msg_ok "Updated successfully!"
exit
}

View File

@@ -29,10 +29,9 @@ function update_script() {
fi
msg_info "Updating ${APP}"
cd /opt/dockge
$STD docker compose pull
$STD docker compose up -d
docker compose pull
docker compose up -d
msg_ok "Updated ${APP}"
msg_ok "Updated successfully!"
exit
}

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-3}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
header_info "$APP"
variables
@@ -32,9 +32,9 @@ function update_script() {
export NODE_OPTIONS="--max_old_space_size=4096"
if check_for_gh_release "docmost" "docmost/docmost"; then
msg_info "Stopping Service"
msg_info "Stopping ${APP}"
systemctl stop docmost
msg_ok "Stopped Service"
msg_ok "${APP} Stopped"
msg_info "Backing up data"
cp /opt/docmost/.env /opt/
@@ -52,10 +52,10 @@ function update_script() {
$STD pnpm build
msg_ok "Updated ${APP}"
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start docmost
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -29,9 +29,9 @@ function update_script() {
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/documenso/documenso/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 Service"
msg_info "Stopping ${APP}"
systemctl stop documenso
msg_ok "Stopped Service"
msg_ok "${APP} Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
cp /opt/documenso/.env /opt/
@@ -53,14 +53,14 @@ function update_script() {
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start documenso
msg_ok "Started Service"
msg_ok "Started ${APP}"
msg_info "Cleaning Up"
rm -rf /opt/v${RELEASE}.zip
msg_ok "Cleaned"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi

View File

@@ -1,63 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: fstof
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/donetick/donetick
APP="Donetick"
var_tags="${var_tags:-productivity;tasks}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/donetick ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "donetick" "donetick/donetick"; then
msg_info "Stopping Service"
systemctl stop donetick
msg_ok "Stopped Service"
msg_info "Backing Up Configurations"
mv /opt/donetick/config/selfhosted.yml /opt/donetick/donetick.db /opt
msg_ok "Backed Up Configurations"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "/opt/donetick" "donetick_Linux_x86_64.tar.gz"
msg_info "Restoring Configurations"
mv /opt/selfhosted.yml /opt/donetick/config
mv /opt/donetick.db /opt/donetick
msg_ok "Restored Configurations"
msg_info "Starting Service"
systemctl start donetick
msg_ok "Started Service"
msg_ok "Updated successfully!"
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}:2021${CL}"

View File

@@ -30,7 +30,7 @@ function update_script() {
msg_info "Updating ${APP} LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
exit
}

View File

@@ -29,16 +29,16 @@ function update_script() {
fi
if check_for_gh_release "duplicati" "duplicati/duplicati"; then
msg_info "Stopping Service"
msg_info "Stopping $APP"
systemctl stop duplicati
msg_info "Stopped Service"
msg_ok "Stopped $APP"
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-x64-gui.deb"
msg_info "Starting Service"
msg_info "Starting $APP"
systemctl start duplicati
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started $APP"
msg_ok "Update Successful"
fi
exit
}

View File

@@ -61,8 +61,8 @@ function update_script() {
$STD yarn global add serve
$STD yarn install --ignore-engines
$STD yarn build
mv ./dist ../ &&
rm -rf * &&
mv ./dist ../ && \
rm -rf * && \
mv ../dist ./
if [[ -z $(grep "ExecStart=/usr/local/bin/serve" /etc/systemd/system/synapse-admin.service) ]]; then
sed -i 's|^ExecStart=.*|ExecStart=/usr/local/bin/serve -s dist -l 5173|' /etc/systemd/system/synapse-admin.service
@@ -71,7 +71,7 @@ function update_script() {
systemctl start synapse-admin
echo "${RELEASE}" >/opt/"${APP}"_version.txt
rm -f "$temp_file"
msg_ok "Updated successfully!"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi

View File

@@ -29,16 +29,16 @@ function update_script() {
exit
fi
if check_for_gh_release "emby" "MediaBrowser/Emby.Releases"; then
msg_info "Stopping Service"
msg_info "Stopping ${APP}"
systemctl stop emby-server
msg_ok "Stopped Service"
msg_ok "Stopped ${APP}"
fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start emby-server
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -57,7 +57,7 @@ function update_script() {
msg_info "Cleaning Up"
rm -f "$DEB_FILE"
msg_ok "Cleanup Completed"
msg_ok "Updated successfully!"
msg_ok "Update Successful"
else
msg_ok "No update required. EMQX is already at v${RELEASE}"
fi

View File

@@ -37,7 +37,7 @@ function update_script() {
systemctl start ersatzTV
msg_ok "Started ErsatzTV"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
if check_for_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg"; then
@@ -57,7 +57,7 @@ function update_script() {
msg_info "Starting ErsatzTV"
systemctl start ersatzTV
msg_ok "Started ErsatzTV"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -25,12 +25,12 @@ function update_script() {
check_container_resources
if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
exit 1
fi
msg_info "Stopping Service"
msg_info "Stopping ${APP}"
systemctl stop esphomeDashboard
msg_ok "Stopped Service"
msg_ok "Stopped ${APP}"
VENV_PATH="/opt/esphome/.venv"
ESPHOME_BIN="${VENV_PATH}/bin/esphome"
@@ -78,10 +78,10 @@ EOF
ln -s /opt/esphome/.venv/bin/esphome /usr/local/bin/esphome
msg_ok "Linked esphome binary"
msg_info "Starting Service"
msg_info "Starting ${APP}"
systemctl start esphomeDashboard
msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
exit
}

View File

@@ -30,7 +30,7 @@ function update_script() {
msg_info "Updating evcc LXC"
$STD apt update
$STD apt --only-upgrade install -y evcc
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
exit
}

Some files were not shown because too many files have changed in this diff Show More