artefacts-cli 0.16.0__tar.gz → 0.16.2__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.
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/CHANGELOG.md +5 -1
- {artefacts_cli-0.16.0/artefacts_cli.egg-info → artefacts_cli-0.16.2}/PKG-INFO +1 -1
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_containers.py +3 -3
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_project.py +2 -7
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/config.py +24 -4
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/containers/__init__.py +1 -1
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/containers/docker_cm.py +3 -3
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/version.py +3 -3
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2/artefacts_cli.egg-info}/PKG-INFO +1 -1
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/SOURCES.txt +1 -0
- artefacts_cli-0.16.2/scripts/dev_version.py +28 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_app_containers.py +1 -1
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_config.py +38 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/.coveragerc +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/.pyre_configuration +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/README.md +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/README_INTERNAL.md +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/default/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/default/get_artifact.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/framework/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/framework/list_frameworks.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/framework/list_simulators.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/api_project_new_job.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/get_artifact_downloads.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/get_job_by_commit.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/get_job_test_results.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/post_update_job_results.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/put_update_job_results.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/api_project_info.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/create_remote.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/get_badge.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/get_config.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/get_last_jobs.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/upload_source.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/projects/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/projects/api_create_project.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/projects/api_list_projects.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/run/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/run/create_job_run.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/run/submit_run_results.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/user/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/user/get_user_organizations.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/client.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/errors.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/artifact_response.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/blob.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_new_job.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_project.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_remote.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_remote_response.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_remote_response_blob_upload_urls.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_remote_response_upload_urls.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/error.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/error_errors.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/framework.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/frameworks_list.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/get_artifact_downloads_response.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/job.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/last_jobs_response.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/list_projects_response.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/presigned_url.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/presigned_url_fields.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/project.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/register_run.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/register_run_tests_item.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/scenario_map_response.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/simulator.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/simulators_list.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_metrics.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_response.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_response_upload_urls.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_tests_item.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_uploads.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/update_job_results.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/upload_source_response.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/upload_source_response_upload_urls.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/user_organizations_response.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/types.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_auth.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_containers.pyi +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_experimental.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/filetree_classifyer.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/hash_cache.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/helpers.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/types.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/constants.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/containers/docker_utils.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/containers/utils.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/core/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/core/code_environment.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/doctor.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/download.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/errors.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/i18n.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/locales/art.pot +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/locales/base.pot +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/locales/click.pot +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/locales/ja_JP/LC_MESSAGES/artefacts.po +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/logger.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/reporter.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/runners/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/runners/base_runner.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/runners/launch_test_runner.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/runners/pytest_runner.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/shell_completion.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/templates/sample_config.yaml +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/api.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/auth.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/click_net_watch.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/common.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/config.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/formatting.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/junit.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/parameters.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/proc_tree_tracker.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/ros/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/ros/bagparser.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/ros/rosbags.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/copava/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts.yaml +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/dependency_links.txt +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/entry_points.txt +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/requires.txt +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/top_level.txt +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/bin/release +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/infra-tests/test_run_remote.yaml +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/infra-tests/turtlesim2/launch_turtle.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/infra-tests/turtlesim2/sample_node.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/pyproject.toml +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/pytest.ini +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/scripts/whats_latest.rb +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/setup.cfg +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/blob/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/blob/test_compression.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/blob/test_dir_crawl.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/containers/__init__.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/containers/test_docker.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/containers/test_utils.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/core/test_code_environment.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_app_auth.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_app_project.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_cli.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_config_validation.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_download.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_init.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_other.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_parameters.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_pytest.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_reporter.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_ros2.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_signals.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_utils.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_utils_ros.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_warp.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_warp_run.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/conftest.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/artefacts-env-param.yaml +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/artefacts.yaml.template +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/artefacts_deprecated.yaml +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/bad_launch_test.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/sample_pytest_file.py +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/test_junit.xml +0 -0
- {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/utils/docker_mock.py +0 -0
|
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.16.0] - 2026-04-08
|
|
11
|
+
|
|
10
12
|
### Added
|
|
11
13
|
|
|
12
14
|
- New command `artefacts download` to list and download artifacts from job runs (#347)
|
|
@@ -299,7 +301,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
299
301
|
- Local metrics errors do not block publication of results.
|
|
300
302
|
- Introduction of Black formatting.
|
|
301
303
|
|
|
302
|
-
[unreleased]: https://github.com/art-e-fact/artefacts-client/compare/0.
|
|
304
|
+
[unreleased]: https://github.com/art-e-fact/artefacts-client/compare/0.16.0...HEAD
|
|
305
|
+
[0.16.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.16.0
|
|
306
|
+
[0.15.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.15.0
|
|
303
307
|
[0.14.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.14.0
|
|
304
308
|
[0.13.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.13.0
|
|
305
309
|
[0.12.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.12.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: artefacts_cli
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.2
|
|
4
4
|
Author-email: FD <fabian@artefacts.com>, AGC <alejandro@artefacts.com>, TN <tomo@artefacts.com>, EP <eric@artefacts.com>
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/art-e-fact/artefacts-client
|
|
@@ -259,8 +259,8 @@ def run(
|
|
|
259
259
|
|
|
260
260
|
api_conf = APIConf(project, __version__, jobname)
|
|
261
261
|
api_key = api_conf.api_key
|
|
262
|
-
|
|
263
|
-
if
|
|
262
|
+
access_token = api_conf.access_token
|
|
263
|
+
if access_token is None and not is_valid_api_key(api_key):
|
|
264
264
|
raise click.ClickException(
|
|
265
265
|
localise(
|
|
266
266
|
"Invalid API key for {project}: A key must be a non-empty string".format(
|
|
@@ -280,7 +280,7 @@ def run(
|
|
|
280
280
|
# Hidden settings primarily useful to Artefacts developers
|
|
281
281
|
api_url=os.environ.get("ARTEFACTS_API_URL", DEFAULT_API_URL),
|
|
282
282
|
api_key=api_key,
|
|
283
|
-
|
|
283
|
+
access_token=access_token,
|
|
284
284
|
engine_args=list(engine_args),
|
|
285
285
|
code_state=code_env.get_state(),
|
|
286
286
|
code_reference=code_env.get_reference(),
|
|
@@ -170,13 +170,8 @@ def create_project_cmd(name: str):
|
|
|
170
170
|
data = response.parsed
|
|
171
171
|
click.secho(localise("Project created!"), fg="green", bold=True)
|
|
172
172
|
click.echo()
|
|
173
|
-
click.echo(
|
|
174
|
-
|
|
175
|
-
)
|
|
176
|
-
click.echo(
|
|
177
|
-
localise(" Project: {project}").format(project=data.project.name)
|
|
178
|
-
)
|
|
179
|
-
click.echo(localise(" API Key: {key}").format(key=data.api_key))
|
|
173
|
+
click.echo(localise(" Organization: {org}").format(org=data.organization))
|
|
174
|
+
click.echo(localise(" Project: {project}").format(project=data.name))
|
|
180
175
|
click.echo()
|
|
181
176
|
click.echo(localise("Add this to your artefacts.yaml:"))
|
|
182
177
|
click.secho(f" project: {org}/{project_name}", fg="cyan")
|
|
@@ -48,17 +48,20 @@ class APIConf:
|
|
|
48
48
|
profile = {}
|
|
49
49
|
|
|
50
50
|
self.api_url = get_artefacts_api_url(profile)
|
|
51
|
+
access_token_from_env = os.environ.get("ARTEFACTS_ACCESS_TOKEN")
|
|
51
52
|
|
|
52
53
|
# Check for OAuth access token first (from `artefacts login`).
|
|
53
|
-
#
|
|
54
|
-
oauth_token =
|
|
54
|
+
# ARTEFACTS_ACCESS_TOKEN is injected by the host when running in-container.
|
|
55
|
+
oauth_token = access_token_from_env or get_access_token()
|
|
55
56
|
if oauth_token:
|
|
56
57
|
auth_type = "Bearer"
|
|
57
|
-
self.
|
|
58
|
+
self.access_token = oauth_token
|
|
59
|
+
self._refreshable_access_auth = access_token_from_env is None
|
|
58
60
|
self.headers = {"Authorization": f"{auth_type} {oauth_token}"}
|
|
59
61
|
self.api_key = None
|
|
60
62
|
else:
|
|
61
|
-
self.
|
|
63
|
+
self.access_token = None
|
|
64
|
+
self._refreshable_access_auth = False
|
|
62
65
|
# Fall back to API key
|
|
63
66
|
self.api_key = os.environ.get("ARTEFACTS_KEY", profile.get("ApiKey", None))
|
|
64
67
|
|
|
@@ -156,7 +159,22 @@ class APIConf:
|
|
|
156
159
|
),
|
|
157
160
|
)
|
|
158
161
|
|
|
162
|
+
def _refresh_access_auth(self) -> None:
|
|
163
|
+
if not self._refreshable_access_auth:
|
|
164
|
+
return
|
|
165
|
+
|
|
166
|
+
token = get_access_token()
|
|
167
|
+
if not token or token == self.access_token:
|
|
168
|
+
return
|
|
169
|
+
|
|
170
|
+
self.access_token = token
|
|
171
|
+
self.headers["Authorization"] = f"Bearer {token}"
|
|
172
|
+
self.client = self.client.with_headers(
|
|
173
|
+
{"Authorization": self.headers["Authorization"]}
|
|
174
|
+
)
|
|
175
|
+
|
|
159
176
|
def sdk(self, cmd, handle_errors: bool = True, **cmd_kwargs) -> SdkResponse:
|
|
177
|
+
self._refresh_access_auth()
|
|
160
178
|
try:
|
|
161
179
|
response = cmd.sync_detailed(client=self.client, **cmd_kwargs)
|
|
162
180
|
|
|
@@ -217,6 +235,7 @@ class APIConf:
|
|
|
217
235
|
|
|
218
236
|
@contextmanager
|
|
219
237
|
def _api(self):
|
|
238
|
+
self._refresh_access_auth()
|
|
220
239
|
try:
|
|
221
240
|
yield self.session
|
|
222
241
|
except ConnectionError as e:
|
|
@@ -389,6 +408,7 @@ class APIConf:
|
|
|
389
408
|
without the context extras (as this returns and so exits
|
|
390
409
|
the context).
|
|
391
410
|
"""
|
|
411
|
+
self._refresh_access_auth()
|
|
392
412
|
return partial(
|
|
393
413
|
getattr(self.session, verb),
|
|
394
414
|
headers=self.headers,
|
|
@@ -43,7 +43,7 @@ class CMgr:
|
|
|
43
43
|
jobname: Optional[str] = None,
|
|
44
44
|
artefacts_dir: Union[str, Path] = Path("~/.artefacts").expanduser(),
|
|
45
45
|
api_url: str = DEFAULT_API_URL,
|
|
46
|
-
|
|
46
|
+
access_token: Optional[str] = None,
|
|
47
47
|
with_gui: bool = False,
|
|
48
48
|
) -> Tuple[Any, Iterator]:
|
|
49
49
|
"""
|
|
@@ -79,7 +79,7 @@ class DockerManager(CMgr):
|
|
|
79
79
|
artefacts_dir: Union[str, Path] = Path("~/.artefacts").expanduser(),
|
|
80
80
|
api_url: str = DEFAULT_API_URL,
|
|
81
81
|
api_key: Optional[str] = None,
|
|
82
|
-
|
|
82
|
+
access_token: Optional[str] = None,
|
|
83
83
|
with_gui: bool = False,
|
|
84
84
|
engine_args: Optional[list] = None,
|
|
85
85
|
code_state: Optional[str] = None,
|
|
@@ -101,8 +101,8 @@ class DockerManager(CMgr):
|
|
|
101
101
|
if description:
|
|
102
102
|
env["ARTEFACTS_DESCRIPTION"] = description
|
|
103
103
|
|
|
104
|
-
if
|
|
105
|
-
env["
|
|
104
|
+
if access_token:
|
|
105
|
+
env["ARTEFACTS_ACCESS_TOKEN"] = access_token
|
|
106
106
|
else:
|
|
107
107
|
env["ARTEFACTS_KEY"] = api_key or self._get_artefacts_api_key(
|
|
108
108
|
project, artefacts_dir
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.16.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 16,
|
|
21
|
+
__version__ = version = '0.16.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 16, 2)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gabcf69e03'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: artefacts_cli
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.2
|
|
4
4
|
Author-email: FD <fabian@artefacts.com>, AGC <alejandro@artefacts.com>, TN <tomo@artefacts.com>, EP <eric@artefacts.com>
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/art-e-fact/artefacts-client
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Script to print the current development release version to stdout
|
|
5
|
+
|
|
6
|
+
Aimed at being used in shell scripts, typically CI on GHA.
|
|
7
|
+
|
|
8
|
+
Logic:
|
|
9
|
+
* Use x.y.z semver
|
|
10
|
+
* Return x.(y+1).0
|
|
11
|
+
* Never save anything (SISO approach, aka idempotent)
|
|
12
|
+
|
|
13
|
+
Example:
|
|
14
|
+
0.16.1.dev12 -> 0.17.0
|
|
15
|
+
0.16.1-pre.2+build.4 -> 0.17.0
|
|
16
|
+
0.16.1 -> 0.17.0
|
|
17
|
+
0.16.0 -> 0.17.0
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from setuptools_scm import get_version
|
|
21
|
+
import semver
|
|
22
|
+
|
|
23
|
+
last_known = get_version()
|
|
24
|
+
last_known = last_known.split(".")
|
|
25
|
+
v = ".".join(last_known[0:3])
|
|
26
|
+
v = semver.Version.parse(v)
|
|
27
|
+
|
|
28
|
+
print(f"{v.major}.{v.minor + 1}.0.{'.'.join(last_known[3:])}")
|
|
@@ -58,4 +58,4 @@ def test_container_run_with_oauth_token(
|
|
|
58
58
|
assert result.exit_code == 0
|
|
59
59
|
handler.run.assert_called_once()
|
|
60
60
|
assert handler.run.call_args.kwargs["api_key"] is None
|
|
61
|
-
assert handler.run.call_args.kwargs["
|
|
61
|
+
assert handler.run.call_args.kwargs["access_token"] == "test-token"
|
|
@@ -228,3 +228,41 @@ def test_put_invalid_json_error_converted_to_click_error(
|
|
|
228
228
|
)
|
|
229
229
|
with pytest.raises(ClickException, match=expected):
|
|
230
230
|
sut.update("url", "id", None)
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def test_sdk_refreshes_access_token_before_request(
|
|
234
|
+
monkeypatch, mocker, valid_project_settings
|
|
235
|
+
):
|
|
236
|
+
tokens = iter(["stale-token", "fresh-token"])
|
|
237
|
+
monkeypatch.setattr("artefacts.cli.config.get_access_token", lambda: next(tokens))
|
|
238
|
+
|
|
239
|
+
response = mocker.Mock()
|
|
240
|
+
response.status_code = 200
|
|
241
|
+
command = mocker.Mock()
|
|
242
|
+
command.sync_detailed.return_value = response
|
|
243
|
+
|
|
244
|
+
sut = APIConf(valid_project_settings["full_project_name"], "test_version")
|
|
245
|
+
sut.sdk(command)
|
|
246
|
+
|
|
247
|
+
assert sut.headers["Authorization"] == "Bearer fresh-token"
|
|
248
|
+
assert command.sync_detailed.call_args.kwargs["client"]._headers[
|
|
249
|
+
"Authorization"
|
|
250
|
+
] == ("Bearer fresh-token")
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def test_sdk_keeps_env_access_token(monkeypatch, mocker, valid_project_settings):
|
|
254
|
+
monkeypatch.setenv("ARTEFACTS_ACCESS_TOKEN", "env-token")
|
|
255
|
+
monkeypatch.setattr("artefacts.cli.config.get_access_token", lambda: "fresh-token")
|
|
256
|
+
|
|
257
|
+
response = mocker.Mock()
|
|
258
|
+
response.status_code = 200
|
|
259
|
+
command = mocker.Mock()
|
|
260
|
+
command.sync_detailed.return_value = response
|
|
261
|
+
|
|
262
|
+
sut = APIConf(valid_project_settings["full_project_name"], "test_version")
|
|
263
|
+
sut.sdk(command)
|
|
264
|
+
|
|
265
|
+
assert sut.headers["Authorization"] == "Bearer env-token"
|
|
266
|
+
assert command.sync_detailed.call_args.kwargs["client"]._headers[
|
|
267
|
+
"Authorization"
|
|
268
|
+
] == ("Bearer env-token")
|
|
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
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/framework/list_frameworks.py
RENAMED
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/framework/list_simulators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/get_artifact_downloads.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/post_update_job_results.py
RENAMED
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/put_update_job_results.py
RENAMED
|
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
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/projects/api_create_project.py
RENAMED
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/projects/api_list_projects.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/user/get_user_organizations.py
RENAMED
|
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
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_remote_response.py
RENAMED
|
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
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/list_projects_response.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/register_run_tests_item.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_metrics.py
RENAMED
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_response.py
RENAMED
|
File without changes
|
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_tests_item.py
RENAMED
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_uploads.py
RENAMED
|
File without changes
|
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/upload_source_response.py
RENAMED
|
File without changes
|
|
File without changes
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/user_organizations_response.py
RENAMED
|
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
|
{artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/locales/ja_JP/LC_MESSAGES/artefacts.po
RENAMED
|
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
|