fix: improve error handling for network connectivity issues - #38

Closed
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error
Closed

fix: improve error handling for network connectivity issues#38
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Improves error handling throughout the obolup script to provide clear feedback when network connectivity issues occur, rather than failing silently.

Problem Solved

Fixes#28 - When running without internet, obolup now provides clear error messages instead of ending unclearly.

The Issue

Previously, when running obolup without internet connection, the script would fail silently:

[INFO] Checking Kind...
[INFO] Kind v0.27.0 is installed.
[INFO] Checking helm...

And then just stop with no error message, leaving users confused.

Changes

🛡️ Improved Error Handling in All Installation Functions

kubectl installation

  • Check for network failures when fetching version
  • Clear error message when download fails
  • Graceful handling of checksum validation failures

helm installation

  • Detect and report download failures
  • Already had partial error handling, now consistent
  • Falls back to existing installation when updates can't be checked

kind installation

  • Add error handling for download failures
  • Clear error messages for network issues

k9s installation

  • Maintained already good error handling
  • Made consistent with other functions

obol CLI installation

  • Add network failure detection
  • Fallback to existing installation when possible
  • Clear error messages when installation impossible

obolup update checker

  • Handle network failures gracefully
  • Detect empty responses (sha256 of empty string)
  • Continue operation when update check fails

📝 User Experience Improvements

  • ✅ Clear error messages that explicitly mention checking internet connection
  • ✅ Graceful fallback to existing installations when updates can't be checked
  • ✅ Warning messages for non-critical network failures (e.g., checksum downloads)
  • ✅ Fatal errors only when installation is impossible without network

Example Output

Before (silent failure):

[INFO] Checking helm...

(script ends with no explanation)

After (clear error):

[INFO] Checking helm...
[ERROR] helm is not installed and unable to fetch latest version. Please check your internet connection.

Testing

To test these improvements:

  1. Disconnect from internet (turn off WiFi/ethernet)
  2. Run obolup: ./obolup
  3. Verify clear error messages appear for each component that needs network access

For tools already installed:

  • Script continues with warnings about being unable to check for updates
  • Existing installations are used

For tools not installed:

  • Clear error message about checking internet connection
  • Script exits gracefully with helpful error

Impact

  • Users get immediate, actionable feedback about network issues
  • No more confusion from silent failures
  • Script fails fast with clear messaging
  • Existing installations continue to work offline where possible

Related Issue

Closes#28

- Add explicit error messages when curl commands fail due to network issues
- Check for empty responses from API calls before processing
- Provide clear feedback when internet connection is unavailable
- Gracefully handle cases where tools are already installed but updates can't be checked
Fixes#28

@OisinKyneOisinKyne 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.

Small asks

Comment threadobolup/obolup
Comment on lines +386 to +390
REMOTE_HASH=$(curl -s "$OBOLUP_URL" 2>/dev/null | sha256sum | awk '{print $1}')
if [[ -z "$REMOTE_HASH" || "$REMOTE_HASH" == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]]; then
log_warn "Unable to check for obolup updates. Network may be unavailable."
return
fi

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.

Does this actually work? i didn't know we had obolup hosted yet.

Comment threadobolup/obolup
if [[ -z "$KUBECTL_VERSION" ]]; then
log_error "Failed to fetch kubectl version. Please check your internet connection."
fi

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.

Not a problem for this PR, but we should make a ticket to update kubectl by comparing local kubectl version versus fetched kubectl version and do a which kubectl like we do for k9s and only run the next download if they differ and its the type of installation we expect.

Comment threadobolup/obolup
if ! curl -sSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/$ARCHITECTURE/kubectl.sha256" 2>/dev/null; then
log_warn "Failed to download kubectl checksum. Continuing without validation..."
else
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check || log_warn "kubectl checksum validation failed. Continuing anyway..."

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.

Lets crash if this fails, it looks sloppy to do the check and continue anyways

@bussyjd
bussyjd marked this pull request as draft October 20, 2025 20:09
@bussyjdbussyjd closed this Oct 20, 2025
@OisinKyne
OisinKyne deleted the fix/internet-connectivity-error branch November 7, 2025 13:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

With no internet, obolup ends unclearly

2 participants

@bussyjd@OisinKyne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix: improve error handling for network connectivity issues - #38

