Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
2fbbf8c
feat: declare GitHub package updates and exercise the development Action
Sunrisepeak Oct 19, 2026
1863331
fix: quote the empty candidate matrix condition
Sunrisepeak Oct 19, 2026
abebd89
fix: use the declared hiredis include root in its candidate probe
Sunrisepeak Oct 19, 2026
d9b1a4b
test: verify added PR versions and pin network retry fixes
Sunrisepeak Oct 19, 2026
e065c8f
fix: include hiredis public API in the real candidate probe
Sunrisepeak Oct 19, 2026
be2b21f
fix: match the index runner and macOS archive naming
Sunrisepeak Oct 19, 2026
ef0f6bb
fix: align candidate toolchain setup and Windows UTF-8 handling
Sunrisepeak Oct 19, 2026
1eb56e8
fix: support FreeType HVF and verify cross-platform update plans
Sunrisepeak Oct 19, 2026
49099f9
test: isolate Windows candidate failures from the legacy client
Sunrisepeak Oct 19, 2026
2559443
test: record Windows payload and source-glob evidence
Sunrisepeak Oct 19, 2026
94c18cf
test: preserve the installed descriptor in candidate diagnostics
Sunrisepeak Oct 19, 2026
30eb4a5
test: isolate Windows source planning with bounded layout probes
Sunrisepeak Oct 19, 2026
c438861
fix(ci): adapt OpenMP runtime build and isolate Windows source discovery
Sunrisepeak Oct 19, 2026
3384f86
fix(ci): supply nanodbc macOS ODBC development headers
Sunrisepeak Oct 19, 2026
f35f466
test(ci): compare registry and path loading of identical hiredis payload
Sunrisepeak Oct 19, 2026
358792e
docs: reconcile updater design with real integration evidence
Sunrisepeak Oct 19, 2026
7e48506
ci: pin tested updater commit and stop candidate jobs on cancellation
Sunrisepeak Oct 19, 2026
8684ade
test(nanodbc): exercise preserved version on macOS and Windows
Sunrisepeak Oct 19, 2026
0468e19
test(ci): isolate source glob expansion with absolute paths
Sunrisepeak Oct 19, 2026
1e723e0
fix(packages): retain source discovery and current toolchain compatib…
Sunrisepeak Oct 19, 2026
94c9d35
fix: adapt mcr upgrade and legacy LLVM builds; report approved source…
Sunrisepeak Oct 19, 2026
9252858
ci: use the runner Python command for source outage reporting
Sunrisepeak Oct 19, 2026
1da7f38
fix(openmp): select the real Windows Python payload interpreter
Sunrisepeak Oct 19, 2026
24422a8
ci: accept new descriptors and reject removal of published packages
Sunrisepeak Oct 19, 2026
582fc31
fix(llamacpp): scope libc++ header compatibility to Linux sources
Sunrisepeak Oct 19, 2026
45884cf
ci: validate shared version resources with the merged updater
Sunrisepeak Oct 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
548 changes: 548 additions & 0 deletions .agents/docs/2026-10-19-xpkgindex-update-design.md

Large diffs are not rendered by default.

13 changes: 13 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1499,6 +1499,19 @@ jobs:
run: |
"$MCPP" index update

- name: Report temporarily untestable consumers of the unavailable MySQL source
shell: bash
run: |
if [[ "$RUNNER_OS" == Windows ]]; then
python tests/autoupdate/source_outage.py members
else
python3 tests/autoupdate/source_outage.py members
fi

- name: Install nanodbc macOS development headers
if: runner.os == 'macOS' && contains(format(' {0} ', env.MEMBERS), ' nanodbc ')
run: brew install libiodbc

- name: mcpp test (workspace or affected members)
shell: bash
env:
Expand Down
214 changes: 214 additions & 0 deletions .github/workflows/xpkgindex-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
name: xpkgindex-update

on:
pull_request:
paths:
- 'pkgs/**/*.lua'
- 'tests/autoupdate/**'
- '.github/xpkgindex-update.yml'
- '.github/workflows/xpkgindex-update.yml'
workflow_dispatch:
inputs:
package:
description: "Optional namespace:name; empty scans all declared packages"
type: string
required: false

permissions:
contents: read

concurrency:
group: xpkgindex-update-${{ github.ref }}
cancel-in-progress: true

env:
PYTHONUTF8: '1'
MCPP_VERSION: '2026.10.1.2'
MCPP_INDEX_MIRROR: GLOBAL

