Skip to content

Commit 7c8695b

Browse files
Merge branch 'main' into merge-adaptors-2026-01-16
2 parents ad8845c + 05fe68f commit 7c8695b

39 files changed

+1177
-415
lines changed

.github/dependabot.yml

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
1-
# To get started with Dependabot version updates, you'll need to specify which
2-
# package ecosystems to update and where the package manifests are located.
3-
# Please see the documentation for all configuration options:
4-
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5-
61
version: 2
72
updates:
8-
- package-ecosystem: "pip" # See documentation for possible values
9-
directory: "/" # Location of package manifests
3+
- package-ecosystem: "uv"
4+
directory: "/"
5+
schedule:
6+
interval: "weekly"
7+
day: "monday"
8+
open-pull-requests-limit: 10
9+
labels:
10+
- "dependencies"
11+
commit-message:
12+
prefix: "deps"
13+
14+
- package-ecosystem: "github-actions"
15+
directory: "/"
1016
schedule:
1117
interval: "weekly"
18+
day: "monday"
19+
open-pull-requests-limit: 10
20+
labels:
21+
- "dependencies"
22+
- "github-actions"
23+
commit-message:
24+
prefix: "ci"

.github/workflows/ci.yml

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,17 @@ jobs:
99
build-test:
1010
name: Build and test (${{ matrix.os }})
1111
runs-on: ${{ matrix.os }}
12+
env:
13+
HGRAPH_SMOKE_PYTHONS: "3.12 3.13 3.14"
1214
strategy:
1315
fail-fast: false
1416
matrix:
1517
os: [ ubuntu-latest, macos-latest, windows-latest ]
1618
steps:
17-
- uses: actions/checkout@v4
19+
- uses: actions/checkout@v6
1820

1921
- name: Restore uv/pip caches
20-
uses: actions/cache@v4
22+
uses: actions/cache@v5.0.3
2123
with:
2224
path: |
2325
~/.cache/uv
@@ -26,14 +28,14 @@ jobs:
2628
restore-keys: |
2729
${{ runner.os }}-uvpip-
2830
29-
# Install uv and Python 3.12 (aligns with hg_cpp approach)
30-
- uses: astral-sh/setup-uv@v4
31+
# Build the ABI3 wheel against the 3.12 stable ABI baseline.
32+
- uses: astral-sh/setup-uv@v7.5.0
3133
with:
3234
python-version: '3.12'
3335

3436
# Ensure Conan is available for builds/tools
3537
- name: Install Conan via uv tool
36-
run: uv tool install conan
38+
run: uv tool install --upgrade conan==2.26.2
3739

