Skip to content

fix extract for oci files#529

Merged
zackbradys merged 2 commits intohauler-dev:mainfrom
amartin120:fix-extract
Mar 10, 2026
Merged

fix extract for oci files#529
zackbradys merged 2 commits intohauler-dev:mainfrom
amartin120:fix-extract

Conversation

@amartin120
Copy link
Copy Markdown
Contributor

@amartin120 amartin120 commented Mar 10, 2026

Please check below, if the PR fulfills these requirements:

  • Commit(s) and code follow the repositories guidelines.
  • Test(s) have been added or updated to support these change(s).
  • Doc(s) have been added or updated to support these change(s).

Associated Links:

Types of Changes:

  • bugfix for v2 codebase

Proposed Changes:

  • v2 was not able to hauler store extract certain custom media-typed OCI artifacts pulled from a registry.

Verification/Testing of Changes:

  • pre change: (showed success but the file didn't end up in local fs.
❯ hauler store extract rgcrprod.azurecr.us/rancher/rke2/rke2-binary:v1.32.3-rke2r1
2026-03-10 08:23:07 INF extracted [application/vnd.oci.image.manifest.v1+json] from store with digest [sha256:7fcf5c04edb68ca4f34ccc5eb23544eb57c8720e7bfafcc06fc00b78e3b2c911]
2026-03-10 08:23:07 INF extracted [application/vnd.oci.image.manifest.v1+json] from store with digest [sha256:5ac44c2ac0ad92295e46e8f93f1f2b3eb5976c000191f73c2bc494dc837583a3]

❯ ls -la rke2.linux-amd64                                                                                                                                                                                                   
ls: rke2.linux-amd64: No such file or directory
  • post change: (properly extracted the file)
❯ ./dist/hauler_darwin_arm64_v8.0/hauler store extract rgcrprod.azurecr.us/rancher/rke2/rke2-binary:v1.32.3-rke2r1
2026-03-10 08:26:13 INF extracted [application/vnd.oci.image.manifest.v1+json] from store with digest [sha256:7fcf5c04edb68ca4f34ccc5eb23544eb57c8720e7bfafcc06fc00b78e3b2c911]
2026-03-10 08:26:13 INF extracted [application/vnd.oci.image.manifest.v1+json] from store with digest [sha256:5ac44c2ac0ad92295e46e8f93f1f2b3eb5976c000191f73c2bc494dc837583a3]

❯ ls -la rke2.linux-amd64
-rw-r--r--@ 1 amartin  staff  121094504 Mar 10 08:26 rke2.linux-amd64

Additional Context:

Signed-off-by: Adam Martin <[email protected]>
@github-project-automation github-project-automation Bot moved this to To Triage in Hauler Mar 10, 2026
@amartin120 amartin120 added bug Something isn't working go Pull requests that update go code size/S Denotes an issue/PR requiring a relatively small amount of work labels Mar 10, 2026
@amartin120 amartin120 self-assigned this Mar 10, 2026
@amartin120 amartin120 modified the milestone: Hauler v2.0.0 Mar 10, 2026
@zackbradys zackbradys requested review from a team and Copilot March 10, 2026 14:19
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes hauler store extract for OCI artifacts that use custom layer media types (but still use standard OCI/Docker image config media types), ensuring titled layers are written to disk instead of being silently discarded.

Changes:

  • Update FromManifest to route OCI/Docker-config manifests to Files() when layer AnnotationTitle is present, otherwise keep Images() behavior.
  • Introduce a DefaultCatchAll mapper key plus a Default() mapper for unknown config types (write blobs by title or digest).
  • Update the file-store pusher to fall back to the catch-all mapper and to treat "" filenames as “discard”.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
internal/mapper/mappers.go Adds title-based selection logic, introduces DefaultCatchAll + Default() catch-all mapper, and extends Files() with a catch-all for custom layer media types.
internal/mapper/filestore.go Adds catch-all mapper fallback during push and discards descriptors when mapper returns an empty filename.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread internal/mapper/filestore.go
Comment thread internal/mapper/mappers.go
@github-project-automation github-project-automation Bot moved this from To Triage to Testing in Hauler Mar 10, 2026
@zackbradys zackbradys merged commit 0dd1896 into hauler-dev:main Mar 10, 2026
3 of 4 checks passed
@github-project-automation github-project-automation Bot moved this from Testing to Resolved in Hauler Mar 10, 2026
zackbradys added a commit that referenced this pull request Apr 8, 2026
* fix: handling of file referenced dependencies without repository field (#514)

co-authored-by: devleitner <[email protected]>

* bump go.opentelemetry.io/otel/sdk (#520)

bumps the go_modules group with 1 update in the / directory: [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go).

updates `go.opentelemetry.io/otel/sdk` from 1.39.0 to 1.40.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-go@v1.39.0...v1.40.0)

---

updated-dependencies:
- dependency-name: go.opentelemetry.io/otel/sdk
  dependency-version: 1.40.0
  dependency-type: indirect
  dependency-group: go_modules

...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* dev.md file (#521)

* smaller changes and updates for v1.4.2 release (#524)

* smaller changes and updates for v1.4.2 release
* removed unused env variable

* over-"haul": replace oras v1 and cosign fork with native containerd-based implementation (#515)

* remove oras from hauler

Signed-off-by: Adam Martin <[email protected]>

* remove cosign fork and use upstream cosign for verification

Signed-off-by: Adam Martin <[email protected]>

* added support for oci referrers

Signed-off-by: Adam Martin <[email protected]>

* updated README.md projects list

Signed-off-by: Adam Martin <[email protected]>

* updates for copilot PR review

Signed-off-by: Adam Martin <[email protected]>

* bug fix for unsafe type assertions

Signed-off-by: Adam Martin <[email protected]>

* bug fix for http getter and dead code

Signed-off-by: Adam Martin <[email protected]>

* fixes for more clarity and better error handling

Signed-off-by: Adam Martin <[email protected]>

* bug fix for resource leaks and unchecked errors

Signed-off-by: Adam Martin <[email protected]>

* bug fix for rewrite logic for docker.io images due to cosign removal

Signed-off-by: Adam Martin <[email protected]>

* bug fix for sigs and referrers

Signed-off-by: Adam Martin <[email protected]>

* bug fix for index.json missing mediatype

Signed-off-by: Adam Martin <[email protected]>

* bug fix to make sure manifest.json doesnt include anything other than actual container images

Signed-off-by: Adam Martin <[email protected]>

---------

Signed-off-by: Adam Martin <[email protected]>

* bump github.com/docker/cli in the go_modules group across 1 directory (#526)

bumps the go_modules group with 1 update in the / directory: [github.com/docker/cli](https://github.com/docker/cli).


updates `github.com/docker/cli` from 29.0.3+incompatible to 29.2.0+incompatible
- [Commits](docker/cli@v29.0.3...v29.2.0)

---

updated-dependencies:
- dependency-name: github.com/docker/cli
  dependency-version: 29.2.0+incompatible
  dependency-type: indirect
  dependency-group: go_modules

...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* removed deprecated code (#528)

* removed deprecated code
* removed all supported for v1alpha1

* fix extract for oci files (#529)

* fix extract for oci files

Signed-off-by: Adam Martin <[email protected]>

* have extract guard against path traversal

Signed-off-by: Adam Martin <[email protected]>

---------

Signed-off-by: Adam Martin <[email protected]>

* improved test coverage (#530)

* improved test coverage

Signed-off-by: Adam Martin <[email protected]>

* adjusted mapper_test for oddball oci files

Signed-off-by: Adam Martin <[email protected]>

---------

Signed-off-by: Adam Martin <[email protected]>

* adjust extract to handle an image index appropriately (#531)

* adjust extract to handle images and image indices appropriately

Signed-off-by: Adam Martin <[email protected]>

* updates for review feedback

Signed-off-by: Adam Martin <[email protected]>

---------

Signed-off-by: Adam Martin <[email protected]>

* fix dockerhub default host bug (#534)

Signed-off-by: Adam Martin <[email protected]>

* adjust hauler's kind annotation to not reflect cosign (#535)

Signed-off-by: Adam Martin <[email protected]>

* bump google.golang.org/grpc in the go_modules group across 1 directory (#536)

bumps the go_modules group with 1 update in the / directory: [google.golang.org/grpc](https://github.com/grpc/grpc-go).

updates `google.golang.org/grpc` from 1.78.0 to 1.79.3
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.78.0...v1.79.3)

---

updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.79.3
  dependency-type: indirect
  dependency-group: go_modules

...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* add cherry-pick workflow for release branches (#533)

this workflow automates cherry-picking changes from merged pull requests to specified release branches based on comments... it handles permission checks, version parsing, and conflict resolution during the cherry-pick process.

Signed-off-by: Camryn Carter <[email protected]>

* images.txt testdata file (#539)

* fix keep registry logic (#537)

* fixed keep registry logic
* trim library/
* updated test
* test updates

* option to sync images.txt files natively (#538)

* sync images.txt files
* test worklflow sync w image list
* images.txt

* chunk the haul (#519)

* chunk the haul
* validate numeric suffix on join
* enforce valid chunk size
* containerd warning
* updated test.go files

* bump github.com/go-jose/go-jose/v4 (#542)

bumps the go_modules group with 1 update in the / directory: [github.com/go-jose/go-jose/v4](https://github.com/go-jose/go-jose).


updates `github.com/go-jose/go-jose/v4` from 4.1.3 to 4.1.4

- [Release notes](https://github.com/go-jose/go-jose/releases)
- [Commits](go-jose/go-jose@v4.1.3...v4.1.4)

---

updated-dependencies:
- dependency-name: github.com/go-jose/go-jose/v4
  dependency-version: 4.1.4
  dependency-type: indirect
  dependency-group: go_modules

...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* allow multiple prefix references (#532)

* allow multiple prefix references
* fixed some duplications

* add optional flag for excluding extra artifacts when pulling from a registry (#541)

* add optional flag for excluding extra artifacts when pulling from a registry

Signed-off-by: Adam Martin <[email protected]>

* add optional flag to charts for excluding extra artifacts when pulling from a registry

Signed-off-by: Adam Martin <[email protected]>

---------

Signed-off-by: Adam Martin <[email protected]>

---------

Signed-off-by: dependabot[bot] <[email protected]>
Signed-off-by: Adam Martin <[email protected]>
Signed-off-by: Camryn Carter <[email protected]>
Co-authored-by: devLeitner <[email protected]>
Co-authored-by: devleitner <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Camryn Carter <[email protected]>
Co-authored-by: Adam Martin <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working go Pull requests that update go code size/S Denotes an issue/PR requiring a relatively small amount of work

Projects

Status: Resolved

Development

Successfully merging this pull request may close these issues.

3 participants