Skip to content

JFMIG-88 - Replace data-transfer plugin with GET/PUT streaming in transfer-files - #1629

Merged
amithins merged 1 commit into
jfrog:masterfrom
amithins:JFMIG-88-get-put-cutover
Nov 4, 2026
Merged

amithins merged 1 commit into
jfrog:masterfrom
amithins:JFMIG-88-get-put-cutover

Conversation

@amithins

@amithins amithins commented Nov 4, 2026

Copy link
Copy Markdown
Collaborator
  • All tests passed. If this feature is not already covered by the tests, I added new tests.
  • All static analysis checks passed.
  • This pull request is on the master branch.
  • I used gofmt for formatting the code before submitting the pull request.

Summary

Replaces the data-transfer plugin path of jf rt transfer-files with a direct GET -> PUT streaming transfer: files are read from the source Artifactory and written to the target by the CLI, so no plugin has to be installed on the source.

Included (JFMIG-88, JFMIG-93):

  • Source client and target client for the streaming path
  • GET/PUT streaming file transfer and its wiring into transfer-files
  • Plugin cleanup, including removal of the transferinstall package and the plugin installer
  • --proxy-key restored as a bare proxy key, looked up in the source Artifactory's proxy configuration (api/system/configuration/platform/proxies). The resolved proxy is used only for requests to the target, never for source requests, and must be reachable from the CLI host.
  • Fix for the over-broad cocoapods/swift generated-file filter
  • Fixes for silent data loss and hangs in GET/PUT transfer-files

Notes for reviewers

Testing

  • go build ./..., go vet ./artifactory/... and go test ./artifactory/commands/transferfiles/... ./artifactory/commands/utils/... pass on this branch.
  • E2E on two live Artifactory 7.171.2 instances with a jf built from this branch plus jfrog-cli#3747, full and delta transfers of generic, maven, npm and pypi repos (239 files, about 201 MB, including a 120 MB file): exit 0, no errors or warnings, no calls to the data-transfer plugin endpoints in the debug log, and file counts, sizes, sha256 and properties match. Only server-generated metadata differs (maven-metadata.xml, npm index JSON, npm.disttag vs npm.detachedtags).
  • Not covered: Docker repos, remote repositories / --proxy-key paths. Files deleted on the source are not removed from the target (not compared against the plugin-based behavior). The source server used in the E2E still had the plugin loaded, so independence from it is shown by the absence of plugin calls, not by the plugin being absent.

…nsfer-files

transfer-files now reads files from the source Artifactory and writes them to
the target directly from the CLI, so no plugin is installed on the source.

- Add source and target clients and the GET/PUT streaming file transfer,
  wired into transfer-files
- Remove the data-transfer plugin path, including the transferinstall package
  and the plugin installer (JFMIG-93)
- Restore --proxy-key as a target-only HTTP proxy URL
- Fix silent data loss and hangs in GET/PUT transfer-files (JFMIG-93)
- Treat folder-info's missing size field as 0, fix the over-broad
  cocoapods/swift generated-file filter, and apply gofmt to proxy.go
@amithins
amithins deployed to build-gate November 4, 2026 04:58 — with GitHub Actions Active
@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

👍 Frogbot scanned this pull request and did not find any new security issues.


@amithins
amithins merged commit 89d932e into jfrog:master Nov 4, 2026
13 checks passed

This branch was successfully deployed

1 active deployment
build-gate — 0c0d44e1 Deployed Nov 4, 2026 by amithins via gate #173
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants