Skip to content

feat(jans-linux-setup): fallback to env var in case downloading fails - #14632

Merged
yuriyz merged 10 commits into
mainfrom
jans-linux-setup-fallback-download-14631
Jul 27, 2026
Merged

feat(jans-linux-setup): fallback to env var in case downloading fails#14632
yuriyz merged 10 commits into
mainfrom
jans-linux-setup-fallback-download-14631

Conversation

@devrimyatar

@devrimyatar devrimyatar commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Prepare


Description

Target issue

closes #14631

Implementation Details


Test and Document the changes

  • Static code analysis has been run locally and issues have been fixed
  • Relevant unit and integration tests have been added/updated
  • Relevant documentation has been updated if any (i.e. user guides, installation and configuration guides, technical design docs etc)

Please check the below before submitting your PR. The PR will not be merged if there are no commits that start with docs: to indicate documentation changes or if the below checklist is not selected.

  • I confirm that there is no impact on the docs due to the code changes in this PR.

Summary by CodeRabbit

  • Bug Fixes
    • Improved download reliability by staging downloads in a temporary file and only moving them into place after success, preventing incomplete/corrupt destination files.
    • Added up to three additional retry attempts for transient network errors, using randomized backoff delays.
    • Introduced a fallback mechanism to use a locally provided file when remote download repeatedly fails.
    • Standardized failure behavior when no fallback is available, ensuring consistent termination on unrecoverable errors.

Signed-off-by: Mustafa Baser <mbaser@mail.com>
@devrimyatar devrimyatar added the kind-enhancement Issue or PR is an enhancement to an existing functionality label Jul 25, 2026
@devrimyatar
devrimyatar requested a review from yuriyz as a code owner July 25, 2026 11:01
@devrimyatar devrimyatar added the comp-jans-linux-setup Component affected by issue or PR label Jul 25, 2026
@mo-auto

mo-auto commented Jul 25, 2026

Copy link
Copy Markdown
Member

Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The download() helper retries downloads through randomized temporary files, atomically moves successful files into place, and supports an environment-variable file fallback after repeated failures.

Changes

Download fallback handling

Layer / File(s) Summary
Retry and environment fallback
jans-linux-setup/jans_setup/setup_app/utils/base.py
Adds specific retry handling, temporary-file cleanup, atomic destination updates, and destination-based environment fallback handling, including preservation of existing files or exit status 2.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers: iromli, yurem, yuriyz, yuriyzz

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding an environment-variable fallback when downloads fail.
Description check ✅ Passed The description follows the template, links issue #14631, and confirms no docs impact; implementation details are brief but acceptable.
Linked Issues check ✅ Passed The changes implement the requested env-var fallback for failed downloads in jans-linux-setup, matching issue #14631.
Out of Scope Changes check ✅ Passed All changes relate to download-failure handling and the env-var fallback; no unrelated code changes are evident.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jans-linux-setup-fallback-download-14631

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mo-auto mo-auto added the kind-feature Issue or PR is a new feature request label Jul 25, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@jans-linux-setup/jans_setup/setup_app/utils/base.py`:
- Around line 413-416: Update the download flow surrounding urlretrieve so
downloads write to a temporary file and atomically replace dst only after
successful completion. Ensure failed downloads clean up the temporary file and
never leave or reuse a partial destination; preserve the existing
os.path.exists(dst) fallback only for genuinely pre-existing files.
- Around line 395-398: Update the retry handling around download_tries so it
increments and checks the attempt count before logging a retry or calling
time.sleep. Only log the retry and delay when another download attempt will
actually run; on the final failure, proceed directly to the fallback path.
- Around line 394-398: Update the exception handling in the download retry logic
around the download function to catch only expected failures such as
urllib.error.URLError and OSError, log the caught exception details with the
retry message, and allow unexpected exceptions—including KeyboardInterrupt and
SystemExit—to propagate without retrying.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bdd1dfd7-95cf-4b60-baf8-4473b2734cab

📥 Commits

Reviewing files that changed from the base of the PR and between 2d578f0 and 6a3f02c.

📒 Files selected for processing (1)
  • jans-linux-setup/jans_setup/setup_app/utils/base.py

Comment thread jans-linux-setup/jans_setup/setup_app/utils/base.py Outdated
Comment thread jans-linux-setup/jans_setup/setup_app/utils/base.py Outdated
Comment thread jans-linux-setup/jans_setup/setup_app/utils/base.py
Signed-off-by: Mustafa Baser <mbaser@mail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
jans-linux-setup/jans_setup/setup_app/utils/base.py (2)

419-420: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Atomically install the environment fallback.

shutil.copy(src, dst) writes directly to the destination. A copy failure can leave dst truncated or partial, which later calls may treat as a valid existing file. Copy to a temporary file in the destination directory, then use os.replace() after success and clean up on failure.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jans-linux-setup/jans_setup/setup_app/utils/base.py` around lines 419 - 420,
Update the copy operation following the “Copying” log to write src into a
temporary file in dst’s directory, then atomically install it with os.replace()
only after the copy succeeds. Ensure the temporary file is cleaned up on both
success and failure, while preserving the existing destination path and logging
behavior.

