Skip to content

Instantly share code, notes, and snippets.

@antongrbin
Created September 5, 2023 09:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save antongrbin/d6f080c35507e8a8a8ea6ef8feb6ebf3 to your computer and use it in GitHub Desktop.
Save antongrbin/d6f080c35507e8a8a8ea6ef8feb6ebf3 to your computer and use it in GitHub Desktop.
"""
Tested with
open:
https://github.com/noom/noom-contracts/packages/1308388?version=0.0.202203161449%2Bgite39d112992986cad9e26962e5d75014d875c9d98
run:
delete_version(PACKAGE_NAME, "0.0.202203161449+gite39d112992986cad9e26962e5d75014d875c9d98", 17554764)
open:
https://github.com/noom/noom-contracts/packages/1308388?version=0.0.202203161449%2Bgite39d112992986cad9e26962e5d75014d875c9d98
The removed old noom-contracts and noom-contracts-android versions:
"""
import requests
import os
import re
def get_all_pages(url, headers):
all_data = []
while url:
response = requests.get(url, headers=headers)
response.raise_for_status()
all_data.extend(response.json())
print(f"{len(all_data)} versions loaded..")
# Check Link header for next page
if 'next' in response.links:
url = response.links['next']['url']
else:
url = None
return all_data
def delete_version(package_name, version_name, version_id, headers):
delete_url = f"https://api.github.com/orgs/noom/packages/maven/{package_name}/versions/{version_id}"
delete_response = requests.delete(delete_url, headers=headers)
delete_response.raise_for_status()
print(f"Successfully deleted {package_name} {version_name} {version_id}.")
def delete_matching_packages(token, package_name, headers, dry_run):
versions = get_all_pages(
f"https://api.github.com/orgs/noom/packages/maven/{package_name}/versions?per_page=100",
headers)
for version in versions:
version_name = version['name']
version_id = version['id']
if should_delete_version(version_name):
if DRY_RUN:
print(f"Would delete {package_name} {version_name} {version_id}.")
else:
delete_version(package_name, version_name, version_id, headers)
def get_timestamp_from_version_name(version_name):
if "+" in version_name:
version_name = version_name.split("+")[0]
if version_name.startswith("0.0."):
version_name = version_name[4:]
return version_name
def should_delete_version(version_name):
pr_deploy = ("+" in version_name)
timestamp = get_timestamp_from_version_name(version_name)
return pr_deploy and timestamp < "202303050000"
if __name__ == "__main__":
GITHUB_TOKEN = os.environ["GITHUB_PACKAGES_DELETE_TOKEN"]
PACKAGE_NAME = "com.noom.noom-contracts"
PACKAGE_NAME_ANDROID = "com.noom.noom-contracts-android"
HEADERS = {
"Authorization": f"token {GITHUB_TOKEN}",
"Accept": "application/vnd.github.v3+json"
}
DRY_RUN=False
assert "202309042199" == get_timestamp_from_version_name("202309042199+gitcd37940fb8b4ee1de628a2cfad71e604b433436d")
assert "202309042199" == get_timestamp_from_version_name("202309042199")
assert "202309042199" == get_timestamp_from_version_name("0.0.202309042199+gitcd37940fb8b4ee1de628a2cfad71e604b433436d")
assert "202309042199" == get_timestamp_from_version_name("0.0.202309042199")
assert not should_delete_version("0.0.202009042199")
assert not should_delete_version("202009042199")
assert should_delete_version("0.0.202009042199+git123")
assert should_delete_version("202009042199+git123")
delete_matching_packages(GITHUB_TOKEN, PACKAGE_NAME, HEADERS, DRY_RUN)
delete_matching_packages(GITHUB_TOKEN, PACKAGE_NAME_ANDROID, HEADERS, DRY_RUN)
# delete_version(PACKAGE_NAME, "0.0.202203161449+gite39d112992986cad9e26962e5d75014d875c9d98", 17554764, HEADERS)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment