From 941f45c654c226ab3376715d7fe433240e246347 Mon Sep 17 00:00:00 2001 From: strahi-linux Date: Thu, 15 Aug 2024 11:33:25 +0200 Subject: [PATCH] Test #1 --- .github/workflows/index.yaml | 14 +++++++------- .github/workflows/recursiveBuild.yaml | 6 +----- .github/workflows/release.yaml | 9 ++------- scripts/index.py | 17 ++++++++++++++--- scripts/requirements/release.txt | 2 ++ scripts/requirements/shared.txt | 5 +++++ scripts/support.py | 4 ++++ 7 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 scripts/requirements/release.txt create mode 100644 scripts/requirements/shared.txt diff --git a/.github/workflows/index.yaml b/.github/workflows/index.yaml index 572d92019..1e577a072 100644 --- a/.github/workflows/index.yaml +++ b/.github/workflows/index.yaml @@ -3,6 +3,10 @@ name: Index Latest Release on: workflow_dispatch: inputs: + release_version: + type: string + description: Which release version to index (type v1.0.6 for example) + default: "latest" select_index: type: choice description: Index as test or live @@ -29,11 +33,7 @@ jobs: - name: Install Dependencies run: | python -m pip install --upgrade pip - pip install aiohttp - pip install aiofiles - pip install requests - pip install py7zr - pip install elasticsearch==7.13.4 + pip install -r scripts/requirements/shared.txt sudo apt-get install p7zip-full - name: Run Index Script @@ -44,8 +44,8 @@ jobs: run: | if [[ ${{ github.event.inputs.select_index }} == "Live" ]]; then echo "Indexing to Live." - python -u scripts/index.py ${{ github.repository }} ${{ secrets.GITHUB_TOKEN }} ${{ secrets.ES_INDEX_LIVE }} ${{ github.event.inputs.force_index }} + python -u scripts/index.py ${{ github.repository }} ${{ secrets.GITHUB_TOKEN }} ${{ secrets.ES_INDEX_LIVE }} ${{ github.event.inputs.force_index }} ${{ github.event.inputs.release_version }} else echo "Indexing to Test." - python -u scripts/index.py ${{ github.repository }} ${{ secrets.GITHUB_TOKEN }} ${{ secrets.ES_INDEX_TEST }} ${{ github.event.inputs.force_index }} + python -u scripts/index.py ${{ github.repository }} ${{ secrets.GITHUB_TOKEN }} ${{ secrets.ES_INDEX_TEST }} ${{ github.event.inputs.force_index }} ${{ github.event.inputs.release_version }} fi diff --git a/.github/workflows/recursiveBuild.yaml b/.github/workflows/recursiveBuild.yaml index 1c9888fc0..667e3b2d9 100644 --- a/.github/workflows/recursiveBuild.yaml +++ b/.github/workflows/recursiveBuild.yaml @@ -36,11 +36,7 @@ jobs: - name: Install Dependencies run: | python -m pip install --upgrade pip - pip install aiohttp - pip install aiofiles - pip install requests - pip install py7zr - pip install elasticsearch==7.13.4 + pip install -r scripts/requirements/shared.txt sudo apt-get update sudo apt-get install p7zip-full sudo apt-get install libopus-dev diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f538a7545..d94294695 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -19,13 +19,8 @@ jobs: - name: Install Dependencies run: | python -m pip install --upgrade pip - pip install aiohttp - pip install aiofiles - pip install requests - pip install py7zr - pip install openpyxl - pip install pandas - pip install elasticsearch==7.13.4 + pip install -r scripts/requirements/shared.txt + pip install -r scripts/requirements/release.txt - name: Run Release Script env: diff --git a/scripts/index.py b/scripts/index.py index 6f3ad426b..f961747c2 100644 --- a/scripts/index.py +++ b/scripts/index.py @@ -17,12 +17,22 @@ def get_headers(api, token): } # Function to fetch release details from GitHub -def fetch_release_details(repo, token): +def fetch_release_details(repo, token, release_version): api_headers = get_headers(True, token) url = f'https://api.github.com/repos/{repo}/releases' response = requests.get(url, headers=api_headers) response.raise_for_status() # Raise an exception for HTTP errors - return support.get_latest_release(response.json()), support.get_previous_release(response.json(), True) + if "latest" == release_version: + return support.get_latest_release(response.json()), support.get_previous_release(response.json(), True) + else: + release_check = None + release_check = support.get_specified_release(response.json(), release_version) + if release_check: + return release_check, support.get_previous_release(response.json(), True) + else: + ## Always fallback to latest release + print("WARNING: Falling back to LATEST release.") + return support.get_latest_release(response.json()), support.get_previous_release(response.json(), True) # Function to fetch content as JSON from the link def fetch_json_data(download_link, token): @@ -212,6 +222,7 @@ def index_release_to_elasticsearch(es : Elasticsearch, index_name, release_detai parser.add_argument("token", help="GitHub Token") parser.add_argument("select_index", help="Provided index name") parser.add_argument("force_index", help="If true will update packages even if hash is the same", type=bool) + parser.add_argument("release_version", help="Selected release version to index to current database", type=str) args = parser.parse_args() # Elasticsearch instance used for indexing @@ -237,6 +248,6 @@ def index_release_to_elasticsearch(es : Elasticsearch, index_name, release_detai # Now index the new release index_release_to_elasticsearch( es, args.select_index, - fetch_release_details(args.repo, args.token), + fetch_release_details(args.repo, args.token, args.release_version), args.token, args.force_index ) diff --git a/scripts/requirements/release.txt b/scripts/requirements/release.txt new file mode 100644 index 000000000..d288b983f --- /dev/null +++ b/scripts/requirements/release.txt @@ -0,0 +1,2 @@ +openpyxl +pandas diff --git a/scripts/requirements/shared.txt b/scripts/requirements/shared.txt new file mode 100644 index 000000000..deeefb14e --- /dev/null +++ b/scripts/requirements/shared.txt @@ -0,0 +1,5 @@ +aiohttp +aiofiles +requests +py7zr +elasticsearch==7.13.4 diff --git a/scripts/support.py b/scripts/support.py index a1b5cb17b..2d99f6267 100644 --- a/scripts/support.py +++ b/scripts/support.py @@ -13,6 +13,10 @@ def get_previous_release(releases, prerelases=None): return None return None +def get_specified_release(releases, release_version): + ''' Fetch the latest released version ''' + return next((release for release in releases if release_version == release['tag_name']), None) + def get_latest_release(releases): ''' Fetch the latest released version ''' return next((release for release in releases if not release['prerelease'] and not release['draft']), None)