Closed
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error
Closed

fix: improve error handling for network connectivity issues#38
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Improves error handling throughout the obolup script to provide clear feedback when network connectivity issues occur, rather than failing silently.

Problem Solved

Fixes#28 - When running without internet, obolup now provides clear error messages instead of ending unclearly.

The Issue

Previously, when running obolup without internet connection, the script would fail silently:

[INFO] Checking Kind...
[INFO] Kind v0.27.0 is installed.
[INFO] Checking helm...

And then just stop with no error message, leaving users confused.

Changes

🛡️ Improved Error Handling in All Installation Functions

kubectl installation

  • Check for network failures when fetching version
  • Clear error message when download fails
  • Graceful handling of checksum validation failures

helm installation

  • Detect and report download failures
  • Already had partial error handling, now consistent
  • Falls back to existing installation when updates can't be checked

kind installation

  • Add error handling for download failures
  • Clear error messages for network issues

k9s installation

  • Maintained already good error handling
  • Made consistent with other functions

obol CLI installation

  • Add network failure detection
  • Fallback to existing installation when possible
  • Clear error messages when installation impossible

obolup update checker

  • Handle network failures gracefully
  • Detect empty responses (sha256 of empty string)
  • Continue operation when update check fails

📝 User Experience Improvements

  • ✅ Clear error messages that explicitly mention checking internet connection
  • ✅ Graceful fallback to existing installations when updates can't be checked
  • ✅ Warning messages for non-critical network failures (e.g., checksum downloads)
  • ✅ Fatal errors only when installation is impossible without network

Example Output

Before (silent failure):

[INFO] Checking helm...

(script ends with no explanation)

After (clear error):

[INFO] Checking helm...
[ERROR] helm is not installed and unable to fetch latest version. Please check your internet connection.

Testing

To test these improvements:

  1. Disconnect from internet (turn off WiFi/ethernet)
  2. Run obolup: ./obolup
  3. Verify clear error messages appear for each component that needs network access

For tools already installed:

  • Script continues with warnings about being unable to check for updates
  • Existing installations are used

For tools not installed:

  • Clear error message about checking internet connection
  • Script exits gracefully with helpful error

Impact

  • Users get immediate, actionable feedback about network issues
  • No more confusion from silent failures
  • Script fails fast with clear messaging
  • Existing installations continue to work offline where possible

Related Issue

Closes#28

- Add explicit error messages when curl commands fail due to network issues
- Check for empty responses from API calls before processing
- Provide clear feedback when internet connection is unavailable
- Gracefully handle cases where tools are already installed but updates can't be checked
Fixes#28

@OisinKyneOisinKyne 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.

Small asks

Comment threadobolup/obolup
Comment on lines +386 to +390
REMOTE_HASH=$(curl -s "$OBOLUP_URL" 2>/dev/null | sha256sum | awk '{print $1}')
if [[ -z "$REMOTE_HASH" || "$REMOTE_HASH" == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]]; then
log_warn "Unable to check for obolup updates. Network may be unavailable."
return
fi

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.

Does this actually work? i didn't know we had obolup hosted yet.

Comment threadobolup/obolup
if [[ -z "$KUBECTL_VERSION" ]]; then
log_error "Failed to fetch kubectl version. Please check your internet connection."
fi

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.

Not a problem for this PR, but we should make a ticket to update kubectl by comparing local kubectl version versus fetched kubectl version and do a which kubectl like we do for k9s and only run the next download if they differ and its the type of installation we expect.

Comment threadobolup/obolup
if ! curl -sSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/$ARCHITECTURE/kubectl.sha256" 2>/dev/null; then
log_warn "Failed to download kubectl checksum. Continuing without validation..."
else
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check || log_warn "kubectl checksum validation failed. Continuing anyway..."

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.

Lets crash if this fails, it looks sloppy to do the check and continue anyways

@bussyjd
bussyjd marked this pull request as draft October 20, 2025 20:09
@bussyjdbussyjd closed this Oct 20, 2025
@OisinKyne
OisinKyne deleted the fix/internet-connectivity-error branch November 7, 2025 13:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

With no internet, obolup ends unclearly

2 participants

@bussyjd@OisinKyne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: improve error handling for network connectivity issues - #38