413-417: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Reset the global opener on the early return.

The same-file fallback returns before urllib.request.install_opener(None) runs. In a long-lived process, subsequent downloads inherit the previous opener and headers, potentially leaking custom authentication headers. Move opener cleanup into a finally block covering all return and exit paths.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jans-linux-setup/jans_setup/setup_app/utils/base.py` around lines 413 - 417,
Update the fallback copy flow around the same-file check in the relevant utility
function so urllib.request.install_opener(None) executes in a finally block
covering every return and exit path, including the early return when src and dst
refer to the same file. Preserve the existing fallback behavior while ensuring
no custom opener or authentication headers remain installed.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@jans-linux-setup/jans_setup/setup_app/utils/base.py`:
- Line 393: Update the download-size log in the relevant setup utility to use an
f-string instead of str.format, while preserving the existing
os.path.getsize(dst) value and message.
- Around line 390-396: Update the download retry logic around urlretrieve and
dst_tmp_fn so every attempt removes the temporary file in a finally block,
including failed or partial downloads, while preserving the existing successful
move to dst and retry behavior.
- Around line 402-404: Update the exception handler around mylog to interpolate
the caught exception into the message using an f-string, and correct “contuinue”
to “continue”; preserve the existing sys.exit(2) behavior.

---

Outside diff comments:
In `@jans-linux-setup/jans_setup/setup_app/utils/base.py`:
- Around line 419-420: Update the copy operation following the “Copying” log to
write src into a temporary file in dst’s directory, then atomically install it
with os.replace() only after the copy succeeds. Ensure the temporary file is
cleaned up on both success and failure, while preserving the existing
destination path and logging behavior.
- Around line 413-417: Update the fallback copy flow around the same-file check
in the relevant utility function so urllib.request.install_opener(None) executes
in a finally block covering every return and exit path, including the early
return when src and dst refer to the same file. Preserve the existing fallback
behavior while ensuring no custom opener or authentication headers remain
installed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ce9b438a-7883-4098-b8fd-5dec4575fecf

📥 Commits

Reviewing files that changed from the base of the PR and between 6a3f02c and 3885993.

📒 Files selected for processing (1)
  • jans-linux-setup/jans_setup/setup_app/utils/base.py

Comment thread jans-linux-setup/jans_setup/setup_app/utils/base.py Outdated
Comment thread jans-linux-setup/jans_setup/setup_app/utils/base.py Outdated
Comment thread jans-linux-setup/jans_setup/setup_app/utils/base.py
Signed-off-by: Mustafa Baser <mbaser@mail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
jans-linux-setup/jans_setup/setup_app/utils/base.py (1)

419-421: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Restore the default urllib opener before returning from the same-file case.

The same-file fallback returns before urllib.request.install_opener(None), leaving the temporary opener globally installed for later urllib calls. Log the skip, then fall through to teardown.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jans-linux-setup/jans_setup/setup_app/utils/base.py` around lines 419 - 421,
Update the same-file branch in the relevant fallback utility to log the skip
without returning immediately, allowing execution to reach
urllib.request.install_opener(None) and restore the default opener. Preserve the
existing same-file detection and message, and ensure normal fallback work is
skipped while teardown still runs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@jans-linux-setup/jans_setup/setup_app/utils/base.py`:
- Around line 419-421: Update the same-file branch in the relevant fallback
utility to log the skip without returning immediately, allowing execution to
reach urllib.request.install_opener(None) and restore the default opener.
Preserve the existing same-file detection and message, and ensure normal
fallback work is skipped while teardown still runs.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8801f70b-8205-4c17-b8b7-4ecd6311330f

