Skip to content

feat(competitions): add host-add command - #1168

Merged
bovard merged 4 commits into
mainfrom
feat/competition-host-add
Aug 11, 2026
Merged

feat(competitions): add host-add command#1168
bovard merged 4 commits into
mainfrom
feat/competition-host-add

test(competitions): assert host-add confirmation prompt text

7f81d73
Select commit
Loading
Failed to load commit list.
Google Cloud Build / kaggle-cli-branch-3-11-15 (kaggle-cicd) succeeded Aug 11, 2026 in 1m 27s

Summary

Build Information

Trigger kaggle-cli-branch-3-11-15
Build 64a815aa-fabf-41aa-89e4-1109c74b083b
Start 2026-08-11T10:44:05-07:00
Duration 1m24.474s
Status SUCCESS

Steps

Step Status Duration
check_substitutions SUCCESS 24.827s
build-hatch-image SUCCESS 1.404s
tests SUCCESS 50.679s
lint SUCCESS 42.858s
download-secrets SUCCESS 7.018s
integration-tests SUCCESS 28.11s

Details

starting build "64a815aa-fabf-41aa-89e4-1109c74b083b"

FETCHSOURCE
From https://github.com/Kaggle/kaggle-cli
 * branch            7f81d739d2fbca9f85c4ed617f502d48a8f05bc1 -> FETCH_HEAD
HEAD is now at 7f81d73 test(competitions): assert host-add confirmation prompt text
GitCommit:
7f81d739d2fbca9f85c4ed617f502d48a8f05bc1
BUILD
Starting Step #0 - "check_substitutions"
Starting Step #4 - "download-secrets"
Step #0 - "check_substitutions": Already have image (with digest): gcr.io/cloud-builders/docker
Step #4 - "download-secrets": Already have image (with digest): gcr.io/cloud-builders/gcloud
Step #0 - "check_substitutions": 3.11.15: Pulling from kaggle-cicd/tools/cli-builder
Step #0 - "check_substitutions": 1da3cb2f93f2: Pulling fs layer
Step #0 - "check_substitutions": 68b64c51cda3: Pulling fs layer
Step #0 - "check_substitutions": ec935196e6a0: Pulling fs layer
Step #0 - "check_substitutions": d74736caedd4: Pulling fs layer
Step #0 - "check_substitutions": a6d590218bc2: Pulling fs layer
Step #0 - "check_substitutions": a8f50fb62c65: Pulling fs layer
Step #0 - "check_substitutions": 435560346717: Pulling fs layer
Step #0 - "check_substitutions": 3de10a71c663: Pulling fs layer
Step #0 - "check_substitutions": 062c1ccc4694: Pulling fs layer
Step #0 - "check_substitutions": 435560346717: Waiting
Step #0 - "check_substitutions": 3de10a71c663: Waiting
Step #0 - "check_substitutions": 062c1ccc4694: Waiting
Step #0 - "check_substitutions": a6d590218bc2: Verifying Checksum
Step #0 - "check_substitutions": a6d590218bc2: Download complete
Step #0 - "check_substitutions": 435560346717: Verifying Checksum
Step #0 - "check_substitutions": 435560346717: Download complete
Step #0 - "check_substitutions": 68b64c51cda3: Verifying Checksum
Step #0 - "check_substitutions": 68b64c51cda3: Download complete
Step #0 - "check_substitutions": a8f50fb62c65: Verifying Checksum
Step #0 - "check_substitutions": a8f50fb62c65: Download complete
Step #0 - "check_substitutions": 3de10a71c663: Verifying Checksum
Step #0 - "check_substitutions": 3de10a71c663: Download complete
Step #0 - "check_substitutions": 1da3cb2f93f2: Verifying Checksum
Step #0 - "check_substitutions": 1da3cb2f93f2: Download complete
Step #0 - "check_substitutions": ec935196e6a0: Download complete
Step #0 - "check_substitutions": 062c1ccc4694: Verifying Checksum
Step #0 - "check_substitutions": 062c1ccc4694: Download complete
Step #0 - "check_substitutions": d74736caedd4: Verifying Checksum
Step #0 - "check_substitutions": d74736caedd4: Download complete
Step #0 - "check_substitutions": 1da3cb2f93f2: Pull complete
Finished Step #4 - "download-secrets"
Step #0 - "check_substitutions": 68b64c51cda3: Pull complete
Step #0 - "check_substitutions": ec935196e6a0: Pull complete
Step #0 - "check_substitutions": d74736caedd4: Pull complete
Step #0 - "check_substitutions": a6d590218bc2: Pull complete
Step #0 - "check_substitutions": a8f50fb62c65: Pull complete
Step #0 - "check_substitutions": 435560346717: Pull complete
Step #0 - "check_substitutions": 3de10a71c663: Pull complete
Step #0 - "check_substitutions": 062c1ccc4694: Pull complete
Step #0 - "check_substitutions": Digest: sha256:305f2e96dfec0fccb9419edae7f8ba2068bfa718106584660519c2cc98f68ac6
Step #0 - "check_substitutions": Status: Downloaded newer image for us-docker.pkg.dev/kaggle-cicd/tools/cli-builder:3.11.15
Step #0 - "check_substitutions": us-docker.pkg.dev/kaggle-cicd/tools/cli-builder:3.11.15
Finished Step #0 - "check_substitutions"
Starting Step #1 - "build-hatch-image"
Step #1 - "build-hatch-image": Already have image (with digest): gcr.io/cloud-builders/docker
Step #1 - "build-hatch-image": Sending build context to Docker daemon  6.656kB