Closed
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error
Closed

fix: improve error handling for network connectivity issues#38
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Improves error handling throughout the obolup script to provide clear feedback when network connectivity issues occur, rather than failing silently.

Problem Solved

Fixes#28 - When running without internet, obolup now provides clear error messages instead of ending unclearly.

The Issue

Previously, when running obolup without internet connection, the script would fail silently:

[INFO] Checking Kind...
[INFO] Kind v0.27.0 is installed.
[INFO] Checking helm...

And then just stop with no error message, leaving users confused.

Changes

🛡️ Improved Error Handling in All Installation Functions

kubectl installation

  • Check for network failures when fetching version
  • Clear error message when download fails
  • Graceful handling of checksum validation failures

helm installation

  • Detect and report download failures
  • Already had partial error handling, now consistent
  • Falls back to existing installation when updates can't be checked

kind installation

  • Add error handling for download failures
  • Clear error messages for network issues

k9s installation

  • Maintained already good error handling
  • Made consistent with other functions

obol CLI installation

  • Add network failure detection
  • Fallback to existing installation when possible
  • Clear error messages when installation impossible

obolup update checker

  • Handle network failures gracefully
  • Detect empty responses (sha256 of empty string)
  • Continue operation when update check fails

📝 User Experience Improvements

  • ✅ Clear error messages that explicitly mention checking internet connection
  • ✅ Graceful fallback to existing installations when updates can't be checked
  • ✅ Warning messages for non-critical network failures (e.g., checksum downloads)
  • ✅ Fatal errors only when installation is impossible without network

Example Output

Before (silent failure):

[INFO] Checking helm...

(script ends with no explanation)

After (clear error):

[INFO] Checking helm...
[ERROR] helm is not installed and unable to fetch latest version. Please check your internet connection.

Testing

To test these improvements:

  1. Disconnect from internet (turn off WiFi/ethernet)
  2. Run obolup: ./obolup
  3. Verify clear error messages appear for each component that needs network access

For tools already installed:

  • Script continues with warnings about being unable to check for updates
  • Existing installations are used

For tools not installed:

  • Clear error message about checking internet connection
  • Script exits gracefully with helpful error

Impact

  • Users get immediate, actionable feedback about network issues
  • No more confusion from silent failures
  • Script fails fast with clear messaging
  • Existing installations continue to work offline where possible

Related Issue

Closes#28

- Add explicit error messages when curl commands fail due to network issues
- Check for empty responses from API calls before processing
- Provide clear feedback when internet connection is unavailable
- Gracefully handle cases where tools are already installed but updates can't be checked
Fixes#28

@OisinKyneOisinKyne 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.

Small asks

Comment threadobolup/obolup
Comment on lines +386 to +390
REMOTE_HASH=$(curl -s "$OBOLUP_URL" 2>/dev/null | sha256sum | awk '{print $1}')
if [[ -z "$REMOTE_HASH" || "$REMOTE_HASH" == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]]; then
log_warn "Unable to check for obolup updates. Network may be unavailable."
return
fi

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.

Does this actually work? i didn't know we had obolup hosted yet.

Comment threadobolup/obolup
if [[ -z "$KUBECTL_VERSION" ]]; then
log_error "Failed to fetch kubectl version. Please check your internet connection."
fi

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.

Not a problem for this PR, but we should make a ticket to update kubectl by comparing local kubectl version versus fetched kubectl version and do a which kubectl like we do for k9s and only run the next download if they differ and its the type of installation we expect.

Comment threadobolup/obolup
if ! curl -sSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/$ARCHITECTURE/kubectl.sha256" 2>/dev/null; then
log_warn "Failed to download kubectl checksum. Continuing without validation..."
else
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check || log_warn "kubectl checksum validation failed. Continuing anyway..."

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.

Lets crash if this fails, it looks sloppy to do the check and continue anyways

@bussyjd
bussyjd marked this pull request as draft October 20, 2025 20:09
@bussyjdbussyjd closed this Oct 20, 2025
@OisinKyne
OisinKyne deleted the fix/internet-connectivity-error branch November 7, 2025 13:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

With no internet, obolup ends unclearly

2 participants

@bussyjd@OisinKyne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: improve error handling for network connectivity issues - #38

