-
Notifications
You must be signed in to change notification settings - Fork 98
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor(docker): Improve docker build and deployment
Signed-off-by: Helio Chissini de Castro <[email protected]>
- Loading branch information
1 parent
0e60a07
commit deec685
Showing
6 changed files
with
318 additions
and
61 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# Copyright Helio Chissini de Castro, 2023 | ||
# | ||
# This program and the accompanying materials are made | ||
# available under the terms of the Eclipse Public License 2.0 | ||
# which is available at https://www.eclipse.org/legal/epl-2.0/ | ||
# | ||
# SPDX-License-Identifier: EPL-2.0 | ||
|
||
name: 'Delete old non-release packages from Github package registry' | ||
description: 'Delete older packages set by a minimal level input' | ||
author: 'The ORT Project Authors' | ||
|
||
inputs: | ||
registry: | ||
description: 'Github container registry' | ||
default: 'ghcr.io' | ||
token: | ||
description: 'Github token' | ||
required: true | ||
keep: | ||
description: 'Number of non-release packages to keep' | ||
required: false | ||
default: '3' | ||
packages: | ||
description: 'Name of the packages to be cleaned up' | ||
required: true | ||
dry-run: | ||
description: 'Execute a dry run operation to check the execution is correct' | ||
default: 'false' | ||
|
||
runs: | ||
using: 'composite' | ||
|
||
steps: | ||
- name: Install Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.10' | ||
cache: 'pip' | ||
|
||
- name: Execute the operation | ||
id: check_image | ||
shell: bash | ||
env: | ||
INPUT_REGISTRY: ${{ inputs.registry }} | ||
INPUT_TOKEN: ${{ inputs.token }} | ||
INPUT_KEEP: ${{ inputs.keep }} | ||
INPUT_PACKAGES: ${{ inputs.packages }} | ||
INPUT_DRY_RUN: ${{ inputs.dry-run}} | ||
run: | | ||
pip install -q -U pip requests rich | ||
python ./.github/actions/clean_up_package_registry/clean_up_package_registry.py |
86 changes: 86 additions & 0 deletions
86
.github/actions/clean_up_package_registry/clean_up_package_registry.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
# Copyright Helio Chissini de Castro, 2023 | ||
# | ||
# This program and the accompanying materials are made | ||
# available under the terms of the Eclipse Public License 2.0 | ||
# which is available at https://www.eclipse.org/legal/epl-2.0/ | ||
# | ||
# SPDX-License-Identifier: EPL-2.0 | ||
|
||
|
||
import os | ||
|
||
import requests | ||
from rich import print | ||
|
||
""" Use current Github API to list packages | ||
in registry and remove all but last 3 or custom | ||
set number of packages. | ||
Reference: https://docs.github.com/en/rest/packages/packages?apiVersion=2022-11-28#about-github-packages | ||
""" | ||
|
||
dry_run: bool = True if os.getenv("INPUT_DRY_RUN") == "true" else False | ||
keep = int(os.getenv("INPUT_KEEP")) | ||
org = os.getenv("GITHUB_REPOSITORY_OWNER") | ||
packages = os.getenv("INPUT_PACKAGES").split("\n") | ||
token = os.getenv("INPUT_TOKEN") | ||
|
||
headers = { | ||
"Accept": "application/vnd.github+json", | ||
"Authorization": f"Bearer {token}", | ||
"X-GitHub-Api-Version": "2022-11-28", | ||
} | ||
|
||
# Assembly organization packages url string | ||
pkg_url: str = f"https://api.github.com/orgs/{org}/packages" | ||
|
||
|
||
def delete_packages(): | ||
for package in packages: | ||
print(f":package: {package}") | ||
url = f"{pkg_url}/container/{package.replace('/', '%2F')}/versions?per_page=100" | ||
response = requests.get(url, headers=headers) | ||
|
||
if response.status_code == 404: | ||
print(f":cross_mark: Not found - {url}") | ||
continue | ||
|
||
# Sort all images on id. | ||
images = sorted(response.json(), key=lambda x: x["id"], reverse=True) | ||
|
||
# Slice and remove all | ||
if len(images) > keep: | ||
for image in images[keep + 1 :]: | ||
url = f"{pkg_url}/container/{package.replace('/', '%2F')}/versions/{image['id']}" | ||
|
||
# Never remove latest or non snapshot tagged images | ||
if restrict_delete_tags(image["metadata"]["container"]["tags"]): | ||
print( | ||
f":package: Skip tagged {package} id {image['id']} tags {image['metadata']['container']['tags']}" | ||
) | ||
continue | ||
|
||
if not dry_run: | ||
response = requests.delete(url, headers=headers) | ||
if response.status_code != 204: | ||
print( | ||
f":cross_mark: Failed to delete package {package} version id {image['id']}." | ||
) | ||
continue | ||
print( | ||
f":white_heavy_check_mark: Deleted package {package} version id {image['id']}." | ||
) | ||
|
||
|
||
def restrict_delete_tags(tags: list) -> bool: | ||
if not tags: | ||
return False | ||
for tag in tags: | ||
if tag == "latest": | ||
return True | ||
elif "nightly" in tag: | ||
return True | ||
return False | ||
|
||
|
||
if __name__ == "__main__": | ||
delete_packages() |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# Copyright Helio Chissini de Castro, 2023 | ||
# | ||
# This program and the accompanying materials are made | ||
# available under the terms of the Eclipse Public License 2.0 | ||
# which is available at https://www.eclipse.org/legal/epl-2.0/ | ||
# | ||
# SPDX-License-Identifier: EPL-2.0 | ||
|
||
name: Clean up packages in Github package registry | ||
|
||
on: | ||
workflow_dispatch: | ||
# Runs always Sunday Midnight | ||
schedule: | ||
- cron: "0 0 * * 0" | ||
|
||
jobs: | ||
clean_all: | ||
name: Cleaning older packages | ||
runs-on: ubuntu-22.04 | ||
steps: | ||
- name: Checkout default branch | ||
uses: actions/checkout@v4 | ||
- name: Clean up package registry | ||
uses: ./.github/actions/clean_up_package_registry | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
packages: |- | ||
thrift | ||
clucene | ||
base | ||
binaries | ||
sw360 |
Oops, something went wrong.