mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-15 19:53:31 +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"],
|
||||
"excludeGlobs": []
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
|
||||
21
.github/changelog-pr-config.json
vendored
21
.github/changelog-pr-config.json
vendored
@ -7,14 +7,27 @@
|
||||
"title": "🆕 New Scripts",
|
||||
"labels": ["new script"]
|
||||
},
|
||||
{
|
||||
"title": "🐞 Bug Fixes",
|
||||
"labels": ["bugfix"]
|
||||
},
|
||||
{
|
||||
"title": "✨ New Features",
|
||||
"labels": ["feature"]
|
||||
},
|
||||
{
|
||||
"title": "🚀 Updated Scripts",
|
||||
"labels": ["update script"],
|
||||
"subCategories": [
|
||||
{
|
||||
"title": "🐞 Bug Fixes",
|
||||
"labels": ["bugfix"],
|
||||
"notes" : []
|
||||
},
|
||||
{
|
||||
"title": "General Updates",
|
||||
"labels": ["general"],
|
||||
"notes" : []
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"title": "🌐 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 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();
|
||||
|
||||
const prListFilesResponse = await github.rest.pulls.listFiles({
|
||||
@ -42,14 +42,35 @@ jobs:
|
||||
pull_number: prNumber,
|
||||
});
|
||||
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)) {
|
||||
const shouldAddLabel = prFiles.some((prFile) => {
|
||||
return rules.some((rule) => {
|
||||
const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
|
||||
const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
|
||||
const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
|
||||
|
||||
|
||||
return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
|
||||
});
|
||||
});
|
||||
@ -58,21 +79,7 @@ jobs:
|
||||
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(", ")}`);
|
||||
|
||||
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
|
||||
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}')
|
||||
|
||||
LATEST_DATE=$(echo "$DATES" | sed -n '1p')
|
||||
@ -55,7 +54,15 @@ jobs:
|
||||
const configPath = path.resolve(process.env.CONFIG_PATH);
|
||||
const fileContent = await fs.readFile(configPath, 'utf-8');
|
||||
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);
|
||||
latestDateInChangelog.setUTCHours(23, 59, 59, 999);
|
||||
@ -70,40 +77,36 @@ jobs:
|
||||
per_page: 100,
|
||||
});
|
||||
|
||||
pulls.filter(pr =>
|
||||
pr.merged_at &&
|
||||
new Date(pr.merged_at) > latestDateInChangelog &&
|
||||
!pr.labels.some(label => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
|
||||
pulls.filter(pr =>
|
||||
pr.merged_at &&
|
||||
new Date(pr.merged_at) > latestDateInChangelog &&
|
||||
!pr.labels.some(label =>
|
||||
["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase())
|
||||
)
|
||||
).forEach(pr => {
|
||||
|
||||
const prLabels = pr.labels.map(label => label.name.toLowerCase());
|
||||
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
|
||||
|
||||
let isCategorized = false;
|
||||
const updateScriptsCategory = categorizedPRs.find(category =>
|
||||
category.labels.some(label => prLabels.includes(label))
|
||||
);
|
||||
|
||||
for (const { labels, notes } of categorizedPRs) {
|
||||
// If no labels are specified (e.g., "Unlabelled"), assign to this category
|
||||
if (labels.length === 0 && prLabels.length === 0) {
|
||||
notes.push(prNote);
|
||||
isCategorized = true;
|
||||
break;
|
||||
}
|
||||
if (updateScriptsCategory) {
|
||||
|
||||
const subCategory = updateScriptsCategory.subCategories.find(sub =>
|
||||
sub.labels.some(label => prLabels.includes(label))
|
||||
);
|
||||
|
||||
// If labels are specified, check if PR has ALL required labels
|
||||
if (labels.length > 0 && labels.every(label => prLabels.includes(label.toLowerCase()))) {
|
||||
notes.push(prNote);
|
||||
isCategorized = true;
|
||||
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);
|
||||
if (subCategory) {
|
||||
subCategory.notes.push(prNote);
|
||||
} else {
|
||||
updateScriptsCategory.notes.push(prNote);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
console.log(JSON.stringify(categorizedPRs, null, 2));
|
||||
|
||||
return categorizedPRs;
|
||||
|
||||
@ -119,13 +122,33 @@ jobs:
|
||||
const changelogPath = path.resolve('CHANGELOG.md');
|
||||
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
|
||||
|
||||
let newReleaseNotes = `## ${today}\n\n### Changes\n\n`;
|
||||
for (const { title, notes } of categorizedPRs) {
|
||||
if (notes.length > 0) {
|
||||
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
|
||||
}
|
||||
}
|
||||
console.log(JSON.stringify(categorizedPRs, null, 2));
|
||||
|
||||
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 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
|
||||
|
||||
|
||||
## 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
|
||||
|
||||
### Changes
|
||||
|
||||
@ -29,9 +29,11 @@ function update_script() {
|
||||
fi
|
||||
|
||||
msg_info "Updating MongoDB"
|
||||
MONGODB_VERSION="8.0"
|
||||
MONGODB_VERSION="7.0"
|
||||
if ! lscpu | grep -q 'avx'; then
|
||||
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
|
||||
|
||||
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"
|
||||
if lscpu | grep -q 'avx'; then
|
||||
USE_AVX=true
|
||||
MONGODB_VERSION="8.0"
|
||||
msg_ok "AVX detected: Using MongoDB 8.0"
|
||||
MONGODB_VERSION="7.0"
|
||||
msg_ok "AVX detected: Using MongoDB 7.0"
|
||||
else
|
||||
USE_AVX=false
|
||||
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
|
||||
|
||||
msg_info "Installing Azul Zulu Java"
|
||||
|
||||
@ -31,6 +31,10 @@
|
||||
"password": null
|
||||
},
|
||||
"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",
|
||||
"type": "info"
|
||||
@ -40,4 +44,4 @@
|
||||
"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 install -y tailscale &>/dev/null
|
||||
' || 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;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