Package Cleanup #291
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: | |
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.VM,Neo.Json,Neo.IO,Neo,Neo.ConsoleService,Neo.Extensions' # Neo.Cryptography.BLS12_381 version is 0.x | |
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-docker-pkgs: | |
name: Delete Old Docker Images | |
runs-on: ubuntu-latest | |
steps: | |
- name: Delete Neo Package (docker) | |
uses: actions/delete-package-versions@v4 | |
continue-on-error: true | |
with: | |
package-name: Neo | |
package-type: docker | |
min-versions-to-keep: 1 | |
token: "${{ secrets.GITHUB_TOKEN }}" | |
delete-git-nuget-pkgs: | |
name: Delete Old Nuget Packages | |
strategy: | |
matrix: | |
pkgs: | |
- "Neo.Plugins.StatesDumper" | |
- "Neo.Plugins.StateService" | |
- "Neo.Plugins.Storage.LevelDBStore" | |
- "Neo.Plugins.Storage.RocksDBStore" | |
- "Neo.Plugins.StorageDumper" | |
- "Neo.Plugins.TokensTracker" | |
- "Neo.Wallets.SQLite" | |
- "Neo.Consensus.DBFT" | |
- "Neo.ConsoleService" | |
- "Neo.Cryptography.MPT" | |
- "Neo.Extensions" | |
- "Neo.Network.RPC.RpcClient" | |
- "Neo.Plugins.ApplicationLogs" | |
- "Neo.Plugins.OracleService" | |
- "Neo.Plugins.RpcServer" | |
- "Neo.Cryptography.BLS12_381" | |
- "Neo.VM" | |
- "Neo.Json" | |
- "Neo.IO" | |
- "Neo" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Delete ${{ matrix.pkgs }} Package | |
uses: actions/delete-package-versions@v4 | |
continue-on-error: true | |
with: | |
package-name: ${{ matrix.pkgs }} | |
package-type: nuget | |
min-versions-to-keep: 3 | |
delete-only-pre-release-versions: "true" | |
token: "${{ secrets.GITHUB_TOKEN }}" |