Closed
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error
Closed

fix: improve error handling for network connectivity issues#38
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Improves error handling throughout the obolup script to provide clear feedback when network connectivity issues occur, rather than failing silently.

Problem Solved

Fixes#28 - When running without internet, obolup now provides clear error messages instead of ending unclearly.

The Issue

Previously, when running obolup without internet connection, the script would fail silently:

[INFO] Checking Kind...
[INFO] Kind v0.27.0 is installed.
[INFO] Checking helm...

And then just stop with no error message, leaving users confused.

Changes

🛡️ Improved Error Handling in All Installation Functions

kubectl installation

  • Check for network failures when fetching version
  • Clear error message when download fails
  • Graceful handling of checksum validation failures

helm installation

  • Detect and report download failures
  • Already had partial error handling, now consistent
  • Falls back to existing installation when updates can't be checked

kind installation

  • Add error handling for download failures
  • Clear error messages for network issues

k9s installation

  • Maintained already good error handling
  • Made consistent with other functions

obol CLI installation

  • Add network failure detection
  • Fallback to existing installation when possible
  • Clear error messages when installation impossible

obolup update checker

  • Handle network failures gracefully
  • Detect empty responses (sha256 of empty string)
  • Continue operation when update check fails

📝 User Experience Improvements

  • ✅ Clear error messages that explicitly mention checking internet connection
  • ✅ Graceful fallback to existing installations when updates can't be checked
  • ✅ Warning messages for non-critical network failures (e.g., checksum downloads)
  • ✅ Fatal errors only when installation is impossible without network

Example Output

Before (silent failure):

[INFO] Checking helm...

(script ends with no explanation)

After (clear error):

[INFO] Checking helm...
[ERROR] helm is not installed and unable to fetch latest version. Please check your internet connection.

Testing

To test these improvements:

  1. Disconnect from internet (turn off WiFi/ethernet)
  2. Run obolup: ./obolup
  3. Verify clear error messages appear for each component that needs network access

For tools already installed:

  • Script continues with warnings about being unable to check for updates
  • Existing installations are used

For tools not installed:

  • Clear error message about checking internet connection
  • Script exits gracefully with helpful error

Impact

  • Users get immediate, actionable feedback about network issues
  • No more confusion from silent failures
  • Script fails fast with clear messaging
  • Existing installations continue to work offline where possible

Related Issue

Closes#28

- Add explicit error messages when curl commands fail due to network issues
- Check for empty responses from API calls before processing
- Provide clear feedback when internet connection is unavailable
- Gracefully handle cases where tools are already installed but updates can't be checked
Fixes#28

@OisinKyneOisinKyne 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.

Small asks

Comment threadobolup/obolup
Comment on lines +386 to +390
REMOTE_HASH=$(curl -s "$OBOLUP_URL" 2>/dev/null | sha256sum | awk '{print $1}')
if [[ -z "$REMOTE_HASH" || "$REMOTE_HASH" == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]]; then
log_warn "Unable to check for obolup updates. Network may be unavailable."
return
fi

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.

Does this actually work? i didn't know we had obolup hosted yet.

Comment threadobolup/obolup
if [[ -z "$KUBECTL_VERSION" ]]; then
log_error "Failed to fetch kubectl version. Please check your internet connection."
fi

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.

Not a problem for this PR, but we should make a ticket to update kubectl by comparing local kubectl version versus fetched kubectl version and do a which kubectl like we do for k9s and only run the next download if they differ and its the type of installation we expect.

Comment threadobolup/obolup
if ! curl -sSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/$ARCHITECTURE/kubectl.sha256" 2>/dev/null; then
log_warn "Failed to download kubectl checksum. Continuing without validation..."
else
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check || log_warn "kubectl checksum validation failed. Continuing anyway..."

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.

Lets crash if this fails, it looks sloppy to do the check and continue anyways

@bussyjd
bussyjd marked this pull request as draft October 20, 2025 20:09
@bussyjdbussyjd closed this Oct 20, 2025
@OisinKyne
OisinKyne deleted the fix/internet-connectivity-error branch November 7, 2025 13:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

With no internet, obolup ends unclearly

2 participants

@bussyjd@OisinKyne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix: improve error handling for network connectivity issues - #38