3840
# Build the wheel with nanobind stable ABI enabled
3941
- name: Build wheel (NB stable ABI, Windows MSVC)
@@ -68,7 +70,7 @@ jobs:
6870
ls -la dist || true
6971
7072
- name: Upload built wheels (all OS)
71-
uses: actions/upload-artifact@v4
73+
uses: actions/upload-artifact@v7.0.0
7274
with:
7375
name: wheels-${{ runner.os }}
7476
path: dist/**
@@ -97,93 +99,92 @@ jobs:
9799
98100
- name: Upload repaired Linux wheels (manylinux)
99101
if: runner.os == 'Linux'
100-
uses: actions/upload-artifact@v4
102+
uses: actions/upload-artifact@v7.0.0
101103
with:
102104
name: wheels-linux-manylinux
103105
path: wheelhouse/**
104106
if-no-files-found: error
105107
retention-days: 7
106108

107-
- name: Install built wheel into env (Windows)
109+
- name: Resolve built wheel path (Windows)
108110
if: runner.os == 'Windows'
109111
shell: pwsh
110112
run: |
111113
$wheel = (Get-ChildItem dist/*.whl | Select-Object -First 1).FullName
112114
if (-not $wheel) { Write-Error "No wheel found in dist/"; Get-ChildItem dist -Recurse; exit 1 }
113-
uv pip install --upgrade pip
114-
uv pip install "$wheel"
115+
"HGRAPH_WHEEL=$wheel" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
115116
116-
- name: Install built wheel into env (Unix)
117+
- name: Resolve built wheel path (Unix)
117118
if: runner.os != 'Windows'
118119
shell: bash
119120
run: |
120121
set -euo pipefail
121-
wheel=$(ls dist/*.whl | head -n1 || true)
122+
if [ "${RUNNER_OS}" = "Linux" ] && compgen -G "wheelhouse/*.whl" > /dev/null; then
123+
wheel=$(ls wheelhouse/*.whl | head -n1)
124+
else
125+
wheel=$(ls dist/*.whl | head -n1 || true)
126+
fi
122127
if [ -z "${wheel}" ]; then
123-
echo "No wheel found in dist/"
128+
echo "No wheel found for smoke/full-test install"
124129
ls -la dist || true
130+
ls -la wheelhouse || true
125131
exit 1
126132
fi
127-
uv pip install --upgrade pip
128-
uv pip install "${wheel}"
133+
echo "HGRAPH_WHEEL=${wheel}" >> "${GITHUB_ENV}"
129134
130-
- name: Run smoke tests (macOS) [Python runtime]
131-
if: runner.os == 'macOS'
132-
shell: bash
133-
env:
134-
HGRAPH_USE_CPP: 'false'
135+
- name: Install built wheel into primary env (Windows)
136+
if: runner.os == 'Windows'
137+
shell: pwsh
135138
run: |
136-
set -euo pipefail
137-
echo "HGRAPH_USE_CPP=$HGRAPH_USE_CPP"
138-
# Temporarily hide local hgraph/ to force use of installed wheel
139-
mv hgraph hgraph_src
140-
.venv/bin/pytest hgraph_unit_tests -q -m smoke || status=$?
141-
mv hgraph_src hgraph
142-
exit ${status:-0}
139+
uv pip install --upgrade pip
140+
uv pip install "$env:HGRAPH_WHEEL"
143141
144-
- name: Run smoke tests (macOS) [C++ runtime]
145-
if: runner.os == 'macOS'
142+
- name: Install built wheel into primary env (Unix)
143+
if: runner.os != 'Windows'
146144
shell: bash
147-
env:
148-
HGRAPH_USE_CPP: 'true'
149145
run: |
150146
set -euo pipefail
151-
echo "HGRAPH_USE_CPP=$HGRAPH_USE_CPP"
152-
# Temporarily hide local hgraph/ to force use of installed wheel
153-
mv hgraph hgraph_src
154-
.venv/bin/pytest hgraph_unit_tests -q -m smoke || status=$?
155-
mv hgraph_src hgraph
156-
exit ${status:-0}
147+
uv pip install --upgrade pip
148+
uv pip install "${HGRAPH_WHEEL}"
157149
158-
- name: Run smoke tests (Windows) [Python runtime]
150+
- name: Run ABI3 smoke tests (Windows)
159151
if: runner.os == 'Windows'
160152
shell: pwsh
161-
env:
162-
HGRAPH_USE_CPP: 'false'
163153
run: |
164-
Write-Host "HGRAPH_USE_CPP=$env:HGRAPH_USE_CPP"
165-
# Temporarily hide local hgraph/ to force use of installed wheel
166154
Rename-Item hgraph hgraph_src
167155
try {
168-
.venv\Scripts\pytest hgraph_unit_tests -q -m smoke
156+
foreach ($pyver in $env:HGRAPH_SMOKE_PYTHONS.Split(' ')) {
157+
$venvPython = Join-Path $PWD ".venv-smoke-$pyver\Scripts\python.exe"
158+
uv venv --clear ".venv-smoke-$pyver" --python $pyver
159+
uv pip install --python $venvPython --upgrade pip
160+
uv pip install --python $venvPython pytest tornado requests pandas "perspective-python<4.0.0" kafka-python matplotlib "$env:HGRAPH_WHEEL"
161+
foreach ($useCpp in @('false', 'true')) {
162+
Write-Host "Smoke test: python=$pyver HGRAPH_USE_CPP=$useCpp wheel=$env:HGRAPH_WHEEL"
163+
$env:HGRAPH_USE_CPP = $useCpp
164+
& (Join-Path $PWD ".venv-smoke-$pyver\Scripts\pytest.exe") hgraph_unit_tests -q -m smoke
165+
}
166+
}
169167
} finally {
168+
Remove-Item Env:HGRAPH_USE_CPP -ErrorAction SilentlyContinue
170169
Rename-Item hgraph_src hgraph
171170
}
172171
173-
- name: Run smoke tests (Windows) [C++ runtime]
174-
if: runner.os == 'Windows'
175-
shell: pwsh
176-
env:
177-
HGRAPH_USE_CPP: 'true'
172+
- name: Run ABI3 smoke tests (Unix)
173+
if: runner.os != 'Windows'
174+
shell: bash
178175
run: |
179-
Write-Host "HGRAPH_USE_CPP=$env:HGRAPH_USE_CPP"
180-
# Temporarily hide local hgraph/ to force use of installed wheel
181-
Rename-Item hgraph hgraph_src
182-
try {
183-
.venv\Scripts\pytest hgraph_unit_tests -q -m smoke
184-
} finally {
185-
Rename-Item hgraph_src hgraph
186-
}
176+
set -euo pipefail
177+
mv hgraph hgraph_src
178+
trap 'mv hgraph_src hgraph' EXIT
179+
for pyver in ${HGRAPH_SMOKE_PYTHONS}; do
180+
uv venv --clear ".venv-smoke-${pyver}" --python "${pyver}"
181+
uv pip install --python ".venv-smoke-${pyver}/bin/python" --upgrade pip
182+
uv pip install --python ".venv-smoke-${pyver}/bin/python" pytest tornado requests pandas "perspective-python<4.0.0" kafka-python matplotlib "${HGRAPH_WHEEL}"
183+
for use_cpp in false true; do
184+
echo "Smoke test: python=${pyver} HGRAPH_USE_CPP=${use_cpp} wheel=${HGRAPH_WHEEL}"
185+
HGRAPH_USE_CPP="${use_cpp}" ".venv-smoke-${pyver}/bin/pytest" hgraph_unit_tests -q -m smoke
186+
done
187+
done
187188
188189
- name: Run tests (Linux only) [Python runtime]
189190
if: runner.os == 'Linux'
@@ -242,7 +243,7 @@ jobs:
242243
243244
- name: Upload core dumps (Linux only)
244245
if: failure() && runner.os == 'Linux'
245-
uses: actions/upload-artifact@v4
246+
uses: actions/upload-artifact@v7.0.0
246247
with:
247248
name: linux-core-dumps
248249
path: |
@@ -252,4 +253,3 @@ jobs:
252253
/home/runner/work/*/*/core*
253254
if-no-files-found: ignore
254255
retention-days: 7
255-

