mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-16 12:13:29 +01:00
Compare commits
11 Commits
2025-02-24
...
2025-02-25
| Author | SHA1 | Date | |
|---|---|---|---|
| d564dc0ecb | |||
| cb462dcb39 | |||
| 3401b76c44 | |||
| 599a518cc3 | |||
| 59223628af | |||
| 029332fb51 | |||
| aba73bd0f8 | |||
| 893bff1b59 | |||
| bef3ccd164 | |||
| 02fb3ab9b4 | |||
| 87c17fc16d |
2
.github/autolabeler-config.json
vendored
2
.github/autolabeler-config.json
vendored
@ -67,5 +67,5 @@
|
|||||||
"includeGlobs": ["misc/build.func", "misc/install.func", "ct/create_lxc.sh"],
|
"includeGlobs": ["misc/build.func", "misc/install.func", "ct/create_lxc.sh"],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
21
.github/changelog-pr-config.json
vendored
21
.github/changelog-pr-config.json
vendored
@ -7,14 +7,27 @@
|
|||||||
"title": "🆕 New Scripts",
|
"title": "🆕 New Scripts",
|
||||||
"labels": ["new script"]
|
"labels": ["new script"]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"title": "🐞 Bug Fixes",
|
|
||||||
"labels": ["bugfix"]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"title": "✨ New Features",
|
"title": "✨ New Features",
|
||||||
"labels": ["feature"]
|
"labels": ["feature"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"title": "🚀 Updated Scripts",
|
||||||
|
"labels": ["update script"],
|
||||||
|
"subCategories": [
|
||||||
|
{
|
||||||
|
"title": "🐞 Bug Fixes",
|
||||||
|
"labels": ["bugfix"],
|
||||||
|
"notes" : []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "General Updates",
|
||||||
|
"labels": ["general"],
|
||||||
|
"notes" : []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"title": "🌐 Website",
|
"title": "🌐 Website",
|
||||||
"labels": ["website"]
|
"labels": ["website"]
|
||||||
|
|||||||
43
.github/workflows/autolabeler.yml
vendored
43
.github/workflows/autolabeler.yml
vendored
@ -32,8 +32,8 @@ jobs:
|
|||||||
const autolabelerConfig = JSON.parse(fileContent);
|
const autolabelerConfig = JSON.parse(fileContent);
|
||||||
|
|
||||||
const prNumber = context.payload.pull_request.number;
|
const prNumber = context.payload.pull_request.number;
|
||||||
const prBody = context.payload.pull_request.body;
|
const prBody = context.payload.pull_request.body.toLowerCase();
|
||||||
|
|
||||||
let labelsToAdd = new Set();
|
let labelsToAdd = new Set();
|
||||||
|
|
||||||
const prListFilesResponse = await github.rest.pulls.listFiles({
|
const prListFilesResponse = await github.rest.pulls.listFiles({
|
||||||
@ -42,14 +42,35 @@ jobs:
|
|||||||
pull_number: prNumber,
|
pull_number: prNumber,
|
||||||
});
|
});
|
||||||
const prFiles = prListFilesResponse.data;
|
const prFiles = prListFilesResponse.data;
|
||||||
|
|
||||||
|
const templateLabelMappings = {
|
||||||
|
"🐞 **bug fix**": "bugfix",
|
||||||
|
"✨ **new feature**": "feature",
|
||||||
|
"💥 **breaking change**": "breaking change",
|
||||||
|
"🆕 **new script**": "new script"
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
|
||||||
|
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
|
||||||
|
const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
|
||||||
|
const match = prBody.match(regex);
|
||||||
|
if (match) {
|
||||||
|
console.log(`Match: ${match}`);
|
||||||
|
labelsToAdd.add(label);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (labelsToAdd.size === 0) {
|
||||||
|
labelsToAdd.add("general");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply labels based on file changes
|
||||||
for (const [label, rules] of Object.entries(autolabelerConfig)) {
|
for (const [label, rules] of Object.entries(autolabelerConfig)) {
|
||||||
const shouldAddLabel = prFiles.some((prFile) => {
|
const shouldAddLabel = prFiles.some((prFile) => {
|
||||||
return rules.some((rule) => {
|
return rules.some((rule) => {
|
||||||
const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
|
const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
|
||||||
const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
|
const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
|
||||||
const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
|
const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
|
||||||
|
|
||||||
return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
|
return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -58,21 +79,7 @@ jobs:
|
|||||||
labelsToAdd.add(label);
|
labelsToAdd.add(label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const templateLabelMappings = {
|
|
||||||
"🐞 bug fix": "bugfix",
|
|
||||||
"✨ new feature": "feature",
|
|
||||||
"💥 breaking change": "breaking change",
|
|
||||||
"🆕 new script": "new script"
|
|
||||||
};
|
|
||||||
|
|
||||||
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
|
|
||||||
const regex = new RegExp(`- \\[x\\] ${checkbox}`, "i"); // Match only checked checkboxes
|
|
||||||
if (regex.test(prBody)) {
|
|
||||||
labelsToAdd.add(label);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
|
console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
|
||||||
|
|
||||||
if (labelsToAdd.size > 0) {
|
if (labelsToAdd.size > 0) {
|
||||||
|
|||||||
89
.github/workflows/changelog-pr.yml
vendored
89
.github/workflows/changelog-pr.yml
vendored
@ -30,7 +30,6 @@ jobs:
|
|||||||
|
|
||||||
- name: Get latest dates in changelog
|
- name: Get latest dates in changelog
|
||||||
run: |
|
run: |
|
||||||
# Extrahiere die neuesten zwei Daten aus dem Changelog
|
|
||||||
DATES=$(grep -E '^## [0-9]{4}-[0-9]{2}-[0-9]{2}' CHANGELOG.md | head -n 2 | awk '{print $2}')
|
DATES=$(grep -E '^## [0-9]{4}-[0-9]{2}-[0-9]{2}' CHANGELOG.md | head -n 2 | awk '{print $2}')
|
||||||
|
|
||||||
LATEST_DATE=$(echo "$DATES" | sed -n '1p')
|
LATEST_DATE=$(echo "$DATES" | sed -n '1p')
|
||||||
@ -55,7 +54,15 @@ jobs:
|
|||||||
const configPath = path.resolve(process.env.CONFIG_PATH);
|
const configPath = path.resolve(process.env.CONFIG_PATH);
|
||||||
const fileContent = await fs.readFile(configPath, 'utf-8');
|
const fileContent = await fs.readFile(configPath, 'utf-8');
|
||||||
const changelogConfig = JSON.parse(fileContent);
|
const changelogConfig = JSON.parse(fileContent);
|
||||||
const categorizedPRs = changelogConfig.map(obj => ({ ...obj, notes: [] }));
|
|
||||||
|
const categorizedPRs = changelogConfig.map(obj => ({
|
||||||
|
...obj,
|
||||||
|
notes: [],
|
||||||
|
subCategories: obj.subCategories ?? (obj.labels.includes("update script") ? [
|
||||||
|
{ title: "🐞 Bug Fixes", labels: ["bugfix"] },
|
||||||
|
{ title: "✨ Feature Updates", labels: ["feature"] }
|
||||||
|
] : [])
|
||||||
|
}));
|
||||||
|
|
||||||
const latestDateInChangelog = new Date(process.env.LATEST_DATE);
|
const latestDateInChangelog = new Date(process.env.LATEST_DATE);
|
||||||
latestDateInChangelog.setUTCHours(23, 59, 59, 999);
|
latestDateInChangelog.setUTCHours(23, 59, 59, 999);
|
||||||
@ -70,40 +77,36 @@ jobs:
|
|||||||
per_page: 100,
|
per_page: 100,
|
||||||
});
|
});
|
||||||
|
|
||||||
pulls.filter(pr =>
|
pulls.filter(pr =>
|
||||||
pr.merged_at &&
|
pr.merged_at &&
|
||||||
new Date(pr.merged_at) > latestDateInChangelog &&
|
new Date(pr.merged_at) > latestDateInChangelog &&
|
||||||
!pr.labels.some(label => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
|
!pr.labels.some(label =>
|
||||||
|
["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase())
|
||||||
|
)
|
||||||
).forEach(pr => {
|
).forEach(pr => {
|
||||||
|
|
||||||
const prLabels = pr.labels.map(label => label.name.toLowerCase());
|
const prLabels = pr.labels.map(label => label.name.toLowerCase());
|
||||||
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
|
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
|
||||||
|
|
||||||
let isCategorized = false;
|
const updateScriptsCategory = categorizedPRs.find(category =>
|
||||||
|
category.labels.some(label => prLabels.includes(label))
|
||||||
|
);
|
||||||
|
|
||||||
for (const { labels, notes } of categorizedPRs) {
|
if (updateScriptsCategory) {
|
||||||
// If no labels are specified (e.g., "Unlabelled"), assign to this category
|
|
||||||
if (labels.length === 0 && prLabels.length === 0) {
|
const subCategory = updateScriptsCategory.subCategories.find(sub =>
|
||||||
notes.push(prNote);
|
sub.labels.some(label => prLabels.includes(label))
|
||||||
isCategorized = true;
|
);
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If labels are specified, check if PR has ALL required labels
|
if (subCategory) {
|
||||||
if (labels.length > 0 && labels.every(label => prLabels.includes(label.toLowerCase()))) {
|
subCategory.notes.push(prNote);
|
||||||
notes.push(prNote);
|
} else {
|
||||||
isCategorized = true;
|
updateScriptsCategory.notes.push(prNote);
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If PR is not categorized, assign it to the "Unlabelled" category
|
|
||||||
if (!isCategorized) {
|
|
||||||
const unlabelledCategory = categorizedPRs.find(cat => cat.title === "❔ Unlabelled");
|
|
||||||
if (unlabelledCategory) {
|
|
||||||
unlabelledCategory.notes.push(prNote);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log(JSON.stringify(categorizedPRs, null, 2));
|
||||||
|
|
||||||
return categorizedPRs;
|
return categorizedPRs;
|
||||||
|
|
||||||
@ -119,13 +122,33 @@ jobs:
|
|||||||
const changelogPath = path.resolve('CHANGELOG.md');
|
const changelogPath = path.resolve('CHANGELOG.md');
|
||||||
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
|
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
|
||||||
|
|
||||||
let newReleaseNotes = `## ${today}\n\n### Changes\n\n`;
|
console.log(JSON.stringify(categorizedPRs, null, 2));
|
||||||
for (const { title, notes } of categorizedPRs) {
|
|
||||||
if (notes.length > 0) {
|
|
||||||
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
let newReleaseNotes = `## ${today}\n\n### Changes\n\n`;
|
||||||
|
for (const { title, notes, subCategories } of categorizedPRs) {
|
||||||
|
const hasSubcategories = subCategories && subCategories.length > 0;
|
||||||
|
const hasMainNotes = notes.length > 0;
|
||||||
|
const hasSubNotes = hasSubcategories && subCategories.some(sub => sub.notes && sub.notes.length > 0);
|
||||||
|
|
||||||
|
|
||||||
|
if (hasMainNotes || hasSubNotes) {
|
||||||
|
newReleaseNotes += `### ${title}\n\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasMainNotes) {
|
||||||
|
newReleaseNotes += `${notes.join("\n")}\n\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasSubcategories) {
|
||||||
|
for (const { title: subTitle, notes: subNotes } of subCategories) {
|
||||||
|
if (subNotes && subNotes.length > 0) {
|
||||||
|
newReleaseNotes += ` #### ${subTitle}\n\n`;
|
||||||
|
newReleaseNotes += ` ${subNotes.join("\n ")}\n\n`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const changelogContent = await fs.readFile(changelogPath, 'utf-8');
|
const changelogContent = await fs.readFile(changelogPath, 'utf-8');
|
||||||
const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
|
const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
|
||||||
|
|
||||||
|
|||||||
22
CHANGELOG.md
22
CHANGELOG.md
@ -17,6 +17,28 @@ All LXC instances created using this repository come pre-installed with Midnight
|
|||||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
||||||
|
|
||||||
|
|
||||||
|
## 2025-02-25
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
### ✨ New Features
|
||||||
|
|
||||||
|
- Update Tailscale: Add Tag when installation is finished [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2633](https://github.com/community-scripts/ProxmoxVE/pull/2633))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
#### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix Omada installer [@JcMinarro](https://github.com/JcMinarro) ([#2625](https://github.com/community-scripts/ProxmoxVE/pull/2625))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Update Tailscale-lxc Json: Add message for Supported OS [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2629](https://github.com/community-scripts/ProxmoxVE/pull/2629))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- [gh] Updated Changelog Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2632](https://github.com/community-scripts/ProxmoxVE/pull/2632))
|
||||||
|
|
||||||
## 2025-02-24
|
## 2025-02-24
|
||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
|
|||||||
@ -29,9 +29,11 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating MongoDB"
|
msg_info "Updating MongoDB"
|
||||||
MONGODB_VERSION="8.0"
|
MONGODB_VERSION="7.0"
|
||||||
if ! lscpu | grep -q 'avx'; then
|
if ! lscpu | grep -q 'avx'; then
|
||||||
MONGODB_VERSION="4.4"
|
MONGODB_VERSION="4.4"
|
||||||
|
msg_error "No AVX detected: TP-Link Canceled Support for Old MongoDB for Debian 12\n https://www.tp-link.com/baltic/support/faq/4160/"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
wget -qO- https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
|
wget -qO- https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
|
||||||
|
|||||||
@ -20,12 +20,13 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Checking CPU Features"
|
msg_info "Checking CPU Features"
|
||||||
if lscpu | grep -q 'avx'; then
|
if lscpu | grep -q 'avx'; then
|
||||||
USE_AVX=true
|
USE_AVX=true
|
||||||
MONGODB_VERSION="8.0"
|
MONGODB_VERSION="7.0"
|
||||||
msg_ok "AVX detected: Using MongoDB 8.0"
|
msg_ok "AVX detected: Using MongoDB 7.0"
|
||||||
else
|
else
|
||||||
USE_AVX=false
|
USE_AVX=false
|
||||||
MONGODB_VERSION="4.4"
|
MONGODB_VERSION="4.4"
|
||||||
msg_ok "No AVX detected: Using MongoDB 4.4"
|
msg_error "No AVX detected: TP-Link Canceled Support for Old MongoDB for Debian 12\n https://www.tp-link.com/baltic/support/faq/4160/"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Installing Azul Zulu Java"
|
msg_info "Installing Azul Zulu Java"
|
||||||
|
|||||||
@ -31,6 +31,10 @@
|
|||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Only supported on Debian 12 LXCs",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"text": "After the script finishes, reboot the LXC then run `tailscale up` in the LXC console",
|
"text": "After the script finishes, reboot the LXC then run `tailscale up` in the LXC console",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
@ -40,4 +44,4 @@
|
|||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,6 +67,9 @@ echo "deb [signed-by=/usr/share/keyrings/tailscale-archive-keyring.gpg] https://
|
|||||||
apt-get update &>/dev/null
|
apt-get update &>/dev/null
|
||||||
apt-get install -y tailscale &>/dev/null
|
apt-get install -y tailscale &>/dev/null
|
||||||
' || exit
|
' || exit
|
||||||
|
TAGS=$(awk -F': ' '/^tags:/ {print $2}' /etc/pve/lxc/${CTID}.conf)
|
||||||
|
TAGS="${TAGS:+$TAGS; }tailscale"
|
||||||
|
pct set "$CTID" -tags "${TAGS}"
|
||||||
msg "\e[1;32m ✔ Installed Tailscale\e[0m"
|
msg "\e[1;32m ✔ Installed Tailscale\e[0m"
|
||||||
|
|
||||||
msg "\e[1;31m Reboot ${CTID} LXC to apply the changes, then run tailscale up in the LXC console\e[0m"
|
msg "\e[1;31m Reboot ${CTID} LXC to apply the changes, then run tailscale up in the LXC console\e[0m"
|
||||||
|
|||||||
Reference in New Issue
Block a user