gif-header

✨ Prune container images in a CLI way ✨

Semantic Release
Commitizen friendly
GitHub repo size
Gitpod Ready-to-Code


gif-about

Prune old images on GitHub (ghcr.io) and GitLab (registry.gitlab.com) Container Registry

Getting Started   |   
Description   |   
Usage   |   
Demo   |   
Installation   |   
Concepts   |   
Versioning


➤ Getting Started

If you want contribute on this project, first you need to make a git clone:

  1. git clone –depth 1 https://github.com/ghcr-prune.git -b main

This will give you access to the code on your local machine.

➤ Description

Considerations about GitHub:

  • A user can have a list of packages.
    • Each package have a type: [container, maven, npm].
    • Each package have versions.
      • Each version of a package can have a name.
      • Each version of a package can be tagged or not.

Considerations about GitLab:

  • GitLab uses a modularized organization with group and project concepts.
    • Group is a collection on projects and sub-groups.
    • Project is a git repository.
  • GitLab organize te package idea between:
    • Package Registry
    • Container Registry
    • Infrastructure Registry
    • Dependency Proxy.
  • In this case we focus in the Container Registry.
    • You can view the Container Registry for a project or group.
    • Go to Packages & Registries > Container Registry.
    • Only members of the project or group can access a private project’s Container Registry.
    • Images follow this naming convention: <registry URL>/<namespace>/<project>/<image>
    • A namespace is a name of group or project.

➤ Usage

Environment Description
GH_TOKEN GitHub API Token
GH_USERNAME GitHub User/Organization Name
GH_CONTAINER GitHub Container Name
GL_TOKEN GitLab API Token
GL_NAMESPACE GitLab Namespace

GitHub

drprune gh images -t $GH_TOKEN -n <username> -c <container-name>
drprune gh insights -t $GH_TOKEN -n <username>

GitLab

drprune gl images -t $GL_TOKEN -ns <namespace>
drprune gl insights -t $GL_TOKEN -ns <namespace>

➤ Demo

Insert demo here!

➤ Installation

go get -u github.com/lpmatos/drprune/cmd/drprune

or

go get -v ./...

➤ Concepts

Cobra

Cobra is a CLI framework for Golang. Using it you can speed up your development and creating a powerful and modern CLI application. Cobra is built on a structure of commands, arguments and flags:

  • Commands represent actions.
  • Args are things.
  • Flags are modifiers for those actions.

The best applications will read like sentences when used. Users will know how to use the application because they will natively understand how to use it. This pattern is: APPCLI VERB NOUN --ADJECTIVE or APPCLI COMMAND ARG --FLAG. A few good real world examples may better illustrate this point:

git clone URL --bare

or

hugo server --port=1313

Commands

Command is the central point of the application. Each interaction thar the application supports will be contained in a command. We can create commands with children commands and optionally run an action. In the example above, server is the command.

Flags

A flag is a way to modify the behavior of a command. Cobra supports fully POSIX-compliant flags as well the Go flag package. A Cobra command can define flags that persist through to children commands and flags that are only available to that command. In the example above, port is the flag.

➤ Author

? Hey!! If you like this project or if you find some bugs feel free to contact me in my channels:

➤ Versioning

To check the change history, please access the CHANGELOG.md file.

➤ Learnings

  • Create a Golang CLI application.
  • Create a multistage Golang Dockerfile.
  • Create a docker-compose file with waiting entrypoint.
  • Setup a Golang Releaser publish pipeline using github actions.
  • Understand how GiHub works with packages.
  • Understand how GitLab works with packages.
  • Handler operations in GitHub API to delete container images using a SDK.
  • Handler operations in GitLab API to delete container images using a SDK.

➤ Project status

Currently the project is constantly being updated! ?

➤ Donations

If my work has impacted your life in a positive way and you’d like to buy me a coffee (or a hundred), that’d be much appreciated!


BTC Address


LTC Address

➤ Show your support

Give me a ⭐️ if this project helped you!

gif-header

Made with ? by me ? inspired on readme-md-generator

GitHub

View Github