Closed
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error
Closed

fix: improve error handling for network connectivity issues#38
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Improves error handling throughout the obolup script to provide clear feedback when network connectivity issues occur, rather than failing silently.

Problem Solved

Fixes#28 - When running without internet, obolup now provides clear error messages instead of ending unclearly.

The Issue

Previously, when running obolup without internet connection, the script would fail silently:

[INFO] Checking Kind...
[INFO] Kind v0.27.0 is installed.
[INFO] Checking helm...

And then just stop with no error message, leaving users confused.

Changes

🛡️ Improved Error Handling in All Installation Functions

kubectl installation

  • Check for network failures when fetching version
  • Clear error message when download fails
  • Graceful handling of checksum validation failures

helm installation

  • Detect and report download failures
  • Already had partial error handling, now consistent
  • Falls back to existing installation when updates can't be checked

kind installation

  • Add error handling for download failures
  • Clear error messages for network issues

k9s installation

  • Maintained already good error handling
  • Made consistent with other functions

obol CLI installation

  • Add network failure detection
  • Fallback to existing installation when possible
  • Clear error messages when installation impossible

obolup update checker

  • Handle network failures gracefully
  • Detect empty responses (sha256 of empty string)
  • Continue operation when update check fails

📝 User Experience Improvements

  • ✅ Clear error messages that explicitly mention checking internet connection
  • ✅ Graceful fallback to existing installations when updates can't be checked
  • ✅ Warning messages for non-critical network failures (e.g., checksum downloads)
  • ✅ Fatal errors only when installation is impossible without network

Example Output

Before (silent failure):

[INFO] Checking helm...

(script ends with no explanation)

After (clear error):

[INFO] Checking helm...
[ERROR] helm is not installed and unable to fetch latest version. Please check your internet connection.

Testing

To test these improvements:

  1. Disconnect from internet (turn off WiFi/ethernet)
  2. Run obolup: ./obolup
  3. Verify clear error messages appear for each component that needs network access

For tools already installed:

  • Script continues with warnings about being unable to check for updates
  • Existing installations are used

For tools not installed:

  • Clear error message about checking internet connection
  • Script exits gracefully with helpful error

Impact

  • Users get immediate, actionable feedback about network issues
  • No more confusion from silent failures
  • Script fails fast with clear messaging
  • Existing installations continue to work offline where possible

Related Issue

Closes#28

- Add explicit error messages when curl commands fail due to network issues
- Check for empty responses from API calls before processing
- Provide clear feedback when internet connection is unavailable
- Gracefully handle cases where tools are already installed but updates can't be checked
Fixes#28

@OisinKyneOisinKyne 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.

Small asks

Comment threadobolup/obolup
Comment on lines +386 to +390
REMOTE_HASH=$(curl -s "$OBOLUP_URL" 2>/dev/null | sha256sum | awk '{print $1}')
if [[ -z "$REMOTE_HASH" || "$REMOTE_HASH" == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]]; then
log_warn "Unable to check for obolup updates. Network may be unavailable."
return
fi

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.

Does this actually work? i didn't know we had obolup hosted yet.

Comment threadobolup/obolup
if [[ -z "$KUBECTL_VERSION" ]]; then
log_error "Failed to fetch kubectl version. Please check your internet connection."
fi

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.

Not a problem for this PR, but we should make a ticket to update kubectl by comparing local kubectl version versus fetched kubectl version and do a which kubectl like we do for k9s and only run the next download if they differ and its the type of installation we expect.

Comment threadobolup/obolup
if ! curl -sSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/$ARCHITECTURE/kubectl.sha256" 2>/dev/null; then
log_warn "Failed to download kubectl checksum. Continuing without validation..."
else
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check || log_warn "kubectl checksum validation failed. Continuing anyway..."

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.

Lets crash if this fails, it looks sloppy to do the check and continue anyways

@bussyjd
bussyjd marked this pull request as draft October 20, 2025 20:09
@bussyjdbussyjd closed this Oct 20, 2025
@OisinKyne
OisinKyne deleted the fix/internet-connectivity-error branch November 7, 2025 13:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

With no internet, obolup ends unclearly

2 participants

@bussyjd@OisinKyne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: improve error handling for network connectivity issues - #38

