Package Cleanup #200
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Package Cleanup | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: '0 0 * * *' # Run every day at 24:00 | |
jobs: | |
delete-myget-pkgs: | |
name: Delete Old MyGet Packages | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
- name: Install Requests | |
run: pip install requests | |
- name: Install Packaging | |
run: pip install packaging | |
- name: Delete versions below 3.6.1 | |
env: | |
MYGET_FEED: 'neo' | |
PACKAGE_NAMES: 'Neo.SmartContract.Framework,Neo.SmartContract.Testing' | |
MYGET_API_KEY: ${{ secrets.MYGET_TOKEN }} | |
run: | | |
import requests | |
from packaging import version | |
import os | |
def get_versions(feed, package_name, api_key): | |
url = f"https://www.myget.org/F/{feed}/api/v2/Packages?$select=Version&$filter=Id eq '{package_name}'&$format=json" | |
headers = {'Accept': 'application/json'} | |
response = requests.get(url, headers=headers) | |
if response.status_code == 200: | |
versions = response.json()['d']['results'] | |
return [ver['Version'] for ver in versions] | |
else: | |
return [] | |
def delete_version(feed, package_name, ver, api_key): | |
url = f"https://www.myget.org/F/{feed}/api/v2/package/{package_name}/{ver}?hardDelete=true" | |
headers = {"X-NuGet-ApiKey": api_key} | |
response = requests.delete(url, headers=headers) | |
return response.status_code == 200 # Success | |
feed = os.environ['MYGET_FEED'] | |
package_names = os.environ['PACKAGE_NAMES'].split(',') | |
api_key = os.environ['MYGET_API_KEY'] | |
for package_name in package_names: | |
versions_to_delete = get_versions(feed, package_name, api_key) | |
for ver in versions_to_delete: | |
if version.parse(ver.split("-", 1)[0]) >= version.Version("3.6.1"): | |
print(f"Omited {ver} of package {package_name}.") | |
continue | |
if delete_version(feed, package_name, ver, api_key): | |
print(f"Deleted version {ver} of package {package_name}.") | |
else: | |
print(f"Failed to delete version {ver} of package {package_name}.") | |
shell: python | |
delete-git-pkgs: | |
name: Delete Old Github Packages | |
runs-on: ubuntu-latest | |
steps: | |
- name: Delete Neo.SmartContract.Testing Package | |
uses: actions/delete-package-versions@v4 | |
with: | |
package-name: Neo.SmartContract.Testing | |
package-type: nuget | |
min-versions-to-keep: 3 | |
delete-only-pre-release-versions: "true" | |
token: "${{ secrets.GITHUB_TOKEN }}" | |
continue-on-error: true | |
- name: Delete Neo.SmartContract.Framework Package | |
uses: actions/delete-package-versions@v4 | |
with: | |
package-name: Neo.SmartContract.Framework | |
package-type: nuget | |
min-versions-to-keep: 3 | |
delete-only-pre-release-versions: "true" | |
token: "${{ secrets.GITHUB_TOKEN }}" | |
continue-on-error: true |