.github/workflows/claude-code-review.yml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ on:
1212

1313
jobs:
1414
claude-review:
15-
# Optional: Filter by PR author
16-
# if: |
17-
# github.event.pull_request.user.login == 'external-contributor' ||
18-
# github.event.pull_request.user.login == 'new-developer' ||
19-
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
15+
if: github.event.pull_request.user.type == 'User'
2016

2117
runs-on: ubuntu-latest
2218
permissions:
@@ -27,7 +23,7 @@ jobs:
2723

2824
steps:
2925
- name: Checkout repository
30-
uses: actions/checkout@v4
26+
uses: actions/checkout@v6
3127
with:
3228
fetch-depth: 1
3329

@@ -54,4 +50,3 @@ jobs:
5450
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
5551
# or https://code.claude.com/docs/en/cli-reference for available options
5652
claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
57-

.github/workflows/claude.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
actions: read # Required for Claude to read CI results on PRs
2727
steps:
2828
- name: Checkout repository
29-
uses: actions/checkout@v4
29+
uses: actions/checkout@v6
3030
with:
3131
fetch-depth: 1
3232

.github/workflows/codeql.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ jobs:
2121

2222
steps:
2323
- name: Checkout
24-
uses: actions/checkout@v4
24+
uses: actions/checkout@v6
2525

2626
- name: Setup uv (Python 3.12)
27-
uses: astral-sh/setup-uv@v4
27+
uses: astral-sh/setup-uv@v7.5.0
2828
with:
2929
python-version: '3.12'
3030

3131
- name: Restore uv/pip caches
32-
uses: actions/cache@v4
32+
uses: actions/cache@v5.0.3
3333
with:
3434
path: |
3535
~/.cache/uv
@@ -40,10 +40,10 @@ jobs:
4040
4141
- name: Install optional tooling (Conan)
4242
run: |
43-
uv tool install conan
43+
uv tool install --upgrade conan==2.26.2
4444
4545
- name: Initialize CodeQL
46-
uses: github/codeql-action/init@v3
46+
uses: github/codeql-action/init@v4
4747
with:
4848
languages: ${{ matrix.language }}
4949
build-mode: ${{ matrix.language == 'cpp' && 'manual' || 'none' }}
@@ -60,6 +60,6 @@ jobs:
6060
uv build -v
6161
6262
- name: Perform CodeQL Analysis
63-
uses: github/codeql-action/analyze@v3
63+
uses: github/codeql-action/analyze@v4
6464
with:
65-
category: '/language:${{matrix.language}}'
65+
category: '/language:${{matrix.language}}'

0 commit comments

Comments
 (0)