Closed
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error
Closed

fix: improve error handling for network connectivity issues#38
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Improves error handling throughout the obolup script to provide clear feedback when network connectivity issues occur, rather than failing silently.

Problem Solved

Fixes#28 - When running without internet, obolup now provides clear error messages instead of ending unclearly.

The Issue

Previously, when running obolup without internet connection, the script would fail silently:

[INFO] Checking Kind...
[INFO] Kind v0.27.0 is installed.
[INFO] Checking helm...

And then just stop with no error message, leaving users confused.

Changes

🛡️ Improved Error Handling in All Installation Functions

kubectl installation

  • Check for network failures when fetching version
  • Clear error message when download fails
  • Graceful handling of checksum validation failures

helm installation

  • Detect and report download failures
  • Already had partial error handling, now consistent
  • Falls back to existing installation when updates can't be checked

kind installation

  • Add error handling for download failures
  • Clear error messages for network issues

k9s installation

  • Maintained already good error handling
  • Made consistent with other functions

obol CLI installation

  • Add network failure detection
  • Fallback to existing installation when possible
  • Clear error messages when installation impossible

obolup update checker

  • Handle network failures gracefully
  • Detect empty responses (sha256 of empty string)
  • Continue operation when update check fails

📝 User Experience Improvements

  • ✅ Clear error messages that explicitly mention checking internet connection
  • ✅ Graceful fallback to existing installations when updates can't be checked
  • ✅ Warning messages for non-critical network failures (e.g., checksum downloads)
  • ✅ Fatal errors only when installation is impossible without network

Example Output

Before (silent failure):

[INFO] Checking helm...

(script ends with no explanation)

After (clear error):

[INFO] Checking helm...
[ERROR] helm is not installed and unable to fetch latest version. Please check your internet connection.

Testing

To test these improvements:

  1. Disconnect from internet (turn off WiFi/ethernet)
  2. Run obolup: ./obolup
  3. Verify clear error messages appear for each component that needs network access

For tools already installed:

  • Script continues with warnings about being unable to check for updates
  • Existing installations are used

For tools not installed:

  • Clear error message about checking internet connection
  • Script exits gracefully with helpful error

Impact

  • Users get immediate, actionable feedback about network issues
  • No more confusion from silent failures
  • Script fails fast with clear messaging
  • Existing installations continue to work offline where possible

Related Issue

Closes#28

- Add explicit error messages when curl commands fail due to network issues
- Check for empty responses from API calls before processing
- Provide clear feedback when internet connection is unavailable
- Gracefully handle cases where tools are already installed but updates can't be checked
Fixes#28

@OisinKyneOisinKyne 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.

Small asks

Comment threadobolup/obolup
Comment on lines +386 to +390
REMOTE_HASH=$(curl -s "$OBOLUP_URL" 2>/dev/null | sha256sum | awk '{print $1}')
if [[ -z "$REMOTE_HASH" || "$REMOTE_HASH" == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]]; then
log_warn "Unable to check for obolup updates. Network may be unavailable."
return
fi

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.

Does this actually work? i didn't know we had obolup hosted yet.

Comment threadobolup/obolup
if [[ -z "$KUBECTL_VERSION" ]]; then
log_error "Failed to fetch kubectl version. Please check your internet connection."
fi

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.

Not a problem for this PR, but we should make a ticket to update kubectl by comparing local kubectl version versus fetched kubectl version and do a which kubectl like we do for k9s and only run the next download if they differ and its the type of installation we expect.

Comment threadobolup/obolup
if ! curl -sSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/$ARCHITECTURE/kubectl.sha256" 2>/dev/null; then
log_warn "Failed to download kubectl checksum. Continuing without validation..."
else
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check || log_warn "kubectl checksum validation failed. Continuing anyway..."

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.

Lets crash if this fails, it looks sloppy to do the check and continue anyways

@bussyjd
bussyjd marked this pull request as draft October 20, 2025 20:09
@bussyjdbussyjd closed this Oct 20, 2025
@OisinKyne
OisinKyne deleted the fix/internet-connectivity-error branch November 7, 2025 13:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

With no internet, obolup ends unclearly

2 participants

@bussyjd@OisinKyne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: improve error handling for network connectivity issues - #38

Closed
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error
Closed

