Skip to content

Issue 4656 pin run pod images by docker image digest - #4660

Merged
SilinPavel merged 11 commits into
developfrom
issue_4656/pin_run_image_digest
Nov 6, 2026
Merged

SilinPavel merged 11 commits into
developfrom
issue_4656/pin_run_image_digest

Conversation

@sidoruka

@sidoruka sidoruka commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Implements #4656

Behind the new system preference launch.docker.image.pin.digest (off by default), a launched or restarted run resolves the digest its docker image tag points to, stores it as actualDockerImageDigest, and its pod is created with <repo>@sha256:..., keeping the tag in the docker_image annotation. The preference is read only when a run is created, a resume always uses the tag (the pause commits the container under it), and a run's container is found by its name, so switching the preference never affects runs that already exist. The digest is shown at the run's pages in the GUI and by pipe view-runs <id>.

The commits are split by area: API and core, GUI, CLI, docs, and the manual UI test cases (docs/testcases/UI/Run_tools_in_sandbox/4656_digest_pinning, 4656_1 to 4656_7, indexed in GUI_tests.md). The cases follow the live test: the preference default, the digest shown and equal to the version digest, pause and resume keeping the run changes, commit, a run launched before the switch-on, switching off with pinned runs running, and a rerun after the tag moved.

Decided while implementing: a digest that cannot be resolved falls back to the tag, with a warning; a restart resolves the digest again rather than reusing the original one; cluster workers resolve their own digest (inheriting the parent's is not done); the digest is not indexed for the global search.

Test plan

  • :api:test, the whole suite, against PostgreSQL 16.4 as in CI: 4133 tests, 0 failures. After the review fixes, the changed test classes (99 tests) and the Spring and DAO tests that launch, restart and archive runs (151 tests) again
  • :core:test, :notifier:smtp:test, and checkstyle and PMD of api and core
  • client: npm test (267 tests) and npm run lint (no new problems)
  • pipe-cli: the new tests/test_view_run_docker_image.py; tests/test_pipe.py, tests/test_storage_operations.py and tests/api fail the same 10 tests as on develop
  • Live on a dev sandbox (Kubernetes 1.15.4 on AWS), with the preference off, on, and off again: launch, commit, pause and resume, container size and network limit of runs launched before and after each switch; a run launched after the tag was moved gets the new digest while a running pinned run keeps its own; a pinned run resumes with the tag, from the image its pause saved
  • Restart of a spot run, live: blocked by Spot run restart from PodMonitor fails with NullPointerException: no current user #4658 (the restart fails before the launch on develop too)
  • The GUI in a browser: the sandbox serves no UI; the CLI was checked against the run payload of the live API
  • Two resumes on the sandbox lost their node to the autoscaler after the pod had been created with the tag: Resuming a paused run can lose its node: the autoscaler scales it down before the pod starts #4659, not related to this change

Found while testing: #4657, #4658, #4659.

🤖 Generated with Claude Code

sidoruka and others added 4 commits October 15, 2026 09:29
Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>
Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>
Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>
Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>
@sidoruka sidoruka added the intel/artificial 🤖 Items created by/with a help of AI agents label Oct 15, 2026
Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>
Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>
@rodichenko

Copy link
Copy Markdown
Contributor

f0f1ec3: the GUI check for whether a run has a docker image digest is now the hasDockerImageDigest helper in client/src/components/runs/utilities/docker-image-digest.js. Both Log.js and RunDockerImageDigest use it, so Log.js no longer imports a component from run-details/. Log.js now shows the digest as plain text, like the rows next to it. Nothing changes for the user.

Checks: npm test (269 tests passed) and npm run lint (no new problems).

🤖 Generated with Claude Code

@rodichenko rodichenko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GUI: OK

@sidoruka
sidoruka requested a review from SilinPavel November 4, 2026 11:26
SilinPavel and others added 3 commits November 5, 2026 11:23
* Issue 4664 allow a custom default version for a tool

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 set, show and use the default version of a tool in the GUI

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 launch the default version of a tool from pipe run

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 preselect the default version of a tool in the VS Code extension

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Docs: Issue 4664 describe the default version of a tool

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 add UI testcases for the default version of a tool

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 fix the spacing and wording of the default version messages

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 update the UI testcases affected by the default version of a tool

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 do not push the latest version on commit into a tool with a default version

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Docs: Issue 4664 describe a commit into a tool with a default version

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 warn that deleting another version of the default version's image deletes the default one

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 expect the deletion warning in the testcase of another version of the default version's image

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Docs: Issue 4664 the deletion warning for another version of the default version's image

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 GUI: use the default version for a pool image without a tag and the launch form settings, drop stale default settings, name the fallback version in the deletion warning

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Docs: Issue 4664 the version used once the default version is deleted

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 testcases for the deletion warning of the default version of a tool without the latest version

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>

* Issue 4664 default tool version: refactor

---------

Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>
Co-authored-by: Mikhail Rodichenko <Mikhail_Rodichenko@epam.com>
Co-authored-by: Pavel Silin <pavel_silin@epam.com>
@SilinPavel
SilinPavel marked this pull request as ready for review November 6, 2026 12:06
rodichenko and others added 2 commits November 6, 2026 15:08
Co-authored-by: Cloud Pipeline Agent (Claude Opus 5.5) <noreply@epam.com>
@SilinPavel
SilinPavel merged commit 1dc2b10 into develop Nov 6, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

intel/artificial 🤖 Items created by/with a help of AI agents

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants