mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-13 09:05:17 +00:00
Compare commits
152 Commits
testing_ac
...
2025-11-12
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
02f1e738d9 | ||
|
|
d7e3e4b8c6 | ||
|
|
6c0287c17a | ||
|
|
f287cb8023 | ||
|
|
6677685ba8 | ||
|
|
2cf7b446c0 | ||
|
|
afdcc2a624 | ||
|
|
817edd6d9c | ||
|
|
6883a39ef7 | ||
|
|
a85514dd2b | ||
|
|
9bb4bf020f | ||
|
|
e5e44f4ebf | ||
|
|
6781963f46 | ||
|
|
93bcba16c4 | ||
|
|
dc809eeda4 | ||
|
|
aa770beff4 | ||
|
|
91e9869be9 | ||
|
|
714c2e5888 | ||
|
|
9d8536047a | ||
|
|
fa3621ef56 | ||
|
|
35b6e58d2c | ||
|
|
11ff178b91 | ||
|
|
1b6d26a903 | ||
|
|
cad3f716d2 | ||
|
|
02945a4455 | ||
|
|
00a7f5fbe1 | ||
|
|
17354ca011 | ||
|
|
e759335bfc | ||
|
|
1c09feabde | ||
|
|
e150afa583 | ||
|
|
a770f27396 | ||
|
|
533650f434 | ||
|
|
23587df184 | ||
|
|
1893cb93d4 | ||
|
|
32cd65d5e1 | ||
|
|
681932c491 | ||
|
|
b8a9beb56a | ||
|
|
6cccb49363 | ||
|
|
5adfc83281 | ||
|
|
f099f472ce | ||
|
|
00b978df29 | ||
|
|
c054403325 | ||
|
|
45aec67359 | ||
|
|
774127eece | ||
|
|
d85e72fd0f | ||
|
|
4a5a0e3966 | ||
|
|
ec2726dff5 | ||
|
|
bf50900fdf | ||
|
|
57af58d634 | ||
|
|
0b2b13c79a | ||
|
|
508eb70d13 | ||
|
|
e90353f20b | ||
|
|
37fc378024 | ||
|
|
b1d782dec6 | ||
|
|
ef9a008d2a | ||
|
|
de07b62cff | ||
|
|
8b30ed74df | ||
|
|
53e6422ee3 | ||
|
|
257e89cc5c | ||
|
|
26090bad32 | ||
|
|
787a99fc27 | ||
|
|
0b122749b7 | ||
|
|
48c9a16673 | ||
|
|
9bf67982e3 | ||
|
|
008c037cf7 | ||
|
|
0ab91cc4c1 | ||
|
|
dfa05f3845 | ||
|
|
a3d42dba45 | ||
|
|
a89b841684 | ||
|
|
88097dcd19 | ||
|
|
1a76fc0095 | ||
|
|
69c2e9ed2c | ||
|
|
9d876e2d06 | ||
|
|
c0c5fd4532 | ||
|
|
0e7be1dd1e | ||
|
|
6e349dbcef | ||
|
|
9b3879ef41 | ||
|
|
e21ea05ddc | ||
|
|
40aeab4e38 | ||
|
|
7f91bff501 | ||
|
|
540194e29a | ||
|
|
ac7db35a59 | ||
|
|
5a71b1389f | ||
|
|
e8846642ef | ||
|
|
8cb1675f89 | ||
|
|
a4ccf7d1b0 | ||
|
|
db29b241a9 | ||
|
|
528575f737 | ||
|
|
ac05febbbd | ||
|
|
bd8f8e6a0d | ||
|
|
0fb4e4ad8c | ||
|
|
5d381910a3 | ||
|
|
9f0720dc91 | ||
|
|
85456ff3f3 | ||
|
|
822ea4b267 | ||
|
|
cae6f1a3d5 | ||
|
|
3c5277b423 | ||
|
|
3f04a6df3b | ||
|
|
1ba79a3d8d | ||
|
|
baa4344663 | ||
|
|
82b9cac71a | ||
|
|
9c7d09d368 | ||
|
|
a4c8a315cc | ||
|
|
faeedc729e | ||
|
|
dfcc26e18d | ||
|
|
ea756dc87e | ||
|
|
96fb53514d | ||
|
|
aeaefe2ec0 | ||
|
|
0ea12a3485 | ||
|
|
f957cb9d21 | ||
|
|
ce33e59bf7 | ||
|
|
af432445e1 | ||
|
|
a68cfab83f | ||
|
|
d1ca42a403 | ||
|
|
2909a570b3 | ||
|
|
a545cad897 | ||
|
|
b7bc5831b4 | ||
|
|
d4d175d689 | ||
|
|
b16501652c | ||
|
|
003d6327de | ||
|
|
602fbaf79e | ||
|
|
0458d07744 | ||
|
|
af3feb69bf | ||
|
|
150f0ee456 | ||
|
|
b5cf70230f | ||
|
|
67d8bc2828 | ||
|
|
cc16f4bb94 | ||
|
|
1e679be149 | ||
|
|
6add81de6a | ||
|
|
66f81a5894 | ||
|
|
72391a96a8 | ||
|
|
890ef7a4a1 | ||
|
|
0f16576ea6 | ||
|
|
b61756f259 | ||
|
|
3fa9a2add6 | ||
|
|
4eedff17b6 | ||
|
|
cad5b3e059 | ||
|
|
a3199be759 | ||
|
|
4c374e50dc | ||
|
|
258b2c817e | ||
|
|
fb1a558dc6 | ||
|
|
b2ee06d8cb | ||
|
|
1f261a382c | ||
|
|
b60aef556a | ||
|
|
179f4d5504 | ||
|
|
eacff384e2 | ||
|
|
55d80d2e03 | ||
|
|
1dce163ada | ||
|
|
c3c4564798 | ||
|
|
d099b5bd23 | ||
|
|
f8ac8e677e | ||
|
|
578a2d2a55 |
458
.github/AUTOLABELER_FEATURES.md
generated
vendored
458
.github/AUTOLABELER_FEATURES.md
generated
vendored
@@ -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.
|
||||
11
.github/ISSUE_TEMPLATE/bug_report.yml
generated
vendored
11
.github/ISSUE_TEMPLATE/bug_report.yml
generated
vendored
@@ -11,8 +11,9 @@ body:
|
||||
- 🔎 If you encounter `[ERROR] in line 23: exit code *: while executing command "$@" > /dev/null 2>&1`, rerun the script with verbose mode before submitting the issue.
|
||||
- 📜 **Read the script:** Familiarize yourself with the script's content and its purpose. This will help you understand the issue better and provide more relevant information
|
||||
|
||||
Thank you for taking the time to report an issue! Please provide as much detail as possible to help us address the problem efficiently.
|
||||
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
|
||||
@@ -54,15 +56,14 @@ body:
|
||||
attributes:
|
||||
label: 🖥️ Which Linux distribution are you using?
|
||||
options:
|
||||
-
|
||||
-
|
||||
- Alpine
|
||||
- Debian 11
|
||||
- Debian 12
|
||||
- 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
79
.github/SETUP_NEW_LABELS.md
generated
vendored
@@ -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
13
.github/autolabeler-config.json
generated
vendored
@@ -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
175
.github/changelog-pr-config.json
generated
vendored
@@ -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": []
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
340
.github/workflows/autolabeler.yml
generated
vendored
340
.github/workflows/autolabeler.yml
generated
vendored
@@ -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,316 +57,49 @@ 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 (labelsToAdd.size < 2) {
|
||||
const templateLabelMappings = {
|
||||
"🐞 **Bug fix**": "bugfix",
|
||||
"✨ **New feature**": "feature",
|
||||
"💥 **Breaking change**": "breaking change",
|
||||
"🆕 **New script**": "new script",
|
||||
"🌍 **Website update**": "website", // handled special
|
||||
"🔧 **Refactoring / Code Cleanup**": "refactor",
|
||||
"📝 **Documentation update**": "documentation" // mapped to maintenance
|
||||
};
|
||||
|
||||
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");
|
||||
}
|
||||
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
|
||||
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
|
||||
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i");
|
||||
|
||||
// Parse PR template for content type labels (bugfix, feature, refactor, breaking change)
|
||||
const templateLabelMappings = {
|
||||
"🐞 **Bug fix**": "bugfix",
|
||||
"✨ **New feature**": "feature",
|
||||
"💥 **Breaking change**": "breaking change",
|
||||
"🆕 **New script**": "new script",
|
||||
"🌍 **Website update**": "website",
|
||||
"🔧 **Refactoring / Code Cleanup**": "refactor",
|
||||
"📝 **Documentation update**": "documentation"
|
||||
};
|
||||
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));
|
||||
|
||||
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");
|
||||
|
||||
if (regex.test(prBody)) {
|
||||
if (label === "website") {
|
||||
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
|
||||
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`;
|
||||
if (!(hasUpdateScript && hasContentLabel)) {
|
||||
labelsToAdd.add(hasJson ? "json" : "website");
|
||||
}
|
||||
}
|
||||
} 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;
|
||||
} else if (label === "documentation") {
|
||||
labelsToAdd.add("maintenance");
|
||||
} else {
|
||||
labelsToAdd.add(label);
|
||||
}
|
||||
}
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
156
.github/workflows/changelog-pr.yml
generated
vendored
156
.github/workflows/changelog-pr.yml
generated
vendored
@@ -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,92 +115,69 @@ 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({
|
||||
owner: context.repo.owner,
|
||||
repo: "ProxmoxVED",
|
||||
state: "all",
|
||||
labels: ["Started Migration To ProxmoxVE"]
|
||||
});
|
||||
try {
|
||||
const { data: relatedIssues } = await github.rest.issues.listForRepo({
|
||||
owner: context.repo.owner,
|
||||
repo: "ProxmoxVED",
|
||||
state: "all",
|
||||
labels: ["Started Migration To ProxmoxVE"]
|
||||
});
|
||||
|
||||
const matchingIssue = relatedIssues.find(issue =>
|
||||
issue.title.toLowerCase().includes(scriptName.toLowerCase())
|
||||
);
|
||||
|
||||
if (matchingIssue) {
|
||||
const issueAuthor = matchingIssue.user.login;
|
||||
prNote = `- ${pr.title} @${issueAuthor} ([#${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}))`;
|
||||
}
|
||||
|
||||
// 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")
|
||||
);
|
||||
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
|
||||
if (category.subCategories && category.subCategories.length > 0) {
|
||||
const subCategory = category.subCategories.find(sub =>
|
||||
sub.labels.some(label => prLabels.includes(label))
|
||||
const matchingIssue = relatedIssues.find(issue =>
|
||||
issue.title.toLowerCase().includes(scriptName.toLowerCase())
|
||||
);
|
||||
|
||||
if (subCategory) {
|
||||
subCategory.notes.push(prNote);
|
||||
} else {
|
||||
// No matching subcategory, add to main category
|
||||
category.notes.push(prNote);
|
||||
if (matchingIssue) {
|
||||
const issueAuthor = matchingIssue.user.login;
|
||||
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}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
|
||||
}
|
||||
|
||||
|
||||
if (prLabels.includes("new script")) {
|
||||
const newScriptCategory = categorizedPRs.find(category =>
|
||||
category.title === "New Scripts" || category.labels.includes("new script"));
|
||||
if (newScriptCategory) {
|
||||
newScriptCategory.notes.push(prNote);
|
||||
}
|
||||
} else {
|
||||
|
||||
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))
|
||||
);
|
||||
|
||||
if (subCategory) {
|
||||
subCategory.notes.push(prNote);
|
||||
} else {
|
||||
// No subcategories, add to main category
|
||||
category.notes.push(prNote);
|
||||
}
|
||||
} else {
|
||||
category.notes.push(prNote);
|
||||
}
|
||||
categorized = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return categorizedPRs;
|
||||
|
||||
174
CHANGELOG.md
174
CHANGELOG.md
@@ -10,8 +10,182 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2025-11-13
|
||||
|
||||
## 2025-11-12
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Miniflux ([#9091](https://github.com/community-scripts/ProxmoxVE/pull/9091))
|
||||
- Splunk Enterprise ([#9090](https://github.com/community-scripts/ProxmoxVE/pull/9090))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- evcc: add missing fi in update [@MichaelVetter1979](https://github.com/MichaelVetter1979) ([#9107](https://github.com/community-scripts/ProxmoxVE/pull/9107))
|
||||
- PeaNUT: use clean install flag during update [@vhsdream](https://github.com/vhsdream) ([#9100](https://github.com/community-scripts/ProxmoxVE/pull/9100))
|
||||
- Tududi: Create new env file from example; fix installation & update [@vhsdream](https://github.com/vhsdream) ([#9097](https://github.com/community-scripts/ProxmoxVE/pull/9097))
|
||||
- openwebui: Python version usage | core: zsh completion install [@MickLesk](https://github.com/MickLesk) ([#9079](https://github.com/community-scripts/ProxmoxVE/pull/9079))
|
||||
- Refactor: evcc [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9057](https://github.com/community-scripts/ProxmoxVE/pull/9057))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Bump K to H-Scripts to Debian 13 (Trixie) [@MickLesk](https://github.com/MickLesk) ([#8597](https://github.com/community-scripts/ProxmoxVE/pull/8597))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: web-check [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9055](https://github.com/community-scripts/ProxmoxVE/pull/9055))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- Refactor web analytics to use Rybbit instead of Umami [@BramSuurdje](https://github.com/BramSuurdje) ([#9072](https://github.com/community-scripts/ProxmoxVE/pull/9072))
|
||||
|
||||
## 2025-11-11
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Domain-Monitor ([#9029](https://github.com/community-scripts/ProxmoxVE/pull/9029))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- tools.func: fix JDK count variable initialization in setup_java [@MickLesk](https://github.com/MickLesk) ([#9058](https://github.com/community-scripts/ProxmoxVE/pull/9058))
|
||||
- flaresolverr: unpin - use latest version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9046](https://github.com/community-scripts/ProxmoxVE/pull/9046))
|
||||
- Part-DB: Increase amount of RAM [@tremor021](https://github.com/tremor021) ([#9039](https://github.com/community-scripts/ProxmoxVE/pull/9039))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: openHAB [@MickLesk](https://github.com/MickLesk) ([#9060](https://github.com/community-scripts/ProxmoxVE/pull/9060))
|
||||
|
||||
### 🧰 Maintenance
|
||||
|
||||
- #### 📂 Github
|
||||
|
||||
- [docs / gh]: modernize README | Change Version Support in SECURITY.md | Shoutout to selfhst\icons [@MickLesk](https://github.com/MickLesk) ([#9049](https://github.com/community-scripts/ProxmoxVE/pull/9049))
|
||||
|
||||
## 2025-11-10
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Plex: extend checking for deb822 source [@Matt17000](https://github.com/Matt17000) ([#9036](https://github.com/community-scripts/ProxmoxVE/pull/9036))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools.func: add helper functions for MariaDB and PostgreSQL setup [@MickLesk](https://github.com/MickLesk) ([#9026](https://github.com/community-scripts/ProxmoxVE/pull/9026))
|
||||
- core: update message for no available updates scenario (if pinned) [@MickLesk](https://github.com/MickLesk) ([#9021](https://github.com/community-scripts/ProxmoxVE/pull/9021))
|
||||
- Migrate Open WebUI to uv-based installation [@MickLesk](https://github.com/MickLesk) ([#9019](https://github.com/community-scripts/ProxmoxVE/pull/9019))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: phpIPAM [@MickLesk](https://github.com/MickLesk) ([#9027](https://github.com/community-scripts/ProxmoxVE/pull/9027))
|
||||
|
||||
## 2025-11-09
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- core: improve log cleaning [@MickLesk](https://github.com/MickLesk) ([#8999](https://github.com/community-scripts/ProxmoxVE/pull/8999))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Add wkhtmltopdf to Odoo installation dependencies [@akileos](https://github.com/akileos) ([#9010](https://github.com/community-scripts/ProxmoxVE/pull/9010))
|
||||
- fix(jotty): Comments removed from variables, as they are interpreted. [@schneider-de-com](https://github.com/schneider-de-com) ([#9002](https://github.com/community-scripts/ProxmoxVE/pull/9002))
|
||||
- fix(n8n): Add python3-setuptools dependency for Debian 13 [@chrikodo](https://github.com/chrikodo) ([#9007](https://github.com/community-scripts/ProxmoxVE/pull/9007))
|
||||
- Paperless-ngx: hotfix config path [@vhsdream](https://github.com/vhsdream) ([#9003](https://github.com/community-scripts/ProxmoxVE/pull/9003))
|
||||
- Paperless-NGX: Move config backup outside of app folder [@vhsdream](https://github.com/vhsdream) ([#8996](https://github.com/community-scripts/ProxmoxVE/pull/8996))
|
||||
|
||||
## 2025-11-08
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Technitium DNS: Fix update [@tremor021](https://github.com/tremor021) ([#8980](https://github.com/community-scripts/ProxmoxVE/pull/8980))
|
||||
- MediaManager: add LOG_FILE to start.sh script; fix BASE_PATH and PUBLIC_API_URL [@vhsdream](https://github.com/vhsdream) ([#8981](https://github.com/community-scripts/ProxmoxVE/pull/8981))
|
||||
- Firefly: Fix missing command in update script [@tremor021](https://github.com/tremor021) ([#8972](https://github.com/community-scripts/ProxmoxVE/pull/8972))
|
||||
- MongoDB: Remove unused message [@tremor021](https://github.com/tremor021) ([#8969](https://github.com/community-scripts/ProxmoxVE/pull/8969))
|
||||
- Set TZ=Etc/UTC in Ghostfolio installation script [@LuloDev](https://github.com/LuloDev) ([#8961](https://github.com/community-scripts/ProxmoxVE/pull/8961))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- paperless: refactor - remove backup after update and enable clean install [@MickLesk](https://github.com/MickLesk) ([#8988](https://github.com/community-scripts/ProxmoxVE/pull/8988))
|
||||
- Refactor setup_deb822_repo for optional architectures [@MickLesk](https://github.com/MickLesk) ([#8983](https://github.com/community-scripts/ProxmoxVE/pull/8983))
|
||||
|
||||
## 2025-11-07
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- infisical ([#8926](https://github.com/community-scripts/ProxmoxVE/pull/8926))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Update script URLs to ProxmoxVE repository [@MickLesk](https://github.com/MickLesk) ([#8946](https://github.com/community-scripts/ProxmoxVE/pull/8946))
|
||||
- tools.func: fix amd64 arm64 mismatch [@MickLesk](https://github.com/MickLesk) ([#8943](https://github.com/community-scripts/ProxmoxVE/pull/8943))
|
||||
- ghostfolio: refactor CoinGecko key prompts in installer [@MickLesk](https://github.com/MickLesk) ([#8935](https://github.com/community-scripts/ProxmoxVE/pull/8935))
|
||||
- flaresolverr: pin release to 3.4.3 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8937](https://github.com/community-scripts/ProxmoxVE/pull/8937))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Pangolin: Add Traefik proxy [@tremor021](https://github.com/tremor021) ([#8952](https://github.com/community-scripts/ProxmoxVE/pull/8952))
|
||||
|
||||
## 2025-11-06
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- OpenProject: Remove duplicate server_path_prefix configuration [@tremor021](https://github.com/tremor021) ([#8919](https://github.com/community-scripts/ProxmoxVE/pull/8919))
|
||||
- Grist: Fix change directory to /opt/grist before build steps [@tremor021](https://github.com/tremor021) ([#8913](https://github.com/community-scripts/ProxmoxVE/pull/8913))
|
||||
- Jotty hotfix: SSO_FALLBACK_LOCAL value [@vhsdream](https://github.com/vhsdream) ([#8907](https://github.com/community-scripts/ProxmoxVE/pull/8907))
|
||||
- npm: add Debian version check to update script [@MickLesk](https://github.com/MickLesk) ([#8901](https://github.com/community-scripts/ProxmoxVE/pull/8901))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- MongoDB: install script now use setup_mongodb [@MickLesk](https://github.com/MickLesk) ([#8897](https://github.com/community-scripts/ProxmoxVE/pull/8897))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Graylog [@tremor021](https://github.com/tremor021) ([#8912](https://github.com/community-scripts/ProxmoxVE/pull/8912))
|
||||
|
||||
## 2025-11-05
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Immich: Pin version to 2.2.3 [@vhsdream](https://github.com/vhsdream) ([#8861](https://github.com/community-scripts/ProxmoxVE/pull/8861))
|
||||
- Jotty: increase RAM to 4GB [@vhsdream](https://github.com/vhsdream) ([#8887](https://github.com/community-scripts/ProxmoxVE/pull/8887))
|
||||
- Zabbix: fix agent service recognition in update [@MickLesk](https://github.com/MickLesk) ([#8881](https://github.com/community-scripts/ProxmoxVE/pull/8881))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- fix: npm: refactor for v2.13.x [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8870](https://github.com/community-scripts/ProxmoxVE/pull/8870))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Open WebUI [@tremor021](https://github.com/tremor021) ([#8874](https://github.com/community-scripts/ProxmoxVE/pull/8874))
|
||||
- Refactor(tools.func): Add Retry Logic, OS-Upgrade Safety, Smart Version Detection + 10 Critical Bugfixes [@MickLesk](https://github.com/MickLesk) ([#8871](https://github.com/community-scripts/ProxmoxVE/pull/8871))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- npm: Increase RAM and HDD, update Certbot notes [@MickLesk](https://github.com/MickLesk) ([#8882](https://github.com/community-scripts/ProxmoxVE/pull/8882))
|
||||
- Update config_path in donetick.json [@fyxtro](https://github.com/fyxtro) ([#8872](https://github.com/community-scripts/ProxmoxVE/pull/8872))
|
||||
|
||||
## 2025-11-04
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- stirling-pdf: add native jbig2 dep to installation script [@MickLesk](https://github.com/MickLesk) ([#8858](https://github.com/community-scripts/ProxmoxVE/pull/8858))
|
||||
|
||||
## 2025-11-03
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
288
README.md
288
README.md
@@ -1,114 +1,266 @@
|
||||
<div align="center">
|
||||
<p align="center">
|
||||
<a href="#">
|
||||
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="100px" />
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="120px" alt="Proxmox VE Helper-Scripts Logo" />
|
||||
|
||||
<h1>Proxmox VE Helper-Scripts</h1>
|
||||
<p><em>A Community Legacy in Memory of @tteck</em></p>
|
||||
|
||||
<div style="border: 2px solid #d1d5db; padding: 20px; border-radius: 8px; background-color: #f9fafb;">
|
||||
<h2 align="center">Proxmox VE Helper-Scripts</h2>
|
||||
<p align="center">A Community Legacy in Memory of @tteck</p>
|
||||
<p align="center">
|
||||
<p>
|
||||
<a href="https://helper-scripts.com">
|
||||
<img src="https://img.shields.io/badge/Website-4c9b3f?style=for-the-badge&logo=github&logoColor=white" alt="Website" />
|
||||
<img src="https://img.shields.io/badge/🌐_Website-Visit-4c9b3f?style=for-the-badge&labelColor=2d3748" alt="Website" />
|
||||
</a>
|
||||
<a href="https://discord.gg/3AnUqsXnmK">
|
||||
<img src="https://img.shields.io/badge/Discord-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
|
||||
</a>
|
||||
<a href="https://ko-fi.com/community_scripts">
|
||||
<img src="https://img.shields.io/badge/Support-FF5F5F?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Donate" />
|
||||
<img src="https://img.shields.io/badge/💬_Discord-Join-7289da?style=for-the-badge&labelColor=2d3748" alt="Discord" />
|
||||
</a>
|
||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
|
||||
<img src="https://img.shields.io/badge/Contribute-ff4785?style=for-the-badge&logo=git&logoColor=white" alt="Contribute" />
|
||||
</a>
|
||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
|
||||
<img src="https://img.shields.io/badge/Guides-0077b5?style=for-the-badge&logo=read-the-docs&logoColor=white" alt="Guides" />
|
||||
</a>
|
||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
|
||||
<img src="https://img.shields.io/badge/Changelog-6c5ce7?style=for-the-badge&logo=git&logoColor=white" alt="Changelog" />
|
||||
<a href="https://ko-fi.com/community_scripts">
|
||||
<img src="https://img.shields.io/badge/❤️_Support-Donate-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Donate" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
|
||||
<img src="https://img.shields.io/badge/🤝_Contribute-Guidelines-ff4785?style=for-the-badge&labelColor=2d3748" alt="Contribute" />
|
||||
</a>
|
||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
|
||||
<img src="https://img.shields.io/badge/📚_Guides-Read-0077b5?style=for-the-badge&labelColor=2d3748" alt="Guides" />
|
||||
</a>
|
||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
|
||||
<img src="https://img.shields.io/badge/📋_Changelog-View-6c5ce7?style=for-the-badge&labelColor=2d3748" alt="Changelog" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<br />
|
||||
|
||||
> **Simplify your Proxmox VE setup with community-driven automation scripts**
|
||||
> Originally created by tteck, now maintained and expanded by the community
|
||||
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
<div align="center">
|
||||
<sub>🙌 <strong>Shoutout to</strong></sub>
|
||||
<br />
|
||||
<br />
|
||||
<a href="https://selfh.st/">
|
||||
<img src="https://img.shields.io/badge/selfh.st-Icons_for_Self--Hosted-2563eb?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6IiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==&labelColor=1e3a8a" alt="selfh.st Icons" />
|
||||
</a>
|
||||
<br />
|
||||
<sub><a href="https://github.com/selfhst/icons">View on GitHub</a> • Consistent, beautiful icons for 5000+ self-hosted apps</sub>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Project Overview
|
||||
## 🎯 Key Features
|
||||
|
||||
**Proxmox VE Helper-Scripts** is a collection of tools to simplify the setup and management of Proxmox Virtual Environment (VE). Originally created by [tteck](https://github.com/tteck), these scripts are now continued by the community. Our goal is to preserve and expand upon tteck's work, providing an ongoing resource for Proxmox users worldwide.
|
||||
<div align="center">
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center" width="25%">
|
||||
<h3>⚡ Quick Setup</h3>
|
||||
<p>One-command installations for popular services and containers</p>
|
||||
</td>
|
||||
<td align="center" width="25%">
|
||||
<h3>⚙️ Flexible Config</h3>
|
||||
<p>Simple mode for beginners, advanced options for power users</p>
|
||||
</td>
|
||||
<td align="center" width="25%">
|
||||
<h3>🔄 Auto Updates</h3>
|
||||
<p>Keep your installations current with built-in update mechanisms</p>
|
||||
</td>
|
||||
<td align="center" width="25%">
|
||||
<h3>🛠️ Easy Management</h3>
|
||||
<p>Post-install scripts for configuration and troubleshooting</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" width="25%">
|
||||
<h3>👥 Community Driven</h3>
|
||||
<p>Actively maintained with contributions from users worldwide</p>
|
||||
</td>
|
||||
<td align="center" width="25%">
|
||||
<h3>📖 Well Documented</h3>
|
||||
<p>Comprehensive guides and community support</p>
|
||||
</td>
|
||||
<td align="center" width="25%">
|
||||
<h3>🔒 Secure</h3>
|
||||
<p>Regular security updates and best practices</p>
|
||||
</td>
|
||||
<td align="center" width="25%">
|
||||
<h3>⚡ Performance</h3>
|
||||
<p>Optimized configurations for best performance</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 📦 Features
|
||||
## 📋 Requirements
|
||||
|
||||
- **Interactive Setup**: Choose between simple and advanced options for configuring VMs and LXC containers.
|
||||
- **Customizable Configurations**: Advanced setup for fine-tuning your environment.
|
||||
- **Seamless Integration**: Works seamlessly with Proxmox VE for a smooth experience.
|
||||
- **Community-driven**: Actively maintained and improved by the Proxmox community.
|
||||
<div align="center">
|
||||
|
||||
---
|
||||
## ✅ Requirements
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center" width="33%">
|
||||
<h3>🖥️ Proxmox VE</h3>
|
||||
<p>Version 8.4.x or 9.0.x</p>
|
||||
</td>
|
||||
<td align="center" width="33%">
|
||||
<h3>🐧 Operating System</h3>
|
||||
<p>Debian-based with Proxmox Tools</p>
|
||||
</td>
|
||||
<td align="center" width="33%">
|
||||
<h3>🌐 Network</h3>
|
||||
<p>Internet connection required</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
Ensure your system meets the following prerequisites:
|
||||
|
||||
- **Proxmox VE version**: 8.x or higher
|
||||
- **Linux**: Compatible with most distributions
|
||||
- **Dependencies**: bash and curl should be installed.
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Installation
|
||||
## 📥 Getting Started
|
||||
|
||||
To install the Proxmox Helper Scripts, follow these steps:
|
||||
Choose your preferred installation method:
|
||||
|
||||
1. Visit the [Website](https://helper-scripts.com/).
|
||||
2. Search for the desired script, e.g., **"Home Assistant OS VM"**.
|
||||
3. Copy the provided **Bash command** from the **"How To Install"** section.
|
||||
4. Open the Proxmox shell on your **main node** and paste the command.
|
||||
5. Press enter to start the installation! 🚀
|
||||
### Method 1: One-Click Web Installer
|
||||
|
||||
The fastest way to get started:
|
||||
|
||||
1. Visit **[helper-scripts.com](https://helper-scripts.com/)** 🌐
|
||||
2. Search for your desired script (e.g., "Home Assistant", "Docker")
|
||||
3. Copy the bash command displayed on the script page
|
||||
4. Open your **Proxmox Shell** and paste the command
|
||||
5. Press Enter and follow the interactive prompts
|
||||
|
||||
### Method 2: PVEScripts-Local
|
||||
|
||||
Install a convenient script manager directly in your Proxmox UI:
|
||||
|
||||
```bash
|
||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/pve-scripts-local.sh)"
|
||||
```
|
||||
|
||||
This adds a menu to your Proxmox interface for easy script access without visiting the website.
|
||||
|
||||
📖 **Learn more:** [ProxmoxVE-Local Repository](https://github.com/community-scripts/ProxmoxVE-Local)
|
||||
|
||||
---
|
||||
|
||||
## ❤️ Community and Contributions
|
||||
## 💬 Join the Community
|
||||
|
||||
We appreciate any contributions to the project—whether it's bug reports, feature requests, documentation improvements, or spreading the word. Your involvement helps keep the project alive and sustainable.
|
||||
<div align="center">
|
||||
|
||||
## 💖 Donate to Support the Project
|
||||
- **Ko-Fi for Community Edition**: [Donate to support this project](https://ko-fi.com/community_scripts) – Donations go towards maintaining the project, testing infrastructure, and charity (cancer research, hospice care). 30% of the funds will be donated to charity.
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center" width="33%">
|
||||
<h3>💬 Discord</h3>
|
||||
<p>Real-time chat, support, and discussions</p>
|
||||
<a href="https://discord.gg/3AnUqsXnmK">
|
||||
<img src="https://img.shields.io/badge/Join-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
|
||||
</a>
|
||||
</td>
|
||||
<td align="center" width="33%">
|
||||
<h3>💭 Discussions</h3>
|
||||
<p>Feature requests, Q&A, and ideas</p>
|
||||
<a href="https://github.com/community-scripts/ProxmoxVE/discussions">
|
||||
<img src="https://img.shields.io/badge/Discuss-238636?style=for-the-badge&logo=github&logoColor=white" alt="Discussions" />
|
||||
</a>
|
||||
</td>
|
||||
<td align="center" width="33%">
|
||||
<h3>🐛 Issues</h3>
|
||||
<p>Bug reports and issue tracking</p>
|
||||
<a href="https://github.com/community-scripts/ProxmoxVE/issues">
|
||||
<img src="https://img.shields.io/badge/Report-d73a4a?style=for-the-badge&logo=github&logoColor=white" alt="Issues" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 💬 Get Help
|
||||
## 🛠️ Contribute
|
||||
|
||||
Join our community for support:
|
||||
<div align="center">
|
||||
|
||||
- **Discord**: Join our [Proxmox Helper Scripts Discord server](https://discord.gg/3AnUqsXnmK) for real-time support.
|
||||
- **GitHub Discussions**: [Ask questions or report issues](https://github.com/community-scripts/ProxmoxVE/discussions).
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center" width="25%">
|
||||
<h3>💻 Code</h3>
|
||||
<p>Add new scripts or improve existing ones</p>
|
||||
</td>
|
||||
<td align="center" width="25%">
|
||||
<h3>📝 Documentation</h3>
|
||||
<p>Write guides, improve READMEs, translate content</p>
|
||||
</td>
|
||||
<td align="center" width="25%">
|
||||
<h3>🧪 Testing</h3>
|
||||
<p>Test scripts and report compatibility issues</p>
|
||||
</td>
|
||||
<td align="center" width="25%">
|
||||
<h3>💡 Ideas</h3>
|
||||
<p>Suggest features or workflow improvements</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## 🤝 Report a Bug or Feature Request
|
||||
</div>
|
||||
|
||||
If you encounter any issues or have suggestions for improvement, file a new issue on our [GitHub issues page](https://github.com/community-scripts/ProxmoxVE/issues). You can also submit pull requests with solutions or enhancements!
|
||||
<div align="center">
|
||||
<br />
|
||||
|
||||
👉 Check our **[Contributing Guidelines](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md)** to get started
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## ⭐ Star History
|
||||
## ❤️ Support the Project
|
||||
|
||||
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
||||
</picture>
|
||||
This project is maintained by volunteers in memory of tteck. Your support helps us maintain infrastructure, improve documentation, and give back to important causes.
|
||||
|
||||
**🎗️ 30% of all donations go directly to cancer research and hospice care**
|
||||
|
||||
<div align="center">
|
||||
|
||||
<a href="https://ko-fi.com/community_scripts">
|
||||
<img src="https://img.shields.io/badge/☕_Buy_us_a_coffee-Support_on_Ko--fi-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Support on Ko-fi" />
|
||||
</a>
|
||||
|
||||
<br />
|
||||
<sub>Every contribution helps keep this project alive and supports meaningful causes</sub>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 📈 Project Growth
|
||||
|
||||
<div align="center">
|
||||
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 📜 License
|
||||
|
||||
This project is licensed under the [MIT License](LICENSE).
|
||||
|
||||
</br>
|
||||
</br>
|
||||
<p align="center">
|
||||
<i style="font-size: smaller;"><b>Proxmox</b>® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a>.</i>
|
||||
</p>
|
||||
This project is licensed under the **[MIT License](LICENSE)** - feel free to use, modify, and distribute.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<sub>Made with ❤️ by the Proxmox community in memory of tteck</sub>
|
||||
<br />
|
||||
<sub><i>Proxmox® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a></i></sub>
|
||||
</div>
|
||||
|
||||
10
SECURITY.md
10
SECURITY.md
@@ -8,13 +8,15 @@ This project currently supports the following versions of Proxmox VE (PVE):
|
||||
| ------- | ------------------ |
|
||||
| 9.0.x | :white_check_mark: |
|
||||
| 8.4.x | :white_check_mark: |
|
||||
| 8.3.x | :white_check_mark: |
|
||||
| 8.2.x | :white_check_mark: |
|
||||
| 8.1.x | :white_check_mark: |
|
||||
| 8.3.x | Limited support* ❕ |
|
||||
| 8.2.x | Limited support* ❕ |
|
||||
| 8.1.x | Limited support* ❕ |
|
||||
| 8.0.x | Limited support* ❕ |
|
||||
| < 8.0 | :x: |
|
||||
|
||||
*Version 8.0.x has limited support. Security updates may not be provided for all issues affecting this version.
|
||||
*Version 8.0.x - 8.3.x has limited support. Security updates may not be provided for all issues affecting this version.
|
||||
|
||||
*Debian 13 Containers may fail to install. You can write var_version=12 before the bash call.
|
||||
|
||||
---
|
||||
|
||||
|
||||
77
ct/dashy.sh
77
ct/dashy.sh
@@ -1,77 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://dashy.to/
|
||||
|
||||
APP="Dashy"
|
||||
var_tags="${var_tags:-dashboard}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
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/dashy/public/ ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "dashy" "Lissy93/dashy"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop dashy
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up conf.yml"
|
||||
cd ~
|
||||
if [[ -f /opt/dashy/public/conf.yml ]]; then
|
||||
cp -R /opt/dashy/public/conf.yml conf.yml
|
||||
else
|
||||
cp -R /opt/dashy/user-data/conf.yml conf.yml
|
||||
fi
|
||||
msg_ok "Backed up conf.yml"
|
||||
|
||||
rm -rf /opt/dashy
|
||||
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
cd /opt/dashy
|
||||
npm install
|
||||
npm run build
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Restoring conf.yml"
|
||||
cd ~
|
||||
cp -R conf.yml /opt/dashy/user-data
|
||||
msg_ok "Restored conf.yml"
|
||||
|
||||
msg_info "Cleaning"
|
||||
rm -rf conf.yml /opt/dashy/public/conf.yml
|
||||
msg_ok "Cleaned"
|
||||
|
||||
msg_info "Starting Dashy"
|
||||
systemctl start dashy
|
||||
msg_ok "Started Dashy"
|
||||
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}:4000${CL}"
|
||||
67
ct/domain-monitor.sh
Normal file
67
ct/domain-monitor.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/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: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Hosteroid/domain-monitor
|
||||
|
||||
APP="Domain-Monitor"
|
||||
var_tags="${var_tags:-proxy}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
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/domain-monitor ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "domain-monitor" "Hosteroid/domain-monitor"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop apache2
|
||||
msg_info "Service stopped"
|
||||
|
||||
msg_info "Creating backup"
|
||||
mv /opt/domain-monitor/.env /opt
|
||||
msg_ok "Created backup"
|
||||
|
||||
setup_composer
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-monitor" "Hosteroid/domain-monitor" "prebuild" "latest" "/opt/domain-monitor" "domain-monitor-v*.zip"
|
||||
|
||||
msg_info "Updating Domain Monitor"
|
||||
cd /opt/domain-monitor
|
||||
$STD composer install
|
||||
msg_ok "Updated Domain Monitor"
|
||||
|
||||
msg_info "Restoring backup"
|
||||
mv /opt/.env /opt/domain-monitor
|
||||
msg_ok "Restored backup"
|
||||
|
||||
msg_info "Restarting Services"
|
||||
systemctl reload apache2
|
||||
msg_ok "Restarted Services"
|
||||
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}"
|
||||
13
ct/evcc.sh
13
ct/evcc.sh
@@ -23,9 +23,18 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/evcc-stable.list ]]; then
|
||||
if ! command -v evcc >/dev/null 2>&1; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -f /etc/apt/sources.list.d/evcc-stable.list ]]; then
|
||||
setup_deb822_repo \
|
||||
"evcc-stable" \
|
||||
"https://dl.evcc.io/public/evcc/stable/gpg.EAD5D0E07B0EC0FD.key" \
|
||||
"https://dl.evcc.io/public/evcc/stable/deb/debian/" \
|
||||
"$(get_os_info codename)" \
|
||||
"main"
|
||||
fi
|
||||
msg_info "Updating evcc LXC"
|
||||
$STD apt update
|
||||
|
||||
70
ct/fenrus.sh
70
ct/fenrus.sh
@@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster) | Co-Author: Scorpoon
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/revenz/Fenrus
|
||||
|
||||
APP="Fenrus"
|
||||
var_tags="${var_tags:-dashboard}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
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/${APP} ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||
exit
|
||||
msg_info "Updating ${APP}"
|
||||
systemctl stop ${APP}
|
||||
git clone https://github.com/revenz/Fenrus.git
|
||||
cd Fenrus
|
||||
gitVersionNumber=$(git rev-parse HEAD)
|
||||
|
||||
if [[ "${gitVersionNumber}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
mkdir /opt/fenrus-data-backup
|
||||
cp -r "/opt/${APP}/data/" /opt/fenrus-data-backup/data
|
||||
if [[ ! -d /opt/fenrus-data-backup/data ]]; then
|
||||
msg_error "Backup of data folder failed! exiting..."
|
||||
rm -r /opt/fenrus-data-backup/
|
||||
exit
|
||||
fi
|
||||
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||
dotnet publish -c Release -o "/opt/${APP}/" Fenrus.csproj
|
||||
cp -r /opt/fenrus-data-backup/data/ "/opt/${APP}/"
|
||||
echo "${gitVersionNumber}" >"/opt/${APP}_version.txt"
|
||||
rm -r /opt/fenrus-data-backup/
|
||||
msg_ok "Updated $APP"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already up to date"
|
||||
fi
|
||||
cd ..
|
||||
rm -r Fenrus/
|
||||
|
||||
systemctl start ${APP}
|
||||
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}:5000${CL}"
|
||||
@@ -51,7 +51,7 @@ function update_script() {
|
||||
find /opt/firefly/storage -type f -exec chmod 664 {} \;
|
||||
mkdir -p /opt/firefly/storage/framework/{cache/data,sessions,views}
|
||||
$STD sudo -u www-data php /opt/firefly/artisan cache:clear
|
||||
|
||||
cd /opt/firefly
|
||||
$STD php artisan migrate --seed --force
|
||||
$STD php artisan cache:clear
|
||||
$STD php artisan view:clear
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-30}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -28,15 +28,32 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop graylog-datanode
|
||||
systemctl stop graylog-server
|
||||
msg_info "Stopped Service"
|
||||
|
||||
msg_info "Updating $APP"
|
||||
$STD apt-get update
|
||||
$STD apt-get upgrade -y
|
||||
msg_ok "Updated $APP"
|
||||
CURRENT_VERSION=$(apt list --installed 2>/dev/null | grep graylog-server | grep -oP '\d+\.\d+\.\d+')
|
||||
|
||||
if dpkg --compare-versions "$CURRENT_VERSION" lt "6.3"; then
|
||||
MONGO_VERSION="8.0" setup_mongodb
|
||||
|
||||
msg_info "Updating Graylog"
|
||||
$STD apt update
|
||||
$STD apt upgrade -y
|
||||
curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-7.0-repository_latest.deb" -o "graylog-7.0-repository_latest.deb"
|
||||
$STD dpkg -i graylog-7.0-repository_latest.deb
|
||||
$STD apt update
|
||||
$STD apt install -y graylog-server graylog-datanode
|
||||
rm -f graylog-7.0-repository_latest.deb
|
||||
msg_ok "Updated Graylog"
|
||||
elif dpkg --compare-versions "$CURRENT_VERSION" ge "7.0"; then
|
||||
msg_info "Updating Graylog"
|
||||
$STD apt update
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated Graylog"
|
||||
fi
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start graylog-datanode
|
||||
|
||||
@@ -47,6 +47,7 @@ function update_script() {
|
||||
cp -r /opt/grist_bak/docs/* /opt/grist/docs/
|
||||
cp /opt/grist_bak/grist-sessions.db /opt/grist/grist-sessions.db
|
||||
cp /opt/grist_bak/landing.db /opt/grist/landing.db
|
||||
cd /opt/grist
|
||||
$STD yarn install
|
||||
$STD yarn run build:prod
|
||||
$STD yarn run install:python
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
____ __
|
||||
/ __ \____ ______/ /_ __ __
|
||||
/ / / / __ `/ ___/ __ \/ / / /
|
||||
/ /_/ / /_/ (__ ) / / / /_/ /
|
||||
/_____/\__,_/____/_/ /_/\__, /
|
||||
/____/
|
||||
6
ct/headers/domain-monitor
Normal file
6
ct/headers/domain-monitor
Normal file
@@ -0,0 +1,6 @@
|
||||
____ _ __ ___ _ __
|
||||
/ __ \____ ____ ___ ____ _(_)___ / |/ /___ ____ (_) /_____ _____
|
||||
/ / / / __ \/ __ `__ \/ __ `/ / __ \______/ /|_/ / __ \/ __ \/ / __/ __ \/ ___/
|
||||
/ /_/ / /_/ / / / / / / /_/ / / / / /_____/ / / / /_/ / / / / / /_/ /_/ / /
|
||||
/_____/\____/_/ /_/ /_/\__,_/_/_/ /_/ /_/ /_/\____/_/ /_/_/\__/\____/_/
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
______
|
||||
/ ____/__ ____ _______ _______
|
||||
/ /_ / _ \/ __ \/ ___/ / / / ___/
|
||||
/ __/ / __/ / / / / / /_/ (__ )
|
||||
/_/ \___/_/ /_/_/ \__,_/____/
|
||||
|
||||
6
ct/headers/infisical
Normal file
6
ct/headers/infisical
Normal file
@@ -0,0 +1,6 @@
|
||||
____ _____ _ __
|
||||
/ _/___ / __(_)____(_)________ _/ /
|
||||
/ // __ \/ /_/ / ___/ / ___/ __ `/ /
|
||||
_/ // / / / __/ (__ ) / /__/ /_/ / /
|
||||
/___/_/ /_/_/ /_/____/_/\___/\__,_/_/
|
||||
|
||||
6
ct/headers/miniflux
Normal file
6
ct/headers/miniflux
Normal file
@@ -0,0 +1,6 @@
|
||||
__ ____ _ ______
|
||||
/ |/ (_)___ (_) __/ /_ ___ __
|
||||
/ /|_/ / / __ \/ / /_/ / / / / |/_/
|
||||
/ / / / / / / / / __/ / /_/ /> <
|
||||
/_/ /_/_/_/ /_/_/_/ /_/\__,_/_/|_|
|
||||
|
||||
6
ct/headers/splunk-enterprise
Normal file
6
ct/headers/splunk-enterprise
Normal file
@@ -0,0 +1,6 @@
|
||||
_____ __ __ ______ __ _
|
||||
/ ___/____ / /_ ______ / /__ / ____/___ / /____ _________ _____(_)_______
|
||||
\__ \/ __ \/ / / / / __ \/ //_/_____/ __/ / __ \/ __/ _ \/ ___/ __ \/ ___/ / ___/ _ \
|
||||
___/ / /_/ / / /_/ / / / / ,< /_____/ /___/ / / / /_/ __/ / / /_/ / / / (__ ) __/
|
||||
/____/ .___/_/\__,_/_/ /_/_/|_| /_____/_/ /_/\__/\___/_/ / .___/_/ /_/____/\___/
|
||||
/_/ /_/
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-5}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -33,7 +33,7 @@ function update_script() {
|
||||
systemctl stop healthchecks
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
setup_uv
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
|
||||
|
||||
msg_info "Updating healthchecks"
|
||||
@@ -45,7 +45,6 @@ function update_script() {
|
||||
$STD uv run -- python manage.py collectstatic --noinput
|
||||
$STD uv run -- python manage.py compress
|
||||
msg_ok "Updated healthchecks"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start healthchecks
|
||||
systemctl restart caddy
|
||||
|
||||
20
ct/hivemq.sh
20
ct/hivemq.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -20,15 +20,15 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /var ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /var ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
@@ -36,4 +36,4 @@ build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-3}"
|
||||
var_ram="${var_ram:-6144}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-16}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -20,18 +20,18 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/homebridge.list ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y homebridge
|
||||
msg_ok "Updated successfully!"
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/homebridge.list ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
$STD apt install -y homebridge
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-5}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -47,15 +47,12 @@ function update_script() {
|
||||
$STD php asatru plants:attributes
|
||||
$STD php asatru calendar:classes
|
||||
chown -R www-data:www-data /opt/hortusfox
|
||||
rm -r /opt/hortusfox-backup
|
||||
msg_ok "Updated HortusFox"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start apache2
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -r /opt/hortusfox-backup
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
|
||||
@@ -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:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -28,8 +28,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -28,8 +28,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y hyperion
|
||||
$STD apt update
|
||||
$STD apt install -y hyperion
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
16
ct/immich.sh
16
ct/immich.sh
@@ -54,10 +54,10 @@ EOF
|
||||
if [[ -f /etc/apt/preferences.d/immich ]]; then
|
||||
rm /etc/apt/preferences.d/immich
|
||||
fi
|
||||
$STD apt-get update
|
||||
$STD apt update
|
||||
msg_ok "Added Debian Testing repo"
|
||||
msg_info "Installing libmimalloc3"
|
||||
$STD apt-get install -t testing --no-install-recommends libmimalloc3
|
||||
$STD apt install -t testing --no-install-recommends libmimalloc3
|
||||
msg_ok "Installed libmimalloc3"
|
||||
fi
|
||||
|
||||
@@ -93,7 +93,7 @@ EOF
|
||||
msg_ok "Image-processing libraries up to date"
|
||||
fi
|
||||
|
||||
RELEASE="2.2.2"
|
||||
RELEASE="2.2.3"
|
||||
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop immich-web
|
||||
@@ -114,7 +114,7 @@ EOF
|
||||
msg_ok "Upgraded VectorChord to v${VCHORD_RELEASE}"
|
||||
fi
|
||||
if ! dpkg -l | grep -q ccache; then
|
||||
$STD apt-get install -yqq ccache
|
||||
$STD apt install -yqq ccache
|
||||
fi
|
||||
|
||||
INSTALL_DIR="/opt/${APP}"
|
||||
@@ -213,12 +213,6 @@ EOF
|
||||
|
||||
chown -R immich:immich "$INSTALL_DIR"
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
$STD apt clean -y
|
||||
msg_ok "Cleaned"
|
||||
systemctl restart immich-ml immich-web
|
||||
fi
|
||||
exit
|
||||
@@ -272,7 +266,7 @@ function compile_libjxl() {
|
||||
function compile_libheif() {
|
||||
SOURCE=${SOURCE_DIR}/libheif
|
||||
if ! dpkg -l | grep -q libaom; then
|
||||
$STD apt-get install -y libaom-dev
|
||||
$STD apt install -y libaom-dev
|
||||
local update="required"
|
||||
fi
|
||||
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
|
||||
|
||||
60
ct/infisical.sh
Normal file
60
ct/infisical.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
#!/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: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://infisical.com/
|
||||
|
||||
APP="Infisical"
|
||||
var_tags="${var_tags:-auth}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-6}"
|
||||
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 /etc/infisical ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping service"
|
||||
$STD infisical-ctl stop
|
||||
msg_ok "Service stopped"
|
||||
|
||||
msg_info "Creating backup"
|
||||
DB_PASS=$(grep -Po '(?<=^Database Password:\s).*' ~/infisical.creds | head -n1)
|
||||
PGPASSWORD=$DB_PASS pg_dump -U infisical -h localhost -d infisical_db > /opt/infisical_backup.sql
|
||||
msg_ok "Created backup"
|
||||
|
||||
msg_info "Updating Infisical"
|
||||
$STD apt update
|
||||
$STD apt install -y infisical-core
|
||||
$STD infisical-ctl reconfigure
|
||||
msg_ok "Updated Infisical"
|
||||
|
||||
msg_info "Starting service"
|
||||
infisical-ctl start
|
||||
msg_ok "Started service"
|
||||
msg_ok "Updated successfully"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -28,8 +28,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP}"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -29,8 +29,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP"
|
||||
$STD apt-get update
|
||||
$STD apt-get install --only-upgrade inventree -y
|
||||
$STD apt update
|
||||
$STD apt install --only-upgrade inventree -y
|
||||
msg_ok "Updated $APP"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -28,9 +28,9 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated Successfully"
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -26,14 +26,13 @@ function update_script() {
|
||||
|
||||
if [[ ! -f /etc/itsm-ng/config_db.php ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
|
||||
msg_info "Updating LXC"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated Successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_disk="${var_disk:-2}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -28,24 +28,24 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! -f /opt/.env ]; then
|
||||
sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service
|
||||
cat <<EOF >/opt/.env
|
||||
if check_for_gh_release "Jackett" "Jackett/Jackett"; then
|
||||
if [ ! -f /opt/.env ]; then
|
||||
sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service
|
||||
cat <<EOF >/opt/.env
|
||||
DisableRootWarning=true
|
||||
EOF
|
||||
fi
|
||||
if check_for_gh_release "Jackett" "Jackett/Jackett"; then
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop jackett
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
rm -rf /opt/Jackett
|
||||
fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start jackett
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -30,8 +30,8 @@ function update_script() {
|
||||
fi
|
||||
|
||||
msg_info "Updating OS"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "OS updated, you can now update Jeedom from the Web UI."
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -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:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -27,11 +27,14 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
msg_ok "Updated successfully!"
|
||||
|
||||
JAVA_VERSION="21" setup_java
|
||||
|
||||
msg_info "Updating Jenkins"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated Jenkins"
|
||||
msg_ok "Update Successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -35,18 +35,18 @@ function update_script() {
|
||||
|
||||
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Joplin-Server"
|
||||
cd /opt/joplin-server
|
||||
sed -i "/onenote-converter/d" packages/lib/package.json
|
||||
$STD yarn config set --home enableTelemetry 0
|
||||
export BUILD_SEQUENCIAL=1
|
||||
$STD yarn install --inline-builds
|
||||
msg_ok "Updated ${APP}"
|
||||
msg_ok "Updated Joplin-Server"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start joplin-server
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
||||
APP="jotty"
|
||||
var_tags="${var_tags:-tasks;notes}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-3072}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -34,7 +34,7 @@ function update_script() {
|
||||
if check_for_gh_release "kapowarr" "Casvt/Kapowarr"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop kapowarr
|
||||
msg_info "Stopped Service"
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
mv /opt/kapowarr/db /opt/
|
||||
@@ -49,7 +49,7 @@ function update_script() {
|
||||
msg_info "Starting Service"
|
||||
systemctl start kapowarr
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -38,14 +38,11 @@ function update_script() {
|
||||
msg_ok "Updated yt-dlp"
|
||||
|
||||
msg_info "Prepare update"
|
||||
if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then
|
||||
$STD apt-get install -y graphicsmagick ghostscript
|
||||
fi
|
||||
$STD apt install -y graphicsmagick ghostscript
|
||||
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
|
||||
mkdir -p /etc/karakeep
|
||||
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
|
||||
fi
|
||||
rm -rf /opt/karakeep
|
||||
msg_ok "Update prepared"
|
||||
|
||||
if grep -q "start:prod" /etc/systemd/system/karakeep-workers.service; then
|
||||
@@ -65,7 +62,7 @@ function update_script() {
|
||||
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Karakeep"
|
||||
corepack enable
|
||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
|
||||
@@ -86,17 +83,12 @@ function update_script() {
|
||||
$STD pnpm migrate
|
||||
$STD pnpm store prune
|
||||
sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${CHECK_UPDATE_RELEASE}/" /etc/karakeep/karakeep.env
|
||||
msg_ok "Updated ${APP}"
|
||||
msg_ok "Updated Karakeep"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start karakeep-browser karakeep-workers karakeep-web
|
||||
msg_ok "Started Services"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get autoremove -y
|
||||
$STD apt-get autoclean -y
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
11
ct/kasm.sh
11
ct/kasm.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-30}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
var_fuse="${var_fuse:-yes}"
|
||||
var_tun="${var_tun:-yes}"
|
||||
@@ -29,11 +29,10 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_info "Updating LXC"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated LXC"
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -28,9 +28,9 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "keycloak_app" "keycloak/keycloak"; then
|
||||
msg_info "Stopping Keycloak"
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop keycloak
|
||||
msg_ok "Stopped Keycloak"
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating packages"
|
||||
$STD apt-get update
|
||||
@@ -44,16 +44,16 @@ function update_script() {
|
||||
|
||||
fetch_and_deploy_gh_release "keycloak_app" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Keycloak"
|
||||
cd /opt
|
||||
cp -a keycloak.old/conf/. keycloak/conf/
|
||||
cp -a keycloak.old/providers/. keycloak/providers/ 2>/dev/null || true
|
||||
cp -a keycloak.old/themes/. keycloak/themes/ 2>/dev/null || true
|
||||
msg_ok "Updated ${APP} LXC"
|
||||
msg_ok "Updated Keycloak"
|
||||
|
||||
msg_info "Restarting Keycloak"
|
||||
msg_info "Restarting Service"
|
||||
systemctl restart keycloak
|
||||
msg_ok "Restarted Keycloak"
|
||||
msg_ok "Restarted Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf keycloak.old
|
||||
|
||||
18
ct/kimai.sh
18
ct/kimai.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-7}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -23,19 +23,18 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if ! command -v lsb_release; then
|
||||
apt install -y lsb-release
|
||||
fi
|
||||
if [[ ! -d /opt/kimai ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
||||
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
|
||||
PHP_VERSION="8.4" PHP_MODULE="gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm" PHP_APACHE="YES" setup_php
|
||||
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
|
||||
fi
|
||||
PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" setup_php
|
||||
setup_composer
|
||||
|
||||
if check_for_gh_release "kimai" "kimai/kimai"; then
|
||||
if check_for_gh_release "kimai" "kimai/kimai"; then
|
||||
BACKUP_DIR="/opt/kimai_backup"
|
||||
|
||||
msg_info "Stopping Apache2"
|
||||
@@ -71,8 +70,9 @@ function update_script() {
|
||||
chmod -R g+rw /opt/*
|
||||
chown -R www-data:www-data /opt/*
|
||||
chmod -R 777 /opt/*
|
||||
rm -rf "$BACKUP_DIR"
|
||||
msg_ok "Setup Permissions"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -38,7 +38,7 @@ function update_script() {
|
||||
|
||||
fetch_and_deploy_gh_release "koillection" "benjaminjonard/koillection"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Koillection"
|
||||
cd /opt/koillection
|
||||
cp -r /opt/koillection-backup/.env.local /opt/koillection
|
||||
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
|
||||
@@ -50,7 +50,7 @@ function update_script() {
|
||||
$STD yarn install
|
||||
$STD yarn build
|
||||
chown -R www-data:www-data /opt/koillection/public/uploads
|
||||
msg_ok "Updated $APP"
|
||||
msg_ok "Updated Koillection"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start apache2
|
||||
@@ -59,7 +59,7 @@ function update_script() {
|
||||
msg_info "Cleaning up"
|
||||
rm -r /opt/koillection-backup
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -37,7 +37,7 @@ function update_script() {
|
||||
cp /opt/kometa/config/config.yml /opt
|
||||
msg_ok "Backup completed"
|
||||
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa"
|
||||
|
||||
msg_info "Updating Kometa"
|
||||
@@ -49,7 +49,7 @@ function update_script() {
|
||||
msg_info "Starting Service"
|
||||
systemctl start kometa
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ function update_script() {
|
||||
msg_info "Starting Service"
|
||||
systemctl start komga
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
16
ct/komodo.sh
16
ct/komodo.sh
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -26,14 +26,14 @@ function update_script() {
|
||||
|
||||
[[ -d /opt/komodo ]] || {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
exit 1
|
||||
}
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating Komodo"
|
||||
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")
|
||||
|
||||
@@ -42,26 +42,26 @@ 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
|
||||
if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env; then
|
||||
sed -i '/^COMPOSE_KOMODO_IMAGE_TAG=latest$/a COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env
|
||||
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 successfully!"
|
||||
msg_ok "Updated Komodo"
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/refs/heads/main/misc/build.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/refs/heads/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: dkuku
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
@@ -40,19 +40,24 @@ function update_script() {
|
||||
MM_DIR="/opt/mm"
|
||||
export CONFIG_DIR="${MM_DIR}/config"
|
||||
export FRONTEND_FILES_DIR="${MM_DIR}/web/build"
|
||||
export BASE_PATH=""
|
||||
export PUBLIC_VERSION=""
|
||||
export PUBLIC_API_URL=""
|
||||
export BASE_PATH="/web"
|
||||
cd /opt/mediamanager/web
|
||||
$STD npm ci
|
||||
$STD npm ci --no-fund --no-audit
|
||||
$STD npm run build
|
||||
rm -rf "$FRONTEND_FILES_DIR"/build
|
||||
cp -r build "$FRONTEND_FILES_DIR"
|
||||
export BASE_PATH=""
|
||||
export VIRTUAL_ENV="/opt/${MM_DIR}/venv"
|
||||
cd /opt/mediamanager
|
||||
rm -rf "$MM_DIR"/{media_manager,alembic*}
|
||||
cp -r {media_manager,alembic*} "$MM_DIR"
|
||||
$STD /usr/local/bin/uv sync --locked --active -n -p cpython3.13 --managed-python
|
||||
if ! grep -q "LOG_FILE" "$MM_DIR"/start.sh; then
|
||||
sed -i "\|build\"$|a\export LOG_FILE=\"$CONFIG_DIR/media_manager.log\"" "$MM_DIR"/start.sh
|
||||
fi
|
||||
|
||||
msg_ok "Updated $APP"
|
||||
|
||||
msg_info "Starting Service"
|
||||
|
||||
55
ct/miniflux.sh
Normal file
55
ct/miniflux.sh
Normal file
@@ -0,0 +1,55 @@
|
||||
#!/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: omernaveedxyz
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://miniflux.app/
|
||||
|
||||
APP="Miniflux"
|
||||
var_tags="${var_tags:-media}"
|
||||
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 [[ ! -f /etc/systemd/system/miniflux.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
$STD miniflux -flush-sessions -config-file /etc/miniflux.conf
|
||||
systemctl stop miniflux
|
||||
msg_ok "Service Stopped"
|
||||
|
||||
fetch_and_deploy_gh_release "miniflux" "miniflux/v2" "binary" "latest"
|
||||
|
||||
msg_info "Updating Miniflux"
|
||||
$STD miniflux -migrate -config-file /etc/miniflux.conf
|
||||
msg_ok "Updated Miniflux"
|
||||
msg_info "Starting Service"
|
||||
$STD systemctl start miniflux
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
@@ -1,15 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# Copyright (c) 2021-2025 Community-Script ORG
|
||||
# Author: tteck (tteckster) | Co-Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://nginxproxymanager.com/
|
||||
|
||||
APP="Nginx Proxy Manager"
|
||||
var_tags="${var_tags:-proxy}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
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}"
|
||||
@@ -28,6 +28,12 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
||||
msg_error "Wrong Debian version detected!"
|
||||
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
||||
exit
|
||||
fi
|
||||
|
||||
if command -v node &>/dev/null; then
|
||||
CURRENT_NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
|
||||
if [[ "$CURRENT_NODE_VERSION" != "22" ]]; then
|
||||
@@ -42,60 +48,47 @@ function update_script() {
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
||||
grep "tag_name" |
|
||||
awk '{print substr($2, 3, length($2)-4) }')
|
||||
|
||||
msg_info "Downloading NPM v${RELEASE}"
|
||||
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
|
||||
cd nginx-proxy-manager-"${RELEASE}" || exit
|
||||
msg_ok "Downloaded NPM v${RELEASE}"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
(
|
||||
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
|
||||
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
|
||||
cd ./frontend || exit
|
||||
# Replace node-sass with sass in package.json before installation
|
||||
sed -i 's/"node-sass".*$/"sass": "^1.92.1",/g' package.json
|
||||
$STD yarn install --network-timeout 600000
|
||||
$STD yarn build
|
||||
)
|
||||
msg_ok "Built Frontend"
|
||||
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager"
|
||||
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop openresty
|
||||
systemctl stop npm
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Cleaning Old Files"
|
||||
rm -rf /app \
|
||||
msg_info "Cleaning old files"
|
||||
$STD rm -rf /app \
|
||||
/var/www/html \
|
||||
/etc/nginx \
|
||||
/var/log/nginx \
|
||||
/var/lib/nginx \
|
||||
"$STD" /var/cache/nginx
|
||||
msg_ok "Cleaned Old Files"
|
||||
/var/cache/nginx
|
||||
msg_ok "Cleaned old files"
|
||||
|
||||
msg_info "Setting up Environment"
|
||||
ln -sf /usr/bin/python3 /usr/bin/python
|
||||
ln -sf /opt/certbot/bin/certbot /usr/local/bin/certbot
|
||||
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
|
||||
ln -sf /usr/local/openresty/nginx/ /etc/nginx
|
||||
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
|
||||
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
|
||||
sed -i "s|\"version\": \"2.0.0\"|\"version\": \"$RELEASE\"|" /opt/nginxproxymanager/backend/package.json
|
||||
sed -i "s|\"version\": \"2.0.0\"|\"version\": \"$RELEASE\"|" /opt/nginxproxymanager/frontend/package.json
|
||||
sed -i 's+^daemon+#daemon+g' /opt/nginxproxymanager/docker/rootfs/etc/nginx/nginx.conf
|
||||
NGINX_CONFS=$(find /opt/nginxproxymanager -type f -name "*.conf")
|
||||
for NGINX_CONF in $NGINX_CONFS; do
|
||||
sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF"
|
||||
done
|
||||
|
||||
mkdir -p /var/www/html /etc/nginx/logs
|
||||
cp -r docker/rootfs/var/www/html/* /var/www/html/
|
||||
cp -r docker/rootfs/etc/nginx/* /etc/nginx/
|
||||
cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini
|
||||
cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager
|
||||
cp -r /opt/nginxproxymanager/docker/rootfs/var/www/html/* /var/www/html/
|
||||
cp -r /opt/nginxproxymanager/docker/rootfs/etc/nginx/* /etc/nginx/
|
||||
cp /opt/nginxproxymanager/docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini
|
||||
cp /opt/nginxproxymanager/docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager
|
||||
ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf
|
||||
rm -f /etc/nginx/conf.d/dev.conf
|
||||
|
||||
mkdir -p /tmp/nginx/body \
|
||||
/run/nginx \
|
||||
/data/nginx \
|
||||
@@ -112,27 +105,33 @@ function update_script() {
|
||||
/var/lib/nginx/cache/public \
|
||||
/var/lib/nginx/cache/private \
|
||||
/var/cache/nginx/proxy_temp
|
||||
|
||||
chmod -R 777 /var/cache/nginx
|
||||
chown root /tmp/nginx
|
||||
|
||||
echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf
|
||||
|
||||
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
|
||||
$STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem
|
||||
fi
|
||||
mkdir -p /app/global /app/frontend/images
|
||||
cp -r frontend/dist/* /app/frontend
|
||||
cp -r frontend/app-images/* /app/frontend/images
|
||||
cp -r backend/* /app
|
||||
cp -r global/* /app/global
|
||||
|
||||
# Update Certbot and plugins in virtual environment
|
||||
if [ -d /opt/certbot ]; then
|
||||
$STD /opt/certbot/bin/pip install --upgrade pip setuptools wheel
|
||||
$STD /opt/certbot/bin/pip install --upgrade certbot certbot-dns-cloudflare
|
||||
fi
|
||||
msg_ok "Setup Environment"
|
||||
mkdir -p /app/frontend/images
|
||||
cp -r /opt/nginxproxymanager/backend/* /app
|
||||
msg_ok "Set up Environment"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
export NODE_OPTIONS="--max_old_space_size=2048 --openssl-legacy-provider"
|
||||
cd /opt/nginxproxymanager/frontend
|
||||
# Replace node-sass with sass in package.json before installation
|
||||
sed -E -i 's/"node-sass" *: *"([^"]*)"/"sass": "\1"/g' package.json
|
||||
$STD yarn install --network-timeout 600000
|
||||
$STD yarn build
|
||||
cp -r /opt/nginxproxymanager/frontend/dist/* /app/frontend
|
||||
cp -r /opt/nginxproxymanager/frontend/public/images/* /app/frontend/images
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Initializing Backend"
|
||||
$STD rm -rf /app/config/default.json
|
||||
rm -rf /app/config/default.json
|
||||
if [ ! -f /app/config/production.json ]; then
|
||||
cat <<'EOF' >/app/config/production.json
|
||||
{
|
||||
@@ -148,23 +147,37 @@ function update_script() {
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
cd /app || exit
|
||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
||||
cd /app
|
||||
$STD yarn install --network-timeout 600000
|
||||
msg_ok "Initialized Backend"
|
||||
|
||||
msg_info "Updating Certbot"
|
||||
[ -f /etc/apt/trusted.gpg.d/openresty-archive-keyring.gpg ] && rm -f /etc/apt/trusted.gpg.d/openresty-archive-keyring.gpg
|
||||
[ -f /etc/apt/sources.list.d/openresty.list ] && rm -f /etc/apt/sources.list.d/openresty.list
|
||||
[ ! -f /etc/apt/trusted.gpg.d/openresty.gpg ] && curl -fsSL https://openresty.org/package/pubkey.gpg | gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/openresty.gpg
|
||||
[ ! -f /etc/apt/sources.list.d/openresty.sources ] && cat <<'EOF' >/etc/apt/sources.list.d/openresty.sources
|
||||
Types: deb
|
||||
URIs: http://openresty.org/package/debian/
|
||||
Suites: bookworm
|
||||
Components: openresty
|
||||
Signed-By: /etc/apt/trusted.gpg.d/openresty.gpg
|
||||
EOF
|
||||
$STD apt update
|
||||
$STD apt -y install openresty
|
||||
if [ -d /opt/certbot ]; then
|
||||
$STD /opt/certbot/bin/pip install --upgrade pip setuptools wheel
|
||||
$STD /opt/certbot/bin/pip install --upgrade certbot certbot-dns-cloudflare
|
||||
fi
|
||||
msg_ok "Updated Certbot"
|
||||
|
||||
msg_info "Starting Services"
|
||||
sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf
|
||||
sed -i 's/su npm npm/su root root/g' /etc/logrotate.d/nginx-proxy-manager
|
||||
sed -i 's/include-system-site-packages = false/include-system-site-packages = true/g' /opt/certbot/pyvenv.cfg
|
||||
sed -r -i 's/^([[:space:]]*)su npm npm/\1#su npm npm/g;' /etc/logrotate.d/nginx-proxy-manager
|
||||
systemctl enable -q --now openresty
|
||||
systemctl enable -q --now npm
|
||||
systemctl restart openresty
|
||||
msg_ok "Started Services"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf ~/nginx-proxy-manager-*
|
||||
msg_ok "Cleaned"
|
||||
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -20,18 +20,18 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/openhab.list ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /usr/lib/systemd/system/openhab.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
$STD apt upgrade -y
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: havardthom
|
||||
# Author: tteck | Co-Author: havardthom | Co-Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://openwebui.com/
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-25}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -23,7 +23,63 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/open-webui ]]; then
|
||||
|
||||
if [[ -d /opt/open-webui ]]; then
|
||||
msg_warn "Legacy installation detected — migrating to uv based install..."
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop open-webui
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
mkdir -p /opt/open-webui-backup
|
||||
cp -a /opt/open-webui/backend/data /opt/open-webui-backup/data || true
|
||||
msg_ok "Created Backup"
|
||||
|
||||
msg_info "Removing legacy installation"
|
||||
rm -rf /opt/open-webui
|
||||
rm -rf /root/.open-webui || true
|
||||
msg_ok "Removed legacy installation"
|
||||
|
||||
msg_info "Installing uv-based Open-WebUI"
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
$STD uv tool install --python 3.12 open-webui[all]
|
||||
msg_ok "Installed uv-based Open-WebUI"
|
||||
|
||||
msg_info "Restoring data"
|
||||
mkdir -p /root/.open-webui
|
||||
cp -a /opt/open-webui-backup/data/* /root/.open-webui/ || true
|
||||
rm -rf /opt/open-webui-backup || true
|
||||
msg_ok "Restored data"
|
||||
|
||||
msg_info "Recreating Service"
|
||||
cat <<EOF >/etc/systemd/system/open-webui.service
|
||||
[Unit]
|
||||
Description=Open WebUI Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Environment=DATA_DIR=/root/.open-webui
|
||||
EnvironmentFile=-/root/.env
|
||||
ExecStart=/root/.local/bin/open-webui serve
|
||||
WorkingDirectory=/root
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
User=root
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
$STD systemctl daemon-reload
|
||||
systemctl enable -q --now open-webui
|
||||
msg_ok "Recreated Service"
|
||||
|
||||
msg_ok "Migration completed"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ ! -d /root/.open-webui ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
@@ -50,29 +106,11 @@ function update_script() {
|
||||
fi
|
||||
fi
|
||||
|
||||
msg_info "Updating ${APP} (Patience)"
|
||||
cd /opt/open-webui
|
||||
mkdir -p /opt/open-webui-backup
|
||||
cp -rf /opt/open-webui/backend/data /opt/open-webui-backup
|
||||
git add -A
|
||||
$STD git stash
|
||||
$STD git reset --hard
|
||||
output=$(git pull --no-rebase)
|
||||
if echo "$output" | grep -q "Already up to date."; then
|
||||
msg_ok "$APP is already up to date."
|
||||
exit
|
||||
fi
|
||||
systemctl stop open-webui.service
|
||||
$STD npm install --force
|
||||
export NODE_OPTIONS="--max-old-space-size=6000"
|
||||
$STD npm run build
|
||||
cd ./backend
|
||||
$STD pip install -r requirements.txt -U
|
||||
cp -rf /opt/open-webui-backup/* /opt/open-webui/backend
|
||||
if git stash list | grep -q 'stash@{'; then
|
||||
$STD git stash pop
|
||||
fi
|
||||
systemctl start open-webui.service
|
||||
msg_info "Updating Open WebUI via uv"
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
$STD uv tool install --python 3.12 open-webui[all]
|
||||
systemctl restart open-webui
|
||||
msg_ok "Updated Open WebUI"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -21,52 +21,52 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/pangolin ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "pangolin" "fosrl/pangolin"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop pangolin
|
||||
systemctl stop gerbil
|
||||
msg_info "Service stopped"
|
||||
|
||||
msg_info "Creating backup"
|
||||
tar -czf /opt/pangolin_config_backup.tar.gz -C /opt/pangolin config
|
||||
msg_ok "Created backup"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_amd64"
|
||||
|
||||
msg_info "Updating Pangolin"
|
||||
cd /opt/pangolin
|
||||
$STD npm ci
|
||||
$STD npm run set:sqlite
|
||||
$STD npm run set:oss
|
||||
rm -rf server/private
|
||||
$STD npm run build:sqlite
|
||||
$STD npm run build:cli
|
||||
cp -R .next/standalone ./
|
||||
chmod +x ./dist/cli.mjs
|
||||
cp server/db/names.json ./dist/names.json
|
||||
msg_ok "Updated Pangolin"
|
||||
|
||||
msg_info "Restoring config"
|
||||
tar -xzf /opt/pangolin_config_backup.tar.gz -C /opt/pangolin --overwrite
|
||||
rm -f /opt/pangolin_config_backup.tar.gz
|
||||
msg_ok "Restored config"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start pangolin
|
||||
systemctl start gerbil
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/pangolin ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "pangolin" "fosrl/pangolin"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop pangolin
|
||||
systemctl stop gerbil
|
||||
msg_info "Service stopped"
|
||||
|
||||
msg_info "Creating backup"
|
||||
tar -czf /opt/pangolin_config_backup.tar.gz -C /opt/pangolin config
|
||||
msg_ok "Created backup"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_amd64"
|
||||
|
||||
msg_info "Updating Pangolin"
|
||||
cd /opt/pangolin
|
||||
$STD npm ci
|
||||
$STD npm run set:sqlite
|
||||
$STD npm run set:oss
|
||||
rm -rf server/private
|
||||
$STD npm run build:sqlite
|
||||
$STD npm run build:cli
|
||||
cp -R .next/standalone ./
|
||||
chmod +x ./dist/cli.mjs
|
||||
cp server/db/names.json ./dist/names.json
|
||||
msg_ok "Updated Pangolin"
|
||||
|
||||
msg_info "Restoring config"
|
||||
tar -xzf /opt/pangolin_config_backup.tar.gz -C /opt/pangolin --overwrite
|
||||
rm -f /opt/pangolin_config_backup.tar.gz
|
||||
msg_ok "Restored config"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start pangolin
|
||||
systemctl start gerbil
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
@@ -76,4 +76,4 @@ description
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3002${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}https://<YOUR_PANGOLIN_URL>${CL}"
|
||||
|
||||
@@ -35,24 +35,38 @@ function update_script() {
|
||||
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
|
||||
|
||||
msg_info "Backing up data"
|
||||
mkdir -p /opt/paperless/backup
|
||||
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||
mkdir -p /opt/paperless_backup
|
||||
cp -r /opt/paperless/data /opt/paperless_backup/
|
||||
cp -r /opt/paperless/media /opt/paperless_backup/
|
||||
cp -r /opt/paperless/paperless.conf /opt/paperless_backup/
|
||||
msg_ok "Backup completed"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
setup_gs
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
|
||||
. /etc/os-release
|
||||
if [ "$VERSION_CODENAME" = "bookworm" ]; then
|
||||
setup_gs
|
||||
else
|
||||
$STD apt install -y ghostscript
|
||||
fi
|
||||
|
||||
msg_info "Updating Paperless-ngx"
|
||||
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||
cp -r /opt/paperless_backup/* /opt/paperless/
|
||||
CONSUME_DIR="$(sed -n 's/^PAPERLESS_CONSUMPTION_DIR=//p' /opt/paperless/paperless.conf)"
|
||||
if [[ -z "$CONSUME_DIR" ]]; then
|
||||
CONSUME_DIR="/opt/paperless/consume"
|
||||
fi
|
||||
mkdir -p "$CONSUME_DIR"
|
||||
cd /opt/paperless
|
||||
$STD uv sync --all-extras
|
||||
cd /opt/paperless/src
|
||||
$STD uv run -- python manage.py migrate
|
||||
msg_ok "Updated Paperless-ngx"
|
||||
|
||||
rm -rf /opt/paperless_backup
|
||||
|
||||
else
|
||||
msg_warn "You are about to migrate your Paperless-ngx installation to uv!"
|
||||
msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:"
|
||||
@@ -96,24 +110,40 @@ function update_script() {
|
||||
|
||||
$STD systemctl daemon-reload
|
||||
msg_info "Backing up data"
|
||||
mkdir -p /opt/paperless/backup
|
||||
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||
mkdir -p /opt/paperless_backup
|
||||
cp -r /opt/paperless/data /opt/paperless_backup/
|
||||
cp -r /opt/paperless/media /opt/paperless_backup/
|
||||
cp -r /opt/paperless/paperless.conf /opt/paperless_backup/
|
||||
msg_ok "Backup completed"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
setup_gs
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
|
||||
. /etc/os-release
|
||||
if [ "$VERSION_CODENAME" = "bookworm" ]; then
|
||||
setup_gs
|
||||
else
|
||||
msg_info "Installing Ghostscript"
|
||||
$STD apt install -y ghostscript
|
||||
msg_ok "Installed Ghostscript"
|
||||
fi
|
||||
|
||||
msg_info "Updating Paperless-ngx"
|
||||
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||
cp -r /opt/paperless_backup/* /opt/paperless/
|
||||
CONSUME_DIR="$(sed -n '/^PAPERLESS_CONSUMPTION/s/[^=]=*//p' /opt/paperless/paperless.conf)"
|
||||
mkdir -p "${CONSUME_DIR:-/opt/paperless/consume}"
|
||||
cd /opt/paperless
|
||||
$STD uv sync --all-extras
|
||||
cd /opt/paperless/src
|
||||
$STD uv run -- python manage.py migrate
|
||||
msg_ok "Paperless-ngx migration and update completed"
|
||||
|
||||
rm -rf /opt/paperless_backup
|
||||
if [[ -d /opt/paperless/backup ]]; then
|
||||
rm -rf /opt/paperless/backup
|
||||
msg_ok "Removed old backup directory"
|
||||
fi
|
||||
fi
|
||||
|
||||
msg_info "Starting all Paperless-ngx Services"
|
||||
|
||||
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
APP="Part-DB"
|
||||
var_tags="${var_tags:-inventory;parts}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
|
||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
# Source: https://github.com/Brandawg93/PeaNUT/
|
||||
|
||||
APP="PeaNUT"
|
||||
var_tags="${var_tags:-network;ups;}"
|
||||
var_tags="${var_tags:-network;ups}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-7}"
|
||||
@@ -35,7 +35,7 @@ function update_script() {
|
||||
systemctl stop peanut
|
||||
msg_info "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
|
||||
msg_info "Updating $APP"
|
||||
cd /opt/peanut
|
||||
|
||||
@@ -33,17 +33,22 @@ function update_script() {
|
||||
systemctl stop apache2
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
PHP_VERSION="8.3" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,gmp,snmp,ldap,apcu" setup_php
|
||||
|
||||
msg_info "Installing PHP-PEAR"
|
||||
$STD apt install -y \
|
||||
php-pear \
|
||||
php-dev
|
||||
msg_ok "Installed PHP-PEAR"
|
||||
|
||||
mv /opt/phpipam/ /opt/phpipam-backup
|
||||
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||
cp /opt/phpipam-backup/config.php /opt/phpipam
|
||||
rm -r /opt/phpipam-backup
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start apache2
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -r /opt/phpipam-backup
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
|
||||
@@ -23,7 +23,7 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]]; then
|
||||
if [ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]] && [[ ! -f /etc/apt/sources.list.d/plexmediaserver.sources ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
@@ -39,6 +39,7 @@ function update_script() {
|
||||
msg_ok "Backup created"
|
||||
|
||||
msg_info "Installing sonarqube"
|
||||
temp_file=$(mktemp)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/SonarSource/sonarqube/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||
unzip -q "$temp_file" -d /opt
|
||||
|
||||
41
ct/splunk-enterprise.sh
Normal file
41
ct/splunk-enterprise.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/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: rcastley
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.splunk.com/en_us/download.html
|
||||
|
||||
APP="Splunk-Enterprise"
|
||||
var_tags="${var_tags:-monitoring}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-40}"
|
||||
var_os="${var_os:-ubuntu}"
|
||||
var_version="${var_version:-24.04}"
|
||||
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/splunk ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||
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 the Splunk Enterprise Web interface using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||
@@ -28,6 +28,11 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if is_package_installed "aspnetcore-runtime-8.0"; then
|
||||
$STD apt remove -y aspnetcore-runtime-8.0
|
||||
$STD apt install -y aspnetcore-runtime-9.0
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
|
||||
if [[ ! -f ~/.technitium || "${RELEASE}" != "$(cat ~/.technitium)" ]]; then
|
||||
msg_info "Updating Technitium DNS"
|
||||
|
||||
21
ct/tududi.sh
21
ct/tududi.sh
@@ -35,14 +35,15 @@ function update_script() {
|
||||
systemctl stop tududi
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Remove and backup Files"
|
||||
DB="$(sed -n '/^DB_FILE/s/[^=]*=//p' /opt/tududi/backend/.env)"
|
||||
export DB_FILE="$DB"
|
||||
cp /opt/tududi/backend/.env /opt/tududi.env
|
||||
rm -rf /opt/tududi/backend/dist
|
||||
msg_ok "Backup and removed Files"
|
||||
msg_info "Backing up env file"
|
||||
if [[ -f /opt/tududi/backend/.env ]]; then
|
||||
cp /opt/tududi/backend/.env /opt/tududi.env
|
||||
else
|
||||
cp /opt/tududi/.env /opt/tududi.env
|
||||
fi
|
||||
msg_ok "Backed up env file"
|
||||
|
||||
fetch_and_deploy_gh_release "tududi" "chrisvel/tududi" "tarball" "latest" "/opt/tududi"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tududi" "chrisvel/tududi" "tarball" "latest" "/opt/tududi"
|
||||
|
||||
msg_info "Updating Tududi"
|
||||
cd /opt/tududi
|
||||
@@ -50,9 +51,9 @@ function update_script() {
|
||||
export NODE_ENV=production
|
||||
$STD npm run frontend:build
|
||||
mv ./dist ./backend
|
||||
mv ./public/locales ./backend/dist
|
||||
mv ./public/favicon.* ./backend/dist
|
||||
mv /opt/tududi.env /opt/tududi/.env
|
||||
mv /opt/tududi.env /opt/tududi/backend/.env
|
||||
DB="$(sed -n '/^DB_FILE/s/[^=]*=//p' /opt/tududi/backend/.env)"
|
||||
export DB_FILE="$DB"
|
||||
sed -i -e 's|/tududi$|/tududi/backend|' \
|
||||
-e 's|npm run start|bash /opt/tududi/backend/cmd/start.sh|' \
|
||||
/etc/systemd/system/tududi.service
|
||||
|
||||
@@ -27,7 +27,35 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "Currently we don't provide an update function for this App."
|
||||
|
||||
if check_for_gh_release "web-check" "CrazyWolf13/web-check"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop web-check
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating backup"
|
||||
mv /opt/web-check/.env /opt
|
||||
msg_ok "Created backup"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "web-check" "CrazyWolf13/web-check"
|
||||
|
||||
msg_info "Restoring backup"
|
||||
mv /opt/.env /opt/web-check
|
||||
msg_ok "Restored backup"
|
||||
|
||||
msg_info "Building Web-Check"
|
||||
cd /opt/web-check
|
||||
$STD yarn install --frozen-lockfile --network-timeout 100000
|
||||
$STD yarn build --production
|
||||
$STD npm cache clean --force
|
||||
msg_ok "Built Web-Check"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start web-check
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
16
ct/zabbix.sh
16
ct/zabbix.sh
@@ -42,12 +42,8 @@ function update_script() {
|
||||
fi
|
||||
|
||||
msg_info "Stopping Services"
|
||||
$STD systemctl stop zabbix-server
|
||||
if systemctl list-unit-files | grep -q zabbix-agent2; then
|
||||
$STD systemctl stop zabbix-agent2
|
||||
else
|
||||
$STD systemctl stop zabbix-agent
|
||||
fi
|
||||
systemctl stop zabbix-server
|
||||
systemctl stop "$AGENT_SERVICE"
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Updating Zabbix"
|
||||
@@ -88,12 +84,8 @@ function update_script() {
|
||||
msg_ok "Updated Zabbix"
|
||||
|
||||
msg_info "Starting Services"
|
||||
$STD systemctl start zabbix-server
|
||||
if systemctl list-unit-files | grep -q zabbix-agent2; then
|
||||
$STD systemctl start zabbix-agent2
|
||||
else
|
||||
$STD systemctl start zabbix-agent
|
||||
fi
|
||||
systemctl start zabbix-server
|
||||
systemctl start "$AGENT_SERVICE"
|
||||
systemctl restart apache2
|
||||
msg_ok "Started Services"
|
||||
|
||||
|
||||
@@ -33,8 +33,12 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Set a root password if using autologin. This will be the Cockpit password.`sudo passwd root`",
|
||||
"text": "Set a root password if using autologin. This will be the Cockpit password. To set root password run `sudo passwd root`",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "If you plan on using 45Drives extension with NFS, you must setup LXC as privileged. Some features of 45Drives don't work on Debian 13, so Debian 12 must be used.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "Dashy",
|
||||
"slug": "dashy",
|
||||
"categories": [
|
||||
10
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 4000,
|
||||
"documentation": "https://dashy.to/docs",
|
||||
"website": "https://dashy.to/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dashy.webp",
|
||||
"config_path": "/opt/dashy/user-data/conf.yml",
|
||||
"description": "Dashy is a solution that helps you organize your self-hosted services by centralizing access to them through a single interface.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/dashy.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 6,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
35
frontend/public/json/domain-monitor.json
Normal file
35
frontend/public/json/domain-monitor.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Domain Monitor",
|
||||
"slug": "domain-monitor",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-11-11",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://github.com/Hosteroid/domain-monitor/blob/main/README.md",
|
||||
"config_path": "/opt/domain-monitor/.env",
|
||||
"website": "https://github.com/Hosteroid/domain-monitor",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/domain-monitor.png",
|
||||
"description": "A self-hosted PHP domain expiration monitoring tool that tracks domain expiry dates, RDAP/WHOIS data, and SSL certificate validity. Supports alerts, multi-user setup, and cron automation. Built for developers, hosting providers, and IT admins who want full control without third-party services.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/domain-monitor.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
"privileged": false,
|
||||
"interface_port": 2021,
|
||||
"documentation": "https://docs.donetick.com/getting-started/",
|
||||
"config_path": "/opt/donetick/selfhosted.yml",
|
||||
"config_path": "/opt/donetick/config/selfhosted.yml",
|
||||
"website": "https://donetick.com",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/donetick.webp",
|
||||
"description": "Donetick an open-source, user-friendly app for managing tasks and chores, featuring customizable options to help you and others stay organized",
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "Fenrus",
|
||||
"slug": "fenrus",
|
||||
"categories": [
|
||||
10
|
||||
],
|
||||
"date_created": "2024-05-05",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": false,
|
||||
"interface_port": 5000,
|
||||
"documentation": "https://github.com/revenz/Fenrus/wiki",
|
||||
"website": "https://github.com/revenz/Fenrus",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/fenrus.webp",
|
||||
"config_path": "",
|
||||
"description": "A personal home page for quick access to all your personal apps/sites.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/fenrus.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -1,44 +1,44 @@
|
||||
{
|
||||
"name": "Graylog",
|
||||
"slug": "graylog",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-02-12",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9000,
|
||||
"documentation": "https://go2docs.graylog.org/current/home.htm",
|
||||
"website": "https://graylog.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/graylog.webp",
|
||||
"config_path": "/etc/graylog/server/server.conf",
|
||||
"description": "Graylog is an open-source log management and analysis platform that centralizes and processes log data from various sources, enabling real-time search, analysis, and alerting for IT infrastructure monitoring and troubleshooting.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/graylog.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 8192,
|
||||
"hdd": 30,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
"name": "Graylog",
|
||||
"slug": "graylog",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-02-12",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9000,
|
||||
"documentation": "https://go2docs.graylog.org/current/home.htm",
|
||||
"website": "https://graylog.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/graylog.webp",
|
||||
"config_path": "/etc/graylog/server/server.conf",
|
||||
"description": "Graylog is an open-source log management and analysis platform that centralizes and processes log data from various sources, enabling real-time search, analysis, and alerting for IT infrastructure monitoring and troubleshooting.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/graylog.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 8192,
|
||||
"hdd": 30,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Initial Setup credentials: `tail /var/log/graylog-server/server.log` after the server starts for the first time.",
|
||||
"type": "info"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Initial Setup credentials: `tail /var/log/graylog-server/server.log` after the server starts for the first time.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Type `cat ~/graylog.creds` to get admin password that you use to log in AFTER the Initial Setup",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
{
|
||||
"text": "Type `cat ~/graylog.creds` to get admin password that you use to log in AFTER the Initial Setup",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 5,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 6144,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -1,56 +1,56 @@
|
||||
{
|
||||
"name": "Home Assistant Container",
|
||||
"slug": "homeassistant",
|
||||
"categories": [
|
||||
16
|
||||
],
|
||||
"date_created": "2024-04-29",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8123,
|
||||
"documentation": "https://www.home-assistant.io/docs/",
|
||||
"website": "https://www.home-assistant.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp",
|
||||
"config_path": "/var/lib/docker/volumes/hass_config/_data",
|
||||
"description": "A standalone container-based installation of Home Assistant Core means that the software is installed inside a Docker container, separate from the host operating system. This allows for flexibility and scalability, as well as improved security, as the container can be easily moved or isolated from other processes on the host.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/homeassistant.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 16,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
"name": "Home Assistant Container",
|
||||
"slug": "homeassistant",
|
||||
"categories": [
|
||||
16
|
||||
],
|
||||
"date_created": "2024-04-29",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8123,
|
||||
"documentation": "https://www.home-assistant.io/docs/",
|
||||
"website": "https://www.home-assistant.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp",
|
||||
"config_path": "/var/lib/docker/volumes/hass_config/_data",
|
||||
"description": "A standalone container-based installation of Home Assistant Core means that the software is installed inside a Docker container, separate from the host operating system. This allows for flexibility and scalability, as well as improved security, as the container can be easily moved or isolated from other processes on the host.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/homeassistant.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 16,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Containerized version doesn't allow Home Assistant add-ons.",
|
||||
"type": "warning"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Containerized version doesn't allow Home Assistant add-ons.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "config path: `/var/lib/docker/volumes/hass_config/_data`",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Portainer interface: $IP: 9443 - User & password must be set manually within 5 minutes, otherwise a restart of Portainer is required!",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
{
|
||||
"text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "config path: `/var/lib/docker/volumes/hass_config/_data`",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Portainer interface: $IP: 9443 - User & password must be set manually within 5 minutes, otherwise a restart of Portainer is required!",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 5,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
35
frontend/public/json/infisical.json
Normal file
35
frontend/public/json/infisical.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Infisical",
|
||||
"slug": "infisical",
|
||||
"categories": [
|
||||
6
|
||||
],
|
||||
"date_created": "2025-11-07",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://infisical.com/docs/documentation/getting-started/overview",
|
||||
"config_path": "/etc/infisical/infisical.rb",
|
||||
"website": "https://infisical.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/infisical.webp",
|
||||
"description": "Secrets, certificates, and access management on autopilot. All-in-one platform to securely manage application secrets, certificates, SSH keys, and configurations across your team and infrastructure.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/infisical.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 6,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": null,
|
||||
"version": null
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 6,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 10,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user