fix: improve error handling for network connectivity issues#38
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Improves error handling throughout the obolup script to provide clear feedback when network connectivity issues occur, rather than failing silently.

Problem Solved

Fixes#28 - When running without internet, obolup now provides clear error messages instead of ending unclearly.

The Issue

Previously, when running obolup without internet connection, the script would fail silently:

[INFO] Checking Kind...
[INFO] Kind v0.27.0 is installed.
[INFO] Checking helm...

And then just stop with no error message, leaving users confused.

Changes

🛡️ Improved Error Handling in All Installation Functions

kubectl installation

  • Check for network failures when fetching version
  • Clear error message when download fails
  • Graceful handling of checksum validation failures

helm installation

  • Detect and report download failures
  • Already had partial error handling, now consistent
  • Falls back to existing installation when updates can't be checked

kind installation

  • Add error handling for download failures
  • Clear error messages for network issues

k9s installation

  • Maintained already good error handling
  • Made consistent with other functions

obol CLI installation

  • Add network failure detection
  • Fallback to existing installation when possible
  • Clear error messages when installation impossible

obolup update checker

  • Handle network failures gracefully
  • Detect empty responses (sha256 of empty string)
  • Continue operation when update check fails

📝 User Experience Improvements

  • ✅ Clear error messages that explicitly mention checking internet connection
  • ✅ Graceful fallback to existing installations when updates can't be checked
  • ✅ Warning messages for non-critical network failures (e.g., checksum downloads)
  • ✅ Fatal errors only when installation is impossible without network

Example Output

Before (silent failure):

[INFO] Checking helm...

(script ends with no explanation)

After (clear error):

[INFO] Checking helm...
[ERROR] helm is not installed and unable to fetch latest version. Please check your internet connection.

Testing

To test these improvements:

  1. Disconnect from internet (turn off WiFi/ethernet)
  2. Run obolup: ./obolup
  3. Verify clear error messages appear for each component that needs network access

For tools already installed:

  • Script continues with warnings about being unable to check for updates
  • Existing installations are used

For tools not installed:

  • Clear error message about checking internet connection
  • Script exits gracefully with helpful error

Impact

  • Users get immediate, actionable feedback about network issues
  • No more confusion from silent failures
  • Script fails fast with clear messaging
  • Existing installations continue to work offline where possible

Related Issue

Closes#28

- Add explicit error messages when curl commands fail due to network issues
- Check for empty responses from API calls before processing
- Provide clear feedback when internet connection is unavailable
- Gracefully handle cases where tools are already installed but updates can't be checked
Fixes#28

@OisinKyneOisinKyne 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.

Small asks

Comment threadobolup/obolup
Comment on lines +386 to +390
REMOTE_HASH=$(curl -s "$OBOLUP_URL" 2>/dev/null | sha256sum | awk '{print $1}')
if [[ -z "$REMOTE_HASH" || "$REMOTE_HASH" == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]]; then
log_warn "Unable to check for obolup updates. Network may be unavailable."
return
fi

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.

Does this actually work? i didn't know we had obolup hosted yet.

Comment threadobolup/obolup
if [[ -z "$KUBECTL_VERSION" ]]; then
log_error "Failed to fetch kubectl version. Please check your internet connection."
fi

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.

Not a problem for this PR, but we should make a ticket to update kubectl by comparing local kubectl version versus fetched kubectl version and do a which kubectl like we do for k9s and only run the next download if they differ and its the type of installation we expect.

Comment threadobolup/obolup
if ! curl -sSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/$ARCHITECTURE/kubectl.sha256" 2>/dev/null; then
log_warn "Failed to download kubectl checksum. Continuing without validation..."
else
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check || log_warn "kubectl checksum validation failed. Continuing anyway..."

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.

Lets crash if this fails, it looks sloppy to do the check and continue anyways

@bussyjd
bussyjd marked this pull request as draft October 20, 2025 20:09
@bussyjdbussyjd closed this Oct 20, 2025
@OisinKyne
OisinKyne deleted the fix/internet-connectivity-error branch November 7, 2025 13:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

With no internet, obolup ends unclearly

2 participants

@bussyjd@OisinKyne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix: improve error handling for network connectivity issues - #38

Closed
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error
Closed