📥 Commits

Reviewing files that changed from the base of the PR and between 3885993 and 97ea482.

📒 Files selected for processing (1)
  • jans-linux-setup/jans_setup/setup_app/utils/base.py

Signed-off-by: Mustafa Baser <mbaser@mail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
jans-linux-setup/jans_setup/setup_app/utils/base.py (1)

423-424: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Copy the fallback atomically.

shutil.copy(src, dst) truncates dst before copying. A read or disk failure can replace a valid existing artifact with a partial file; later non-forced installer runs skip downloads when that path exists and may consume it. Copy to a same-directory temporary file, then os.replace() it into place.

Proposed fix
-            shutil.copy(src, dst)
+            try:
+                shutil.copy(src, dst_tmp_fn)
+                os.replace(dst_tmp_fn, dst)
+            finally:
+                if os.path.exists(dst_tmp_fn):
+                    os.remove(dst_tmp_fn)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jans-linux-setup/jans_setup/setup_app/utils/base.py` around lines 423 - 424,
Update the fallback copy operation around the shutil.copy call to write src into
a temporary file in dst’s directory, then atomically commit it with os.replace
only after the copy succeeds; clean up the temporary file on failure while
preserving the existing logging and destination behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@jans-linux-setup/jans_setup/setup_app/utils/base.py`:
- Around line 423-424: Update the fallback copy operation around the shutil.copy
call to write src into a temporary file in dst’s directory, then atomically
commit it with os.replace only after the copy succeeds; clean up the temporary
file on failure while preserving the existing logging and destination behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 833ad086-80a5-4d2a-a130-157dca37f0c0

📥 Commits

Reviewing files that changed from the base of the PR and between 97ea482 and 6289979.

📒 Files selected for processing (1)
  • jans-linux-setup/jans_setup/setup_app/utils/base.py

Signed-off-by: Mustafa Baser <mbaser@mail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
jans-linux-setup/jans_setup/setup_app/utils/base.py (1)

419-421: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Guard the installed urllib opener on fallback exit paths.

