Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
188 commits
Select commit Hold shift + click to select a range
5eda2fc
add new nworkers tests for perfs
guillaume-byte May 21, 2026
a4cf489
Stop DataLoaderInterface from blocking on pause_controller during ite…
May 27, 2026
580c80f
Move pause_at_step trigger from DataLoaderInterface into GuardContext
May 28, 2026
41b76b8
Remove dead DataLoaderInterface._wait_if_paused
May 28, 2026
d0577d0
ws-detection: default num_workers=2, add num_workers benchmark harness
May 28, 2026
8c501f8
Drop now-unused threading/pause_controller imports from dataloader_in…
May 28, 2026
9f23295
ws-detection: drop bench.py/run_bench.sh from the branch
May 28, 2026
5ec83e5
Revert ws-detection example changes; keep this branch framework-only
May 28, 2026
d240dff
Fix ws-detection example: restore runnable training loop
May 28, 2026
08b89eb
Merge pull request #180 from GrayboxTech/fix-ws-det
AlexGrayBox May 28, 2026
90f6fde
Merge pull request #181 from GrayboxTech/framework-intergrations/para…
AlexGrayBox May 28, 2026
69edb2b
fix oom bug on break by slice (#186)
AlexGrayBox Jun 4, 2026
b799aa8
179 audit and export user interactions success and failure to json an…
guillaume-byte Jun 4, 2026
b210dd9
184 dataframe granularity (#187)
guillaume-byte Jun 4, 2026
8f8d5f1
Ddp support wip (#185)
guillaume-byte Jun 4, 2026
3f44834
Merge branch 'dev' of https://github.com/GrayboxTech/weightslab into dev
guillaume-byte Jun 4, 2026
416774f
Fix lint code quality issue
guillaume-byte Jun 4, 2026
58f72b3
Fix ruff and vulture code quality issue
guillaume-byte Jun 4, 2026
834ac7f
fix utests after merging
guillaume-byte Jun 5, 2026
f6d7904
Code quality issues
guillaume-byte Jun 5, 2026
e43aa1b
Final code quality check
guillaume-byte Jun 5, 2026
eef7a21
change ci code quality as important for CI
guillaume-byte Jun 5, 2026
1557f9f
Fix dev release CI
guillaume-byte Jun 5, 2026
9953476
update release note format
guillaume-byte Jun 5, 2026
bed3e0f
Improve release notes: custom template with PR links, contributor pro…
guillaume-byte Jun 5, 2026
e00bd5c
Final release note fix
guillaume-byte Jun 5, 2026
1258ebd
fix instance_ids bugs matching for batch target format (targets=[bb_A…
guillaume-byte Jun 5, 2026
4c88585
188 logger granularity and structure (#189)
guillaume-byte Jun 5, 2026
7cf5c0c
revert merging PR #185
guillaume-byte Jun 5, 2026
861911c
Fix bug from reverted Merged Conflicts
guillaume-byte Jun 5, 2026
24bf58f
remove hardcoded path from config
guillaume-byte Jun 8, 2026
3383035
fix iou metric name
guillaume-byte Jun 8, 2026
685c88f
fix merged conflicts error on fct name
guillaume-byte Jun 8, 2026
10a65ff
Remove hardcoded value from src ModelInterface
guillaume-byte Jun 8, 2026
69e0936
Merge branch 'main' into dev
guillaume-byte Jun 8, 2026
456ffb1
fix merged conflicts function name
guillaume-byte Jun 8, 2026
590b6ac
Merge branch 'dev' of https://github.com/GrayboxTech/weightslab into dev
guillaume-byte Jun 8, 2026
f411225
Add weightslab.integrations.ultralytics SDK (#191)
AlexGrayBox Jun 9, 2026
6cc624b
fix useless imports and vars: code quality issues
guillaume-byte Jun 9, 2026
c5f0807
Force val to letterbox to (imgsz, imgsz) like train
Jun 9, 2026
1974d3b
Source val rect from ledger config; default False
Jun 9, 2026
901da04
small fixes around certs. and windows; and add ul deps in wl
guillaume-byte Jun 9, 2026
ca8e38b
fix ul deps version
guillaume-byte Jun 9, 2026
f3d5128
fix quotes issue
guillaume-byte Jun 9, 2026
3459058
Add geometry test for val rect-mode opt-in
Jun 9, 2026
12c91ef
Revert "Add geometry test for val rect-mode opt-in"
Jun 9, 2026
809258c
Merge branch 'main' into dev
guillaume-byte Jun 9, 2026
ed2d64b
Fix failing unit tests and dataloader infinite loop
guillaume-byte Jun 10, 2026
a9a2165
Rework UI onboarding CLI: secure-by-default launch, cleanup, banner help
guillaume-byte Jun 10, 2026
e2f65b0
Merge branch 'rework-ui-launch-onboarding' into dev
guillaume-byte Jun 10, 2026
aae4b65
Make CI run the real test suite and fix/triage dev test failures
guillaume-byte Jun 10, 2026
bea6314
Make WEIGHTSLAB_CERTS_DIR the single source of truth for TLS/auth
guillaume-byte Jun 10, 2026
9e8a067
Merge branch 'rework-ui-launch-onboarding' into dev (certs single sou…
guillaume-byte Jun 10, 2026
e985a66
Keep a valid certs bind-mount in unsecured/--no-certs launches
guillaume-byte Jun 10, 2026
6a09909
Add `weightslab example start` to run the bundled classification example
guillaume-byte Jun 10, 2026
314c60c
fix ui docker bridge and simplify certs
guillaume-byte Jun 10, 2026
f40792f
add torchmetrics deps for cls example
guillaume-byte Jun 10, 2026
2e4778d
fix onboarding certs issue and update doc and readme
guillaume-byte Jun 10, 2026
912c03c
Fix certs issues and related utests
guillaume-byte Jun 11, 2026
af6846c
Fix certs issues; change cls config; and fix issues with hist and age…
guillaume-byte Jun 11, 2026
579d8cc
Refactor wl examples syntax
guillaume-byte Jun 11, 2026
0c7f1c0
fix permissions issues and docker v1
guillaume-byte Jun 12, 2026
8695667
fix exec bits from exec files
guillaume-byte Jun 12, 2026
12f5130
fix cmds tests
guillaume-byte Jun 12, 2026
57c8313
Integrate 2d 3d point cloud detection usecase with Lidar (#199)
guillaume-byte Jun 12, 2026
5432688
fix code quality
guillaume-byte Jun 12, 2026
6ed796f
fix code quality
guillaume-byte Jun 12, 2026
f9a041a
Merge origin/main into dev (v1.2.1 + CHANGELOG)
guillaume-byte Jun 12, 2026
0927cce
Add missing source files skipped by data/ gitignore rule
guillaume-byte Jun 12, 2026
1e23d37
Fix code quality issue
guillaume-byte Jun 12, 2026
8076c25
fix utests
guillaume-byte Jun 12, 2026
73fca0c
Fix 4 ui_docker_bridge unit tests broken by --certs flag refactor
guillaume-byte Jun 12, 2026
19f2f16
Exclude heavy blob columns from histogram/metadata sweeps
Jun 14, 2026
1bbd971
Python version tests in workflows
guillaume-byte Jun 15, 2026
67f90a5
remove useless certs
guillaume-byte Jun 15, 2026
8deb810
update gitignore and add debug print exc
guillaume-byte Jun 15, 2026
e38c4f4
add docker initialization materials
guillaume-byte Jun 15, 2026
72d682e
fix logger prints format and spam
guillaume-byte Jun 15, 2026
3b88c59
maximum resolution set to 360p by default
guillaume-byte Jun 15, 2026
06e2b28
Merge branch 'main' into dev
guillaume-byte Jun 15, 2026
6c3e1d5
add auto start in examples
guillaume-byte Jun 16, 2026
59a45bc
Fix main process issues with windows and logs; and fix ultralytics in…
guillaume-byte Jun 16, 2026
058f50b
Merge branch 'dev' of https://github.com/GrayboxTech/weightslab into dev
guillaume-byte Jun 16, 2026
117bb4e
remove useless dir
guillaume-byte Jun 16, 2026
ff662f2
Disable the WatchDog; fix evaluate feature in nograd mode and no guar…
guillaume-byte Jun 17, 2026
0bee476
Fix code quality issue
guillaume-byte Jun 17, 2026
695dc5a
Merge branch 'main' into dev
guillaume-byte Jun 17, 2026
7b06e0f
Fix UL issue with custom EMA and evaluation feature
guillaume-byte Jun 17, 2026
6fff830
Merge branch 'dev' of https://github.com/GrayboxTech/weightslab into dev
guillaume-byte Jun 17, 2026
cfdbd3f
Merge branch 'main' into dev
guillaume-byte Jun 17, 2026
58ce5ee
Allow to run CI from custom branch with correct trigger flag in commit
guillaume-byte Jun 18, 2026
093f646
Merge branch 'dev' of https://github.com/GrayboxTech/weightslab into dev
guillaume-byte Jun 18, 2026
4e84dc0
Fix pandas incompatible-dtype FutureWarning in dataframe merge/upsert
guillaume-byte Jun 18, 2026
997e914
Add agent memory to repo for user
guillaume-byte Jun 18, 2026
7698e20
fix prediction normalization issues
guillaume-byte Jun 18, 2026
ee9d6e6
Fix ledgered parameters issues
guillaume-byte Jun 18, 2026
61bc12a
Fix new exp. hash after pause 4 the first time
guillaume-byte Jun 18, 2026
eca9e25
[skip ci] fix parameters wrapping in examples
guillaume-byte Jun 18, 2026
ceef8c3
Merge branch 'main' into dev
guillaume-byte Jun 18, 2026
3751825
V1.3 UI optimization and new features (#214)
guillaume-byte Jun 26, 2026
1a0f78e
add log for user
guillaume-byte Jun 26, 2026
df00cd4
Merge branch 'main' into dev
guillaume-byte Jun 26, 2026
8d3a573
Fix categorical upsert failing when origin column has new value
guillaume-byte Jun 29, 2026
7c97491
Merge branch 'main' into dev
guillaume-byte Jun 29, 2026
919bf93
Change logger msg if docker not installed to be more visible
guillaume-byte Jun 29, 2026
9508dc1
disable loading config by default
guillaume-byte Jun 30, 2026
529a2d8
fix: release notes generation (empty PR list, README noise, CLI banner)
guillaume-byte Jul 2, 2026
565e9e2
237 agent improvements (#240)
guillaume-byte Jul 6, 2026
9101ee6
Add hist. generation on categorical values (#239)
guillaume-byte Jul 6, 2026
b154d35
228 weightslab examples and documentation revamp (#238)
guillaume-byte Jul 6, 2026
2e77279
Fix merged conflicts issue
guillaume-byte Jul 6, 2026
2b9fb9b
Allow agent to change WL HP
guillaume-byte Jul 6, 2026
2806262
Update CHANGELOG
guillaume-byte Jul 6, 2026
ff91626
Add user commands in doc
guillaume-byte Jul 6, 2026
c05a5b8
add weightslab ui launch args to image repo and version, and fix cert…
guillaume-byte Jul 6, 2026
8c57820
Release CI: publish dev pre-releases from dev-branch 'dev' tags
guillaume-byte Jul 6, 2026
19f93a2
docs: document watch_or_edit signal wrapping (logger + user functions)
guillaume-byte Jul 6, 2026
fb8e0b7
Fix version resolver from pypi version / git tag
guillaume-byte Jul 6, 2026
3f4289f
Update CHANGELOG
guillaume-byte Jul 6, 2026
724b94e
Bundle docker/ and examples/ inside the weightslab package
guillaume-byte Jul 6, 2026
eac08ea
Fix truncated hash reply
guillaume-byte Jul 6, 2026
8a30567
Merge branch 'main' into dev
guillaume-byte Jul 6, 2026
e542169
Fix crash on empty detection labels in _process_sample_row
guillaume-byte Jul 6, 2026
62076b8
Update CHANGELOG
guillaume-byte Jul 7, 2026
d1c3cca
Add agent cmd to show user current config used
guillaume-byte Jul 7, 2026
e644910
Update CHANGELOG
guillaume-byte Jul 7, 2026
451feab
Merge branch 'main' into dev
guillaume-byte Jul 7, 2026
a936add
fix logger error
guillaume-byte Jul 8, 2026
053fe61
Merge branch 'dev' of https://github.com/GrayboxTech/weightslab into dev
guillaume-byte Jul 8, 2026
faffb72
Fix bugs with instances ids and also with h5 flush order
guillaume-byte Jul 8, 2026
a0d3f51
backend: advertise weightslab version to the UI
guillaume-byte Jul 10, 2026
98eaf3e
restart action from UI - dev mode only (#246)
guillaume-byte Jul 10, 2026
532824e
examples: rename ws-* directories to wl-* and update references (#247)
guillaume-byte Jul 10, 2026
c71e6f1
Torch collab examples (#248)
guillaume-byte Jul 10, 2026
2db142c
fix(ledger): Proxy[key] returns a live value proxy like .get() (#249)
guillaume-byte Jul 10, 2026
257de85
237 agent improvements (#245)
guillaume-byte Jul 10, 2026
e0f21eb
fix merged conflicts
guillaume-byte Jul 10, 2026
500d7ec
fix proto issues and usecase import issue
guillaume-byte Jul 10, 2026
dcd118c
Comment preds_raw from src to not keep logits in pending thread
Jul 10, 2026
97eb41c
Signal refinements: vectorized + reactive @wl.signal, overhead tuning…
AlexGrayBox Jul 10, 2026
aabe0b2
refactor loss shape cls example
guillaume-byte Jul 10, 2026
1175931
fix merged conflicts
guillaume-byte Jul 10, 2026
5764c48
fix issue with custom signals
guillaume-byte Jul 10, 2026
fc8fd1a
Update CHANGELOG
guillaume-byte Jul 10, 2026
51fa27d
Merge branch 'main' into dev
guillaume-byte Jul 10, 2026
da6eb42
Fix all-NaN float column treated as categorical in GetHistogram
guillaume-byte Jul 10, 2026
8ea59ae
[force ci] fix Weightslab compatibility issues with np>2
guillaume-byte Jul 13, 2026
1ac6ab7
Fix deps version and conflicts, and utests
guillaume-byte Jul 13, 2026
edf7077
Update CHANGELOG
guillaume-byte Jul 13, 2026
955f51e
Remove raised error if serving before config wrapped
guillaume-byte Jul 13, 2026
48611d0
v1.3.4.dev0 Full Collab Integration and bug fixed (#251)
guillaume-byte Jul 16, 2026
227cb33
Fix formatting of Python version requirement
luigi-dovidio Jul 17, 2026
7f3874c
Add Docker-free pip-native UI: `weightslab start`
guillaume-byte Jul 19, 2026
f45510b
Remove Docker from weightslab; rename CLI to weightslab.cli; Docker-f…
guillaume-byte Jul 20, 2026
c488636
Fix current hash exposure in experiment context
guillaume-byte Jul 20, 2026
f0575b6
Fix slow dataframe manager updates and data_service sync
guillaume-byte Jul 21, 2026
823b444
Merge branch 'dev' of https://github.com/GrayboxTech/weightslab into …
guillaume-byte Jul 21, 2026
671270b
H5 and Loggers fixes (#257)
guillaume-byte Jul 21, 2026
a6f0c1a
examples renaming lost in merge
guillaume-byte Jul 21, 2026
9f2d6fb
Rename UI launch command; auto-open browser; update Colab links to wl…
guillaume-byte Jul 21, 2026
51361ea
Add two tabular PyTorch examples: bank fraud detection + ads CTR reco…
guillaume-byte Jul 21, 2026
9fee133
Remove UI prebuilt directories
guillaume-byte Jul 21, 2026
13ddb5d
Add legacy commands from v1.3.3
guillaume-byte Jul 21, 2026
626d690
Rescue: reactive @wl.signal engine + per-sample signal perf (was orph…
AlexGrayBox Jul 21, 2026
05d3fae
feat(data_service): per-cell loss trajectory + curve-derived shape (G…
AlexGrayBox Jul 22, 2026
4017785
remove old files and rename examples
guillaume-byte Jul 22, 2026
bfe62b7
fix merged conflicts
guillaume-byte Jul 22, 2026
5a2a44b
Fix write history function dump orient
guillaume-byte Jul 23, 2026
a927957
Fix tabular experiment usecases and related stuff
guillaume-byte Jul 23, 2026
6f560b4
Update README
guillaume-byte Jul 23, 2026
a04e9ca
Remove merged conflicts in docs and add new content
guillaume-byte Jul 23, 2026
0a4d005
update tests
guillaume-byte Jul 23, 2026
427cfc8
Fix loss shape cls
guillaume-byte Jul 23, 2026
7aa69b3
Fix tabular examples
guillaume-byte Jul 23, 2026
63274af
gitignore: stop tracking the built UI (weightslab/ui/static)
guillaume-byte Jul 23, 2026
873bf04
Fix query filter crash on numeric-but-awkward columns
guillaume-byte Jul 24, 2026
51f9a4b
Fix WeightsLab Release CI - UI integration
guillaume-byte Jul 24, 2026
e59bdfa
Fix doubled "v" in release banner version (vv1.3.4 -> v1.3.4)
guillaume-byte Jul 24, 2026
72a665d
Only re-run loss-shape autotagging when a signal actually has new data
guillaume-byte Jul 24, 2026
ad578ad
Fix WL Release CI
guillaume-byte Jul 24, 2026
c489fdf
trigger CI release in dev
guillaume-byte Jul 24, 2026
5186d34
release: surface why the weights_studio dev-branch probe falls back t…
guillaume-byte Jul 24, 2026
ffdc05e
Fixing WL Release CI
guillaume-byte Jul 24, 2026
dd56007
release: drop the ls-remote probe for weights_studio's dev branch
guillaume-byte Jul 24, 2026
896dbcd
fix: retry HDFStore open in save_tag_registry to ride out Windows fil…
guillaume-byte Jul 24, 2026
31668bb
fix: anchor the data/ gitignore pattern to repo root
guillaume-byte Jul 24, 2026
883376f
add exception on data dir in gitignore
guillaume-byte Jul 24, 2026
9f17281
Remove old text from examples, and docs
guillaume-byte Jul 24, 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
Binary file added .coverage
Binary file not shown.
198 changes: 153 additions & 45 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,25 @@ on:

jobs:
# ── Routing ───────────────────────────────────────────────────────────────
# Detect whether the tagged commit lives on main (β†’ PyPI production release)
# or anywhere else (β†’ TestPyPI pre-release). All downstream jobs branch on
# this output so only the correct path runs.
# Two independent signals decide what runs, checked in this priority order:
# 1. is_dev_release: the tag NAME contains "dev" (e.g. v1.3.1-dev0) β€”
# ALWAYS true in that case, regardless of which branch/commit is
# tagged. Always publishes to TestPyPI + a GitHub pre-release.
# 2. is_main: only considered when the name does NOT contain "dev", and
# requires the tag's commit to actually be an ancestor of main. This is
# a safety gate: a non-dev-named tag cut from a branch other than main
# must never auto-publish a real PyPI release under a "real" version
# number just because someone forgot the branch they were on.
# A non-dev-named tag whose commit is NOT on main matches neither and
# triggers nothing at all (should_run=false) β€” accidental/misplaced tags
# never release.
#
# This used to check "is the commit an ancestor of main" FIRST, which
# silently routed a dev-named tag to the main/PyPI pipeline whenever dev and
# main happened to be in sync (e.g. right after a merge) β€” the ancestor
# check won out over the "dev" in the tag name. Checking the name first
# fixes that, while still keeping the ancestor check as the guard for the
# non-dev path.
detect-target:
name: Detect release target
runs-on: ubuntu-latest
Expand All @@ -23,61 +39,66 @@ jobs:
with:
fetch-depth: 0

- name: Check whether the tag commit is on main
- name: Check the release target
id: check
run: |
git fetch origin main
TAG_COMMIT="$(git rev-list -n 1 "${GITHUB_REF}")"
IS_ON_MAIN=$(git merge-base --is-ancestor "${TAG_COMMIT}" origin/main \
&& echo "true" || echo "false")
echo "is_main=${IS_ON_MAIN}" >> $GITHUB_OUTPUT

# Dev pre-release: a tag NOT on main whose name contains 'dev'
# (e.g. v1.3.1-dev0). Runs the full pipeline up to the TestPyPI install
# tests + a GitHub pre-release, then STOPS before the production PyPI
# publish. A tag off main WITHOUT 'dev' triggers nothing (should_run=false),
# so accidental/non-dev tags on dev never release.
IS_DEV_RELEASE=false
if [ "${IS_ON_MAIN}" != "true" ] && [[ "${GITHUB_REF_NAME}" == *dev* ]]; then
if [[ "${GITHUB_REF_NAME}" == *dev* ]]; then
IS_DEV_RELEASE=true
fi
echo "is_dev_release=${IS_DEV_RELEASE}" >> $GITHUB_OUTPUT

if [ "${IS_ON_MAIN}" = "true" ] || [ "${IS_DEV_RELEASE}" = "true" ]; then
# Only a non-dev-named tag needs the ancestor check at all -- a
# dev-named tag is never a main release, no matter where it sits.
IS_MAIN=false
if [ "${IS_DEV_RELEASE}" != "true" ]; then
git fetch origin main
TAG_COMMIT="$(git rev-list -n 1 "${GITHUB_REF}")"
if git merge-base --is-ancestor "${TAG_COMMIT}" origin/main; then
IS_MAIN=true
fi
fi
echo "is_main=${IS_MAIN}" >> $GITHUB_OUTPUT

if [ "${IS_DEV_RELEASE}" = "true" ] || [ "${IS_MAIN}" = "true" ]; then
SHOULD_RUN=true
else
SHOULD_RUN=false
fi
echo "should_run=${SHOULD_RUN}" >> $GITHUB_OUTPUT
echo "Tag: ${GITHUB_REF_NAME} commit: ${TAG_COMMIT} on_main: ${IS_ON_MAIN} dev_release: ${IS_DEV_RELEASE} should_run: ${SHOULD_RUN}"

# ── Shared: run tests before any publish (main or dev pre-release) ────────
test:
name: Run Tests Before Release
needs: detect-target
runs-on: ubuntu-latest
if: ${{ needs.detect-target.outputs.should_run == 'true' }}
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v6
with:
python-version: '3.11'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
# Install the test extra so pytest, graphviz, torchmetrics,
# pytorch-lightning and tensorboard are available (several test modules
# import pytest / use pytest fixtures and cannot run under bare unittest).
python -m pip install .[utest] --extra-index-url https://download.pytorch.org/whl/cpu
python -m pip install pytest-timeout
echo "Tag: ${GITHUB_REF_NAME} is_main: ${IS_MAIN} dev_release: ${IS_DEV_RELEASE} should_run: ${SHOULD_RUN}"
if [ "${SHOULD_RUN}" != "true" ]; then
echo "::warning::Tag '${GITHUB_REF_NAME}' has no 'dev' in its name and its commit is not on main β€” skipping release entirely."
fi

- name: Run tests
run: |
export WEIGHTSLAB_LOG_LEVEL="DEBUG"
python -m pip install pytorch_lightning
python -m unittest discover -s ./tests -p "test_*.py" -t . -v
# # ── Shared: run tests before any publish (main or dev pre-release) ────────
# test:
# name: Run Tests Before Release
# needs: detect-target
# runs-on: ubuntu-latest
# if: ${{ needs.detect-target.outputs.should_run == 'true' }}
# steps:
# - uses: actions/checkout@v4

# - uses: actions/setup-python@v6
# with:
# python-version: '3.11'

# - name: Install dependencies
# run: |
# python -m pip install --upgrade pip
# # Install the test extra so pytest, graphviz, torchmetrics,
# # pytorch-lightning and tensorboard are available (several test modules
# # import pytest / use pytest fixtures and cannot run under bare unittest).
# python -m pip install .[utest] --extra-index-url https://download.pytorch.org/whl/cpu
# python -m pip install pytest-timeout

# - name: Run tests
# run: |
# export WEIGHTSLAB_LOG_LEVEL="DEBUG"
# python -m pip install pytorch_lightning
# python -m unittest discover -s ./tests -p "test_*.py" -t . -v

# ═══════════════════════════════════════════════════════════════════════════
# DEV RELEASE β€” tag on dev branch, not yet merged to main
Expand All @@ -86,7 +107,8 @@ jobs:

build-and-publish-dev-release:
name: Build & Publish Dev Release (TestPyPI)
needs: [detect-target,test]
# needs: [detect-target,test]
needs: [detect-target]
runs-on: ubuntu-latest
if: ${{ needs.detect-target.outputs.should_run == 'true' }}
permissions:
Expand All @@ -102,6 +124,55 @@ jobs:
with:
python-version: '3.11'

- uses: actions/setup-node@v4
with:
node-version: '20'

- name: Build and vendor Weights Studio UI
env:
# weights_studio is a separate PRIVATE repo β€” the automatic
# secrets.GITHUB_TOKEN is scoped to THIS repo only and has no access
# to it, so the clone below must authenticate with a real
# cross-repo PAT instead.
WEIGHTS_STUDIO_TOKEN: ${{ secrets.WEIGHTS_STUDIO_API_TOKEN }}
IS_DEV_RELEASE: ${{ needs.detect-target.outputs.is_dev_release }}
run: |
set -euo pipefail

if [ -z "${WEIGHTS_STUDIO_TOKEN:-}" ]; then
echo "WEIGHTS_STUDIO_API_TOKEN secret is not set; cannot access the private weights_studio repo." >&2
exit 1
fi
CLONE_URL="https://x-access-token:${WEIGHTS_STUDIO_TOKEN}@github.com/GrayboxTech/weights_studio.git"

# Mirror the weightslab tag routing: a dev-named tag vendors the
# weights_studio "dev" branch; every other tag vendors main. No
# ls-remote probe -- it added a flaky network round-trip and a
# branch that's known to exist. This used to guess the ref from
# which weightslab branches happened to contain the tagged commit
# -- fragile, and NOT tied to is_dev_release, so it could silently
# vendor the wrong UI.
UI_REF="main"
if [ "${IS_DEV_RELEASE}" = "true" ]; then
UI_REF="dev"
fi
echo "Using weights_studio ref: ${UI_REF}"

rm -rf /tmp/weights_studio
git clone --depth 1 --branch "${UI_REF}" "${CLONE_URL}" /tmp/weights_studio

pushd /tmp/weights_studio >/dev/null
npm ci
npm test
npm run build
popd >/dev/null

rm -rf weightslab/ui/static
mkdir -p weightslab/ui/static
cp -R /tmp/weights_studio/dist/. weightslab/ui/static/

test -f weightslab/ui/static/index.html

- name: Install build tools
run: python -m pip install --upgrade pip build twine

Expand Down Expand Up @@ -456,6 +527,43 @@ jobs:
with:
python-version: '3.11'

- uses: actions/setup-node@v4
with:
node-version: '20'

- name: Build and vendor Weights Studio UI
env:
# weights_studio is a separate PRIVATE repo β€” the automatic
# secrets.GITHUB_TOKEN is scoped to THIS repo only and has no access
# to it, so the clone below must authenticate with a real
# cross-repo PAT instead.
WEIGHTS_STUDIO_TOKEN: ${{ secrets.WEIGHTS_STUDIO_API_TOKEN }}
run: |
set -euo pipefail

if [ -z "${WEIGHTS_STUDIO_TOKEN:-}" ]; then
echo "WEIGHTS_STUDIO_API_TOKEN secret is not set; cannot access the private weights_studio repo." >&2
exit 1
fi
CLONE_URL="https://x-access-token:${WEIGHTS_STUDIO_TOKEN}@github.com/GrayboxTech/weights_studio.git"
UI_REF="main"
echo "Using weights_studio ref: ${UI_REF}"

rm -rf /tmp/weights_studio
git clone --depth 1 --branch "${UI_REF}" "${CLONE_URL}" /tmp/weights_studio

pushd /tmp/weights_studio >/dev/null
npm ci
npm test
npm run build
popd >/dev/null

rm -rf weightslab/ui/static
mkdir -p weightslab/ui/static
cp -R /tmp/weights_studio/dist/. weightslab/ui/static/

test -f weightslab/ui/static/index.html

- name: Install build tools
run: python -m pip install --upgrade pip build twine

Expand Down
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,32 @@ weightslab.egg-info
build
agents

# UI dirs β€” built SPA artifacts, regenerated by `npm run build` / build:embed;
# never committed (the wheel embeds them at build time).
dist
static
weightslab/ui/static/

# Ignore files and directories generated by Python
logs
root_log_dir
__pycache__
venv
runs
data
outputs
!./tests/data/
!./weightslab/data/
MagicMock
drop
htmlcov
htmlcov-report

# Ignore hidden directories
.history
.lh
.claude
.coverage
.chat
.ai
.pytest_cache
Expand Down
Loading
Loading