cloudsmith-cli 1.28.0__tar.gz → 1.29.0__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.
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/PKG-INFO +37 -8
- cloudsmith_cli-1.28.0/cloudsmith_cli.egg-info/PKG-INFO → cloudsmith_cli-1.29.0/README.md +29 -55
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/check.py +1 -3
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/list_.py +25 -2
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metadata.py +9 -3
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/push.py +7 -4
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/repos.py +5 -7
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/validators.py +2 -2
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/metadata.py +37 -93
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/packages.py +2 -0
- cloudsmith_cli-1.29.0/cloudsmith_cli/core/api/v2.py +96 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/__init__.py +4 -0
- cloudsmith_cli-1.29.0/cloudsmith_cli/core/credentials/oidc/detectors/buildkite.py +54 -0
- cloudsmith_cli-1.29.0/cloudsmith_cli/core/credentials/oidc/detectors/gcp.py +193 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/keyring.py +4 -6
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/ratelimits.py +1 -1
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/session.py +10 -1
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/sso.py +3 -3
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/pnpm/rc.py +1 -2
- cloudsmith_cli-1.29.0/cloudsmith_cli/data/VERSION +1 -0
- cloudsmith_cli-1.28.0/README.md → cloudsmith_cli-1.29.0/cloudsmith_cli.egg-info/PKG-INFO +84 -2
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/SOURCES.txt +3 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/requires.txt +7 -3
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/pyproject.toml +8 -7
- cloudsmith_cli-1.28.0/cloudsmith_cli/data/VERSION +0 -1
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/LICENSE +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/MANIFEST.in +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/__main__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/command.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/auth.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/copy.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/cargo.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/docker.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/generic.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/manage.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/pnpm.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/terraform.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/delete.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/dependencies.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/docs.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/domains.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/download.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/entitlements.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/help_.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/login.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/logout.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/main.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/mcp.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metrics/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metrics/command.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metrics/entitlements.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metrics/packages.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/move.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/command.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/deny.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/license.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/vulnerability.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quarantine.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quota/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quota/command.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quota/history.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quota/quota.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/registry.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/resync.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/status.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/tags.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/tokens.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/update.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/upstream.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/vulnerabilities.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/whoami.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/config.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/decorators.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/dsc_parser.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/exceptions.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/metadata_common.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/saml.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/table.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/types.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/utils.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/webserver.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/conftest.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/distros.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/entitlements.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/exceptions.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/files.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/init.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/metrics.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/orgs.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/quota.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/rates.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/repos.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/status.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/upstreams.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/user.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/version.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/vulnerabilities.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/cache_utils.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/config.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/chain.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/models.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/cache.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/aws.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/azure_devops.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/base.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/bitbucket_pipelines.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/circleci.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/generic.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/github_actions.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/gitlab_ci.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/exchange.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/provider.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/cli_flag.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/credentials_file.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/env_var.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/keyring_provider.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/oidc_provider.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/download.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/installation.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/macos_keychain.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/mcp/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/mcp/data.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/mcp/server.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/pagination.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/rest.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/self_update.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/update_check.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/utils.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/version.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/backends.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/cargo/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/cargo/installer.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/cargo/runtime.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/common.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/custom_domains.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/default_domains.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/docker/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/docker/installer.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/docker/runtime.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/generic.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/launchers.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/pnpm/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/pnpm/installer.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/pnpm/runtime.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/terraform/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/terraform/installer.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/terraform/runtime.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/terraform/terraformrc.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/data/config.ini +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/data/credentials.ini +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/templates/__init__.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/templates/auth_error.html +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/templates/auth_success.html +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/templates/auth_two_factor.html +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/wrapper.py +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/dependency_links.txt +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/entry_points.txt +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/top_level.txt +0 -0
- {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cloudsmith-cli
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.29.0
|
|
4
4
|
Summary: Cloudsmith Command-Line Interface (CLI)
|
|
5
5
|
Author-email: Cloudsmith Ltd <support@cloudsmith.io>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -12,7 +12,6 @@ Classifier: Intended Audience :: Developers
|
|
|
12
12
|
Classifier: Intended Audience :: System Administrators
|
|
13
13
|
Classifier: Operating System :: POSIX :: Linux
|
|
14
14
|
Classifier: Programming Language :: Python
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -20,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
20
19
|
Classifier: Topic :: Internet
|
|
21
20
|
Classifier: Topic :: System :: Systems Administration
|
|
22
21
|
Classifier: Topic :: Utilities
|
|
23
|
-
Requires-Python: >=3.
|
|
22
|
+
Requires-Python: >=3.11.0
|
|
24
23
|
Description-Content-Type: text/markdown
|
|
25
24
|
License-File: LICENSE
|
|
26
25
|
Requires-Dist: certifi>=2024.7.4
|
|
@@ -29,15 +28,15 @@ Requires-Dist: click-configfile>=0.2.3
|
|
|
29
28
|
Requires-Dist: click-didyoumean>=0.0.3
|
|
30
29
|
Requires-Dist: click-spinner>=0.1.7
|
|
31
30
|
Requires-Dist: json5>=0.9.0
|
|
32
|
-
Requires-Dist: cloudsmith-api<3.0,>=2.0.
|
|
31
|
+
Requires-Dist: cloudsmith-api<3.0,>=2.0.38
|
|
33
32
|
Requires-Dist: keyring>=25.4.1
|
|
34
33
|
Requires-Dist: keyrings-alt>=5.0.2
|
|
35
34
|
Requires-Dist: keyrings-cryptfile>=1.3.9
|
|
36
35
|
Requires-Dist: cryptography>=50.0.0
|
|
37
|
-
Requires-Dist: mcp==2.
|
|
36
|
+
Requires-Dist: mcp==2.3.0
|
|
38
37
|
Requires-Dist: pydantic-settings>=2.14.2
|
|
39
38
|
Requires-Dist: PyJWT[crypto]>=2.13.0
|
|
40
|
-
Requires-Dist: python-toon==0.
|
|
39
|
+
Requires-Dist: python-toon==0.2.0
|
|
41
40
|
Requires-Dist: requests>=2.18.4
|
|
42
41
|
Requires-Dist: requests_toolbelt>=1.0.0
|
|
43
42
|
Requires-Dist: rich>=13.0.0
|
|
@@ -47,8 +46,11 @@ Requires-Dist: urllib3>=2.5
|
|
|
47
46
|
Requires-Dist: tomlkit>=0.15.0
|
|
48
47
|
Provides-Extra: aws
|
|
49
48
|
Requires-Dist: boto3[crt]>=1.26.0; extra == "aws"
|
|
49
|
+
Provides-Extra: gcp
|
|
50
|
+
Requires-Dist: google-auth>=2.40.0; extra == "gcp"
|
|
50
51
|
Provides-Extra: all
|
|
51
52
|
Requires-Dist: boto3[crt]>=1.26.0; extra == "all"
|
|
53
|
+
Requires-Dist: google-auth>=2.40.0; extra == "all"
|
|
52
54
|
Dynamic: license-file
|
|
53
55
|
|
|
54
56
|
# Cloudsmith Command Line Interface (CLI)
|
|
@@ -232,6 +234,29 @@ pip install cloudsmith-cli[aws]
|
|
|
232
234
|
|
|
233
235
|
This installs `boto3[crt]` for AWS credential chain support, STS token generation, and AWS SSO compatibility.
|
|
234
236
|
|
|
237
|
+
#### GCP OIDC Support
|
|
238
|
+
|
|
239
|
+
For Google Cloud environments (GCE, Cloud Run, GKE, Cloud Functions, App Engine, Cloud Build), install with the `gcp` extra to enable automatic credential discovery:
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
pip install cloudsmith-cli[gcp]
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
This installs `google-auth` for Application Default Credentials (ADC) resolution and OIDC ID token generation. It works with an attached Google Cloud service account, a service-account key supplied through `GOOGLE_APPLICATION_CREDENTIALS`, or service-account impersonation configured locally:
|
|
246
|
+
|
|
247
|
+
```sh
|
|
248
|
+
gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
|
|
249
|
+
cloudsmith whoami --workspace=YOUR_WORKSPACE --oidc-service-slug=YOUR_SERVICE --oidc-detector-order=gcp
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Configure a Cloudsmith OIDC provider to trust `https://accounts.google.com`, the service account's numeric unique ID as the subject, and audience `cloudsmith` (override with `--oidc-audience` or `CLOUDSMITH_OIDC_AUDIENCE`). Local impersonation requires the Service Account Token Creator role on the target service account and the IAM Service Account Credentials API enabled.
|
|
253
|
+
|
|
254
|
+
On workloads with a metadata identity endpoint, the CLI requests an ID token directly. If that endpoint returns HTTP 404 (as on some Cloud Build environments), it uses IAM `generateIdToken` for the same attached service account. This fallback requires the IAM Service Account Credentials API and `iam.serviceAccounts.getOpenIdToken` on that account; the Service Account OpenID Connect Identity Token Creator role grants this permission. Permission and transport failures are reported, not treated as a missing endpoint.
|
|
255
|
+
|
|
256
|
+
A plain `gcloud auth application-default login` user session cannot mint an ID token for an arbitrary audience. To use it, set `--oidc-audience` to the session's OAuth client ID and configure Cloudsmith to trust that audience and user subject; otherwise use service-account impersonation. `gcloud auth login` alone does not configure ADC. Other ADC types, including direct external-account federation, are skipped rather than incorrectly treated as ID-token-capable credentials.
|
|
257
|
+
|
|
258
|
+
See Google's [Authenticate with auth libraries](https://docs.cloud.google.com/iam/docs/authenticate-with-auth-libraries#authenticate-standard) guide for credential discovery.
|
|
259
|
+
|
|
235
260
|
#### All Optional Features
|
|
236
261
|
|
|
237
262
|
To install all optional dependencies:
|
|
@@ -240,7 +265,7 @@ To install all optional dependencies:
|
|
|
240
265
|
pip install cloudsmith-cli[all]
|
|
241
266
|
```
|
|
242
267
|
|
|
243
|
-
**Note:** If you don't install the AWS extra, the
|
|
268
|
+
**Note:** If you don't install the AWS or GCP extra, the corresponding OIDC detector will gracefully skip itself with no errors.
|
|
244
269
|
|
|
245
270
|
#### Bitbucket Pipelines OIDC Support
|
|
246
271
|
|
|
@@ -261,6 +286,10 @@ See the [Bitbucket Pipelines OIDC documentation](https://support.atlassian.com/b
|
|
|
261
286
|
|
|
262
287
|
In CircleCI, OIDC credential discovery works out of the box with no extra dependencies — the CLI reads the token from the `CIRCLE_OIDC_TOKEN_V2` (preferred) or `CIRCLE_OIDC_TOKEN` environment variable that CircleCI injects into every job. The Cloudsmith OIDC provider must expect the audience CircleCI mints, which is your CircleCI organization UUID. See the [Cloudsmith CircleCI integration guide](https://docs.cloudsmith.com/integrations/integrating-with-circleci).
|
|
263
288
|
|
|
289
|
+
#### Buildkite OIDC Support
|
|
290
|
+
|
|
291
|
+
In Buildkite, OIDC credential discovery works out of the box with no extra dependencies — the CLI requests a token for the current job through `buildkite-agent oidc request-token`. By default it requests the `cloudsmith` audience; use `--oidc-audience` or `CLOUDSMITH_OIDC_AUDIENCE` if your Cloudsmith OIDC provider expects a different audience. See the [Buildkite OIDC documentation](https://buildkite.com/docs/pipelines/security/oidc).
|
|
292
|
+
|
|
264
293
|
#### Azure DevOps OIDC Support
|
|
265
294
|
|
|
266
295
|
In Azure DevOps Pipelines, OIDC credential discovery works out of the box with no extra dependencies — the CLI fetches an OIDC token from the `SYSTEM_OIDCREQUESTURI` endpoint using the pipeline's `SYSTEM_ACCESSTOKEN`. Make sure `SYSTEM_ACCESSTOKEN` is mapped into the step's environment. The Cloudsmith OIDC provider must expect the audience `api://AzureADTokenExchange`, which Azure DevOps always mints (any requested audience is ignored). See the [Cloudsmith Azure DevOps integration guide](https://docs.cloudsmith.com/integrations/integrating-with-azure-devops).
|
|
@@ -295,7 +324,7 @@ By default the CLI tries each detector in a fixed priority order and uses the fi
|
|
|
295
324
|
- **Disable a detector** — set `CLOUDSMITH_OIDC_<DETECTOR>_DISABLED=true` to skip it entirely. Only the literal value `true` (case-insensitive) disables; anything else leaves the detector enabled. For example, `CLOUDSMITH_OIDC_AWS_DISABLED=true` skips the AWS detector so an explicitly-set `CLOUDSMITH_OIDC_TOKEN` is picked up by the generic detector instead.
|
|
296
325
|
- **Reorder evaluation** — use `--oidc-detector-order` (or the `CLOUDSMITH_OIDC_DETECTOR_ORDER` environment variable) with a comma-separated list of detector ids to control both which detectors are considered and the order they are tried in (first match wins). Ids not listed are skipped; unrecognised ids are ignored with a warning. For example, `--oidc-detector-order=generic,aws` tries the generic detector first and considers only those two.
|
|
297
326
|
|
|
298
|
-
When both are set, the order list defines the candidate set and sequence, then the `*_DISABLED` flags are applied on top — so a disabled detector is always skipped even if it appears in the order list. Detector ids are: `aws`, `azure_devops`, `bitbucket`, `circleci`, `generic`, `github`, `gitlab`.
|
|
327
|
+
When both are set, the order list defines the candidate set and sequence, then the `*_DISABLED` flags are applied on top — so a disabled detector is always skipped even if it appears in the order list. Detector ids are: `aws`, `azure_devops`, `bitbucket`, `buildkite`, `circleci`, `gcp`, `generic`, `github`, `gitlab`.
|
|
299
328
|
|
|
300
329
|
Both controls can also be set in `config.ini`, under `[default]` or a profile section:
|
|
301
330
|
|
|
@@ -1,56 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: cloudsmith-cli
|
|
3
|
-
Version: 1.28.0
|
|
4
|
-
Summary: Cloudsmith Command-Line Interface (CLI)
|
|
5
|
-
Author-email: Cloudsmith Ltd <support@cloudsmith.io>
|
|
6
|
-
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://github.com/cloudsmith-io/cloudsmith-cli
|
|
8
|
-
Keywords: cloudsmith,cli,devops
|
|
9
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
-
Classifier: Environment :: Console
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: Intended Audience :: System Administrators
|
|
13
|
-
Classifier: Operating System :: POSIX :: Linux
|
|
14
|
-
Classifier: Programming Language :: Python
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
-
Classifier: Topic :: Internet
|
|
21
|
-
Classifier: Topic :: System :: Systems Administration
|
|
22
|
-
Classifier: Topic :: Utilities
|
|
23
|
-
Requires-Python: >=3.10.0
|
|
24
|
-
Description-Content-Type: text/markdown
|
|
25
|
-
License-File: LICENSE
|
|
26
|
-
Requires-Dist: certifi>=2024.7.4
|
|
27
|
-
Requires-Dist: click!=8.3.0,>=8.2
|
|
28
|
-
Requires-Dist: click-configfile>=0.2.3
|
|
29
|
-
Requires-Dist: click-didyoumean>=0.0.3
|
|
30
|
-
Requires-Dist: click-spinner>=0.1.7
|
|
31
|
-
Requires-Dist: json5>=0.9.0
|
|
32
|
-
Requires-Dist: cloudsmith-api<3.0,>=2.0.31
|
|
33
|
-
Requires-Dist: keyring>=25.4.1
|
|
34
|
-
Requires-Dist: keyrings-alt>=5.0.2
|
|
35
|
-
Requires-Dist: keyrings-cryptfile>=1.3.9
|
|
36
|
-
Requires-Dist: cryptography>=50.0.0
|
|
37
|
-
Requires-Dist: mcp==2.2.0
|
|
38
|
-
Requires-Dist: pydantic-settings>=2.14.2
|
|
39
|
-
Requires-Dist: PyJWT[crypto]>=2.13.0
|
|
40
|
-
Requires-Dist: python-toon==0.1.3
|
|
41
|
-
Requires-Dist: requests>=2.18.4
|
|
42
|
-
Requires-Dist: requests_toolbelt>=1.0.0
|
|
43
|
-
Requires-Dist: rich>=13.0.0
|
|
44
|
-
Requires-Dist: semver>=2.7.9
|
|
45
|
-
Requires-Dist: starlette>=1.3.1
|
|
46
|
-
Requires-Dist: urllib3>=2.5
|
|
47
|
-
Requires-Dist: tomlkit>=0.15.0
|
|
48
|
-
Provides-Extra: aws
|
|
49
|
-
Requires-Dist: boto3[crt]>=1.26.0; extra == "aws"
|
|
50
|
-
Provides-Extra: all
|
|
51
|
-
Requires-Dist: boto3[crt]>=1.26.0; extra == "all"
|
|
52
|
-
Dynamic: license-file
|
|
53
|
-
|
|
54
1
|
# Cloudsmith Command Line Interface (CLI)
|
|
55
2
|
|
|
56
3
|
[](https://cloudsmith.io/~cloudsmith/repos/cli/packages/detail/python/cloudsmith-cli/latest/xf=bdist_wheel;xn=cloudsmith-cli;xv=py2.py3/)
|
|
@@ -232,6 +179,29 @@ pip install cloudsmith-cli[aws]
|
|
|
232
179
|
|
|
233
180
|
This installs `boto3[crt]` for AWS credential chain support, STS token generation, and AWS SSO compatibility.
|
|
234
181
|
|
|
182
|
+
#### GCP OIDC Support
|
|
183
|
+
|
|
184
|
+
For Google Cloud environments (GCE, Cloud Run, GKE, Cloud Functions, App Engine, Cloud Build), install with the `gcp` extra to enable automatic credential discovery:
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
pip install cloudsmith-cli[gcp]
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
This installs `google-auth` for Application Default Credentials (ADC) resolution and OIDC ID token generation. It works with an attached Google Cloud service account, a service-account key supplied through `GOOGLE_APPLICATION_CREDENTIALS`, or service-account impersonation configured locally:
|
|
191
|
+
|
|
192
|
+
```sh
|
|
193
|
+
gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
|
|
194
|
+
cloudsmith whoami --workspace=YOUR_WORKSPACE --oidc-service-slug=YOUR_SERVICE --oidc-detector-order=gcp
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Configure a Cloudsmith OIDC provider to trust `https://accounts.google.com`, the service account's numeric unique ID as the subject, and audience `cloudsmith` (override with `--oidc-audience` or `CLOUDSMITH_OIDC_AUDIENCE`). Local impersonation requires the Service Account Token Creator role on the target service account and the IAM Service Account Credentials API enabled.
|
|
198
|
+
|
|
199
|
+
On workloads with a metadata identity endpoint, the CLI requests an ID token directly. If that endpoint returns HTTP 404 (as on some Cloud Build environments), it uses IAM `generateIdToken` for the same attached service account. This fallback requires the IAM Service Account Credentials API and `iam.serviceAccounts.getOpenIdToken` on that account; the Service Account OpenID Connect Identity Token Creator role grants this permission. Permission and transport failures are reported, not treated as a missing endpoint.
|
|
200
|
+
|
|
201
|
+
A plain `gcloud auth application-default login` user session cannot mint an ID token for an arbitrary audience. To use it, set `--oidc-audience` to the session's OAuth client ID and configure Cloudsmith to trust that audience and user subject; otherwise use service-account impersonation. `gcloud auth login` alone does not configure ADC. Other ADC types, including direct external-account federation, are skipped rather than incorrectly treated as ID-token-capable credentials.
|
|
202
|
+
|
|
203
|
+
See Google's [Authenticate with auth libraries](https://docs.cloud.google.com/iam/docs/authenticate-with-auth-libraries#authenticate-standard) guide for credential discovery.
|
|
204
|
+
|
|
235
205
|
#### All Optional Features
|
|
236
206
|
|
|
237
207
|
To install all optional dependencies:
|
|
@@ -240,7 +210,7 @@ To install all optional dependencies:
|
|
|
240
210
|
pip install cloudsmith-cli[all]
|
|
241
211
|
```
|
|
242
212
|
|
|
243
|
-
**Note:** If you don't install the AWS extra, the
|
|
213
|
+
**Note:** If you don't install the AWS or GCP extra, the corresponding OIDC detector will gracefully skip itself with no errors.
|
|
244
214
|
|
|
245
215
|
#### Bitbucket Pipelines OIDC Support
|
|
246
216
|
|
|
@@ -261,6 +231,10 @@ See the [Bitbucket Pipelines OIDC documentation](https://support.atlassian.com/b
|
|
|
261
231
|
|
|
262
232
|
In CircleCI, OIDC credential discovery works out of the box with no extra dependencies — the CLI reads the token from the `CIRCLE_OIDC_TOKEN_V2` (preferred) or `CIRCLE_OIDC_TOKEN` environment variable that CircleCI injects into every job. The Cloudsmith OIDC provider must expect the audience CircleCI mints, which is your CircleCI organization UUID. See the [Cloudsmith CircleCI integration guide](https://docs.cloudsmith.com/integrations/integrating-with-circleci).
|
|
263
233
|
|
|
234
|
+
#### Buildkite OIDC Support
|
|
235
|
+
|
|
236
|
+
In Buildkite, OIDC credential discovery works out of the box with no extra dependencies — the CLI requests a token for the current job through `buildkite-agent oidc request-token`. By default it requests the `cloudsmith` audience; use `--oidc-audience` or `CLOUDSMITH_OIDC_AUDIENCE` if your Cloudsmith OIDC provider expects a different audience. See the [Buildkite OIDC documentation](https://buildkite.com/docs/pipelines/security/oidc).
|
|
237
|
+
|
|
264
238
|
#### Azure DevOps OIDC Support
|
|
265
239
|
|
|
266
240
|
In Azure DevOps Pipelines, OIDC credential discovery works out of the box with no extra dependencies — the CLI fetches an OIDC token from the `SYSTEM_OIDCREQUESTURI` endpoint using the pipeline's `SYSTEM_ACCESSTOKEN`. Make sure `SYSTEM_ACCESSTOKEN` is mapped into the step's environment. The Cloudsmith OIDC provider must expect the audience `api://AzureADTokenExchange`, which Azure DevOps always mints (any requested audience is ignored). See the [Cloudsmith Azure DevOps integration guide](https://docs.cloudsmith.com/integrations/integrating-with-azure-devops).
|
|
@@ -295,7 +269,7 @@ By default the CLI tries each detector in a fixed priority order and uses the fi
|
|
|
295
269
|
- **Disable a detector** — set `CLOUDSMITH_OIDC_<DETECTOR>_DISABLED=true` to skip it entirely. Only the literal value `true` (case-insensitive) disables; anything else leaves the detector enabled. For example, `CLOUDSMITH_OIDC_AWS_DISABLED=true` skips the AWS detector so an explicitly-set `CLOUDSMITH_OIDC_TOKEN` is picked up by the generic detector instead.
|
|
296
270
|
- **Reorder evaluation** — use `--oidc-detector-order` (or the `CLOUDSMITH_OIDC_DETECTOR_ORDER` environment variable) with a comma-separated list of detector ids to control both which detectors are considered and the order they are tried in (first match wins). Ids not listed are skipped; unrecognised ids are ignored with a warning. For example, `--oidc-detector-order=generic,aws` tries the generic detector first and considers only those two.
|
|
297
271
|
|
|
298
|
-
When both are set, the order list defines the candidate set and sequence, then the `*_DISABLED` flags are applied on top — so a disabled detector is always skipped even if it appears in the order list. Detector ids are: `aws`, `azure_devops`, `bitbucket`, `circleci`, `generic`, `github`, `gitlab`.
|
|
272
|
+
When both are set, the order list defines the candidate set and sequence, then the `*_DISABLED` flags are applied on top — so a disabled detector is always skipped even if it appears in the order list. Detector ids are: `aws`, `azure_devops`, `bitbucket`, `buildkite`, `circleci`, `gcp`, `generic`, `github`, `gitlab`.
|
|
299
273
|
|
|
300
274
|
Both controls can also be set in `config.ini`, under `[default]` or a profile section:
|
|
301
275
|
|
|
@@ -127,6 +127,4 @@ def service(ctx, opts):
|
|
|
127
127
|
click.secho("(up-to-date)", fg="green")
|
|
128
128
|
|
|
129
129
|
click.echo()
|
|
130
|
-
click.secho(
|
|
131
|
-
"The API library used by this CLI tool seems to be up-to-date.", fg="green"
|
|
132
|
-
)
|
|
130
|
+
click.secho("The API library used by this CLI tool is up-to-date.", fg="green")
|
|
@@ -157,8 +157,20 @@ def entitlements_(*args, **kwargs): # pylint: disable=missing-docstring
|
|
|
157
157
|
),
|
|
158
158
|
help=("Sort packages by field. Prefix with '-' for descending order."),
|
|
159
159
|
)
|
|
160
|
+
@click.option(
|
|
161
|
+
"--include-connected",
|
|
162
|
+
is_flag=True,
|
|
163
|
+
default=False,
|
|
164
|
+
help=(
|
|
165
|
+
"Include packages from active connected repositories and show the "
|
|
166
|
+
"origin repository of each package. Download URLs (e.g. cdn_url, "
|
|
167
|
+
"signature_url) point at the requesting repository, not the origin."
|
|
168
|
+
),
|
|
169
|
+
)
|
|
160
170
|
@click.pass_context
|
|
161
|
-
def packages(
|
|
171
|
+
def packages(
|
|
172
|
+
ctx, opts, owner_repo, page, page_size, query, sort, include_connected, page_all
|
|
173
|
+
):
|
|
162
174
|
"""
|
|
163
175
|
List packages for a repository.
|
|
164
176
|
|
|
@@ -231,6 +243,7 @@ def packages(ctx, opts, owner_repo, page, page_size, query, sort, page_all):
|
|
|
231
243
|
repo=repo,
|
|
232
244
|
query=query,
|
|
233
245
|
sort=sort,
|
|
246
|
+
include_connected=include_connected,
|
|
234
247
|
)
|
|
235
248
|
|
|
236
249
|
if not use_stderr:
|
|
@@ -240,6 +253,7 @@ def packages(ctx, opts, owner_repo, page, page_size, query, sort, page_all):
|
|
|
240
253
|
return
|
|
241
254
|
|
|
242
255
|
headers = ["Name", "Version", "Status", "Owner / Repository (Identifier)"]
|
|
256
|
+
sorted_packages = sorted(packages_, key=itemgetter("namespace", "slug"))
|
|
243
257
|
rows = [
|
|
244
258
|
[
|
|
245
259
|
click.style(_get_package_name(package), fg="cyan"),
|
|
@@ -251,8 +265,12 @@ def packages(ctx, opts, owner_repo, page, page_size, query, sort, page_all):
|
|
|
251
265
|
slug=click.style(package["slug"], fg="green"),
|
|
252
266
|
),
|
|
253
267
|
]
|
|
254
|
-
for package in
|
|
268
|
+
for package in sorted_packages
|
|
255
269
|
]
|
|
270
|
+
if include_connected:
|
|
271
|
+
headers.append("Origin Repository")
|
|
272
|
+
for row, package in zip(rows, sorted_packages):
|
|
273
|
+
row.append(click.style(_get_origin_repository(package), fg="magenta"))
|
|
256
274
|
|
|
257
275
|
if packages_:
|
|
258
276
|
click.echo()
|
|
@@ -317,3 +335,8 @@ def _get_package_status(package):
|
|
|
317
335
|
def _get_package_version(package):
|
|
318
336
|
"""Get the version for a package (if any)."""
|
|
319
337
|
return package["version"] or "None"
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
def _get_origin_repository(package):
|
|
341
|
+
"""Get the repository that a package physically lives in."""
|
|
342
|
+
return package["origin_repository"] or package["repository"]
|
|
@@ -183,7 +183,9 @@ def list_metadata(
|
|
|
183
183
|
slug_perm = api_get_package_slug_perm(
|
|
184
184
|
owner=owner, repo=repo, identifier=package
|
|
185
185
|
)
|
|
186
|
-
entry = api_get_metadata(
|
|
186
|
+
entry = api_get_metadata(
|
|
187
|
+
slug_perm, metadata_slug_perm, credential=opts.credential
|
|
188
|
+
)
|
|
187
189
|
|
|
188
190
|
click.secho("OK", fg="green", err=use_stderr)
|
|
189
191
|
_print_metadata_entry(opts, entry)
|
|
@@ -208,6 +210,7 @@ def list_metadata(
|
|
|
208
210
|
page=page,
|
|
209
211
|
page_size=page_size,
|
|
210
212
|
package_slug_perm=slug_perm,
|
|
213
|
+
credential=opts.credential,
|
|
211
214
|
source_kind=source_kind,
|
|
212
215
|
classification=classification,
|
|
213
216
|
)
|
|
@@ -328,6 +331,7 @@ def add_metadata(
|
|
|
328
331
|
)
|
|
329
332
|
entry = api_create_metadata(
|
|
330
333
|
slug_perm,
|
|
334
|
+
credential=opts.credential,
|
|
331
335
|
content=metadata.content,
|
|
332
336
|
content_type=metadata.content_type,
|
|
333
337
|
source_identity=metadata.source_identity,
|
|
@@ -434,7 +438,9 @@ def update_metadata(
|
|
|
434
438
|
slug_perm = api_get_package_slug_perm(
|
|
435
439
|
owner=owner, repo=repo, identifier=package
|
|
436
440
|
)
|
|
437
|
-
entry = api_update_metadata(
|
|
441
|
+
entry = api_update_metadata(
|
|
442
|
+
slug_perm, metadata_slug_perm, credential=opts.credential, **patch_kwargs
|
|
443
|
+
)
|
|
438
444
|
|
|
439
445
|
click.secho("OK", fg="green", err=use_stderr)
|
|
440
446
|
_print_metadata_entry(opts, entry)
|
|
@@ -496,7 +502,7 @@ def remove_metadata(ctx, opts, owner_repo_package, metadata_slug_perm, yes):
|
|
|
496
502
|
slug_perm = api_get_package_slug_perm(
|
|
497
503
|
owner=owner, repo=repo, identifier=package
|
|
498
504
|
)
|
|
499
|
-
api_delete_metadata(slug_perm, metadata_slug_perm)
|
|
505
|
+
api_delete_metadata(slug_perm, metadata_slug_perm, credential=opts.credential)
|
|
500
506
|
|
|
501
507
|
click.secho("OK", fg="green", err=use_stderr)
|
|
502
508
|
|
|
@@ -7,7 +7,7 @@ import math
|
|
|
7
7
|
import os
|
|
8
8
|
import shlex
|
|
9
9
|
import time
|
|
10
|
-
from datetime import
|
|
10
|
+
from datetime import UTC, datetime
|
|
11
11
|
|
|
12
12
|
import click
|
|
13
13
|
|
|
@@ -300,7 +300,9 @@ def validate_metadata_payload(
|
|
|
300
300
|
|
|
301
301
|
try:
|
|
302
302
|
with maybe_spinner(opts):
|
|
303
|
-
api_validate_metadata(
|
|
303
|
+
api_validate_metadata(
|
|
304
|
+
credential=opts.credential, content=content, content_type=content_type
|
|
305
|
+
)
|
|
304
306
|
except ApiException as exc:
|
|
305
307
|
http_status = getattr(exc, "status", None)
|
|
306
308
|
detail = (
|
|
@@ -385,6 +387,7 @@ def attach_metadata_to_package(
|
|
|
385
387
|
with maybe_spinner(opts):
|
|
386
388
|
entry = api_create_metadata(
|
|
387
389
|
slug_perm,
|
|
390
|
+
credential=opts.credential,
|
|
388
391
|
content=content,
|
|
389
392
|
content_type=content_type,
|
|
390
393
|
source_identity=source_identity,
|
|
@@ -681,7 +684,7 @@ def wait_for_package_sync(
|
|
|
681
684
|
fg="cyan",
|
|
682
685
|
)
|
|
683
686
|
|
|
684
|
-
start = datetime.now(tz=
|
|
687
|
+
start = datetime.now(tz=UTC)
|
|
685
688
|
context_msg = "Failed to synchronise file!"
|
|
686
689
|
with handle_api_exceptions(
|
|
687
690
|
ctx, opts=opts, context_msg=context_msg, reraise_on_error=skip_errors
|
|
@@ -738,7 +741,7 @@ def wait_for_package_sync(
|
|
|
738
741
|
if left > 0:
|
|
739
742
|
pb.update(left)
|
|
740
743
|
|
|
741
|
-
end = datetime.now(tz=
|
|
744
|
+
end = datetime.now(tz=UTC)
|
|
742
745
|
seconds = (end - start).total_seconds()
|
|
743
746
|
|
|
744
747
|
click.echo(err=use_stderr)
|
|
@@ -16,27 +16,25 @@ from .main import main
|
|
|
16
16
|
def print_repositories(opts, data, page_info=None, show_list_info=True, page_all=False):
|
|
17
17
|
"""Print repositories as a table or output in another format."""
|
|
18
18
|
headers = [
|
|
19
|
-
"
|
|
19
|
+
"Owner / Repository (Identifier)",
|
|
20
20
|
"Type",
|
|
21
21
|
"Packages",
|
|
22
22
|
"Groups",
|
|
23
23
|
"Downloads",
|
|
24
24
|
"Size",
|
|
25
|
-
"Owner / Repository (Identifier)",
|
|
26
25
|
]
|
|
27
26
|
|
|
28
27
|
rows = [
|
|
29
28
|
[
|
|
30
|
-
|
|
29
|
+
"{owner_slug}/{slug}".format(
|
|
30
|
+
owner_slug=click.style(repo["namespace"], fg="magenta"),
|
|
31
|
+
slug=click.style(repo["slug"], fg="green"),
|
|
32
|
+
),
|
|
31
33
|
click.style(repo["repository_type_str"], fg="yellow"),
|
|
32
34
|
click.style(str(repo["package_count"]), fg="blue"),
|
|
33
35
|
click.style(str(repo["package_group_count"]), fg="blue"),
|
|
34
36
|
click.style(str(repo["num_downloads"]), fg="blue"),
|
|
35
37
|
click.style(str(repo["size_str"]), fg="blue"),
|
|
36
|
-
"{owner_slug}/{slug}".format(
|
|
37
|
-
owner_slug=click.style(repo["namespace"], fg="magenta"),
|
|
38
|
-
slug=click.style(repo["slug"], fg="green"),
|
|
39
|
-
),
|
|
40
38
|
]
|
|
41
39
|
for repo in sorted(data, key=itemgetter("namespace", "slug"))
|
|
42
40
|
]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import base64
|
|
4
4
|
import re
|
|
5
|
-
from datetime import
|
|
5
|
+
from datetime import UTC, datetime
|
|
6
6
|
from urllib.parse import urlsplit
|
|
7
7
|
|
|
8
8
|
import click
|
|
@@ -299,7 +299,7 @@ def validate_optional_timestamp(ctx, param, value):
|
|
|
299
299
|
try:
|
|
300
300
|
return (
|
|
301
301
|
datetime.strptime(value, "%Y-%m-%dT%H:%M:%SZ")
|
|
302
|
-
.replace(tzinfo=
|
|
302
|
+
.replace(tzinfo=UTC)
|
|
303
303
|
.replace(hour=0, minute=0, second=0)
|
|
304
304
|
)
|
|
305
305
|
except ValueError:
|