Commit Graph

16 Commits

Author SHA1 Message Date
Anthony Oteri bfd0598684 fix: resolve CI check failures
- Replace serde_yml with serde_norway (RUSTSEC-2025-0068: serde_yml is
  unsound and archived; serde_norway is the recommended maintained fork)
- Remove unused toml dependency (was resolving to v1.1.2 which requires
  edition2024/Rust 1.85, breaking the MSRV 1.80 check)
- Run cargo fmt to fix formatting diffs caught by lint job
- Fix cog commit check to use from_latest_tag so pre-conventional-commits
  history does not cause the check to fail
- Remove semver job: dredge is a binary-only crate with no lib target,
  cargo-semver-checks cannot check it
2026-05-13 14:24:32 -04:00
Anthony Oteri 5031866876 refactor: simplify codebase and fix correctness issues
- api: extract check_api_version_header() helper, eliminating duplicated
  header-checking logic in parse_response_status()
- api: simplify parse_rfc5988() using split_once and let-else
- api: propagate JSON decode errors in fetch_paginated() instead of
  silently swallowing them
- api: add connect/request timeouts via a shared build_client() helper;
  all handlers now use a configured client instead of reqwest::get()
- api: fix stale log trace name get_manifest -> get_digest
- commands: promote inline response structs to module-level for clarity
- commands: fix etag stripping logic (was using wrong quote/apostrophe
  pattern; now correctly strips RFC 7232 double-quotes)
- commands: simplify iterator chains in catalog/tags handlers
- error: simplify ResponseHeaderParseError from Box<dyn Error> to String
- main: fix stale log trace name make_registry_url -> parse_registry_arg
- main: use as_deref().unwrap_or() instead of allocating via to_owned()
- cli: remove unused imports and #![allow(unused_imports)] attribute
2026-05-13 14:01:18 -04:00
Anthony Oteri 0e4219b405 Change License
This changes the effective license from a simple Apache-2.0 license to a
dual license consisting of both Apache-2.0 and the MIT license to be more
compatible for use in GPL Code.

The MIT license requires reproducing countless copies of the same copyright
header with diffferent names in the copyright field, for every MIT library
in use.  The Apache license does not have this drawback.  However, this is not
the primary motivation for creating these issues.  The Apache license also has
protections from patent trolls and explicit contribuition licensing clause.
However the Apache license is incompatible with GPLv2.  This is why Rust is
dual-licensed as MIT/Apache (the "primary" license being Apache, MIT only for
GPLv2 compat), and doing so would be wise for this project.  This also makes
this crate suitable for inclusion and unrestricted sharing in the Rust
standard distribution and other projects using dual MIT/Apache.
2023-10-03 09:36:43 -04:00
Anthony Oteri fbe43f03f1 Support deleting an image tag
If the Docker Registry API allows for images to be deleted, issuing the
command `delete <image> <tag>` will result in the tag being removed from
the server.

A limitation of this change is that it will cause any unreferenced tags
to become orphaned, requiring the garbage collector within the docker
registry server to clean these up.  This is because there is no way to
efficiently determine if each of the layers are reused by other tags or
images on the server.

Implement delete logic

Fix broken unit tests
2023-09-29 18:04:08 -04:00
Anthony Oteri 13ae092b91 Replace femme logger with simple_logger 2023-09-29 15:05:23 -04:00
Anthony Oteri 86c82b2f76 Support detail view of a tagged image
Running the `dredge <REGISTRY> show <image> <tag>` now responds
with additional output in the form:

```yaml
name: foobar
tag: latest
architecture: amd64
fsLayers:
- blobSum: sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
- blobSum: sha256:d4228a16bba21ff0eabab548df8f4933103d1a83e5894216c7eb32e3058a8e5e
- blobSum: sha256:1f25ec90921b9d511541f9d38ce2b339de2afffc586e55d75b7345b2057f1993
- blobSum: sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
- blobSum: sha256:7d97e254a0461b0a30b3f443f1daa0d620a3cc6ff4e2714cc1cfd96ace5b7a7e
digest: sha256:0259571889ac87efbfca5b79a0abe9baf626d058ec5f9a5744bace2229d9ed50
etag: sha256:0259571889ac87efbfca5b79a0abe9baf626d058ec5f9a5744bace2229d9ed50
```
2023-09-27 10:09:52 -04:00
Anthony Oteri a6cd95bfa4 Add unit tests for existing commands 2023-09-26 16:09:52 -04:00
Anthony Oteri 031ea891ec Run automated code cleanup 2023-09-21 16:18:44 -04:00
Anthony Oteri cead0006a4 Miscellaneous code cleanup 2023-09-21 15:56:34 -04:00
Anthony Oteri 535e08e9bb Support for specifying the URL on the command line 2023-09-21 15:34:19 -04:00
Anthony Oteri 3156a9f99e Fix clippy security errors 2023-09-21 14:28:15 -04:00
Anthony Oteri 6199848e23 Add Required Copyright header to source files 2023-09-18 14:16:09 -04:00
Anthony Oteri b9d34e7614 Add support for listing image tags 2023-09-18 14:01:21 -04:00
Anthony Oteri 9445c9e817 Add API Version check endpoint 2023-09-14 10:03:10 -04:00
Anthony Oteri 957b0bb2cc Apply consistent formatting with cargo-fmt 2023-09-13 21:45:37 -04:00
Anthony Oteri 7b0c3f1dcc Create initial project structure
The initial project structure includes the base scaffolding of the
application as well as the ability to fetch the repo list from the
remote endpoint.
2023-09-13 17:37:28 -04:00