From e0d2b32ef030d81d0d71ae199cdded8ff2b55745 Mon Sep 17 00:00:00 2001 From: Jamil RAICHOUNI <jamilraichouni@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:39:51 +0200 Subject: [PATCH] ci: Allow setting the Capella download URL Background: The server endpoint behind the Capella download URL that has been used so far seems to blacklist GitHub actions IP addresses. This commit allows setting the Capella download URL via an environment variable to use a different mirror to download Capella. Co-authored-by: MoritzWeber0 <kontakt@moritz-weber.net> --- .github/workflows/deploy-docker-images.yml | 1 + Makefile | 4 +++ capella/Dockerfile | 1 + capella/download_archive.py | 10 +++--- docs/docs/capella/base.md | 36 +++++++++++++++------- 5 files changed, 37 insertions(+), 15 deletions(-) diff --git a/.github/workflows/deploy-docker-images.yml b/.github/workflows/deploy-docker-images.yml index 6cde84c1..6a811444 100644 --- a/.github/workflows/deploy-docker-images.yml +++ b/.github/workflows/deploy-docker-images.yml @@ -63,6 +63,7 @@ jobs: # prettier-ignore run: > make ${{ env.images }} + CAPELLA_DOWNLOAD_URL="https://mirror.umd.edu/eclipse/capella/core/products/releases/{}" CAPELLA_VERSIONS="${{ matrix.capella_version }}" DOCKER_PREFIX="${{ env.registry }}" CAPELLA_DOCKERIMAGES_REVISION="${{ steps.tag.outputs.branch }}" diff --git a/Makefile b/Makefile index b8b73010..0620a007 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,9 @@ # Add prefix to all dockerimage names, e.g. capella-collab export DOCKER_PREFIX ?= +# URL used by to download Capella from +CAPELLA_DOWNLOAD_URL ?= + # T4C license secret (usually a long numeric string) T4C_LICENCE_SECRET ?= XXX @@ -193,6 +196,7 @@ capella/base: base --build-arg BUILD_ARCHITECTURE=$(BUILD_ARCHITECTURE) \ --build-arg BASE_IMAGE=$(DOCKER_PREFIX)$<:$(CAPELLA_DOCKERIMAGES_REVISION) \ --build-arg BUILD_TYPE=$(CAPELLA_BUILD_TYPE) \ + --build-arg CAPELLA_DOWNLOAD_URL=$(CAPELLA_DOWNLOAD_URL) \ --build-arg CAPELLA_VERSION=$$CAPELLA_VERSION \ --build-arg "CAPELLA_DROPINS=$(CAPELLA_DROPINS)" \ --build-arg "INJECT_PACKAGES=$(INJECT_LIBS_CAPELLA)" \ diff --git a/capella/Dockerfile b/capella/Dockerfile index b3945406..8c05ee85 100644 --- a/capella/Dockerfile +++ b/capella/Dockerfile @@ -61,6 +61,7 @@ FROM base_new as build_online # https://github.com/moby/moby/issues/26533#issuecomment-246966836 ONBUILD ARG CAPELLA_VERSION="5.2.0" ONBUILD ARG BUILD_ARCHITECTURE="amd64" +ONBUILD ARG CAPELLA_DOWNLOAD_URL ONBUILD COPY ./download_archive.py /opt/.download_archive.py ONBUILD RUN pip install --no-cache-dir requests && \ python .download_archive.py ${CAPELLA_VERSION}; diff --git a/capella/download_archive.py b/capella/download_archive.py index 03bf7b7c..d799773f 100644 --- a/capella/download_archive.py +++ b/capella/download_archive.py @@ -7,6 +7,7 @@ https://download.eclipse.org/capella/core/products/stable/. """ + import os import pathlib import sys @@ -17,7 +18,7 @@ CAPELLA_INDEX_URL = ( "https://mirror.dkm.cz/eclipse/capella/core/products/releases/" ) -CAPELLA_DOWNLOAD_URL = "https://www.eclipse.org/downloads/download.php?file=/capella/core/products/releases/{}&r=1" +CAPELLA_DEFAULT_DOWNLOAD_URL = "https://www.eclipse.org/downloads/download.php?file=/capella/core/products/releases/{}&r=1" def get_directory_structure(url: str) -> list[str]: @@ -51,9 +52,10 @@ def main() -> None: for arch in dir_content if arch.endswith("linux-gtk-x86_64.tar.gz") ) - download_url = CAPELLA_DOWNLOAD_URL.format( - f"{capella_archive_path}{archive_name}" - ) + download_url = os.getenv( + "CAPELLA_DOWNLOAD_URL", CAPELLA_DEFAULT_DOWNLOAD_URL + ).format(f"{capella_archive_path}{archive_name}") + print(f"Downloading Capella from `{download_url}`...") download_response = requests.get(download_url, timeout=120) download_response.raise_for_status() diff --git a/docs/docs/capella/base.md b/docs/docs/capella/base.md index 2fdc9d58..4a3a6904 100644 --- a/docs/docs/capella/base.md +++ b/docs/docs/capella/base.md @@ -110,16 +110,6 @@ If you want to install dropins manually, you can place the dropins in the copied into the `dropins` directory of the Capella client without any further processing. -#### Optional: Customisation of the Capella client - -If you want to customize the Capella client even further, you can: - -1. extract the downloaded archive, -1. apply any modifications (e.g., installation of plugins and/ or dropins) to - it, and -1. compress the modified folder `capella` to get a `capella.zip` or - `capella.tar.gz` again. - #### Optional: Workaround of pinned library versions to remove incompatibilities **Note:** _This workaround is normally handled in the Dockerfile and it is only @@ -147,20 +137,44 @@ For more information refer to ### Build it manually with Docker +#### Automatic download of Capella + If you want to download the Capella archive automatically, use the following -command. Does only work for +command. It does only work for [supported Capella versions](introduction.md#supported-versions). ```zsh docker build -t capella/base capella --build-arg BUILD_TYPE=online --build-arg CAPELLA_VERSION=$CAPELLA_VERSION ``` +You can further customize the mirror to download the Capella archive from. If +you don't want to use the default mirror, choose another mirror from +[this list](https://www.eclipse.org/downloads/download.php?file=/capella/core/products/releases&format=xml). + +Then, append `/{}` to the mirror URL and pass it as a build argument to the +above command, e.g.: + +```zsh +--build-arg CAPELLA_DOWNLOAD_URL="https://mirror.umd.edu/eclipse/capella/core/products/releases/{}"` +``` + +#### Build with pre-downloaded version of Capella + If you've downloaded the Capella archive manually before, use this command: ```zsh docker build -t capella/base capella --build-arg CAPELLA_VERSION=$CAPELLA_VERSION ``` +With this method, you can customize the Capella client before running the above +command: + +1. Extract the downloaded archive, +1. Apply any modifications (e.g., installation of plugins and/ or dropins) to + it, and +1. Compress the modified folder `capella` to get a `capella.zip` or + `capella.tar.gz` again. + ### Miscellaneous #### Download older debian packages manually