Step #1 - "build-hatch-image": Step 1/5 : ARG PYTHON_VERSION
Step #1 - "build-hatch-image": Step 2/5 : FROM python:${PYTHON_VERSION}
Step #1 - "build-hatch-image": 3.11.15: Pulling from library/python
Step #1 - "build-hatch-image": 1da3cb2f93f2: Already exists
Step #1 - "build-hatch-image": 68b64c51cda3: Already exists
Step #1 - "build-hatch-image": ec935196e6a0: Already exists
Step #1 - "build-hatch-image": d74736caedd4: Already exists
Step #1 - "build-hatch-image": a6d590218bc2: Already exists
Step #1 - "build-hatch-image": a8f50fb62c65: Already exists
Step #1 - "build-hatch-image": 435560346717: Already exists
Step #1 - "build-hatch-image": Digest: sha256:d0199e2a90bf7a206a485b115323a75bc946f30b463d704c5435a454aca084dd
Step #1 - "build-hatch-image": Status: Downloaded newer image for python:3.11.15
Step #1 - "build-hatch-image":  ---> a7c6a86c35ba
Step #1 - "build-hatch-image": Step 3/5 : RUN python -m pip install --upgrade pip
Step #1 - "build-hatch-image":  ---> Using cache
Step #1 - "build-hatch-image":  ---> 7b8a0b71deff
Step #1 - "build-hatch-image": Step 4/5 : RUN python -m pip install hatch==1.16.5
Step #1 - "build-hatch-image":  ---> Using cache
Step #1 - "build-hatch-image":  ---> 9cb7303c9e71
Step #1 - "build-hatch-image": Step 5/5 : ENTRYPOINT ["hatch"]
Step #1 - "build-hatch-image":  ---> Using cache
Step #1 - "build-hatch-image":  ---> 5a555e151568
Step #1 - "build-hatch-image": Successfully built 5a555e151568
Step #1 - "build-hatch-image": Successfully tagged us-docker.pkg.dev/kaggle-cicd/tools/cli-builder:3.11.15
Finished Step #1 - "build-hatch-image"
Starting Step #5 - "integration-tests"
Starting Step #3 - "lint"
Starting Step #2 - "tests"
Step #3 - "lint": Already have image (with digest): us-docker.pkg.dev/kaggle-cicd/tools/cli-builder:3.11.15
Step #5 - "integration-tests": Already have image (with digest): us-docker.pkg.dev/kaggle-cicd/tools/cli-builder:3.11.15
Step #2 - "tests": Already have image (with digest): us-docker.pkg.dev/kaggle-cicd/tools/cli-builder:3.11.15
Step #5 - "integration-tests": Creating environment: test
Step #2 - "tests": Creating environment: test
Step #3 - "lint": Creating environment: lint
Step #5 - "integration-tests": Installing project in development mode
Step #2 - "tests": Installing project in development mode
Step #3 - "lint": Checking dependencies
Step #3 - "lint": Syncing dependencies
Step #3 - "lint": cmd [1] | black --check --diff .
Step #3 - "lint": Skipping .ipynb files as Jupyter dependencies are not installed.
Step #3 - "lint": You can fix this by running ``pip install "black[jupyter]"``
Step #5 - "integration-tests": Checking dependencies
Step #5 - "integration-tests": Syncing dependencies
Step #2 - "tests": Checking dependencies
Step #2 - "tests": Syncing dependencies
Step #5 - "integration-tests": ============================= test session starts ==============================
Step #5 - "integration-tests": platform linux -- Python 3.11.15, pytest-9.1.1, pluggy-1.6.0
Step #5 - "integration-tests": rootdir: /workspace
Step #5 - "integration-tests": configfile: pyproject.toml
Step #5 - "integration-tests": plugins: cov-7.1.0
Step #5 - "integration-tests": collected 2 items
Step #5 - "integration-tests": 
Step #5 - "integration-tests": tests/integration/test_models.py ..                                      [100%]
Step #5 - "integration-tests": 
Step #5 - "integration-tests": ============================== 2 passed in 1.35s ===============================
Finished Step #5 - "integration-tests"
Step #2 - "tests": ============================= test session starts ==============================
Step #2 - "tests": platform linux -- Python 3.11.15, pytest-9.1.1, pluggy-1.6.0
Step #2 - "tests": rootdir: /workspace
Step #2 - "tests": configfile: pyproject.toml
Step #2 - "tests": testpaths: tests/unit
Step #2 - "tests": plugins: cov-7.1.0
Step #2 - "tests": collected 1288 items
Step #2 - "tests": 
Step #2 - "tests": tests/unit/test_authenticate.py ......                                   [  0%]
Step #2 - "tests": tests/unit/test_benchmarks_cli.py ...................................... [  3%]
Step #2 - "tests": ........................................................................ [  9%]
Step #3 - "lint": All done! ✨ 🍰 ✨
Step #3 - "lint": 70 files would be left unchanged.
Step #3 - "lint": cmd [2] | mypy --install-types --non-interactive src/kaggle tests
Step #2 - "tests": ........................................................................ [ 14%]
Step #2 - "tests": ........................................................................ [ 20%]
Step #2 - "tests": ..................................................                       [ 24%]
Step #2 - "tests": tests/unit/test_benchmarks_leaderboard.py ............                   [ 25%]
Step #2 - "tests": tests/unit/test_benchmarks_quota.py ..........                           [ 25%]
Step #2 - "tests": tests/unit/test_cli_benchmarks.py ................................       [ 28%]
Step #2 - "tests": tests/unit/test_cli_commands.py ..............                           [ 29%]
Step #3 - "lint": Collecting types-PySocks
Step #3 - "lint":   Downloading types_pysocks-1.7.1.20260518-py3-none-any.whl.metadata (1.7 kB)
Step #3 - "lint": Collecting types-PyYAML
Step #3 - "lint":   Downloading types_pyyaml-6.0.12.20260724-py3-none-any.whl.metadata (1.7 kB)
Step #3 - "lint": Collecting types-Pygments
Step #3 - "lint":   Downloading types_pygments-2.20.0.20260728-py3-none-any.whl.metadata (2.1 kB)
Step #3 - "lint": Collecting types-bleach
Step #3 - "lint":   Downloading types_bleach-6.4.0.20260728-py3-none-any.whl.metadata (1.8 kB)
Step #3 - "lint": Collecting types-pexpect
Step #3 - "lint":   Downloading types_pexpect-4.9.0.20260518-py3-none-any.whl.metadata (1.7 kB)
Step #3 - "lint": Collecting types-protobuf
Step #3 - "lint":   Downloading types_protobuf-7.34.1.20260518-py3-none-any.whl.metadata (2.2 kB)
Step #3 - "lint": Collecting types-python-dateutil
Step #3 - "lint":   Downloading types_python_dateutil-2.9.0.20260807-py3-none-any.whl.metadata (1.9 kB)
Step #3 - "lint": Collecting types-six
Step #3 - "lint":   Downloading types_six-1.17.0.20260724-py3-none-any.whl.metadata (1.7 kB)
Step #3 - "lint": Collecting types-html5lib (from types-bleach)
Step #3 - "lint":   Downloading types_html5lib-1.1.11.20260518-py3-none-any.whl.metadata (1.8 kB)
Step #3 - "lint": Collecting types-webencodings (from types-html5lib->types-bleach)
Step #3 - "lint":   Downloading types_webencodings-0.5.0.20260408-py3-none-any.whl.metadata (1.8 kB)
Step #3 - "lint": Downloading types_pysocks-1.7.1.20260518-py3-none-any.whl (9.6 kB)
Step #3 - "lint": Downloading types_pyyaml-6.0.12.20260724-py3-none-any.whl (20 kB)
Step #3 - "lint": Downloading types_pygments-2.20.0.20260728-py3-none-any.whl (29 kB)
Step #3 - "lint": Downloading types_bleach-6.4.0.20260728-py3-none-any.whl (12 kB)
Step #3 - "lint": Downloading types_pexpect-4.9.0.20260518-py3-none-any.whl (17 kB)
Step #3 - "lint": Downloading types_protobuf-7.34.1.20260518-py3-none-any.whl (85 kB)
Step #3 - "lint": Downloading types_python_dateutil-2.9.0.20260807-py3-none-any.whl (18 kB)
Step #3 - "lint": Downloading types_six-1.17.0.20260724-py3-none-any.whl (19 kB)
Step #3 - "lint": Downloading types_html5lib-1.1.11.20260518-py3-none-any.whl (24 kB)
Step #3 - "lint": Downloading types_webencodings-0.5.0.20260408-py3-none-any.whl (8.7 kB)
Step #3 - "lint": Installing collected packages: types-webencodings, types-six, types-PyYAML, types-python-dateutil, types-PySocks, types-Pygments, types-protobuf, types-pexpect, types-html5lib, types-bleach
Step #3 - "lint": 
Step #3 - "lint": Successfully installed types-PySocks-1.7.1.20260518 types-PyYAML-6.0.12.20260724 types-Pygments-2.20.0.20260728 types-bleach-6.4.0.20260728 types-html5lib-1.1.11.20260518 types-pexpect-4.9.0.20260518 types-protobuf-7.34.1.20260518 types-python-dateutil-2.9.0.20260807 types-six-1.17.0.20260724 types-webencodings-0.5.0.20260408
Step #3 - "lint": 
Step #3 - "lint": [notice] A new release of pip is available: 26.2 -> 26.2.1
Step #3 - "lint": [notice] To update, run: pip install --upgrade pip
Step #2 - "tests": tests/unit/test_cli_competitions.py .................................... [ 32%]
Step #2 - "tests": .........................                                                [ 34%]
Step #2 - "tests": tests/unit/test_cli_datasets.py ............................             [ 36%]
Step #2 - "tests": tests/unit/test_cli_errors.py ..............                             [ 37%]
Step #2 - "tests": tests/unit/test_cli_forums.py .......                                    [ 37%]
Step #3 - "lint": Installing missing stub packages:
Step #3 - "lint": /builder/home/lint/.local/share/hatch/env/virtual/kaggle/xS3fZVNL/lint/bin/python -m pip install types-PySocks types-PyYAML types-Pygments types-bleach types-pexpect types-protobuf types-python-dateutil types-six
Step #3 - "lint": 
Step #3 - "lint": 
Step #3 - "lint": Success: no issues found in 69 source files
Step #3 - "lint": src/kaggle/models/upload_file.py:128: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
Step #3 - "lint": src/kaggle/api/kaggle_api_extended.py:3266: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
Step #3 - "lint": src/kaggle/api/kaggle_api_extended.py:8016: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
Step #3 - "lint": src/kaggle/api/kaggle_api_extended.py:8491: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
Step #3 - "lint": tests/unit/test_upload_helpers.py:362: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
Step #3 - "lint": tests/unit/test_kernels_push.py:275: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
Step #3 - "lint": tests/backend/backend_tests.py:288: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
Finished Step #3 - "lint"
Step #2 - "tests": tests/unit/test_cli_kernels.py ..............................            [ 40%]
Step #2 - "tests": tests/unit/test_cli_main.py ..........                                   [ 40%]
Step #2 - "tests": tests/unit/test_cli_models.py .......................................... [ 44%]
Step #2 - "tests": .                                                                        [ 44%]
Step #2 - "tests": tests/unit/test_cli_pagination.py .......                                [ 44%]
Step #2 - "tests": tests/unit/test_cli_search.py ......                                     [ 45%]
Step #2 - "tests": tests/unit/test_competition_add_host.py ............                     [ 46%]
Step #2 - "tests": tests/unit/test_competition_create.py ............                       [ 47%]
Step #2 - "tests": tests/unit/test_competition_create_page.py ........                      [ 47%]
Step #2 - "tests": tests/unit/test_competition_create_solution.py ..........                [ 48%]
Step #2 - "tests": tests/unit/test_competition_data_update.py ................              [ 49%]
Step #2 - "tests": tests/unit/test_competition_delete_page.py ........                      [ 50%]
Step #2 - "tests": tests/unit/test_competition_launch.py .........                          [ 51%]
Step #2 - "tests": tests/unit/test_competition_list_hosts.py ........                       [ 51%]
Step #2 - "tests": tests/unit/test_competition_settings_get.py ........                     [ 52%]
Step #2 - "tests": tests/unit/test_competition_settings_update.py ..................        [ 53%]
Step #2 - "tests": tests/unit/test_competition_solution_status.py ............              [ 54%]
Step #2 - "tests": tests/unit/test_competition_submission_download.py .........             [ 55%]
Step #2 - "tests": tests/unit/test_competition_submission_limits.py ........                [ 56%]
Step #2 - "tests": tests/unit/test_competition_submit.py ................                   [ 57%]
Step #2 - "tests": tests/unit/test_competition_submit_wait.py .....................         [ 58%]
Step #2 - "tests": tests/unit/test_competition_update_page.py ............                  [ 59%]
Step #2 - "tests": tests/unit/test_competitions_list.py .............                       [ 60%]
Step #2 - "tests": tests/unit/test_dataset_create.py ............................           [ 63%]
Step #2 - "tests": tests/unit/test_dataset_delete.py ..                                     [ 63%]
Step #2 - "tests": tests/unit/test_dataset_download.py ........                             [ 63%]
Step #2 - "tests": tests/unit/test_dataset_list.py ................                         [ 65%]
Step #2 - "tests": tests/unit/test_dataset_metadata_update.py ............                  [ 65%]
Step #2 - "tests": tests/unit/test_dataset_status.py ..............                         [ 67%]
Step #2 - "tests": tests/unit/test_discussions_cli.py ..................................... [ 69%]
Step #2 - "tests": ..........................................................               [ 74%]
Step #2 - "tests": tests/unit/test_download_resume.py ..................                    [ 75%]
Step #2 - "tests": tests/unit/test_help_version_auth.py ..........                          [ 76%]
Step #2 - "tests": tests/unit/test_http_client.py ...                                       [ 76%]
Step #2 - "tests": tests/unit/test_ignore_patterns.py ....                                  [ 77%]
Step #2 - "tests": tests/unit/test_kernel_parsing.py .......                                [ 77%]
Step #2 - "tests": tests/unit/test_kernels_logs.py .......................                  [ 79%]
Step #2 - "tests": tests/unit/test_kernels_pull.py .........                                [ 80%]
Step #2 - "tests": tests/unit/test_kernels_push.py .................                        [ 81%]
Step #2 - "tests": tests/unit/test_model_create.py ........................................ [ 84%]
Step #2 - "tests": .............                                                            [ 85%]
Step #2 - "tests": tests/unit/test_model_delete.py ......                                   [ 86%]
Step #2 - "tests": tests/unit/test_model_download.py ...........                            [ 86%]
Step #2 - "tests": tests/unit/test_model_list.py ...........                                [ 87%]
Step #2 - "tests": tests/unit/test_parse_duration.py ...................                    [ 89%]
Step #2 - "tests": tests/unit/test_quota.py ..........                                      [ 90%]
Step #2 - "tests": tests/unit/test_retry_after.py .......................                   [ 91%]
Step #2 - "tests": tests/unit/test_search.py ....................................           [ 94%]
Step #2 - "tests": tests/unit/test_tar_extraction_safety.py ...                             [ 94%]
Step #2 - "tests": tests/unit/test_team_submissions.py ........                             [ 95%]
Step #2 - "tests": tests/unit/test_upload_helpers.py ...................................... [ 98%]
Step #2 - "tests": ....................                                                     [100%]
Step #2 - "tests": 
Step #2 - "tests": =============================== warnings summary ===============================
Step #2 - "tests": tests/unit/test_benchmarks_cli.py:827
Step #2 - "tests":   /workspace/tests/unit/test_benchmarks_cli.py:827: DeprecationWarning: invalid escape sequence '\('
Step #2 - "tests":     with patch("time.sleep"), pytest.raises(ValueError, match="run\(s\) failed"):
Step #2 - "tests": 
Step #2 - "tests": -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
Step #2 - "tests": ======================= 1288 passed, 1 warning in 23.84s =======================
Finished Step #2 - "tests"
PUSH
Pushing us-docker.pkg.dev/kaggle-cicd/tools/cli-builder:3.11.15
The push refers to repository [us-docker.pkg.dev/kaggle-cicd/tools/cli-builder]
d625ef4fc589: Preparing
be185d1c4105: Preparing
564572da079f: Preparing
a3febc6e4083: Preparing
a56591f400b5: Preparing
a471fb04aa22: Preparing
ff650be09e8c: Preparing
bfbbad6e30bd: Preparing
035cd7d3804a: Preparing
a471fb04aa22: Layer already exists
ff650be09e8c: Layer already exists
a56591f400b5: Layer already exists
a3febc6e4083: Layer already exists
035cd7d3804a: Layer already exists
d625ef4fc589: Layer already exists
be185d1c4105: Layer already exists
bfbbad6e30bd: Layer already exists
564572da079f: Layer already exists
3.11.15: digest: sha256:305f2e96dfec0fccb9419edae7f8ba2068bfa718106584660519c2cc98f68ac6 size: 2219
DONE

Build Log: https://console.cloud.google.com/cloud-build/builds/64a815aa-fabf-41aa-89e4-1109c74b083b?project=464139560241