dev-bubble 0.7.5__tar.gz → 0.7.6__tar.gz
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.
- {dev_bubble-0.7.5/dev_bubble.egg-info → dev_bubble-0.7.6}/PKG-INFO +1 -1
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/__init__.py +1 -1
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/tools/gh.sh +10 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/tools/vscode.sh +44 -10
- {dev_bubble-0.7.5 → dev_bubble-0.7.6/dev_bubble.egg-info}/PKG-INFO +1 -1
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/.claude/CLAUDE.md +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/.github/workflows/ci.yml +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/.github/workflows/publish.yml +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/.gitignore +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/CHANGELOG.md +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/LICENSE +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/README.md +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/SPEC.md +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/__main__.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/auth_proxy.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/automation.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/claude.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/clean.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/cli.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/clone.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/cloud.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/cloud_types.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/__init__.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/cloud_cmd.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/completion.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/doctor.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/images.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/infrastructure.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/lifecycle.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/list_cmd.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/relay_cmd.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/remote_cmd.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/security_cmd.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/settings.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/commands/status_cmd.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/config.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/container_helpers.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/data/skill.md +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/default_repos.json +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/finalization.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/git_store.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/github_token.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/graphql_validator.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/hooks/__init__.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/hooks/lean.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/hooks/python.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/image_management.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/__init__.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/builder.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/base.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/cloud-init.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/lean-toolchain.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/lean.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/python.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/tools/claude.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/tools/codex.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/tools/elan.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/tools/emacs.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/tools/neovim.sh +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/images/scripts/tools/pins.json +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/lean.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/lifecycle.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/naming.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/native.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/network.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/notices.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/output.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/provisioning.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/relay.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/remote.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/repo_registry.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/runtime/__init__.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/runtime/base.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/runtime/colima.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/runtime/incus.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/security.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/setup.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/skill.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/spinner.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/target.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/token_store.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/tools.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/tunnel.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/bubble/vscode.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/config/com.bubble.git-update.plist +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/config/com.bubble.image-refresh.plist +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/config/com.bubble.relay-daemon.plist +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/conftest.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/dev_bubble.egg-info/SOURCES.txt +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/dev_bubble.egg-info/dependency_links.txt +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/dev_bubble.egg-info/entry_points.txt +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/dev_bubble.egg-info/requires.txt +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/dev_bubble.egg-info/top_level.txt +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/pyproject.toml +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/setup.cfg +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/conftest.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_auth_proxy.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_branch_no_target.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_build_lock.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_claude.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_claude_projects_symlink.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_cloud.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_completion.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_config.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_customize.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_editor.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_git_store.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_github_token.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_graphql_validator.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_hooks.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_integration.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_lifecycle.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_list_columns.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_list_remote.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_mounts.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_multi_target.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_naming.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_native.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_network.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_notices.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_relay.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_remote.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_repo_registry.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_security.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_skill.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_spinner.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_status.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_target.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_tools.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_tunnel.py +0 -0
- {dev_bubble-0.7.5 → dev_bubble-0.7.6}/tests/test_vscode.py +0 -0
|
@@ -31,4 +31,14 @@ http_unix_socket: /bubble/gh-proxy.sock
|
|
|
31
31
|
GHCONF
|
|
32
32
|
chown 1001:1001 /etc/bubble/gh/config.yml
|
|
33
33
|
|
|
34
|
+
# Tell gh that github.com is a known host. Without this, overriding
|
|
35
|
+
# GH_CONFIG_DIR wipes the default host list and gh can't resolve repos
|
|
36
|
+
# from git remotes ("none of the git remotes ... point to a known GitHub
|
|
37
|
+
# host"). GH_TOKEN handles auth; this just registers the host.
|
|
38
|
+
cat > /etc/bubble/gh/hosts.yml <<'GHHOSTS'
|
|
39
|
+
github.com:
|
|
40
|
+
git_protocol: https
|
|
41
|
+
GHHOSTS
|
|
42
|
+
chown 1001:1001 /etc/bubble/gh/hosts.yml
|
|
43
|
+
|
|
34
44
|
echo "gh installed: $(gh --version 2>/dev/null | head -1 || echo 'unknown version')"
|
|
@@ -28,12 +28,19 @@ import json, urllib.request, os, sys, subprocess, tempfile, glob, shutil
|
|
|
28
28
|
EXTENSIONS_DIR = "/home/user/.vscode-server/extensions"
|
|
29
29
|
EXTENSIONS = ["leanprover.lean4", "tamasfe.even-better-toml"]
|
|
30
30
|
|
|
31
|
+
# Determine VS Code target platform from container architecture
|
|
32
|
+
_arch = subprocess.check_output(["dpkg", "--print-architecture"]).decode().strip()
|
|
33
|
+
TARGET_PLATFORM = {"amd64": "linux-x64", "arm64": "linux-arm64"}.get(_arch, "")
|
|
34
|
+
|
|
31
35
|
manifest_entries = []
|
|
32
36
|
|
|
33
37
|
for ext_id in EXTENSIONS:
|
|
34
38
|
# Query marketplace for the latest VSIX download URL
|
|
39
|
+
criteria = [{"filterType": 7, "value": ext_id}]
|
|
40
|
+
if TARGET_PLATFORM:
|
|
41
|
+
criteria.append({"filterType": 8, "value": TARGET_PLATFORM})
|
|
35
42
|
query = json.dumps({
|
|
36
|
-
"filters": [{"criteria":
|
|
43
|
+
"filters": [{"criteria": criteria}],
|
|
37
44
|
"flags": 914,
|
|
38
45
|
}).encode()
|
|
39
46
|
req = urllib.request.Request(
|
|
@@ -51,13 +58,23 @@ for ext_id in EXTENSIONS:
|
|
|
51
58
|
print(f"Warning: could not query marketplace for {ext_id}: {e}", file=sys.stderr)
|
|
52
59
|
continue
|
|
53
60
|
|
|
54
|
-
# Find the VSIX URL and version
|
|
61
|
+
# Find the VSIX URL and version, preferring our target platform
|
|
55
62
|
vsix_url = None
|
|
56
63
|
version = None
|
|
57
64
|
for ext in data["results"][0]["extensions"]:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
best_ver = None
|
|
66
|
+
for ver in ext["versions"]:
|
|
67
|
+
tp = ver.get("targetPlatform", "")
|
|
68
|
+
if tp == TARGET_PLATFORM:
|
|
69
|
+
best_ver = ver
|
|
70
|
+
break
|
|
71
|
+
if best_ver is None and (not tp or tp == "universal"):
|
|
72
|
+
best_ver = ver
|
|
73
|
+
if best_ver is None and ext.get("versions"):
|
|
74
|
+
best_ver = ext["versions"][0]
|
|
75
|
+
if best_ver:
|
|
76
|
+
version = best_ver["version"]
|
|
77
|
+
for f in best_ver["files"]:
|
|
61
78
|
if f["assetType"] == "Microsoft.VisualStudio.Services.VSIXPackage":
|
|
62
79
|
vsix_url = f["source"]
|
|
63
80
|
break
|
|
@@ -194,9 +211,16 @@ import json, urllib.request, os, sys, subprocess, tempfile, glob, shutil
|
|
|
194
211
|
EXTENSIONS_DIR = "/home/user/.vscode-server/extensions"
|
|
195
212
|
EXT_ID = "anthropic.claude-code"
|
|
196
213
|
|
|
214
|
+
# Determine VS Code target platform from container architecture
|
|
215
|
+
_arch = subprocess.check_output(["dpkg", "--print-architecture"]).decode().strip()
|
|
216
|
+
TARGET_PLATFORM = {"amd64": "linux-x64", "arm64": "linux-arm64"}.get(_arch, "")
|
|
217
|
+
|
|
197
218
|
# Query marketplace for the latest VSIX download URL
|
|
219
|
+
criteria = [{"filterType": 7, "value": EXT_ID}]
|
|
220
|
+
if TARGET_PLATFORM:
|
|
221
|
+
criteria.append({"filterType": 8, "value": TARGET_PLATFORM})
|
|
198
222
|
query = json.dumps({
|
|
199
|
-
"filters": [{"criteria":
|
|
223
|
+
"filters": [{"criteria": criteria}],
|
|
200
224
|
"flags": 914,
|
|
201
225
|
}).encode()
|
|
202
226
|
req = urllib.request.Request(
|
|
@@ -214,13 +238,23 @@ except Exception as e:
|
|
|
214
238
|
print(f"Warning: could not query marketplace for {EXT_ID}: {e}", file=sys.stderr)
|
|
215
239
|
sys.exit(0)
|
|
216
240
|
|
|
217
|
-
# Find the VSIX URL and version
|
|
241
|
+
# Find the VSIX URL and version, preferring our target platform
|
|
218
242
|
vsix_url = None
|
|
219
243
|
version = None
|
|
220
244
|
for ext in data["results"][0]["extensions"]:
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
245
|
+
best_ver = None
|
|
246
|
+
for ver in ext["versions"]:
|
|
247
|
+
tp = ver.get("targetPlatform", "")
|
|
248
|
+
if tp == TARGET_PLATFORM:
|
|
249
|
+
best_ver = ver
|
|
250
|
+
break
|
|
251
|
+
if best_ver is None and (not tp or tp == "universal"):
|
|
252
|
+
best_ver = ver
|
|
253
|
+
if best_ver is None and ext.get("versions"):
|
|
254
|
+
best_ver = ext["versions"][0]
|
|
255
|
+
if best_ver:
|
|
256
|
+
version = best_ver["version"]
|
|
257
|
+
for f in best_ver["files"]:
|
|
224
258
|
if f["assetType"] == "Microsoft.VisualStudio.Services.VSIXPackage":
|
|
225
259
|
vsix_url = f["source"]
|
|
226
260
|
break
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|