download() installs a process-global opener with caller-provided headers, but the fallback return and sys.exit(2) paths bypass urllib.request.install_opener(None). Wrap the download/fallback logic in try/finally so later urllib calls don’t inherit this opener and headers.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jans-linux-setup/jans_setup/setup_app/utils/base.py` around lines 419 - 421,
Update download() to wrap the opener installation and all download/fallback
logic in a try/finally block, ensuring urllib.request.install_opener(None) runs
on every exit path, including the existing same-file return and sys.exit(2)
failure path. Preserve the current fallback behavior and logging.
♻️ Duplicate comments (1)
jans-linux-setup/jans_setup/setup_app/utils/base.py (1)

423-424: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Make the environment-file fallback atomic.

shutil.copy(src, dst) writes directly to the final destination. If the copy is interrupted or fails, dst can remain truncated and be treated as a valid existing file on a later run. Copy to a temporary file in the destination directory, then atomically replace dst after success.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jans-linux-setup/jans_setup/setup_app/utils/base.py` around lines 423 - 424,
Update the fallback copy operation in the surrounding utility method to write
src to a temporary file in dst’s directory, then atomically replace dst only
after the copy succeeds. Ensure temporary-file cleanup on failure and preserve
the existing logging and destination behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@jans-linux-setup/jans_setup/setup_app/utils/base.py`:
- Around line 396-401: Update the URLError handling around the download retry
logic so the log message accurately reflects the remaining retries: do not
report a retry when download_tries reaches the final attempt, and ensure the
first failure’s message matches the actual number of attempts remaining. Keep
the existing retry guard and fallback behavior unchanged.
- Line 413: Update the env_var sanitization expression to use ASCII-only word
matching, preserving alphanumeric characters plus underscores, periods, and
hyphens while replacing Unicode characters such as “é” with underscores.

---

Outside diff comments:
In `@jans-linux-setup/jans_setup/setup_app/utils/base.py`:
- Around line 419-421: Update download() to wrap the opener installation and all
download/fallback logic in a try/finally block, ensuring
urllib.request.install_opener(None) runs on every exit path, including the
existing same-file return and sys.exit(2) failure path. Preserve the current
fallback behavior and logging.

---

Duplicate comments:
In `@jans-linux-setup/jans_setup/setup_app/utils/base.py`:
- Around line 423-424: Update the fallback copy operation in the surrounding
utility method to write src to a temporary file in dst’s directory, then
atomically replace dst only after the copy succeeds. Ensure temporary-file
cleanup on failure and preserve the existing logging and destination behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: cd80a0a8-3fb8-409f-bbcd-2171bc26cd29

📥 Commits

Reviewing files that changed from the base of the PR and between 6289979 and e10451a.

📒 Files selected for processing (1)
  • jans-linux-setup/jans_setup/setup_app/utils/base.py

Comment thread jans-linux-setup/jans_setup/setup_app/utils/base.py
Comment thread jans-linux-setup/jans_setup/setup_app/utils/base.py Outdated
Signed-off-by: Mustafa Baser <mbaser@mail.com>
Comment thread jans-linux-setup/jans_setup/setup_app/utils/base.py Fixed
Signed-off-by: Mustafa Baser <mbaser@mail.com>
Signed-off-by: Mustafa Baser <mbaser@mail.com>
Signed-off-by: Mustafa Baser <mbaser@mail.com>
@devrimyatar

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
jans-linux-setup/jans_setup/setup_app/utils/base.py (2)

385-429: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Add regression coverage for the retry and fallback state machine.

Test successful moves, three URLError attempts, temporary-file cleanup, environment-source copying, same-file fallback, existing-destination fallback, and missing-source exit behavior.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jans-linux-setup/jans_setup/setup_app/utils/base.py` around lines 385 - 429,
Add regression tests for the download/retry and fallback flow surrounding
urllib.request.urlretrieve and the fallback environment-variable logic. Cover
successful download and move, three URLError attempts, temporary-file cleanup,
copying from the configured environment source, same-file fallback,
existing-destination fallback, and exiting when neither the source nor
destination exists; use mocks and temporary paths to isolate filesystem, timing,
and process-exit behavior.

383-393: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Restore the global opener on every exit path.

urllib.request.install_opener() changes process-global state, but the same-file fallback returns before Line 431, and the sys.exit(2) paths bypass it as well. Wrap the installed-opener scope in an outer try/finally so later URL operations cannot inherit this downloader’s opener.

Also applies to: 402-404, 417-421, 427-431

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jans-linux-setup/jans_setup/setup_app/utils/base.py` around lines 383 - 393,
Update the downloader function containing urllib.request.install_opener(opener)
to wrap all subsequent download, fallback-return, and sys.exit paths in an outer
try/finally, restoring the prior global urllib opener in finally. Ensure
restoration occurs on every exit path while preserving the existing download
behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@jans-linux-setup/jans_setup/setup_app/utils/base.py`:
- Around line 385-429: Add regression tests for the download/retry and fallback
flow surrounding urllib.request.urlretrieve and the fallback
environment-variable logic. Cover successful download and move, three URLError
attempts, temporary-file cleanup, copying from the configured environment
source, same-file fallback, existing-destination fallback, and exiting when
neither the source nor destination exists; use mocks and temporary paths to
isolate filesystem, timing, and process-exit behavior.
- Around line 383-393: Update the downloader function containing
urllib.request.install_opener(opener) to wrap all subsequent download,
fallback-return, and sys.exit paths in an outer try/finally, restoring the prior
global urllib opener in finally. Ensure restoration occurs on every exit path
while preserving the existing download behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 710525b7-f371-492a-a329-7051d207ce29

📥 Commits

Reviewing files that changed from the base of the PR and between 6289979 and 998c676.

📒 Files selected for processing (1)
  • jans-linux-setup/jans_setup/setup_app/utils/base.py

@yuriyz
yuriyz merged commit 9671e8a into main Jul 27, 2026
3 checks passed
@yuriyz
yuriyz deleted the jans-linux-setup-fallback-download-14631 branch July 27, 2026 08:22
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp-jans-linux-setup Component affected by issue or PR kind-enhancement Issue or PR is an enhancement to an existing functionality kind-feature Issue or PR is a new feature request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(jans-linux-setup): fallback to env var in case downloading fails

4 participants