{"id":20008637,"url":"https://github.com/whysobad/abwart","last_synced_at":"2025-09-20T01:33:07.730Z","repository":{"id":214350848,"uuid":"732502636","full_name":"WhySoBad/abwart","owner":"WhySoBad","description":"Housekeeper for your docker registry which adds support for retention policies","archived":false,"fork":false,"pushed_at":"2024-09-20T20:44:33.000Z","size":236,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-13T07:11:01.036Z","etag":null,"topics":["docker","docker-registry","docker-registry-v2","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WhySoBad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-16T22:12:00.000Z","updated_at":"2024-09-27T18:15:52.000Z","dependencies_parsed_at":"2024-02-15T14:29:00.281Z","dependency_job_id":"3d4a6b30-ccc9-4d3b-9acd-0faf9097e9ca","html_url":"https://github.com/WhySoBad/abwart","commit_stats":null,"previous_names":["whysobad/abwart"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WhySoBad%2Fabwart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WhySoBad%2Fabwart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WhySoBad%2Fabwart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WhySoBad%2Fabwart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WhySoBad","download_url":"https://codeload.github.com/WhySoBad/abwart/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233613273,"owners_count":18702775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-registry","docker-registry-v2","rust"],"created_at":"2024-11-13T07:11:02.008Z","updated_at":"2025-09-20T01:33:02.330Z","avatar_url":"https://github.com/WhySoBad.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# abwart\n\nabwart is a blazing fast housekeeper for your docker container registry written in rust.\n\nYou are selfhosting a docker registry and don't want to waste resources to images you no longer need? You prefer the lightweight nature of the\n `registry` container registry over other solutions? Then abwart may be of interest for you!\nIt offers the functionality to add retention policies to your registry with easy-to-use configuration methods.\n\nFeatures of abwart:\n* Easily configurable over container labels or a static configuration file with hot reloading\n* Support for multiple fine-grained rules on a per-registry basis\n* Support for default policies on a per-registry basis\n* Support for docker registry and OCI images\n* Support for docker registries with http basic authentication or without any authentication\n* Automatic garbage collection inside the registry after tag deletion or with independent cleanup schedule\n* Easily deployable using docker\n* Support for multiple docker registries (who needs this?) with a single deployment\n\n## Installation\n\nThe abwart docker image is hosted in the github container registry and can be run like this:\n```shell\ndocker run -v /var/run/docker.sock:/var/run/docker.sock:ro ghcr.io/whysobad/abwart\n```\n\n## Example\n\n```yaml\nversion: '3.8'\n\nservices:\n  registry:\n    image: registry:2.8.3\n    labels:\n      abwart.enable: true\n      # override the default tag revision count for images matching the `weekend` rule \n      abwart.rule.weekend.revisions: 2\n      # only run the policies of the `weekend` rule in the weekend at midnight\n      abwart.rule.weekend.schedule: 0 0 0 * * Sun,Sat\n      # apply policies of the `weekend` rule to all images matching the regex pattern\n      abwart.rule.weekend.image.pattern: \\w+-(alpha|beta)\n      # only keep 10 revisions of all images stored in the registry by default\n      abwart.default.revisions: 10\n      # apply policies every day at midnight UTC by default\n      abwart.default.schedule: 0 0 0 * * *\n      # run the garbage collector every day at 01:00 o'clock UTC independent of any rules\n      abwart.cleanup: 0 0 1 * * *\n\n  abwart:\n    image: ghcr.io/whysobad/abwart\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n```\n\nFor more policies available have a look at the [docs](docs/index.md)\n\n## Contributing\n\nYou're missing a policy after which images/tags could be matched, you have an idea for this project, or you simply want to contribute? Feel free\nto open a new issue or contribute to an open issue! \n\n**PS**: The code for the policies is very modular which should enable an easy addition/modification of policies.\n\n## TODOs\n- [ ] Add tests to `Instance`\n- [x] Run tests in GitHub Actions\n- [x] Publish a new image to ghcr when a new tag is created\n- [x] Add static configuration file which takes priority over label configuration. The file should have hot reload\n- [x] Add docs\n- [x] Add configuration whether the garbage collector should be run inside the container\n- [x] Add tests to rule parsing and rule affections\n- [ ] Add ping to registry container in instance creation\n- [x] Add policy to match tags by pattern\n- [x] Add policy to match tags by size\n\n## Credits\n\nThe initial idea for this project comes from [deckschrubber](https://github.com/fraunhoferfokus/deckschrubber)\n\nThe idea for using labels for the configuration and the syntax of the rule labels is heavily inspired by [traefik](https://github.com/traefik/traefik)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhysobad%2Fabwart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhysobad%2Fabwart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhysobad%2Fabwart/lists"}