66from ..utils import random_str
77
88#: The canonical public upstream for each format. These are already indexed,
9- #: so the API validates them quickly, and none needs credentials . The API
9+ #: so the API validates them quickly, and only skills (GitHub) takes a token . The API
1010#: strips trailing slashes, so none is written with one. Formats without a
1111#: single canonical source (generic, swift) use a small placeholder page.
1212UPSTREAM_URLS = {
2929 "python" : "https://pypi.org" ,
3030 "rpm" : "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/35/Everything/x86_64/os" ,
3131 "ruby" : "https://rubygems.org" ,
32- "skills" : "https://clawhub.ai " ,
32+ "skills" : "https://github.com/anthropics/claude-plugins-official " ,
3333 "swift" : "https://example.org" ,
3434}
3535
@@ -52,7 +52,7 @@ def assert_succeeded(result):
5252@pytest .mark .integration
5353@pytest .mark .parametrize ("upstream_format" , UPSTREAM_FORMATS )
5454def test_upstream_commands (
55- runner , organization , upstream_format , tmp_repository , tmp_path
55+ request , runner , organization , upstream_format , tmp_repository , tmp_path
5656):
5757 upstream_config = {
5858 # "name" and "upstream_url" are the only required properties for most formats.
@@ -66,8 +66,12 @@ def test_upstream_commands(
6666
6767 # Skills specific arguments
6868 if upstream_format == "skills" :
69- upstream_config ["contents" ] = "Skills"
69+ # This GitHub host only offers skills and plugins together.
70+ upstream_config ["contents" ] = "Skills and plugins"
7071 upstream_config ["mode" ] = "Cache and Proxy"
72+ # Requested here rather than as a parameter so only skills skips without it.
73+ upstream_config ["auth_mode" ] = "Token"
74+ upstream_config ["auth_secret" ] = request .getfixturevalue ("github_token" )
7175
7276 upstream_config_file = tmp_path / (f"cli-test-upstream-{ upstream_format } .json" )
7377 upstream_config_file .write_text (str (json .dumps (upstream_config )))
0 commit comments