@gen3/workspaces 0.12.62 → 0.12.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dts/api/workspaceAssetsApi.js +1 -1
- package/dist/dts/api/workspaceAssetsApi.js.map +1 -1
- package/dist/dts/components/MicroContainerPanel.stories.d.ts +6 -2
- package/dist/dts/components/MicroContainerPanel.stories.d.ts.map +1 -1
- package/dist/dts/components/MicroContainerPanel.stories.js +1 -1
- package/dist/dts/components/MicroContainerPanel.stories.js.map +1 -1
- package/dist/dts/components/MicroContainerReduxPanel.d.ts +3 -5
- package/dist/dts/components/MicroContainerReduxPanel.d.ts.map +1 -1
- package/dist/dts/components/MicroContainerReduxPanel.js +32 -6
- package/dist/dts/components/MicroContainerReduxPanel.js.map +1 -1
- package/dist/dts/pages/WorkspacesCenter/data.d.ts.map +1 -1
- package/dist/dts/pages/WorkspacesCenter/data.js +4 -1
- package/dist/dts/pages/WorkspacesCenter/data.js.map +1 -1
- package/dist/dts/providers/types.d.ts +1 -1
- package/dist/dts/providers/types.d.ts.map +1 -1
- package/dist/dts/providers/useMicroContainerRedux.d.ts.map +1 -1
- package/dist/dts/providers/useMicroContainerRedux.js +8 -2
- package/dist/dts/providers/useMicroContainerRedux.js.map +1 -1
- package/dist/dts/workspace/WorkspaceCenter.d.ts.map +1 -1
- package/dist/dts/workspace/WorkspaceCenter.js +1 -1
- package/dist/dts/workspace/WorkspaceCenter.js.map +1 -1
- package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.d.ts.map +1 -1
- package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.js +1 -1
- package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.js.map +1 -1
- package/dist/dts/workspace/tiers/RemoteComputeWorkspace.d.ts +1 -0
- package/dist/dts/workspace/tiers/RemoteComputeWorkspace.d.ts.map +1 -1
- package/dist/dts/workspace/tiers/RemoteComputeWorkspace.js +2 -2
- package/dist/dts/workspace/tiers/RemoteComputeWorkspace.js.map +1 -1
- package/dist/dts/workspace/tiers/types.d.ts +2 -0
- package/dist/dts/workspace/tiers/types.d.ts.map +1 -1
- package/dist/index/cjs/index.js +97 -25
- package/dist/index/cjs/index.js.map +1 -1
- package/dist/index/esm/index.js +98 -26
- package/dist/index/esm/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/jupyterlite-builds/free-private/overrides.json +1 -0
- package/dist/jupyterlite-builds/remote-private/overrides.json +26 -0
- package/dist/jupyterlite-builds/scripts/build-gen3sdk-lite_v2.sh +310 -0
- package/dist/jupyterlite-builds/scripts/build-jupyterlite.sh +9 -0
- package/dist/jupyterlite-builds/scripts/build-jupyterlite_v2.sh +111 -0
- package/dist/server/cjs/server.js +1 -1
- package/dist/server/cjs/server.js.map +1 -1
- package/dist/server/esm/server.js +1 -1
- package/dist/server/esm/server.js.map +1 -1
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/aiofiles-25.1.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/backoff-2.2.1-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/cdislogging-1.2.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/comm-0.2.3-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/dataclasses_json-0.5.9-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/dictionaryutils-4.0.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/drsclient-0.4.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/fastavro-1.12.2-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/gen3-4.28.3-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/gen3dictionary-3.0.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/gen3users-1.1.1-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/humanfriendly-10.0-py2.py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/importlib_metadata-8.9.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/indexclient-6.3.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/ipykernel-6.9.2-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/ipython_pygments_lexers-1.1.1-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/marshmallow-3.26.2-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/marshmallow_enum-1.5.1-py2.py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/mypy_extensions-1.1.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/piplite-0.8.5-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/pyodide_http-0.2.2-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/pyodide_kernel-0.8.5-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/pypfb-0.6.2-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/python_dateutil-2.9.0.post0-py2.py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/python_json_logger-4.2.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/typing_inspect-0.9.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/xmltodict-0.13.0-py2.py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_uv_wheels/zipp-4.1.0-py3-none-any.whl +0 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_work/constraints.txt +354 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_work/excludes.txt +3 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_work/pylock.toml +347 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/_work/requirements.in +26 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/patched-pyodide-lock.json +1 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/pyodide-lock.json +1 -0
- package/jupyterlite-builds/free-private/.cache/pyodide-lock/remote-pyodide-lock.json +1 -0
- package/jupyterlite-builds/free-private/.cache/wheels/aiofiles-25.1.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/backoff-2.2.1-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/cdislogging-1.2.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/dataclasses_json-0.5.9-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/dictionaryutils-4.0.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/drsclient-0.4.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/fastavro-1.12.2-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/gen3-4.28.3-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/gen3dictionary-3.0.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/gen3users-1.1.1-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/humanfriendly-10.0-py2.py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/importlib_metadata-8.9.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/indexclient-6.3.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/marshmallow-3.26.2-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/marshmallow_enum-1.5.1-py2.py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/mypy_extensions-1.1.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/pypfb-0.6.2-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/python_dateutil-2.9.0.post0-py2.py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/python_json_logger-4.2.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/typing_inspect-0.9.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/xmltodict-0.13.0-py2.py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/.cache/wheels/zipp-4.1.0-py3-none-any.whl.meta.json +24 -0
- package/jupyterlite-builds/free-private/cockle-config.json +71 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/.mambarc +1 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/coreutils.js +5421 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/coreutils.wasm +0 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/fs.d.ts +375 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/fs.js +3401 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/fs.wasm +0 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/grep.js +3839 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/grep.wasm +0 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/less.data +0 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/less.js +5060 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/less.wasm +0 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/sed.js +3843 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/bin/sed.wasm +0 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/cockle_fs-0.3.0-h27506cd_2.json +60 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/coreutils-9.10-h072c4ef_3.json +52 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/emscripten-abi-4.0.9-h267e887_9.json +31 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/grep-3.12-h8b79025_0.json +52 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/history +10 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/less-693-hf259948_0.json +60 -0
- package/jupyterlite-builds/free-private/cockle_wasm_env/conda-meta/sed-4.9-h072c4ef_0.json +52 -0
- package/jupyterlite-builds/free-private/overrides.json +1 -0
- package/jupyterlite-builds/remote-private/overrides.json +26 -0
- package/package.json +5 -6
- package/rollup.config.mjs +1 -1
- package/scripts/aiohttp-3.13.5-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
- package/scripts/build-gen3sdk-lite_v2.sh +310 -0
- package/scripts/build-jupyterlite.sh +9 -0
- package/scripts/build-jupyterlite_v2.sh +111 -0
- package/LICENSE +0 -201
package/dist/index.d.ts
CHANGED
|
@@ -40,6 +40,7 @@ interface TierToolbarConfiguration extends LabelAndDescription {
|
|
|
40
40
|
tierLabel?: string;
|
|
41
41
|
}
|
|
42
42
|
interface SettingsPanelConfiguration {
|
|
43
|
+
enabled?: boolean;
|
|
43
44
|
showKernels: boolean;
|
|
44
45
|
width?: number;
|
|
45
46
|
}
|
|
@@ -59,6 +60,7 @@ interface FreeWorkspaceTierConfiguration extends WorkspaceTierInformation {
|
|
|
59
60
|
}
|
|
60
61
|
interface RemoteComputeWorkspaceTierConfiguration extends WorkspaceTierInformation {
|
|
61
62
|
baseUrl?: string;
|
|
63
|
+
enableOptions?: boolean;
|
|
62
64
|
type: Extract<WorkspaceTier, 'remote'>;
|
|
63
65
|
startTimeLimit?: number;
|
|
64
66
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@jupyterlab/mainmenu-extension:plugin": {
|
|
3
|
+
"menus": [
|
|
4
|
+
{
|
|
5
|
+
"id": "jp-mainmenu-file",
|
|
6
|
+
"items": [
|
|
7
|
+
{
|
|
8
|
+
"command": "docmanager:download",
|
|
9
|
+
"args": { "isMenu": true },
|
|
10
|
+
"disabled": true
|
|
11
|
+
}
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"@jupyterlab/shortcuts-extension:shortcuts": {
|
|
17
|
+
"shortcuts": [
|
|
18
|
+
{
|
|
19
|
+
"command": "docmanager:download",
|
|
20
|
+
"keys": ["Accel Shift S"],
|
|
21
|
+
"selector": "body",
|
|
22
|
+
"disabled": true
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# build-gen3sdk-lite.sh — Build Gen3 SDK and dependencies as WASM wheels
|
|
4
|
+
#
|
|
5
|
+
# Prerequisites:
|
|
6
|
+
# - uv (https://docs.astral.sh/uv/getting-started/installation/)
|
|
7
|
+
# - git
|
|
8
|
+
# - cmake, make, and a C compiler (for emsdk bootstrap)
|
|
9
|
+
#
|
|
10
|
+
# Usage:
|
|
11
|
+
# ./build-gen3sdk-lite.sh # full build (setup + all packages)
|
|
12
|
+
# ./build-gen3sdk-lite.sh --setup # environment setup only
|
|
13
|
+
# ./build-gen3sdk-lite.sh --build # build wheels only (assumes setup done)
|
|
14
|
+
# ./build-gen3sdk-lite.sh --clean # remove cloned repos, build artifacts
|
|
15
|
+
# =============================================================================
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
19
|
+
|
|
20
|
+
# ── Configuration ────────────────────────────────────────────────────────────
|
|
21
|
+
# Repositories to build (order matters — independent packages first)
|
|
22
|
+
# Format: "name|git_url|subdir" (subdir is optional)
|
|
23
|
+
REPOS=(
|
|
24
|
+
"cdislogging|https://github.com/uc-cdis/cdislogging.git"
|
|
25
|
+
"python-json-logger|https://github.com/nhairs/python-json-logger.git"
|
|
26
|
+
"fastavro|https://github.com/fastavro/fastavro.git"
|
|
27
|
+
"drsclient|https://github.com/uc-cdis/drsclient.git"
|
|
28
|
+
"indexd|https://github.com/uc-cdis/indexd.git|indexclient"
|
|
29
|
+
"dictionaryutils|https://github.com/uc-cdis/dictionaryutils.git"
|
|
30
|
+
"pypfb|https://github.com/uc-cdis/pypfb.git"
|
|
31
|
+
"gen3sdk-python|https://github.com/uc-cdis/gen3sdk-python.git"
|
|
32
|
+
"gen3users|git@github.com:uc-cdis/gen3users.git"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# ── Source shared environment ────────────────────────────────────────────────
|
|
36
|
+
# setup-env.sh exports: ROOT_DIR, SRC_DIR, BUILD_DIR, VENV_DIR, WORK_DIR,
|
|
37
|
+
# EMSDK_DIR, SOURCES_DIR, OUTPUT_DIR, LOG_DIR and helper functions.
|
|
38
|
+
# It also creates + activates the venv and installs core tooling.
|
|
39
|
+
source_shared_env() {
|
|
40
|
+
# shellcheck disable=SC1091
|
|
41
|
+
source "${SCRIPT_DIR}/setup-env.sh"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# ── Emscripten SDK ───────────────────────────────────────────────────────────
|
|
45
|
+
setup_emsdk() {
|
|
46
|
+
info "Setting up Emscripten SDK …"
|
|
47
|
+
|
|
48
|
+
if [[ ! -d "${EMSDK_DIR}" ]]; then
|
|
49
|
+
git clone https://github.com/emscripten-core/emsdk.git "${EMSDK_DIR}"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
local em_version
|
|
53
|
+
em_version="$(pyodide config get emscripten_version)"
|
|
54
|
+
info "Pyodide requires Emscripten ${em_version}"
|
|
55
|
+
|
|
56
|
+
pushd "${EMSDK_DIR}" > /dev/null
|
|
57
|
+
./emsdk install "${em_version}"
|
|
58
|
+
./emsdk activate "${em_version}"
|
|
59
|
+
# shellcheck disable=SC1091
|
|
60
|
+
source emsdk_env.sh
|
|
61
|
+
popd > /dev/null
|
|
62
|
+
|
|
63
|
+
success "Emscripten $(emcc --version | head -1) activated"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# ── Full environment setup ───────────────────────────────────────────────────
|
|
67
|
+
setup_environment() {
|
|
68
|
+
source_shared_env
|
|
69
|
+
mkdir -p "${WORK_DIR}" "${SOURCES_DIR}" "${OUTPUT_DIR}" "${LOG_DIR}"
|
|
70
|
+
|
|
71
|
+
# WASM-specific tooling (on top of the shared base)
|
|
72
|
+
info "Installing pyodide-build …"
|
|
73
|
+
uv pip install pyodide-build 2>&1 | tail -3
|
|
74
|
+
success "pyodide-build $(pyodide --version 2>/dev/null || echo '(installed)')"
|
|
75
|
+
|
|
76
|
+
setup_emsdk
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
# ── Clone / update sources ──────────────────────────────────────────────────
|
|
80
|
+
clone_repos() {
|
|
81
|
+
info "Cloning / updating repositories …"
|
|
82
|
+
for entry in "${REPOS[@]}"; do
|
|
83
|
+
IFS='|' read -r name url _subdir <<< "${entry}"
|
|
84
|
+
local dest="${SOURCES_DIR}/${name}"
|
|
85
|
+
if [[ -d "${dest}/.git" ]]; then
|
|
86
|
+
info " ${name}: pulling latest …"
|
|
87
|
+
git -C "${dest}" pull --ff-only 2>&1 | tail -1
|
|
88
|
+
else
|
|
89
|
+
info " ${name}: cloning …"
|
|
90
|
+
git clone "${url}" "${dest}" 2>&1 | tail -1
|
|
91
|
+
fi
|
|
92
|
+
done
|
|
93
|
+
success "All repositories ready"
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# ── Build WASM wheels ───────────────────────────────────────────────────────
|
|
97
|
+
build_wheels() {
|
|
98
|
+
# Make sure emsdk env is active in this shell
|
|
99
|
+
if [[ -f "${EMSDK_DIR}/emsdk_env.sh" ]]; then
|
|
100
|
+
# shellcheck disable=SC1091
|
|
101
|
+
source "${EMSDK_DIR}/emsdk_env.sh" 2>/dev/null
|
|
102
|
+
fi
|
|
103
|
+
# shellcheck disable=SC1091
|
|
104
|
+
source "${VENV_DIR}/bin/activate"
|
|
105
|
+
|
|
106
|
+
local total=${#REPOS[@]}
|
|
107
|
+
local built=0
|
|
108
|
+
local failed=0
|
|
109
|
+
local failed_names=()
|
|
110
|
+
|
|
111
|
+
# ── Source patches ─────────────────────────────────────────────────────
|
|
112
|
+
|
|
113
|
+
# gen3users: old poetry.masonry.api → poetry.core.masonry.api
|
|
114
|
+
local gen3users_pyproject="${SOURCES_DIR}/gen3users/pyproject.toml"
|
|
115
|
+
if [[ -f "${gen3users_pyproject}" ]]; then
|
|
116
|
+
sed -i '' 's|build-backend = "poetry.masonry.api"|build-backend = "poetry.core.masonry.api"|' "${gen3users_pyproject}"
|
|
117
|
+
info "Patched gen3users: build-backend updated to poetry.core.masonry.api"
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
# gen3sdk-python: relax indexclient pin
|
|
121
|
+
local gen3sdk_pyproject="${SOURCES_DIR}/gen3sdk-python/pyproject.toml"
|
|
122
|
+
if [[ -f "${gen3sdk_pyproject}" ]]; then
|
|
123
|
+
sed -i '' 's/indexclient = "\^2\.3\.0"/indexclient = ">=2.3.0"/' "${gen3sdk_pyproject}"
|
|
124
|
+
info "Patched gen3sdk-python: indexclient constraint relaxed to >=2.3.0"
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
# dictionaryutils: relax jsonschema pin
|
|
128
|
+
local dictionaryutils_pyproject="${SOURCES_DIR}/dictionaryutils/pyproject.toml"
|
|
129
|
+
if [[ -f "${dictionaryutils_pyproject}" ]]; then
|
|
130
|
+
sed -i '' 's/jsonschema = "<=4\.23\.0"/jsonschema = ">=4.0.0"/' "${dictionaryutils_pyproject}"
|
|
131
|
+
info "Patched dictionaryutils: jsonschema constraint relaxed to >=4.0.0"
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
# psqlgraph: multiple fixes for WASM compatibility
|
|
135
|
+
local psqlgraph_pyproject="${SOURCES_DIR}/psqlgraph/pyproject.toml"
|
|
136
|
+
if [[ -f "${psqlgraph_pyproject}" ]]; then
|
|
137
|
+
sed -i '' 's/"sqlalchemy~=1\.4"/"sqlalchemy>=1.4"/' "${psqlgraph_pyproject}"
|
|
138
|
+
sed -i '' 's/, "versionista>=1\.1\.0"//' "${psqlgraph_pyproject}"
|
|
139
|
+
sed -i '' 's/local_scheme = "versionista-local-format"/local_scheme = "no-local-version"/' "${psqlgraph_pyproject}"
|
|
140
|
+
sed -i '' 's/version_scheme = "versionista-format"/version_scheme = "guess-next-dev"/' "${psqlgraph_pyproject}"
|
|
141
|
+
sed -i '' '/"psycopg2"/d' "${psqlgraph_pyproject}"
|
|
142
|
+
sed -i '' '/"xlocal"/d' "${psqlgraph_pyproject}"
|
|
143
|
+
info "Patched psqlgraph: sqlalchemy >=1.4, removed versionista + psycopg2 + xlocal"
|
|
144
|
+
|
|
145
|
+
local psql_py="${SOURCES_DIR}/psqlgraph/src/psqlgraph/psql.py"
|
|
146
|
+
if [[ -f "${psql_py}" ]]; then
|
|
147
|
+
python3 - "${psql_py}" <<'PYEOF'
|
|
148
|
+
import sys, re
|
|
149
|
+
|
|
150
|
+
path = sys.argv[1]
|
|
151
|
+
text = open(path).read()
|
|
152
|
+
stub = '''\
|
|
153
|
+
try:
|
|
154
|
+
import xlocal
|
|
155
|
+
except ImportError:
|
|
156
|
+
class _XLocalInst:
|
|
157
|
+
class _Ctx:
|
|
158
|
+
def __init__(self, parent, **kw):
|
|
159
|
+
self._parent, self._kw = parent, kw
|
|
160
|
+
def __enter__(self):
|
|
161
|
+
for k, v in self._kw.items():
|
|
162
|
+
setattr(self._parent, k, v)
|
|
163
|
+
return self._parent
|
|
164
|
+
def __exit__(self, *a):
|
|
165
|
+
for k in self._kw:
|
|
166
|
+
self._parent.__dict__.pop(k, None)
|
|
167
|
+
def __call__(self, **kw):
|
|
168
|
+
return self._Ctx(self, **kw)
|
|
169
|
+
class _xlocal_module:
|
|
170
|
+
xlocal = _XLocalInst
|
|
171
|
+
xlocal = _xlocal_module()'''
|
|
172
|
+
text = re.sub(r'^import xlocal$', stub, text, flags=re.MULTILINE)
|
|
173
|
+
open(path, 'w').write(text)
|
|
174
|
+
PYEOF
|
|
175
|
+
info "Patched psqlgraph/psql.py: xlocal import wrapped in try/except stub"
|
|
176
|
+
fi
|
|
177
|
+
fi
|
|
178
|
+
|
|
179
|
+
# ── Build loop ─────────────────────────────────────────────────────────
|
|
180
|
+
info "Building ${total} packages …"
|
|
181
|
+
echo ""
|
|
182
|
+
|
|
183
|
+
for entry in "${REPOS[@]}"; do
|
|
184
|
+
IFS='|' read -r name _url subdir <<< "${entry}"
|
|
185
|
+
local src="${SOURCES_DIR}/${name}"
|
|
186
|
+
local build_dir="${src}"
|
|
187
|
+
[[ -n "${subdir}" ]] && build_dir="${src}/${subdir}"
|
|
188
|
+
local logfile="${LOG_DIR}/${name}.log"
|
|
189
|
+
local start_ts
|
|
190
|
+
start_ts=$(date +%s)
|
|
191
|
+
|
|
192
|
+
local label="${name}"
|
|
193
|
+
[[ -n "${subdir}" ]] && label="${name}/${subdir}"
|
|
194
|
+
printf " [%d/%d] %-25s " $((built + failed + 1)) "${total}" "${label}"
|
|
195
|
+
|
|
196
|
+
if (cd "${build_dir}" && pyodide build) > "${logfile}" 2>&1; then
|
|
197
|
+
local end_ts
|
|
198
|
+
end_ts=$(date +%s)
|
|
199
|
+
echo -e "${GREEN}OK${NC} ($(elapsed $((end_ts - start_ts))))"
|
|
200
|
+
((built++))
|
|
201
|
+
else
|
|
202
|
+
local end_ts
|
|
203
|
+
end_ts=$(date +%s)
|
|
204
|
+
echo -e "${RED}FAILED${NC} ($(elapsed $((end_ts - start_ts)))) — see ${logfile}"
|
|
205
|
+
((failed++))
|
|
206
|
+
failed_names+=("${name}")
|
|
207
|
+
fi
|
|
208
|
+
done
|
|
209
|
+
|
|
210
|
+
echo ""
|
|
211
|
+
|
|
212
|
+
# ── Collect wheels ─────────────────────────────────────────────────────
|
|
213
|
+
info "Collecting .whl files into ${OUTPUT_DIR} …"
|
|
214
|
+
local count=0
|
|
215
|
+
for entry in "${REPOS[@]}"; do
|
|
216
|
+
IFS='|' read -r name _url subdir <<< "${entry}"
|
|
217
|
+
local src="${SOURCES_DIR}/${name}"
|
|
218
|
+
local build_dir="${src}"
|
|
219
|
+
[[ -n "${subdir}" ]] && build_dir="${src}/${subdir}"
|
|
220
|
+
if compgen -G "${build_dir}/dist/*.whl" > /dev/null 2>&1; then
|
|
221
|
+
cp "${build_dir}"/dist/*.whl "${OUTPUT_DIR}/"
|
|
222
|
+
((count += $(ls -1 "${build_dir}"/dist/*.whl 2>/dev/null | wc -l)))
|
|
223
|
+
fi
|
|
224
|
+
done
|
|
225
|
+
|
|
226
|
+
# ── Normalise platform tags ────────────────────────────────────────────
|
|
227
|
+
for whl in "${OUTPUT_DIR}"/*p313-cp313-pyemscripten_2025_0_wasm32.whl; do
|
|
228
|
+
[[ -f "${whl}" ]] || continue
|
|
229
|
+
new_whl="${whl/p313-cp313-pyemscripten_2025_0_wasm32/py3-none-any}"
|
|
230
|
+
mv "${whl}" "${new_whl}"
|
|
231
|
+
info "Renamed $(basename "${whl}") → $(basename "${new_whl}")"
|
|
232
|
+
done
|
|
233
|
+
|
|
234
|
+
# ── Summary ────────────────────────────────────────────────────────────
|
|
235
|
+
echo ""
|
|
236
|
+
echo "========================================="
|
|
237
|
+
echo " Build Summary"
|
|
238
|
+
echo "========================================="
|
|
239
|
+
echo " Succeeded : ${built}"
|
|
240
|
+
echo " Failed : ${failed}"
|
|
241
|
+
echo " Wheels : ${count} file(s) in ${OUTPUT_DIR}/"
|
|
242
|
+
if (( failed > 0 )); then
|
|
243
|
+
echo ""
|
|
244
|
+
echo " Failed packages:"
|
|
245
|
+
for n in "${failed_names[@]}"; do
|
|
246
|
+
echo " - ${n} (log: ${LOG_DIR}/${n}.log)"
|
|
247
|
+
done
|
|
248
|
+
fi
|
|
249
|
+
echo "========================================="
|
|
250
|
+
echo ""
|
|
251
|
+
|
|
252
|
+
if (( failed > 0 )); then
|
|
253
|
+
warn "Some packages failed. Check the logs above."
|
|
254
|
+
return 1
|
|
255
|
+
fi
|
|
256
|
+
|
|
257
|
+
success "All wheels built and collected in ${OUTPUT_DIR}/"
|
|
258
|
+
echo ""
|
|
259
|
+
ls -lh "${OUTPUT_DIR}"/*.whl
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
# ── Clean ────────────────────────────────────────────────────────────────────
|
|
263
|
+
clean() {
|
|
264
|
+
# Need the path variables but don't need the full env setup
|
|
265
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
266
|
+
SRC_DIR="$ROOT_DIR/free-private"
|
|
267
|
+
BUILD_DIR="${2:-$SRC_DIR/build}"
|
|
268
|
+
WORK_DIR="$BUILD_DIR/work"
|
|
269
|
+
OUTPUT_DIR="$BUILD_DIR/pypi"
|
|
270
|
+
LOG_DIR="$BUILD_DIR/logs"
|
|
271
|
+
|
|
272
|
+
echo -e '\033[0;36m[INFO]\033[0m Cleaning build artifacts …'
|
|
273
|
+
rm -rf "${WORK_DIR}" "${OUTPUT_DIR}" "${LOG_DIR}"
|
|
274
|
+
echo -e '\033[0;32m[OK]\033[0m Clean complete'
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
# ── Main ─────────────────────────────────────────────────────────────────────
|
|
278
|
+
main() {
|
|
279
|
+
local mode="${1:-all}"
|
|
280
|
+
|
|
281
|
+
case "${mode}" in
|
|
282
|
+
--setup)
|
|
283
|
+
setup_environment
|
|
284
|
+
;;
|
|
285
|
+
--build)
|
|
286
|
+
source_shared_env
|
|
287
|
+
clone_repos
|
|
288
|
+
build_wheels
|
|
289
|
+
;;
|
|
290
|
+
--clean)
|
|
291
|
+
clean
|
|
292
|
+
;;
|
|
293
|
+
--help|-h)
|
|
294
|
+
echo "Usage: $0 [--setup | --build | --clean | --help]"
|
|
295
|
+
echo ""
|
|
296
|
+
echo " (no flag) Full run: setup environment, clone repos, build wheels"
|
|
297
|
+
echo " --setup Set up Python, venv, pyodide-build, and emsdk"
|
|
298
|
+
echo " --build Clone/update repos and build WASM wheels (requires prior --setup)"
|
|
299
|
+
echo " --clean Remove work/, dist/, and logs/"
|
|
300
|
+
echo " --help Show this message"
|
|
301
|
+
;;
|
|
302
|
+
*)
|
|
303
|
+
setup_environment
|
|
304
|
+
clone_repos
|
|
305
|
+
build_wheels
|
|
306
|
+
;;
|
|
307
|
+
esac
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
main "$@"
|
|
@@ -50,8 +50,17 @@ if [[ ! -x "$VENV_JUPYTER_LITE" ]]; then
|
|
|
50
50
|
exit 1
|
|
51
51
|
fi
|
|
52
52
|
|
|
53
|
+
|
|
54
|
+
echo "$VENV_JUPYTER_LITE" build \
|
|
55
|
+
--config "$CONFIG_FILE" \
|
|
56
|
+
--lite-dir "$SRC_DIR" \
|
|
57
|
+
--output-dir "$BUILD_DIR/$TIER"
|
|
58
|
+
|
|
53
59
|
"$VENV_JUPYTER_LITE" build \
|
|
54
60
|
--config "$CONFIG_FILE" \
|
|
61
|
+
--lite-dir "$SRC_DIR" \
|
|
55
62
|
--output-dir "$BUILD_DIR/$TIER"
|
|
56
63
|
|
|
64
|
+
|
|
65
|
+
|
|
57
66
|
echo "$TIER-tier JupyterLite build complete: $BUILD_DIR/$TIER (venv: $VENV_DIR)"
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# build-jupyterlite.sh — Build a JupyterLite site (free or remote tier)
|
|
4
|
+
#
|
|
5
|
+
# Sources setup-env.sh so the venv, Python version, and tooling are identical
|
|
6
|
+
# to those used by build-gen3sdk-lite.sh.
|
|
7
|
+
#
|
|
8
|
+
# Usage:
|
|
9
|
+
# ./build-jupyterlite.sh <tier> [build_dir]
|
|
10
|
+
# tier: 'free' or 'remote'
|
|
11
|
+
# =============================================================================
|
|
12
|
+
set -euo pipefail
|
|
13
|
+
|
|
14
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
15
|
+
|
|
16
|
+
usage() {
|
|
17
|
+
echo "Usage: $0 <tier> [build_dir]"
|
|
18
|
+
echo " tier: 'free' or 'remote'"
|
|
19
|
+
exit 1
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
TIER="${1:-}"
|
|
23
|
+
if [[ "$TIER" != "free" && "$TIER" != "remote" ]]; then
|
|
24
|
+
usage
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# ── Derive SRC_DIR before sourcing shared env ────────────────────────────────
|
|
28
|
+
# setup-env.sh respects pre-set ROOT_DIR / SRC_DIR / BUILD_DIR.
|
|
29
|
+
export ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
30
|
+
|
|
31
|
+
if [[ "$TIER" == "free" ]]; then
|
|
32
|
+
export SRC_DIR="$ROOT_DIR/free-private"
|
|
33
|
+
else
|
|
34
|
+
export SRC_DIR="$ROOT_DIR/remote-private"
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
# Allow caller to override BUILD_DIR via the second positional arg.
|
|
38
|
+
if [[ -n "${2:-}" ]]; then
|
|
39
|
+
export BUILD_DIR="$2"
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# ── Source shared environment (creates/reuses the venv) ──────────────────────
|
|
43
|
+
# After this: VENV_DIR, OUTPUT_DIR, BUILD_DIR, etc. are set and the venv is
|
|
44
|
+
# active with the same Python version + core tooling as build-gen3sdk-lite.
|
|
45
|
+
# shellcheck disable=SC1091
|
|
46
|
+
source "${SCRIPT_DIR}/setup-env.sh"
|
|
47
|
+
|
|
48
|
+
# ── JupyterLite-specific tooling ────────────────────────────────────────────
|
|
49
|
+
CONFIG_FILE="$SRC_DIR/jupyter_lite_config.json"
|
|
50
|
+
REQUIREMENTS_FILE="$SRC_DIR/requirements.txt"
|
|
51
|
+
VENV_JUPYTER_LITE="$VENV_DIR/bin/jupyter-lite"
|
|
52
|
+
PYPI="$OUTPUT_DIR" # wheels built by build-gen3sdk-lite land here
|
|
53
|
+
|
|
54
|
+
if [[ ! -f "$REQUIREMENTS_FILE" ]]; then
|
|
55
|
+
echo "Missing requirements file: $REQUIREMENTS_FILE"
|
|
56
|
+
exit 1
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
# Install JupyterLite requirements into the shared venv (uv for speed).
|
|
60
|
+
info "Installing JupyterLite requirements …"
|
|
61
|
+
uv pip install -r "$REQUIREMENTS_FILE" 2>&1 | tail -5
|
|
62
|
+
success "JupyterLite requirements installed"
|
|
63
|
+
|
|
64
|
+
if [[ ! -x "$VENV_JUPYTER_LITE" ]]; then
|
|
65
|
+
echo "jupyter-lite executable not found in $VENV_DIR after dependency install."
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# ── Build ────────────────────────────────────────────────────────────────────
|
|
70
|
+
if [[ "$TIER" == "free" ]]; then
|
|
71
|
+
|
|
72
|
+
# Patch config to use the absolute pypi path so jupyter-lite can find the
|
|
73
|
+
# custom wheels built by build-gen3sdk-lite.
|
|
74
|
+
PATCHED_CONFIG="$BUILD_DIR/jupyter_lite_config.json"
|
|
75
|
+
python - <<PYEOF
|
|
76
|
+
import json
|
|
77
|
+
|
|
78
|
+
with open('$CONFIG_FILE') as fh:
|
|
79
|
+
cfg = json.load(fh)
|
|
80
|
+
|
|
81
|
+
addon = cfg.get('PyodideLockAddon', {})
|
|
82
|
+
if 'wheels' in addon:
|
|
83
|
+
addon['wheels'] = ['$PYPI/']
|
|
84
|
+
cfg['PyodideLockAddon'] = addon
|
|
85
|
+
|
|
86
|
+
with open('$PATCHED_CONFIG', 'w') as fh:
|
|
87
|
+
json.dump(cfg, fh, indent=2)
|
|
88
|
+
PYEOF
|
|
89
|
+
|
|
90
|
+
info "Looking for wheels in $PYPI"
|
|
91
|
+
WHEEL_ARGS=()
|
|
92
|
+
if [[ -d "$PYPI" ]]; then
|
|
93
|
+
while IFS= read -r -d '' whl; do
|
|
94
|
+
WHEEL_ARGS+=(--piplite-wheels "$whl")
|
|
95
|
+
done < <(find "$PYPI" -maxdepth 1 -name "*.whl" -print0 | sort -z)
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
info "Running: jupyter-lite build (free tier, ${#WHEEL_ARGS[@]} custom wheels)"
|
|
99
|
+
"$VENV_JUPYTER_LITE" build \
|
|
100
|
+
--config "$PATCHED_CONFIG" \
|
|
101
|
+
--lite-dir "$SRC_DIR" ${WHEEL_ARGS[@]+"${WHEEL_ARGS[@]}"} \
|
|
102
|
+
--output-dir "$BUILD_DIR/$TIER"
|
|
103
|
+
else
|
|
104
|
+
info "Running: jupyter-lite build (remote tier)"
|
|
105
|
+
"$VENV_JUPYTER_LITE" build \
|
|
106
|
+
--config "$CONFIG_FILE" \
|
|
107
|
+
--lite-dir "$SRC_DIR" \
|
|
108
|
+
--output-dir "$BUILD_DIR/$TIER"
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
success "$TIER-tier JupyterLite build complete: $BUILD_DIR/$TIER"
|
|
@@ -1100,7 +1100,7 @@ function configFilePath() {
|
|
|
1100
1100
|
}
|
|
1101
1101
|
const extensions = source.additionalDisabledExtensions;
|
|
1102
1102
|
// oxlint-disable-next-line no-console
|
|
1103
|
-
console.log('
|
|
1103
|
+
console.log('additional disabled extensions', source.additionalDisabledExtensions);
|
|
1104
1104
|
if (extensions !== undefined) {
|
|
1105
1105
|
if (Array.isArray(extensions) && extensions.every((entry)=>typeof entry === 'string')) {
|
|
1106
1106
|
parsed.additionalDisabledExtensions = extensions;
|