From 48d865fb40b46bb02f7728342eae87b00555ada9 Mon Sep 17 00:00:00 2001 From: Chizkiyahu Raful <37312901+Chizkiyahu@users.noreply.github.com> Date: Tue, 31 Oct 2023 22:33:04 +0200 Subject: [PATCH] rebase PR 27 (#30) don't fails if pkg name not exist Co-authored-by: maleo --- README.md | 10 +++++----- clean_ghcr.py | 31 +++++++++++++++++++------------ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 2d82bcf..14662a0 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ delete all / untagged ghcr containers in a repository - name: Delete all containers from package without tags uses: Chizkiyahu/delete-untagged-ghcr-action@v2 with: - token: ${{ secrets.PAT_TOKEN }} + token: ${{ github.token }} repository_owner: ${{ github.repository_owner }} repository: ${{ github.repository }} package_name: the-package-name @@ -145,12 +145,12 @@ delete all / untagged ghcr containers in a repository uses: docker/login-action@v2 with: registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.PAT_TOKEN }} + username: ${{ github.repository_owner }} + password: ${{ github.token }} - name: Delete all containers from package without tags uses: Chizkiyahu/delete-untagged-ghcr-action@v2 with: - token: ${{ secrets.PAT_TOKEN }} + token: ${{ github.token }} repository_owner: ${{ github.repository_owner }} repository: ${{ github.repository }} package_name: the-package-name @@ -164,7 +164,7 @@ delete all / untagged ghcr containers in a repository - name: Delete all containers from package uses: Chizkiyahu/delete-untagged-ghcr-action@v2 with: - token: ${{ secrets.PAT_TOKEN }} + token: ${{ github.token }} repository_owner: ${{ github.repository_owner }} repository: ${{ github.repository }} package_name: the-package-name diff --git a/clean_ghcr.py b/clean_ghcr.py index 1742ef0..ffd27d2 100644 --- a/clean_ghcr.py +++ b/clean_ghcr.py @@ -1,5 +1,6 @@ import json import subprocess +import urllib.parse import requests import argparse @@ -38,23 +39,33 @@ def get_req(path, params=None): if "per_page" not in params: params["per_page"] = PER_PAGE url = get_url(path) - another_page = True result = [] - while another_page: + while True: response = requests.get(url, headers=get_base_headers(), params=params) if not response.ok: raise Exception(response.text) result.extend(response.json()) - if "next" in response.links: - url = response.links["next"]["url"] - if "page" in params: - del params["page"] - else: - another_page = False + + if "next" not in response.links: + break + url = response.links["next"]["url"] + if "page" in params: + del params["page"] return result def get_list_packages(owner, repo_name, owner_type, package_name): + if package_name: + clean_package_name = urllib.parse.quote(package_name, safe='') + url = get_url( + f"/{owner_type}s/{owner}/packages/container/{clean_package_name}") + response = requests.get(url, headers=get_base_headers()) + if not response.ok: + if response.status_code == 404: + return [] + raise Exception(response.text) + return [response.json()] + all_org_pkg = get_req( f"/{owner_type}s/{owner}/packages?package_type=container") if repo_name: @@ -62,10 +73,6 @@ def get_list_packages(owner, repo_name, owner_type, package_name): pkg for pkg in all_org_pkg if pkg.get("repository") and pkg["repository"]["name"].lower() == repo_name ] - if package_name: - all_org_pkg = [ - pkg for pkg in all_org_pkg if pkg["name"] == package_name - ] return all_org_pkg