jobs:
scan:
runs-on: ubuntu-latest
timeout-minutes: 45
outputs:
matrix: ${{ steps.matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: actions/checkout@v4
with:
repository: openxlings/xpkgindex-update
ref: 23c5e04948c55e606bc56ee2c649ddd4849b7ec6
path: .updater
persist-credentials: false
- name: Use the pinned updater source
run: echo "PYTHONPATH=$PWD/.updater/src" >> "$GITHUB_ENV"
- name: All GitHub-direct descriptors are declared; published versions are unchanged
id: coverage
env:
BASE: ${{ github.event.pull_request.base.sha || 'origin/main' }}
run: |
python -m unittest discover -s tests/autoupdate -p 'test_*.py'
python tests/autoupdate/ci.py audit --base "$BASE" --output coverage.json
python tests/autoupdate/ci.py selection --base "$BASE" --output selected-package.txt
echo "package=$(cat selected-package.txt)" >> "$GITHUB_OUTPUT"
- name: Discover and download real upstream candidates
id: scan
continue-on-error: true # The mandatory gate below accepts only the approved source outage.
uses: openxlings/xpkgindex-update@23c5e04948c55e606bc56ee2c649ddd4849b7ec6
with:
mode: check
token: ${{ github.token }}
package: ${{ inputs.package || steps.coverage.outputs.package }}
- name: Reject all scan failures except the approved unavailable source
if: always()
env:
PLAN: ${{ steps.scan.outputs.plan }}
OUTCOME: ${{ steps.scan.outcome }}
run: python tests/autoupdate/source_outage.py scan-gate --plan "$PLAN" --outcome "$OUTCOME"
- name: Plan actual candidate build/run jobs
id: matrix
if: always() && steps.scan.outputs.plan != ''
env:
PLAN: ${{ steps.scan.outputs.plan }}
BASE: ${{ github.event.pull_request.base.sha || 'origin/main' }}
run: |
python tests/autoupdate/ci.py matrix --plan "$PLAN" --base "$BASE" --output matrix.json
echo "matrix=$(cat matrix.json)" >> "$GITHUB_OUTPUT"
- uses: actions/upload-artifact@v4
if: always()
with:
name: xpkgindex-update-build-plan
path: build-plan.json
- uses: actions/upload-artifact@v4
if: always()
with:
name: xpkgindex-update-coverage
path: |
coverage.json
matrix.json

candidate:
name: candidate (${{ matrix.id }} ${{ matrix.candidate }}, ${{ matrix.platform }}, ${{ matrix.toolchain }})
needs: scan
if: >-
always() && !cancelled() && needs.scan.outputs.matrix != '' && needs.scan.outputs.matrix != '{"include": []}'
strategy:
fail-fast: false
max-parallel: 8
matrix: ${{ fromJSON(needs.scan.outputs.matrix) }}
runs-on: ${{ matrix.os }}
timeout-minutes: 90
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: actions/checkout@v4
with:
repository: openxlings/xpkgindex-update
ref: 23c5e04948c55e606bc56ee2c649ddd4849b7ec6
path: .updater
persist-credentials: false
- uses: actions/download-artifact@v4
with:
name: xpkgindex-update-build-plan
path: .candidate-plan
- name: Use the pinned updater and a standalone consumer
shell: bash
run: |
if [[ "$RUNNER_OS" == Windows ]]; then
echo "PYTHONPATH=$(cygpath -m "$PWD/.updater/src")" >> "$GITHUB_ENV"
echo "CONSUMER=$(cygpath -m "$RUNNER_TEMP/candidate-consumer")" >> "$GITHUB_ENV"
else
echo "PYTHONPATH=$PWD/.updater/src" >> "$GITHUB_ENV"
echo "CONSUMER=$RUNNER_TEMP/candidate-consumer" >> "$GITHUB_ENV"
fi
- name: Append the candidate and prepare its existing consumer test
shell: bash
env:
GH_TOKEN: ${{ github.token }}
PACKAGE: ${{ matrix.id }}
run: |
python -m xpkgindex_update apply --plan .candidate-plan/build-plan.json --package "$PACKAGE"
python tests/autoupdate/ci.py prepare --plan .candidate-plan/build-plan.json --package "$PACKAGE" --output "$CONSUMER"
git diff -- pkgs
- uses: actions/cache/restore@v4
with:
path: |
~/.mcpp/registry
!~/.mcpp/registry/data/xim-pkgindex
!~/.mcpp/registry/data/mcpplibs
key: candidate-${{ runner.os }}-${{ matrix.toolchain }}-${{ env.MCPP_VERSION }}-${{ github.run_id }}
restore-keys: |
mcpp-registry-${{ runner.os }}-${{ matrix.toolchain }}-${{ env.MCPP_VERSION }}-
- name: Install the same mcpp release as index validation
shell: bash
env:
SUFFIX: ${{ matrix.suffix }}
EXT: ${{ matrix.ext }}
run: |
root="mcpp-${MCPP_VERSION}-${SUFFIX}"
archive="$RUNNER_TEMP/$root.$EXT"
curl -fsSL --retry 2 -o "$archive" "https://github.com/mcpp-community/mcpp/releases/download/v${MCPP_VERSION}/$root.$EXT"
if [[ "$EXT" == zip ]]; then
powershell -NoProfile -Command "Expand-Archive -Force -Path '$archive' -DestinationPath '$RUNNER_TEMP'"
else
tar -xzf "$archive" -C "$RUNNER_TEMP"
fi
root="$RUNNER_TEMP/$root"
mkdir -p "$HOME/.mcpp/registry"
cp -a "$root/registry/." "$HOME/.mcpp/registry/"
echo "MCPP_HOME=$HOME/.mcpp" >> "$GITHUB_ENV"
if [[ "$RUNNER_OS" == Windows ]]; then
echo "MCPP=$(cygpath -m "$root/bin/mcpp.exe")" >> "$GITHUB_ENV"
else
echo "MCPP=$root/bin/mcpp" >> "$GITHUB_ENV"
fi
- name: Install macOS ODBC development headers
if: runner.os == 'macOS' && matrix.id == 'compat:nanodbc'
run: brew install libiodbc
- name: Resolve, build and run the actual candidate
shell: bash
env:
TOOLCHAIN: ${{ matrix.toolchain }}
PACKAGE: ${{ matrix.id }}
run: |
"$MCPP" index update
if [[ "$TOOLCHAIN" != default ]]; then
"$MCPP" toolchain install "$TOOLCHAIN"
"$MCPP" toolchain default "$TOOLCHAIN"
fi
cd "$CONSUMER"
"$MCPP" test --verbose 2>&1 | tee candidate.log
- name: The lockfile proves the candidate was selected
shell: bash
env:
PACKAGE: ${{ matrix.id }}
run: python tests/autoupdate/ci.py verify --plan .candidate-plan/build-plan.json --package "$PACKAGE" --consumer "$CONSUMER"
- uses: actions/upload-artifact@v4
if: always()
with:
name: candidate-${{ strategy.job-index }}
path: |
${{ env.CONSUMER }}/candidate.log
${{ env.CONSUMER }}/mcpp.lock
${{ env.CONSUMER }}/mcpp.toml
- name: Collect compiler and linker evidence
if: always()
shell: bash
run: python tests/autoupdate/ci.py diagnostics --consumer "$CONSUMER" --output candidate-diagnostics
- uses: actions/upload-artifact@v4
if: always()
with:
name: candidate-diagnostics-${{ strategy.job-index }}
path: candidate-diagnostics
if-no-files-found: ignore
3 changes: 3 additions & 0 deletions .github/xpkgindex-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
version: 1
adapter: mcpp-index
max_prs: 3
7 changes: 7 additions & 0 deletions pkgs/b/boost-ext.ut.lua
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,13 @@ package = {
repo = "https://github.com/boost-ext/ut",
type = "package",

extensions = {
autoupdate = {
tag = "v${version}",
url = "https://github.com/boost-ext/ut/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["2.3.1"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/cmp.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ package = {
repo = "https://github.com/mcpplibs/cmp",
type = "package",

extensions = {
autoupdate = {
tag = "v${version}",
url = "https://github.com/mcpplibs/cmp/releases/download/${tag}/cmp-${version}.tar.gz",
},
},

xpm = {
linux = {
["0.1.0"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/compat.apriltag.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ package = {
repo = "https://github.com/AprilRobotics/apriltag",
type = "package",

extensions = {
autoupdate = {
tag = "v${version}",
url = "https://github.com/AprilRobotics/apriltag/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["3.4.5"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/compat.boost-align.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ package = {
repo = "https://github.com/boostorg/align",
type = "package",

extensions = {
autoupdate = {
tag = "boost-${version}",
url = "https://github.com/boostorg/align/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["1.92.0"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/compat.boost-any.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ package = {
repo = "https://github.com/boostorg/any",
type = "package",

extensions = {
autoupdate = {
tag = "boost-${version}",
url = "https://github.com/boostorg/any/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["1.92.0"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/compat.boost-asio.lua
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ package = {
repo = "https://github.com/boostorg/asio",
type = "package",

extensions = {
autoupdate = {
tag = "boost-${version}",
url = "https://github.com/boostorg/asio/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["1.92.0"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/compat.boost-assert.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@ package = {
repo = "https://github.com/boostorg/assert",
type = "package",

extensions = {
autoupdate = {
tag = "boost-${version}",
url = "https://github.com/boostorg/assert/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["1.92.0"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/compat.boost-beast.lua
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@ package = {
repo = "https://github.com/boostorg/beast",
type = "package",

extensions = {
autoupdate = {
tag = "boost-${version}",
url = "https://github.com/boostorg/beast/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["1.92.0"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/compat.boost-bind.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ package = {
repo = "https://github.com/boostorg/bind",
type = "package",

extensions = {
autoupdate = {
tag = "boost-${version}",
url = "https://github.com/boostorg/bind/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["1.92.0"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/compat.boost-circular-buffer.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ package = {
repo = "https://github.com/boostorg/circular_buffer",
type = "package",

extensions = {
autoupdate = {
tag = "boost-${version}",
url = "https://github.com/boostorg/circular_buffer/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["1.92.0"] = {
Expand Down
7 changes: 7 additions & 0 deletions pkgs/c/compat.boost-compat.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ package = {
repo = "https://github.com/boostorg/compat",
type = "package",

extensions = {
autoupdate = {
tag = "boost-${version}",
url = "https://github.com/boostorg/compat/archive/refs/tags/${tag}.tar.gz",
},
},

xpm = {
linux = {
["1.92.0"] = {
Expand Down
Loading
Loading