fix: improve error handling for network connectivity issues#38
bussyjd wants to merge 1 commit into
mainfrom
fix/internet-connectivity-error

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Improves error handling throughout the obolup script to provide clear feedback when network connectivity issues occur, rather than failing silently.

Problem Solved

Fixes#28 - When running without internet, obolup now provides clear error messages instead of ending unclearly.

The Issue

Previously, when running obolup without internet connection, the script would fail silently:

[INFO] Checking Kind...
[INFO] Kind v0.27.0 is installed.
[INFO] Checking helm...

And then just stop with no error message, leaving users confused.

Changes

🛡️ Improved Error Handling in All Installation Functions

kubectl installation

  • Check for network failures when fetching version
  • Clear error message when download fails
  • Graceful handling of checksum validation failures

helm installation

  • Detect and report download failures
  • Already had partial error handling, now consistent
  • Falls back to existing installation when updates can't be checked

kind installation

  • Add error handling for download failures
  • Clear error messages for network issues

k9s installation

  • Maintained already good error handling
  • Made consistent with other functions

obol CLI installation

  • Add network failure detection
  • Fallback to existing installation when possible
  • Clear error messages when installation impossible

obolup update checker

  • Handle network failures gracefully
  • Detect empty responses (sha256 of empty string)
  • Continue operation when update check fails

📝 User Experience Improvements

  • ✅ Clear error messages that explicitly mention checking internet connection
  • ✅ Graceful fallback to existing installations when updates can't be checked
  • ✅ Warning messages for non-critical network failures (e.g., checksum downloads)
  • ✅ Fatal errors only when installation is impossible without network

Example Output

Before (silent failure):

[INFO] Checking helm...

(script ends with no explanation)

After (clear error):

[INFO] Checking helm...
[ERROR] helm is not installed and unable to fetch latest version. Please check your internet connection.

Testing

To test these improvements:

  1. Disconnect from internet (turn off WiFi/ethernet)
  2. Run obolup: ./obolup
  3. Verify clear error messages appear for each component that needs network access

For tools already installed:

  • Script continues with warnings about being unable to check for updates
  • Existing installations are used

For tools not installed:

  • Clear error message about checking internet connection
  • Script exits gracefully with helpful error

Impact

  • Users get immediate, actionable feedback about network issues
  • No more confusion from silent failures
  • Script fails fast with clear messaging
  • Existing installations continue to work offline where possible

Related Issue

Closes#28

- Add explicit error messages when curl commands fail due to network issues
- Check for empty responses from API calls before processing
- Provide clear feedback when internet connection is unavailable
- Gracefully handle cases where tools are already installed but updates can't be checked
Fixes#28

@OisinKyneOisinKyne 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.

Small asks

Comment threadobolup/obolup
Comment on lines +386 to +390
REMOTE_HASH=$(curl -s "$OBOLUP_URL" 2>/dev/null | sha256sum | awk '{print $1}')
if [[ -z "$REMOTE_HASH" || "$REMOTE_HASH" == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]]; then
log_warn "Unable to check for obolup updates. Network may be unavailable."
return
fi

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.

Does this actually work? i didn't know we had obolup hosted yet.

Comment threadobolup/obolup
if [[ -z "$KUBECTL_VERSION" ]]; then
log_error "Failed to fetch kubectl version. Please check your internet connection."
fi

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.

Not a problem for this PR, but we should make a ticket to update kubectl by comparing local kubectl version versus fetched kubectl version and do a which kubectl like we do for k9s and only run the next download if they differ and its the type of installation we expect.

Comment threadobolup/obolup
if ! curl -sSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/$ARCHITECTURE/kubectl.sha256" 2>/dev/null; then
log_warn "Failed to download kubectl checksum. Continuing without validation..."
else
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check || log_warn "kubectl checksum validation failed. Continuing anyway..."

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.

Lets crash if this fails, it looks sloppy to do the check and continue anyways

@bussyjd
bussyjd marked this pull request as draft October 20, 2025 20:09
@bussyjdbussyjd closed this Oct 20, 2025
@OisinKyne
OisinKyne deleted the fix/internet-connectivity-error branch November 7, 2025 13:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

With no internet, obolup ends unclearly

2 participants

@bussyjd@OisinKyne