weekly patch test
This commit is contained in:
parent
cdec0b4eea
commit
70b43862e9
110
.github/workflows/weekly-patch-test.yml
vendored
Normal file
110
.github/workflows/weekly-patch-test.yml
vendored
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
name: Test Patches - Weekly
|
||||||
|
|
||||||
|
# Weekly regression test of pve-mod against the latest upstream Proxmox VE files.
|
||||||
|
# Mods are auto-discovered from the [modules] section of src/pve-mod.conf and
|
||||||
|
# tested in parallel - adding a mod needs no change here. If a mod fails, an
|
||||||
|
# issue is opened (or updated) per failed mod explaining why.
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 6 * * 1' # Mondays 06:00 UTC
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
discover:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
mods: ${{ steps.list.outputs.mods }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Discover mods from [modules]
|
||||||
|
id: list
|
||||||
|
run: |
|
||||||
|
MODS=$(awk -F= '
|
||||||
|
/^\[/ { in_sec = ($0 == "[modules]") }
|
||||||
|
in_sec && /^[^#=]+=/ {
|
||||||
|
gsub(/^[[:space:]]+|[[:space:]]+$/, "", $1); print $1
|
||||||
|
}' src/pve-mod.conf | jq -R . | jq -cs .)
|
||||||
|
echo "Discovered mods: $MODS"
|
||||||
|
echo "mods=$MODS" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
test:
|
||||||
|
needs: discover
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
mod: ${{ fromJSON(needs.discover.outputs.mods) }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
# ── Build (mirrors test-release.yml) ───────────────────────────────────
|
||||||
|
- name: Install build deps
|
||||||
|
run: sudo apt-get install -y devscripts debhelper build-essential
|
||||||
|
|
||||||
|
- name: Inject version into PVEMod_Config.pm
|
||||||
|
run: |
|
||||||
|
VERSION=$(grep -m1 '(' debian/changelog | sed 's/.*(\(.*\)).*/\1/')
|
||||||
|
SHORT_SHA=$(git rev-parse --short HEAD)
|
||||||
|
export BUILD_VERSION="${VERSION}-test-${SHORT_SHA}"
|
||||||
|
perl -i -pe 'BEGIN { $v = $ENV{BUILD_VERSION} }
|
||||||
|
s/(our \$VERSION\s*=\s*'"'"')[^'"'"']*'"'"';/$1'"'"'$v'"'"';/
|
||||||
|
' src/PVENodeInfo/PVEMod_Config.pm
|
||||||
|
|
||||||
|
- name: Build package
|
||||||
|
run: dpkg-buildpackage -us -uc -b
|
||||||
|
|
||||||
|
# ── Test ───────────────────────────────────────────────────────────────
|
||||||
|
- name: Fetch upstream Proxmox files
|
||||||
|
run: bash src/Scripts/test/fetch-proxmox-files.sh
|
||||||
|
|
||||||
|
- name: Install built package
|
||||||
|
run: sudo apt-get install -y ../pve-mod_*.deb
|
||||||
|
|
||||||
|
- name: Test mod
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
sudo bash src/Scripts/test/test-mods.sh "${{ matrix.mod }}" 2>&1 | tee test-output.log
|
||||||
|
|
||||||
|
- name: Report failure as issue
|
||||||
|
if: failure()
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
MOD: ${{ matrix.mod }}
|
||||||
|
run: |
|
||||||
|
TITLE="[patch-break] ${MOD}"
|
||||||
|
{
|
||||||
|
echo "The weekly patch test failed for mod \`${MOD}\` against the latest Proxmox VE files."
|
||||||
|
echo ""
|
||||||
|
echo "Run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
|
echo ""
|
||||||
|
echo "<details><summary>Test log</summary>"
|
||||||
|
echo ""
|
||||||
|
echo '```'
|
||||||
|
tail -n 200 test-output.log 2>/dev/null || echo "(no log captured)"
|
||||||
|
echo '```'
|
||||||
|
echo "</details>"
|
||||||
|
} > issue-body.md
|
||||||
|
|
||||||
|
# Ensure the label exists (no-op if it already does).
|
||||||
|
gh label create patch-break --color B60205 \
|
||||||
|
--description "pve-mod patch failed against upstream Proxmox" 2>/dev/null || true
|
||||||
|
|
||||||
|
EXISTING=$(gh issue list --state open --label patch-break \
|
||||||
|
--search "$TITLE in:title" --json number,title \
|
||||||
|
--jq ".[] | select(.title==\"$TITLE\") | .number" | head -n1)
|
||||||
|
|
||||||
|
if [[ -n "$EXISTING" ]]; then
|
||||||
|
gh issue comment "$EXISTING" --body-file issue-body.md
|
||||||
|
echo "Commented on existing issue #$EXISTING"
|
||||||
|
else
|
||||||
|
gh issue create --title "$TITLE" --label patch-break --body-file issue-body.md
|
||||||
|
echo "Opened new issue for mod $MOD"
|
||||||
|
fi
|
||||||
Loading…
Reference in New Issue
Block a user