From c115f2370ee58af617db9ab175d6ab254fa39928 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Thu, 30 Mar 2023 07:57:41 -0300 Subject: [PATCH] Added patched dl_deb.py - sleep from time --- dl_deb.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++ ki5_pre/Dockerfile | 3 ++ ki5_pre/build.sh | 1 + ki6_pre/Dockerfile | 3 ++ ki6_pre/build.sh | 1 + ki7_pre/Dockerfile | 3 ++ ki7_pre/build.sh | 1 + 7 files changed, 82 insertions(+) create mode 100755 dl_deb.py diff --git a/dl_deb.py b/dl_deb.py new file mode 100755 index 0000000..0abfb53 --- /dev/null +++ b/dl_deb.py @@ -0,0 +1,70 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- +# Copyright (c) 2023 Salvador E. Tropea +# Copyright (c) 2023 Instituto Nacional de Tecnologïa Industrial +# License: GPLv3 +# Simple Git Hub release downloader +import argparse +import json +import os +import requests +import sys +from time import sleep +from urllib.parse import unquote + + +USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0' + + +def error(msg): + print(msg) + exit(3) + + +def get_request(url): + retry = 4 + while retry: + r = requests.get(url, timeout=20, allow_redirects=True, headers={'User-Agent': USER_AGENT}) + if r.status_code == 200: + return r + if r.status_code == 403: + # GitHub returns 403 randomly (saturated?) + sleep(1 << (4-retry)) + retry -= 1 + else: + retry = 0 + error(f'Failed to get release info, status {r.status_code}') + + +def download(url, skip): + fname = unquote(os.path.basename(url)) + for s in skip: + if fname.startswith(s): + print(f"Skipping `{fname}`") + return + if os.path.isfile(fname): + print(f"`{fname}` already downloaded, won't overwrite") + return + print(f"Downloading `{fname}`") + res = get_request(url) + print(f"Saving `{fname}`") + with open(fname, 'wb') as f: + f.write(res.content) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Debian package downloader for GitHub releases') + + parser.add_argument('project', help='The user/project to fetch') + parser.add_argument('--skip', '-s', help='Skip files starting with', type=str, nargs='+', default=[]) + parser.add_argument('--release', '-r', help='Release to download', type=str, default='latest') + args = parser.parse_args() + + if args.release != 'latest': + args.release = 'tags/'+args.release + url = 'https://api.github.com/repos/'+args.project+'/releases/'+args.release + print(f"Downloading `{args.release}` release of `{args.project}` ({url})") + res = get_request(url) + r = res.json() + for a in r['assets']: + download(a['browser_download_url'], args.skip) diff --git a/ki5_pre/Dockerfile b/ki5_pre/Dockerfile index b61f1e4..e7ef7b0 100644 --- a/ki5_pre/Dockerfile +++ b/ki5_pre/Dockerfile @@ -13,3 +13,6 @@ RUN apt-get update && \ apt-get -y autoremove && \ rm /*.deb && \ rm -rf /var/lib/apt/lists/* /var/cache/debconf/templates.dat-old /var/lib/dpkg/status-old + +# Fix for the .deb downloader, should be removed in the next OS iteration +COPY dl_deb.py /usr/bin/ diff --git a/ki5_pre/build.sh b/ki5_pre/build.sh index e7b0a05..0047519 100755 --- a/ki5_pre/build.sh +++ b/ki5_pre/build.sh @@ -1,5 +1,6 @@ #!/bin/sh set -e +cp ../dl_deb.py . docker build -f Dockerfile -t ghcr.io/inti-cmnb/kicad5_auto:latest_deps . TG1=`docker run --rm ghcr.io/inti-cmnb/kicad5_auto:latest_deps kicad_version.py` TG2=d`docker run --rm ghcr.io/inti-cmnb/kicad5_auto:latest_deps cat /etc/debian_version | tr -d '\n'` diff --git a/ki6_pre/Dockerfile b/ki6_pre/Dockerfile index edb7a20..2149ae6 100644 --- a/ki6_pre/Dockerfile +++ b/ki6_pre/Dockerfile @@ -13,3 +13,6 @@ RUN apt-get update && \ apt-get -y autoremove && \ rm /*.deb && \ rm -rf /var/lib/apt/lists/* /var/cache/debconf/templates.dat-old /var/lib/dpkg/status-old + +# Fix for the .deb downloader, should be removed in the next OS iteration +COPY dl_deb.py /usr/bin/ diff --git a/ki6_pre/build.sh b/ki6_pre/build.sh index 2e7f831..8e84a6a 100755 --- a/ki6_pre/build.sh +++ b/ki6_pre/build.sh @@ -1,5 +1,6 @@ #!/bin/sh set -e +cp ../dl_deb.py . docker build -f Dockerfile -t ghcr.io/inti-cmnb/kicad6_auto:latest_deps . TG1=`docker run --rm ghcr.io/inti-cmnb/kicad6_auto:latest_deps kicad_version.py` TG2=d`docker run --rm ghcr.io/inti-cmnb/kicad6_auto:latest_deps cat /etc/debian_version | tr -d '\n'` diff --git a/ki7_pre/Dockerfile b/ki7_pre/Dockerfile index f356263..9f42796 100644 --- a/ki7_pre/Dockerfile +++ b/ki7_pre/Dockerfile @@ -13,3 +13,6 @@ RUN apt-get update && \ apt-get -y autoremove && \ rm /*.deb && \ rm -rf /var/lib/apt/lists/* /var/cache/debconf/templates.dat-old /var/lib/dpkg/status-old + +# Fix for the .deb downloader, should be removed in the next OS iteration +COPY dl_deb.py /usr/bin/ diff --git a/ki7_pre/build.sh b/ki7_pre/build.sh index a984bd4..03740e2 100755 --- a/ki7_pre/build.sh +++ b/ki7_pre/build.sh @@ -1,5 +1,6 @@ #!/bin/sh set -e +cp ../dl_deb.py . docker build -f Dockerfile -t ghcr.io/inti-cmnb/kicad7_auto:latest_deps . TG1=`docker run --rm ghcr.io/inti-cmnb/kicad7_auto:latest_deps kicad_version.py` TG2=d`docker run --rm ghcr.io/inti-cmnb/kicad7_auto:latest_deps cat /etc/debian_version | tr -d '\n'`