Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
201 commits
Select commit Hold shift + click to select a range
22381ca
Return error when downsampling size is not divisible by 4
jwasikpsnc Feb 9, 2026
f40dfe5
Catch ts_downsample exceptions
jwasikpsnc Feb 10, 2026
0b06316
Add missing BaseException
jwasikpsnc Feb 10, 2026
e225154
Catch IndexError in _get_raw_data()
jwasikpsnc Feb 13, 2026
8bb283c
Add downsampling target_size validation.
jwasikpsnc Feb 13, 2026
8dbbcd4
added workflows
prasad-sawantdesai Feb 12, 2026
3f2b0ed
fixed workflow issues
prasad-sawantdesai Feb 13, 2026
a46af95
fixed linting
prasad-sawantdesai Feb 13, 2026
648683a
added setuptools_scm (#30)
prasad-sawantdesai Feb 13, 2026
20500a8
fix name of the package (#31)
prasad-sawantdesai Feb 16, 2026
d30d803
Support complex types (#32)
jwasikpsnc Feb 18, 2026
242fe04
fix version issue (#37)
prasad-sawantdesai Feb 19, 2026
374f3fe
fix launch scripts
prasad-sawantdesai Feb 19, 2026
7282e07
add tooltips in buttons to delete URIs (#36)
mfiaudrin-epsyl Feb 19, 2026
d95993c
remove f annotation from plots (#35)
mfiaudrin-epsyl Feb 19, 2026
7cbe4cf
fix asv
prasad-sawantdesai Feb 19, 2026
b2d5f79
Feature/add complex type icon (#22)
mfiaudrin-epsyl Mar 8, 2026
f570fd8
transpose dataGrid at launch
mfiaudrin-epsyl Feb 27, 2026
9c33ce2
fix the transpose function
mfiaudrin-epsyl Mar 9, 2026
c5c54da
Slider synchronization (#34)
mfiaudrin-epsyl Mar 9, 2026
15d2be5
Merge pull request #42 from mfiaudrin-epsyl/feature/transpose_at_launch
mfiaudrin-epsyl Mar 16, 2026
c9e3361
Add info if data node has data inside (WIP)
jwasikpsnc Mar 17, 2026
0ab09b0
apply linter
jwasikpsnc Mar 17, 2026
d6fca65
apply linter
jwasikpsnc Mar 17, 2026
218a02f
Fix linter in test
jwasikpsnc Mar 17, 2026
b338ce4
Fix linter in test
jwasikpsnc Mar 17, 2026
5b9fe4d
Feature/asv workflow (#41) + documentation
prasad-sawantdesai Mar 24, 2026
e860b38
handle coordinate dependencies in correct order
mfiaudrin-epsyl Mar 18, 2026
871dfbe
delete all uris: don't display 0
mfiaudrin-epsyl Mar 17, 2026
274bc25
Merge branch 'main' into develop
olivhoenen Mar 24, 2026
9b7e6e1
implement frontend linting
mfiaudrin-epsyl Mar 2, 2026
0e33070
fix working directory at frontend linting
mfiaudrin-epsyl Mar 2, 2026
2982a3c
implement frontend build and packaging tests
mfiaudrin-epsyl Mar 2, 2026
91a2527
implement e2e tests in ci
mfiaudrin-epsyl Mar 2, 2026
7e91285
fix to launch backend
mfiaudrin-epsyl Mar 2, 2026
7c78838
start e2e tests with venv
mfiaudrin-epsyl Mar 2, 2026
ced0d12
fix the port conflict at launch
mfiaudrin-epsyl Mar 3, 2026
bba4272
Replace inexistant URI to pass the E2E tests
mfiaudrin-epsyl Mar 3, 2026
1cad693
fix packages to launch E2E tests
mfiaudrin-epsyl Mar 5, 2026
746d3e8
Add E2E test to verify data integrity when applying ranges
mfiaudrin-epsyl Mar 5, 2026
8fc556a
fix E2E tests
mfiaudrin-epsyl Mar 9, 2026
d7845c4
temporarily remove error bars tests
mfiaudrin-epsyl Mar 16, 2026
2d70397
hide local folder for E2E tests
mfiaudrin-epsyl Mar 18, 2026
55bdea8
Improves developer and user documentation (#50)
mfiaudrin-epsyl Mar 27, 2026
24189fa
Catch exception. Fix response models
jwasikpsnc Apr 7, 2026
6d66a73
Merge branch 'iterorganization:develop' into feature/show-only-filled…
jwasikpsnc Apr 8, 2026
714e727
Fix errors. Prettify code.
jwasikpsnc Apr 8, 2026
5e8dcac
Fix code style
jwasikpsnc Apr 8, 2026
5753309
Fix find_fields bugs
jwasikpsnc Apr 8, 2026
7402986
Address PR comments
jwasikpsnc Apr 8, 2026
ac6fcaa
fix conflict of BE installation from launch_dev and change the destin…
mfiaudrin-epsyl Apr 3, 2026
7d2748a
update in codeowners
olivhoenen Apr 9, 2026
0c56cfe
Data resampling (#46)
jwasikpsnc Apr 10, 2026
6c4e38b
Improve code
jwasikpsnc Apr 17, 2026
d03ab1b
Add new request model. Rename response models.
jwasikpsnc Apr 17, 2026
5a1db85
Data smoothing (WIP)
jwasikpsnc Apr 24, 2026
a52b06a
Update docs
jwasikpsnc Apr 28, 2026
9b76c39
Feature/error area UI (#51)
mfiaudrin-epsyl Apr 30, 2026
834676b
fix selected plot mode conflict with edited mode
mfiaudrin-epsyl Apr 13, 2026
b1c3327
Add interpolation without data creation. Update docstrings.
jwasikpsnc May 4, 2026
279c759
Fix interpolation bugs. Update tests.
jwasikpsnc May 5, 2026
d1a410d
Update interpolation docs.
jwasikpsnc May 5, 2026
8611d4f
Feature/show only filled nodes (#53)
jwasikpsnc May 7, 2026
66018e2
Merge branch 'iterorganization:develop' into feature/data-smoothing-d…
jwasikpsnc May 8, 2026
7807d59
Merge data-smoothing-denoising into data-smoothing
jwasikpsnc May 11, 2026
81585dc
Feature/backed pytest action (#61)
jwasikpsnc May 11, 2026
8dfe769
Merge data-smoothing-denoising into data-smoothing
jwasikpsnc May 12, 2026
c2352ef
Merge branch 'develop' into feature/interpolation-without-new-values
olivhoenen May 12, 2026
d0959d0
Add models for data manipulation
jwasikpsnc May 12, 2026
9f0a1b8
Add missing interface def. Delete old, unused argument.
jwasikpsnc May 15, 2026
ad14563
Commit of shame - run linter
jwasikpsnc May 15, 2026
782d1d8
Delete missed argument
jwasikpsnc May 15, 2026
e4ddaf9
Merge branch 'feature/interpolation-without-new-values' into feature/…
jwasikpsnc May 15, 2026
a437869
Add interpolation without data creation. Update docstrings.
jwasikpsnc May 4, 2026
9bf55a4
Fix interpolation bugs. Update tests.
jwasikpsnc May 5, 2026
25c06ee
Update interpolation docs.
jwasikpsnc May 5, 2026
bfcf117
Add missing interface def. Delete old, unused argument.
jwasikpsnc May 15, 2026
5bb607d
Commit of shame - run linter
jwasikpsnc May 15, 2026
c528665
Delete missed argument
jwasikpsnc May 15, 2026
ed502cb
Pass query object down to data source layer
jwasikpsnc May 18, 2026
180b450
ci: add dependabot.yml to update github-actions
Louwrensth May 18, 2026
4c30996
Add data smoothing
jwasikpsnc May 19, 2026
4cab041
Merge remote-tracking branch 'refs/remotes/origin/develop' into featu…
jwasikpsnc May 19, 2026
3c8a7ce
Change ux way to select the type of plot to display
mfiaudrin-epsyl May 19, 2026
45f7268
Bump actions/download-artifact from 4 to 8
dependabot[bot] May 19, 2026
e275cf0
Bump actions/checkout from 4 to 6
dependabot[bot] May 19, 2026
7233f7e
Bump peaceiris/actions-gh-pages from 3 to 4
dependabot[bot] May 19, 2026
a06bbcc
Bump actions/setup-node from 3 to 6
dependabot[bot] May 19, 2026
2e8bb56
Merge branch 'iterorganization:develop' into feature/data-smoothing
jwasikpsnc May 20, 2026
9932657
Allow mismatch between uri and interpolate_over with error bars (#59)
jwasikpsnc May 20, 2026
53958af
Update data manipulation docs
jwasikpsnc May 20, 2026
b9702f6
Delete unused models
jwasikpsnc May 20, 2026
b4ec3dc
Bump actions/cache from 4 to 5
dependabot[bot] May 21, 2026
d786f12
Bump actions/setup-python from 5 to 6
dependabot[bot] May 19, 2026
47a1a0e
Distinction between visual changes and data manipulations
mfiaudrin-epsyl May 22, 2026
7d7faed
Allow the user to select interpolation method in data manipulation
mfiaudrin-epsyl May 22, 2026
7ac0dad
Add more underlines in adding_new_data_manipulation_method.rst
jwasikpsnc May 25, 2026
a6463e8
Merge branch 'iterorganization:feature/show-only-filled-nodes' into f…
jwasikpsnc May 25, 2026
42d600d
Add contour visualization, overlay outline geometry and adapt feature…
mfiaudrin-epsyl May 28, 2026
19dab76
Control if there is no geometry to display
mfiaudrin-epsyl May 28, 2026
416eb65
Bump actions/upload-artifact from 4 to 7
dependabot[bot] May 19, 2026
2368381
char encoding issue
olivhoenen May 29, 2026
03148dd
Set smoothing_method to None when interpolating
jwasikpsnc Jun 1, 2026
48c8a86
Get has_data attribute and keep only nodes with data
mfiaudrin-epsyl May 13, 2026
7fa0d75
Fix the filter condition to display nodes having data not equals to f…
mfiaudrin-epsyl May 20, 2026
8533aa1
Update has_data type to be a boolean or null
mfiaudrin-epsyl Jun 1, 2026
c731e81
Remove the restriction preventing the addition of plots from differen…
mfiaudrin-epsyl Apr 15, 2026
6e0314a
Update plots with interpolation when adding or removing a plot and ad…
mfiaudrin-epsyl Apr 21, 2026
ff2c789
Finalize crop feature by adapting interpolation at restoration
mfiaudrin-epsyl Apr 21, 2026
675101d
Get error bands with interpolation
mfiaudrin-epsyl Apr 21, 2026
4e60d0f
Improve the interpolate parameter, keep value from sliders & keep tra…
mfiaudrin-epsyl Apr 24, 2026
59afc52
Add E2E test for interpolation
mfiaudrin-epsyl May 12, 2026
e5b9702
Handle error bands with combined coordinates
mfiaudrin-epsyl May 21, 2026
41c6a3b
Update the rule for y titles to prevent '...' from appearing when tit…
mfiaudrin-epsyl May 21, 2026
ecb40f6
Maintains a continuous curve when using combined coordinates
mfiaudrin-epsyl May 21, 2026
cc12626
Merge branch 'iterorganization:feature/show-only-filled-nodes' into f…
jwasikpsnc Jun 1, 2026
865e162
Merge branch 'develop' into feature/show-only-filled-nodes
jwasikpsnc Jun 1, 2026
9eb5afd
Apply linter
jwasikpsnc Jun 1, 2026
afb3322
Show IMAS-Core version in pytest
jwasikpsnc Jun 1, 2026
7f78e67
Fix broken test
jwasikpsnc Jun 1, 2026
4d70c1e
apply linter
jwasikpsnc Jun 1, 2026
2b772fc
Merge pull request #78 from jwasikpsnc/feature/show-only-filled-nodes
olivhoenen Jun 1, 2026
c613544
Display rectangle geometries
mfiaudrin-epsyl Jun 1, 2026
cc73e6a
Allow only time-based smoothing
jwasikpsnc Jun 2, 2026
6cd1894
Display oblique geometry and group the legend
mfiaudrin-epsyl Jun 2, 2026
4bc21bf
Merge branch 'develop' into feature/data_operations
mfiaudrin-epsyl Jun 3, 2026
07e29db
Finalize the selection of interpolation method after merge of interpo…
mfiaudrin-epsyl Jun 3, 2026
df69c4e
Keep axis range feature in visual customization
mfiaudrin-epsyl Jun 3, 2026
ba96088
Fix the dataGrid type for syntax
mfiaudrin-epsyl Jun 4, 2026
14011b9
Fix E2E access to visual customization
mfiaudrin-epsyl Jun 4, 2026
0ffc780
Fix props syntax in TreeLibrary component
mfiaudrin-epsyl Jun 4, 2026
eb4fbfd
Prevent the display of y line at zero in 2D plots
mfiaudrin-epsyl Jun 3, 2026
1778c20
Fix DataGrid type
mfiaudrin-epsyl Jun 4, 2026
f91f603
Improving the code by incorporating Copilot's suggestions
mfiaudrin-epsyl Jun 4, 2026
dabee21
Fix draggable compatibility with node 22
mfiaudrin-epsyl Jun 4, 2026
b84903c
Merge pull request #82 from mfiaudrin-epsyl/feature/data_manipulation…
olivhoenen Jun 5, 2026
325b1d6
Merge branch 'develop' into feature/geometry_overlay
mfiaudrin-epsyl Jun 5, 2026
394118a
Allow 2D smoothing with "time" coordinate
jwasikpsnc Jun 5, 2026
88dcc50
Apply linter
jwasikpsnc Jun 5, 2026
050b612
Apply linter --again
jwasikpsnc Jun 5, 2026
9e85057
Add missing uri.strip()
jwasikpsnc Jun 5, 2026
9fb50d8
Merge branch 'develop' into feature/data-smoothing
jwasikpsnc Jun 5, 2026
727ec23
Decorrelate contour and geometries
mfiaudrin-epsyl Jun 8, 2026
8bfb51a
Select geometry nodes only for displaying their metadata
mfiaudrin-epsyl Jun 10, 2026
c64a5b0
Save geometries in configuration file to retrieve them
mfiaudrin-epsyl Jun 10, 2026
4f54be5
Add a notification if the type of geometry is not handled
mfiaudrin-epsyl Jun 11, 2026
024d53b
Bugfix/2D multiplots (#85)
mfiaudrin-epsyl Jun 12, 2026
06e0c42
Merge branch 'refs/heads/develop' into feature/data-smoothing
jwasikpsnc Jun 12, 2026
08b2b30
Group geometries of type 'geometry/' together
mfiaudrin-epsyl Jun 15, 2026
9b968c2
Fix the save of geometries in the configuration
mfiaudrin-epsyl Jun 15, 2026
9fe753c
group PRs from dependabot
olivhoenen Jun 18, 2026
5664b54
Merge pull request #72 from jwasikpsnc/feature/data-smoothing
olivhoenen Jun 22, 2026
8ba967c
Feature/geometry overlay in the backend (#79)
jwasikpsnc Jun 23, 2026
d6b3f49
Mock get_database_files
jwasikpsnc Jun 22, 2026
b2a4205
Bump actions/checkout from 6 to 7 in the actions-deps group
dependabot[bot] Jun 23, 2026
4ce2c23
Introduce check for special characters (#92)
jwasikpsnc Jun 24, 2026
3d22acd
Feature/replace dim x with identifier (#86)
jwasikpsnc Jun 25, 2026
aa3f89f
Bugfix/interpolation does not support string coordinates (#95)
jwasikpsnc Jun 25, 2026
2017382
Feature/binary data operation (#89)
jwasikpsnc Jun 29, 2026
51c17fa
Bump actions/cache from 5 to 6 in the actions-deps group
dependabot[bot] Jun 30, 2026
212000e
Merge branch 'develop' into feature/geometry_overlay
mfiaudrin-epsyl Jul 6, 2026
ead7ca8
Use BE endpoint to retrieve available geometries for a given URI
mfiaudrin-epsyl Jul 7, 2026
4a8e9a9
use is_geometry_node boolean provided by BE to disable tree nodes rel…
mfiaudrin-epsyl Jul 7, 2026
04a156b
add data smoothing feature
mfiaudrin-epsyl Jul 8, 2026
ab1f21d
allow the user to restore data once smoothed
mfiaudrin-epsyl Jul 8, 2026
34055b1
add unary operations
mfiaudrin-epsyl Jul 8, 2026
74fef2a
update only the selected plot for smoothing and operations
mfiaudrin-epsyl Jul 8, 2026
22fa913
save in configuration smoothing and data operations
mfiaudrin-epsyl Jul 9, 2026
52285ad
preserve the selected smoothing when restoring data operations, and v…
mfiaudrin-epsyl Jul 9, 2026
1b7093b
display the human readable name for operations
mfiaudrin-epsyl Jul 9, 2026
208353e
Bump actions/setup-node from 6 to 7 in the actions-deps group
dependabot[bot] Jul 14, 2026
344cd3b
Force scale ratio if x and y axis have same unit for 1D and 2D plots …
mfiaudrin-epsyl Jul 15, 2026
d3fa170
Update user documentation (#87)
mfiaudrin-epsyl Jul 15, 2026
ec5e19b
Fix error #76 (#99)
jwasikpsnc Jul 15, 2026
fcf3bb9
re-locate the node after a re-render in E2E tests
mfiaudrin-epsyl Jul 7, 2026
0231b61
Preserve transposition after using data manipulation features
mfiaudrin-epsyl Jul 20, 2026
9beb57d
Merge branch 'develop' into feature/data_operations
mfiaudrin-epsyl Jul 21, 2026
d9627fc
Fix tabs scroll area width in hover buttons
mfiaudrin-epsyl Jul 21, 2026
4940137
Bump actions/setup-python from 6 to 7 in the actions-deps group
dependabot[bot] Jul 21, 2026
a8421e9
Merge pull request #74 from mfiaudrin-epsyl/feature/geometry_overlay
olivhoenen Jul 24, 2026
3b9cb75
Feature/signal data operation (#90)
jwasikpsnc Jul 28, 2026
58f875f
Merge branch 'develop' into feature/data_operations
olivhoenen Jul 30, 2026
bd2e791
Update frontend/src/renderer/components/grid/HoverButtons.tsx
olivhoenen Jul 30, 2026
2d2e051
Adding original signal to the list of 'processed' signals
bpalak Jul 28, 2026
19644b4
Updated test expected outcome
bpalak Jul 31, 2026
e9f9e0c
Protect cached venv against change of Python version and let develope…
olivhoenen Aug 3, 2026
9bff89a
Update README instruction w.r.t launch-dev script
olivhoenen Aug 3, 2026
e9a814d
Merge branch 'iterorganization:develop' into feature/data_operations
mfiaudrin-epsyl Aug 3, 2026
1b1ed20
Merge unary and signal operations into a single "Data operations" panel
mfiaudrin-epsyl Aug 4, 2026
c3e4701
improvement: Prevent invalid sigma values in the gaussian smoothing f…
mfiaudrin-epsyl Aug 4, 2026
55d3670
Fix issue 109
jwasikpsnc Aug 5, 2026
2caff52
Apply ruff format
jwasikpsnc Aug 5, 2026
17cbcec
Exclude dynamic_aos geometry nodes (#119)
jwasikpsnc Aug 6, 2026
c3cf2a2
fix: Keep the selected metadata tab when the grid is in edit mode
mfiaudrin-epsyl Aug 6, 2026
13e7fd7
Fix: Display the unit produced by a signal operation on a second Y axis
mfiaudrin-epsyl Aug 7, 2026
e70abaf
Fix issue 122
jwasikpsnc Aug 11, 2026
7a9aab8
feat: add e2e tests for data manipulation
mfiaudrin-epsyl Aug 12, 2026
018641b
fix: Remove the races making the e2e suite flaky
mfiaudrin-epsyl Aug 13, 2026
66e4d76
Merge pull request #101 from mfiaudrin-epsyl/feature/data_operations
olivhoenen Aug 13, 2026
3260775
fix(ux): Update the downsampled_size label
mfiaudrin-epsyl Aug 13, 2026
dcf71da
Doc/update readme (#130)
olivhoenen Aug 14, 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
6 changes: 3 additions & 3 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
# The last match takes precedence over previous ones.
# Do not edit unless specifically mandated to do so.

backend/ @jwasikpsnc @olivhoenen
backend/ @jwasikpsnc @prasad-sawantdesai @olivhoenen

frontend/ @mfiaudrin-epsyl @deepakmaroo
frontend/ @mfiaudrin-epsyl @prasad-sawantdesai

# Global/fallback and technical modifications.
* @deepakmaroo @olivhoenen
* @prasad-sawantdesai @olivhoenen

# Modifications to CODEOWNERS and action workflows
.github/ @SimonPinches @olivhoenen
15 changes: 15 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
version: 2
updates:
# Enable version updates for Github Actions
- package-ecosystem: "github-actions"
# Look for `/.github/workflows` and `/action.yml` or `.yaml`
directory: "/"
# Check for updates once a week
schedule:
interval: "weekly"
# Group actions version bumps into a single PR
groups:
actions-deps:
patterns:
- "*"

136 changes: 136 additions & 0 deletions .github/workflows/asv.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
name: ASV Benchmarks

on:
push:
branches: [main, develop]
pull_request:
types: [opened, synchronize, reopened]
workflow_dispatch:

jobs:
benchmark:
runs-on: ubuntu-22.04
permissions:
contents: write # needed to push HTML report to gh-pages branch

steps:
- name: Checkout code
uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v7
with:
python-version: '3.11'

- name: Display Python version
run: python -c "import sys; print(sys.version)"

- name: Install dependencies
working-directory: backend
run: |
python -m pip install --upgrade pip
# virtualenv required by asv to create per-commit benchmark environments
pip install asv virtualenv

- name: Download test data from Zenodo
run: |
mkdir -p test_data
# iter_scenario_53298_seq1_DD4: ~14 MB, DD 4.0.0, contains core_profiles + equilibrium
# (required by all benchmark node paths). The 123364 file is a SOLPS edge
# simulation with no core_profiles/equilibrium so is not used for benchmarks.
wget -q -O test_data/iter_scenario_53298_seq1_DD4.nc \
"https://zenodo.org/records/17062700/files/iter_scenario_53298_seq1_DD4.nc?download=1"
echo "Downloaded files:"
ls -lh test_data/

- name: Configure ASV regression threshold for CI
run: |
# On GitHub Actions: only flag regressions >2x slower in the HTML report,
# matching the --factor 2.0 used in asv continuous below.
# On Bamboo/local, asv.conf.json is used as-is (default ASV threshold of 5%).
python - <<'EOF'
import pathlib
conf_path = pathlib.Path('asv.conf.json')
conf = conf_path.read_text()
# Insert threshold entry before the final closing brace
assert conf.rstrip().endswith('}'), "Unexpected asv.conf.json ending"
patched = conf.rstrip()[:-1].rstrip().rstrip(',') + ',\n "regressions_thresholds": {".*": 2.0}\n}\n'
conf_path.write_text(patched)
print("CI: regressions_thresholds set to 2.0")
EOF

- name: Run ASV continuous benchmarks
id: asv
# continue-on-error so we can post the PR comment before re-failing the job
continue-on-error: true
env:
# Tells benchmarks/__init__.py where the test data lives
IBEX_TEST_DATA_DIR: ${{ github.workspace }}/test_data
run: |
asv machine --yes

if [ "${{ github.event_name }}" = "pull_request" ]; then
# Compare base branch vs PR head — both on the same runner, same hardware
BASELINE="origin/${{ github.base_ref }}"
CONTENDER="${{ github.sha }}"
else
# Compare previous commit vs current commit on push/manual trigger
# Guard: skip if there is no previous commit (e.g. initial branch push)
if ! git rev-parse HEAD~1 >/dev/null 2>&1; then
echo "No previous commit to compare against — skipping benchmark comparison."
exit 0
fi
BASELINE="HEAD~1"
CONTENDER="HEAD"
fi

# Resolve to full SHAs for clarity in the log
BASELINE_SHA=$(git rev-parse "${BASELINE}" 2>/dev/null || echo "${BASELINE}")
CONTENDER_SHA=$(git rev-parse "${CONTENDER}" 2>/dev/null || echo "${CONTENDER}")
echo "Comparing commits:"
echo " BASELINE : ${BASELINE} → ${BASELINE_SHA}"
echo " CONTENDER : ${CONTENDER} → ${CONTENDER_SHA}"

# --factor 2.0: only flag as regression if a benchmark is >2x slower
# (filters out GitHub runner hardware noise, ~20-50% typical variance)
asv continuous --quick --show-stderr --factor 2.0 "${BASELINE_SHA}" "${CONTENDER_SHA}" \
2>&1 | tee asv_output.txt

# Print a direct before/after comparison table (ratio per benchmark).
# This makes it easy to see which benchmarks changed and by how much.
echo ""
echo "=== Before vs After comparison ==="
asv compare --factor 2.0 --split "${BASELINE_SHA}" "${CONTENDER_SHA}" 2>&1 | tee -a asv_output.txt

- name: Fail job if regression detected
if: steps.asv.outcome == 'failure'
run: |
echo "FAILED: Performance regression detected (>2x threshold). See benchmark output above."
exit 1

- name: Generate HTML results
# Only meaningful on push to develop/main — asv publish builds the branch
# timeline, so PR commits (not yet on any branch) are simply skipped with
# "Couldn't find <sha> in branches". Run only after a merge to avoid noise.
if: github.event_name != 'pull_request'
run: |
# asv publish resolves branch names from asv.conf.json via git rev-list.
# On PR checkouts only the PR branch is a local ref. Using
# refspec <remote>:<local> creates local branches directly so that
# git rev-list develop / main succeeds (plain fetch only makes
# remotes/origin/develop which asv does not resolve).
git fetch origin develop:develop 2>/dev/null || true
git fetch origin main:main 2>/dev/null || true
asv publish

- name: Deploy HTML report to GitHub Pages
# Only run on push to develop/main, same reasoning as Generate HTML above.
if: github.event_name != 'pull_request'
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: .asv/html
destination_dir: benchmarks
keep_files: false
58 changes: 58 additions & 0 deletions .github/workflows/backend-pytest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: backend pytest

on:
push:
pull_request:
types: [opened, synchronize, reopened]

jobs:
build:

runs-on: ubuntu-22.04
permissions:
contents: read

strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- name: Checkout code
uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}

- name: Display Python version
run: python -c "import sys; print(sys.version)"

- name: Install dependencies
working-directory: backend
run: |
python -m pip install --upgrade pip setuptools wheel
python -m pip install .[test]

- name: Test with pytest
working-directory: backend
run: |
mkdir -p test-reports
python -m pytest -n auto --cov=ibex --cov-report=term-missing --cov-report=html --junit-xml=test-reports/pytest-report.xml tests

- name: Upload report
uses: actions/upload-artifact@v7
with:
name: pytest-report-${{ matrix.python-version }}
path: backend/test-reports/pytest-report.xml

- name: Upload coverage html
if: matrix.python-version == '3.11' # coverage doesn't change between python versions.
uses: actions/upload-artifact@v7
with:
name: coverage-html
path: backend/htmlcov

29 changes: 29 additions & 0 deletions .github/workflows/frontend-build-and-packaging.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: frontend-build-and-packaging

on:
push:
pull_request:
types: [opened, synchronize, reopened]

jobs:
build-and-packaging:
runs-on: ubuntu-22.04
steps:
- name: Checkout frontend sources
uses: actions/checkout@v7

- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: '20'

- name: Display Node version
run: node -v && npm -v

- name: Install frontend dependencies
working-directory: frontend
run: npm ci

- name: Run build and package
working-directory: frontend
run: npm run package
86 changes: 86 additions & 0 deletions .github/workflows/frontend-e2e-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: frontend-e2e-tests

on:
push:
pull_request:
types: [opened, synchronize, reopened]

jobs:
e2e:
runs-on: ubuntu-22.04

steps:
- name: Checkout sources
uses: actions/checkout@v7


- name: Setup Python
uses: actions/setup-python@v7
with:
python-version: '3.13'

- name: Display Python version
run: python -c "import sys; print(sys.version)"

- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: '20'

- name: Install dependencies
working-directory: frontend
run: npm ci

- name: Install Xvfb
run: sudo apt-get update && sudo apt-get install -y xvfb

- name: Define dataset list and cache key
id: datasets
run: |
urls=($(cat zenodo_datasets.txt))
echo "files=${urls[*]}" >> $GITHUB_OUTPUT

# Generate a hash key from the URLs list, this is used for caching
key=$(echo "${urls[*]}" | sha256sum | cut -d ' ' -f1)
echo "key=${key}" >> $GITHUB_OUTPUT

- name: Cache Zenodo datasets
id: cache-datasets
uses: actions/cache/restore@v6
with:
path: e2e_datasets
key: ${{ steps.datasets.outputs.key }}

- if: ${{ steps.cache-datasets.outputs.cache-hit != 'true' }}
name: Download datasets if not cached
run: |
mkdir -p e2e_datasets
for url in ${{ steps.datasets.outputs.files }}; do
echo "Downloading $(basename $url) ..."
wget -P e2e_datasets/ "$url"
done

- name: Always save Zenodo datasets (even if pytest would fail)
id: cache-datasets-save
if: always() && steps.cache-datasets.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
key: ${{ steps.cache-datasets.outputs.cache-primary-key }}
path: e2e_datasets

- name: Run E2E tests
working-directory: frontend
run: |
xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" bash -c "
python3 -m venv ../ibex_venv
source ../ibex_venv/bin/activate
pip install --upgrade pip setuptools wheel
cd ../backend
pip install -e .
cd ../frontend
npm run start:e2e &
npx wait-on tcp:9222
npx wait-on http://127.0.0.1:8000/docs/
sleep 5
npm run test:e2e
"
33 changes: 33 additions & 0 deletions .github/workflows/frontend-linting.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: frontend-linting-and-formatting

on:
push:
pull_request:
types: [opened, synchronize, reopened]

jobs:
lint:
runs-on: ubuntu-22.04
steps:
- name: Checkout frontend sources
uses: actions/checkout@v7

- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: '20'

- name: Display Node version
run: node -v && npm -v

- name: Install frontend dependencies
working-directory: frontend
run: npm ci

- name: Run code formatting
working-directory: frontend
run: npm run format

- name: Run linting
working-directory: frontend
run: npm run lint
Loading
Loading