sentry-devenv 1.14.5__py3-none-any.whl → 1.16.0__py3-none-any.whl

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.
@@ -19,9 +19,8 @@ def check() -> tuple[bool, str]:
19
19
  with open(os.path.expanduser("~/.docker/config.json"), "rb") as f:
20
20
  config = json.load(f)
21
21
 
22
- if config.get("credsStore", "") == "desktop" and not shutil.which(
23
- "docker-credential-desktop"
24
- ):
22
+ store = config.get("credsStore", "")
23
+ if store and not shutil.which(f"docker-credential-{store}"):
25
24
  return False, "credsStore requires nonexistent binary"
26
25
 
27
26
  return True, ""
devenv/lib/colima.py CHANGED
@@ -57,14 +57,14 @@ exec {binroot}/colima-bin "$@"
57
57
 
58
58
 
59
59
  def install_global() -> None:
60
- version = "v0.7.5"
60
+ version = "v0.8.1"
61
61
  cfg = {
62
62
  "darwin_x86_64": f"https://github.com/abiosoft/colima/releases/download/{version}/colima-Darwin-x86_64",
63
- "darwin_x86_64_sha256": "53f78b4aaef5fb5dab65cae19fba4504047de1fdafa152fba90435d8a7569c2b",
63
+ "darwin_x86_64_sha256": "791330c62c60389f70e5e1c33a56c35502a9e36e544a418daea0273e539acbf4",
64
64
  "darwin_arm64": f"https://github.com/abiosoft/colima/releases/download/{version}/colima-Darwin-arm64",
65
- "darwin_arm64_sha256": "267696d6cb28eaf6daa3ea9622c626697b4baeb847b882d15b26c732e841913c",
66
- "linux_x86_64": "https://github.com/abiosoft/colima/releases/download/v0.7.5/colima-Linux-x86_64",
67
- "linux_x86_64_sha256": "a3d440033776b2fb0cdd6139a2dbebf6764aabf78a671d4aa13b45c26df21a8a",
65
+ "darwin_arm64_sha256": "c266fcb272b39221ef6152d2093bb02a1ebadc26042233ad359e1ae52d5d5922",
66
+ "linux_x86_64": f"https://github.com/abiosoft/colima/releases/download/{version}/colima-Linux-x86_64",
67
+ "linux_x86_64_sha256": "f2d6664a79ff3aa35f0718aac2ba9f6b531772e1464f3b096c1ac2aab404943e",
68
68
  }
69
69
 
70
70
  binroot = f"{root}/bin"
devenv/lib/limactl.py CHANGED
@@ -62,17 +62,23 @@ def _install(url: str, sha256: str, into: str) -> None:
62
62
 
63
63
 
64
64
  def install_global() -> None:
65
- version = "0.23.2"
65
+ version = "1.0.3"
66
66
  cfg = {
67
- # upstream github releases aren't built for macOS 14, so we use homebrew binaries
68
- "darwin_x86_64": "https://ghcr.io/v2/homebrew/core/lima/blobs/sha256:c2e69a572afa3a3cf895643ede988c87dc0622dae4aebc539d5564d820845841",
69
- "darwin_x86_64_sha256": "c2e69a572afa3a3cf895643ede988c87dc0622dae4aebc539d5564d820845841",
70
- "darwin_arm64": "https://ghcr.io/v2/homebrew/core/lima/blobs/sha256:be8e2b92961eca2f862f1a994dbef367e86d36705a705ebfa16d21c7f1366c35",
71
- "darwin_arm64_sha256": "be8e2b92961eca2f862f1a994dbef367e86d36705a705ebfa16d21c7f1366c35",
67
+ # upstream github releases aren't built for macOS 14, so for now
68
+ # we use homebrew binaries from https://formulae.brew.sh/api/formula/lima.json
69
+ # unfortunately there's no way to view previous versions of a formula
70
+ # so if we ever need to upgrade to a specific non-latest version we'll
71
+ # have to build it ourselves
72
+ # sonoma
73
+ "darwin_x86_64": "https://ghcr.io/v2/homebrew/core/lima/blobs/sha256:f675abee28d0f10f335f7a04dc6ad3de12434c83c2f0f32c913061204c137a94",
74
+ "darwin_x86_64_sha256": "f675abee28d0f10f335f7a04dc6ad3de12434c83c2f0f32c913061204c137a94",
75
+ # arm64_sonoma
76
+ "darwin_arm64": "https://ghcr.io/v2/homebrew/core/lima/blobs/sha256:8aeb0a3b7295f0c3e0c2a7a92a798a44397936e5bb732db825aee6da5e762d7a",
77
+ "darwin_arm64_sha256": "8aeb0a3b7295f0c3e0c2a7a92a798a44397936e5bb732db825aee6da5e762d7a",
72
78
  # on linux we use github releases since most people are probably not using
73
- # linuxbrew and the go binary in homebrew links to homebrew's ld.so
74
- "linux_x86_64": "https://github.com/lima-vm/lima/releases/download/v0.23.2/lima-0.23.2-Linux-x86_64.tar.gz",
75
- "linux_x86_64_sha256": "5d0034316096e3f3ceedcb2e1dcac7c7d380e26defb59a5894eaf1e3265b191e",
79
+ # linuxbrew and the go binary in homebrew links to linuxbrew's ld.so
80
+ "linux_x86_64": f"https://github.com/lima-vm/lima/releases/download/v{version}/lima-{version}-Linux-x86_64.tar.gz",
81
+ "linux_x86_64_sha256": "b109cac29569a4aacab01c588f922ea6c7e2ef06ce9260bbc4c382e475bc3b98",
76
82
  }
77
83
 
78
84
  binroot = f"{root}/bin"
devenv/lib/venv.py CHANGED
@@ -25,15 +25,20 @@ def get(
25
25
 
26
26
  venv = cfg[f"venv.{name}"]
27
27
  venv_dir = venv.get("path", f"{reporoot}/.venv-{name}")
28
- editable_paths = venv.get("editable", None)
29
- if editable_paths is not None:
28
+ editable_paths_s = venv.get("editable", None)
29
+ if editable_paths_s is not None:
30
30
  editable_paths = tuple(
31
- f"{reporoot}/{path}" for path in editable_paths.strip().split("\n")
31
+ f"{reporoot}/{path}"
32
+ for path in editable_paths_s.strip().split("\n")
32
33
  )
33
-
34
- bins = venv.get("bins", None)
35
- if bins is not None:
36
- bins = tuple(bins.strip().split("\n"))
34
+ else:
35
+ editable_paths = None
36
+
37
+ bins_s = venv.get("bins", None)
38
+ if bins_s is not None:
39
+ bins = tuple(bins_s.strip().split("\n"))
40
+ else:
41
+ bins = None
37
42
 
38
43
  return (
39
44
  venv_dir,
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: sentry_devenv
3
- Version: 1.14.5
3
+ Version: 1.16.0
4
4
  Summary: Utilities for setting up a Sentry development environment
5
5
  Author-email: Joshua Li <joshua.li@sentry.io>, Ian Woodard <ian.woodard@sentry.io>, Buck Evan <buck.evan@sentry.io>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -30,9 +30,12 @@ Otherwise, set the `SENTRY_EXTERNAL_CONTRIBUTOR` environment variable.
30
30
  Download [this](https://raw.githubusercontent.com/getsentry/devenv/main/install-devenv.sh) and run it:
31
31
 
32
32
  ```
33
+ curl https://raw.githubusercontent.com/getsentry/devenv/main/install-devenv.sh > install-devenv.sh
33
34
  bash install-devenv.sh
34
35
  ```
35
36
 
37
+ Make sure to call this file `install-devenv.sh` as the script calls itself when you run it.
38
+
36
39
  This "global" devenv is installed to `~/.local/share/sentry-devenv/bin/devenv`.
37
40
 
38
41
  To update this installation, run `devenv update`.
@@ -13,12 +13,12 @@ devenv/pythons.py,sha256=ZcjBrkfmQEkiMP217VyTG48cyteJdYG_hoQ6oFKx_CU,1252
13
13
  devenv/sync.py,sha256=B9bvAuI7K-4SqcfHD4_zwKpozAnHWCNOL-IhVOcc3Zg,1254
14
14
  devenv/update.py,sha256=CkshQUvmVVblXdjARgWQKXSe7pwMjSMrPR3gDEesX5c,2402
15
15
  devenv/checks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- devenv/checks/credsStore.py,sha256=z4XK8mEsFBdAs98rchijjxKcwv8gc9ft-2QqectqZVQ,1157
16
+ devenv/checks/credsStore.py,sha256=eUwtoQ8btFsM8Ir-Vla98MEQFQ5o-OyFu--CSnZr3uY,1149
17
17
  devenv/checks/test.py,sha256=AvxoA2W5qTO2ZpoXmjScLiJxXD3Y_limYp5yTjGSZ9U,701
18
18
  devenv/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  devenv/lib/archive.py,sha256=LlVETRsf3J53yY_8sjL4P8plLNEMKoS9G48kfoVoseA,4503
20
20
  devenv/lib/brew.py,sha256=_7recvYh-LnUJC0eKnYK7F8AzGRL5bi_Khv0f_mgrlM,1795
21
- devenv/lib/colima.py,sha256=_im7bcaJeZbbw1xw7zK7eLwJEvlhO5rOiXT7qkXsvLE,6836
21
+ devenv/lib/colima.py,sha256=fcCnH6H1uZnSPG28tt9dQZXgLZPvKTfiQynw6Ty137M,6840
22
22
  devenv/lib/config.py,sha256=5eXYwM44AJ3w2VfVbCDqchYOL1zAjazNcirtM6kxxGw,3344
23
23
  devenv/lib/context.py,sha256=4EDImK9pvTp3FqeNigevC9lbJsgdDO9D1t2_Y4NyPlc,207
24
24
  devenv/lib/direnv.py,sha256=HDRUaIR0PMAQYiiTaw3gEQuh6Tdb7BUJmV7dBZdPztM,1325
@@ -26,14 +26,14 @@ devenv/lib/docker.py,sha256=vfEThxKqQGrGPPUZvw5yo2IZ25XG_HoUYjDyBPHnIN4,3480
26
26
  devenv/lib/fs.py,sha256=IBahQ9fB-o9cK9HipK_L0gso2OVinIDTxFWoeMte9ww,2764
27
27
  devenv/lib/gcloud.py,sha256=G8rhKC89TqWcFzIVsFd64d4ouD6M6s-TaMX5ZxtKypw,3550
28
28
  devenv/lib/github.py,sha256=AMtcz6gTVKy7qvCP1zTUdHQlnSM32TVaji0aOXJ_F9A,3463
29
- devenv/lib/limactl.py,sha256=HHUsS4lpnXzf2xQd6syMs5PgSQqOylrz1gFsJ34HRfk,3943
29
+ devenv/lib/limactl.py,sha256=uGcRkXQACDvbwKWhgEqgoUSVZjX6vEUGOutJDEw3kNM,4254
30
30
  devenv/lib/modules.py,sha256=shoqgja0b-xzXr601Ryz0JOy3Vxbw53I3cRYezVt77g,859
31
31
  devenv/lib/node.py,sha256=0LobIBWRQMzBiTKgv-WCva0Q1ZK3sR2NXNmnSa0Pcow,4156
32
32
  devenv/lib/proc.py,sha256=eU7DHIk_66wgkHRmdtKbBKZTa6q4tl9QJbrlnQOQCls,2743
33
33
  devenv/lib/repository.py,sha256=cDCgcZ6lw0bcWC6DrcDp3tz_MWObmgAyFq39TeU7YHY,1966
34
34
  devenv/lib/rosetta.py,sha256=Lm-tDFut86o6l-Y55d5kTacRHTwrv5MFEymQpy7Qihc,1170
35
35
  devenv/lib/tenv.py,sha256=9-I-7wvJNqanaMEs39bheOfikVz3wgTKtArkeCsOz8I,3028
36
- devenv/lib/venv.py,sha256=9BK_3YjLpltDJby25eMmgZ_LQ7LVOkEFYxrStjtVUJk,3092
36
+ devenv/lib/venv.py,sha256=VbV2IA3HTk5WABBpMQJvlizdknEQVz1SsLxlEBDOLkc,3186
37
37
  devenv/lib_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  devenv/lib_check/brew.py,sha256=tId1IgItju-fulbmTXmmI2Oo_-q332rd1tUN5RSkTrs,544
39
39
  devenv/lib_check/types.py,sha256=HIvuU3q27Izgm77jH6QX6gKMvgfunx05X4OEsJoqjP8,271
@@ -43,6 +43,8 @@ tests/test_main.py,sha256=S3IgdMIyUr1QWws_WQZcuXVEGU1GkOb3IiATUkfl9tc,657
43
43
  tests/test_pythons.py,sha256=Nepff11shv18irF3EYzf3U6zsRMrpLeS8QfrGJ3bTME,723
44
44
  tests/test_sync.py,sha256=ihCYFxscPwbVY_cnFyq2fvYUBc_SyB6gsElz334fmaw,871
45
45
  tests/utils.py,sha256=Qr2RM5Vo-14mF8tPSJITiYuhGc6fU9rk-fChxW-lokk,291
46
+ tests/checks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ tests/checks/test_credStore.py,sha256=fvvKBx2vqbHDAfwxz77GPHO_gc8jawkqOpaDOob1dEs,1459
46
48
  tests/doctor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
49
  tests/doctor/test_attempt_fix.py,sha256=cGUv7-xRKWCizC9cNNqiCp7aa95k3nHUXvRFFuLfJ34,1075
48
50
  tests/doctor/test_filter_failing_checks.py,sha256=5L5XdBSyeySwZtJeAR71lbktt3NxkJdUfncKBJPYdAc,1270
@@ -59,7 +61,7 @@ tests/doctor/devenv/checks/no_check.py,sha256=hcX2CNzB07U7r6KHbW71IvsW7UG-JsHcji
59
61
  tests/doctor/devenv/checks/no_name.py,sha256=txJhaXiJjY4CUPONTX9G6J6RttTCJ-BupDmZT1sKoAc,167
60
62
  tests/doctor/devenv/checks/no_tags.py,sha256=ATwlSsn5fe-OwNfgEDDa0HiBoOgkOGwkqIbQuDaghpk,161
61
63
  tests/doctor/devenv/checks/passing_check.py,sha256=F-gW4ZEqXVBL5akMaR3Hcf3yuihm3jfxTY80-EqsbOg,307
62
- tests/lib/test_archive.py,sha256=XuY26RiLZskUH-AL27rDAm9rHdR9hBzxeVTvRSnQvk8,7959
64
+ tests/lib/test_archive.py,sha256=5FdCF8t64FewevL4P9PFojWS-a15z2I11TX0G1L_A-g,7944
63
65
  tests/lib/test_brew.py,sha256=g2Sz-yg4-212qlsKg0vfHf604bQyRjUElsf3khvXrTQ,5711
64
66
  tests/lib/test_direnv.py,sha256=GKpEbsHgaRZWevYrsa0oOGQFCsyllCLX1vGdg3igvAc,1551
65
67
  tests/lib/test_fs.py,sha256=qhX9CQTTSht1f6ZJfmpsSFICTwPs--h_mLlS_1jnZQg,1670
@@ -67,8 +69,8 @@ tests/lib/test_github.py,sha256=IMEG2cmRaK_PMJprFE_ZMqPnZ0StwWqgznhhT_zVk3U,4526
67
69
  tests/lib/test_proc.py,sha256=XH6OnxKPSSm3HvDjYHApputMKwgOE8lYqDuK2vK0Z0U,2626
68
70
  tests/lib/test_repository.py,sha256=gUi1lkY7bha5WwZ5xcnENOlFYboVV8TFW1lCESvS0VA,787
69
71
  tests/lib/test_venv.py,sha256=wscU7Enp8fK6o_2HgIT4WwDnvHbKwaKvJhNyJUrDNqk,3262
70
- sentry_devenv-1.14.5.dist-info/METADATA,sha256=f45SNpnD9CDOwfKer9EMO_sEYHh_gJRPQclfPin5ghc,13429
71
- sentry_devenv-1.14.5.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
72
- sentry_devenv-1.14.5.dist-info/entry_points.txt,sha256=StsIuNugcoEU8jsPy6H9ECjzoDzOVKXl1vUaYTIGbzM,44
73
- sentry_devenv-1.14.5.dist-info/top_level.txt,sha256=dOQExvIA0fj_EQjCrMTS7CCHNH7WZFHxEU0M7LlNcKQ,16
74
- sentry_devenv-1.14.5.dist-info/RECORD,,
72
+ sentry_devenv-1.16.0.dist-info/METADATA,sha256=XtKwpwoQvjbWUcMYCrUrhEutRyZWwBV-JP6zJeBV6l4,13621
73
+ sentry_devenv-1.16.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
74
+ sentry_devenv-1.16.0.dist-info/entry_points.txt,sha256=StsIuNugcoEU8jsPy6H9ECjzoDzOVKXl1vUaYTIGbzM,44
75
+ sentry_devenv-1.16.0.dist-info/top_level.txt,sha256=dOQExvIA0fj_EQjCrMTS7CCHNH7WZFHxEU0M7LlNcKQ,16
76
+ sentry_devenv-1.16.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes
@@ -0,0 +1,50 @@
1
+ from __future__ import annotations
2
+
3
+ import os.path
4
+ import pathlib
5
+ import shutil
6
+ from collections.abc import Generator
7
+ from unittest import mock
8
+
9
+ import pytest
10
+
11
+ from devenv.checks import credsStore
12
+
13
+
14
+ @pytest.fixture
15
+ def fake_config(tmp_path: pathlib.Path) -> Generator[pathlib.Path]:
16
+ cfg = tmp_path.joinpath("config.json")
17
+
18
+ def new_expanduser(s: str) -> str:
19
+ assert s == "~/.docker/config.json"
20
+ return str(cfg)
21
+
22
+ with mock.patch.object(os.path, "expanduser", new_expanduser):
23
+ yield cfg
24
+
25
+
26
+ def test_no_credsStore_ok(fake_config: pathlib.Path) -> None:
27
+ fake_config.write_text("{}")
28
+ assert credsStore.check() == (True, "")
29
+
30
+
31
+ def test_binary_ok(fake_config: pathlib.Path) -> None:
32
+ fake_config.write_text('{"credsStore": "example"}')
33
+ with mock.patch.object(shutil, "which", return_value="/fake/exe"):
34
+ assert credsStore.check() == (True, "")
35
+
36
+
37
+ @pytest.mark.parametrize("name", ("desktop", "osxkeychain"))
38
+ def test_binary_missing(fake_config: pathlib.Path, name: str) -> None:
39
+ fake_config.write_text(f'{{"credsStore": "{name}"}}')
40
+ with mock.patch.object(shutil, "which", return_value=None):
41
+ assert credsStore.check() == (
42
+ False,
43
+ "credsStore requires nonexistent binary",
44
+ )
45
+
46
+
47
+ def test_fix(fake_config: pathlib.Path) -> None:
48
+ fake_config.write_text('{"credsStore": "bad"}')
49
+ assert credsStore.fix() == (True, "")
50
+ assert fake_config.read_text() == "{}"
tests/lib/test_archive.py CHANGED
@@ -20,7 +20,7 @@ def tar(tmp_path: pathlib.Path) -> pathlib.Path:
20
20
  executable.write_text("hi")
21
21
 
22
22
  tar = tmp_path / "tar"
23
- with tarfile.open(tar, "w:tar") as tarf:
23
+ with tarfile.open(tar, "w:") as tarf:
24
24
  tarf.add(executable, arcname="executable")
25
25
 
26
26
  return tar
@@ -69,7 +69,7 @@ def tar2(tmp_path: pathlib.Path) -> pathlib.Path:
69
69
  foo_v1_baz.mkdir()
70
70
 
71
71
  tar = tmp_path / "tar"
72
- with tarfile.open(tar, "w:tar") as tarf:
72
+ with tarfile.open(tar, "w:") as tarf:
73
73
  tarf.add(foo, arcname="foo")
74
74
  # foo
75
75
  # foo/v1
@@ -95,7 +95,7 @@ def tar3(tmp_path: pathlib.Path) -> pathlib.Path:
95
95
  foo_v1_foo.write_text("")
96
96
 
97
97
  tar = tmp_path / "tar"
98
- with tarfile.open(tar, "w:tar") as tarf:
98
+ with tarfile.open(tar, "w:") as tarf:
99
99
  tarf.add(foo, arcname="foo")
100
100
  # foo
101
101
  # foo/bar
@@ -115,7 +115,7 @@ def tar4(tmp_path: pathlib.Path) -> pathlib.Path:
115
115
 
116
116
  tar = tmp_path / "tar"
117
117
 
118
- with tarfile.open(tar, "w:tar") as tarf:
118
+ with tarfile.open(tar, "w:") as tarf:
119
119
  # note: arcname /foo doesn't work, it gets added as foo
120
120
  tarf.add(foo, arcname="foo")
121
121
  # /foo
@@ -139,7 +139,7 @@ def tar5(tmp_path: pathlib.Path) -> pathlib.Path:
139
139
 
140
140
  tar = tmp_path / "tar"
141
141
 
142
- with tarfile.open(tar, "w:tar") as tarf:
142
+ with tarfile.open(tar, "w:") as tarf:
143
143
  tarf.add(foo, arcname="foo")
144
144
  # foo
145
145
  # foo/bar