Skip to content

Commit 7c1159d

Browse files
committed
List and Table updates to eol-runtime-upgrade-dependency-hell-migration article
1 parent 0ba854a commit 7c1159d

3 files changed

Lines changed: 65 additions & 40 deletions

File tree

‎_TODO.md‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,8 @@ https://mermaid.js.org/config/directives.html
276276

277277
- How can we handle footnotes in List components? src/content/articles/kubernetes-multi-cluster-fleet-management-configuration/pdf.mdx line 80
278278

279+
- Need to update Case Studies with lists and tables too
280+
279281
### This file was badly mangled during refactoring, need to compare against original:
280282

281283
src/content/articles/internal-developer-portal-platform-self-service-actions/pdf.mdx
@@ -320,6 +322,16 @@ src/content/articles/internal-developer-portal-platform-self-service-actions/pdf
320322
]}
321323
/>
322324

325+
### Spacing out the boxes:
326+
327+
<List
328+
variant="zebra-list"
329+
classes={{
330+
ul: "!divide-y-0 !border-0 !overflow-visible !rounded-none space-y-4",
331+
li: "!rounded-lg !border border-trim",
332+
}}
333+
/>
334+
323335
<Table
324336
fullWidth={false}
325337
classes={{

‎src/content/articles/eol-runtime-upgrade-dependency-hell-migration/index.mdx‎

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,14 @@ featured: true
1010
---
1111

1212
*[EOL]: End of Life
13-
*[API]: Application Programming Interface
14-
*[CI]: Continuous Integration
1513

1614
## Introduction
1715

1816
The runtime hits EOL, the calendar says upgrade now, and you try to bump the version. Then it starts: a dependency fails to install, a native module won't compile, a transitive package you've never heard of throws cryptic errors. Welcome to dependency hell.
1917

2018
Here's the uncomfortable truth: the blocker is almost never your code. It's the packages you don't call directly — three or four levels deep in the dependency tree — that stall your upgrade. Your direct dependencies all claim Node 20 support, but somewhere in that transitive graph, a package ships a native binary compiled against Node 16 headers. You're blocked by code you don't own and have never looked at.
2119

22-
An EOL runtime upgrade isn't a version bump. It's a forced audit of your entire dependency graph. The longer the gap between your current runtime and the supported version, the more compounding breakage you inherit: abandoned libraries, renamed packages, removed APIs, and binaries that no longer compile. Every day past EOL is a day your runtime won't receive security patches. The question isn't __whether__ to upgrade, but how fast you can safely do it.
20+
<Highlighter>An EOL runtime upgrade isn't a version bump. It's a forced audit of your entire dependency graph.</Highlighter> The longer the gap between your current runtime and the supported version, the more compounding breakage you inherit: abandoned libraries, renamed packages, removed APIs, and binaries that no longer compile. Every day past EOL is a day your runtime won't receive security patches. The question isn't __whether__ to upgrade, but how fast you can safely do it.
2321

2422
This article is about finding the real blockers, dealing with packages no one maintains anymore, and forcing resolution when upstream can't help you.
2523

@@ -42,7 +40,7 @@ The order matters. The general pattern I follow:
4240
items={[
4341
{
4442
lead: "Unblock first.",
45-
text: "Eliminate packages that have no path forward on the new runtime. If you're stuck on Node 16 because of `node-sass`, replacing it with Dart Sass is the first step — not because it's the most important change, but because everything else depends on it. These blockers sit at the bottom of your dependency graph, and until they're gone, you cannot move.",
43+
text: 'Eliminate packages that have no path forward on the new runtime. If you\'re stuck on Node 16 because of <span class="font-mono">node-sass</span>, replacing it with Dart Sass is the first step — not because it\'s the most important change, but because everything else depends on it. These blockers sit at the bottom of your dependency graph, and until they\'re gone, you cannot move.',
4644
},
4745
{
4846
lead: "Upgrade core dependencies.",
@@ -70,23 +68,23 @@ Not every old package is abandoned. Some packages are simply stable — they do
7068
Your options, roughly in order of preference:
7169

7270
<List
73-
variant="check-icons-list"
71+
variant="zebra-list"
7472
items={[
7573
{
7674
lead: "Find a replacement.",
77-
text: "Many abandoned packages have actively maintained alternatives. The `request` library, which powered half the Node ecosystem for years, was deprecated in 2020. Its replacements—`node-fetch`, `axios`, `got`—are well documented and widely adopted. Search for \"[package name] alternative\" or check the npm deprecation notice for suggestions.",
75+
text: 'Many abandoned packages have actively maintained alternatives. The <span class="font-mono">request</span> library, which powered half the Node ecosystem for years, was deprecated in 2020. Its replacements — <span class="font-mono">node-fetch</span>, <span class="font-mono">axios</span>, <span class="font-mono">got</span> — are well documented and widely adopted. Search for "[package name] alternative" or check the npm deprecation notice for suggestions.',
7876
},
7977
{
8078
lead: "Upgrade to a compatible version.",
8179
text: "Sometimes the package isn't abandoned; you're just on an old version. Check whether a newer major version exists that supports your target runtime.",
8280
},
8381
{
8482
lead: "Fork and patch.",
85-
text: "If the package is abandoned and has no replacement, fork it to your organization, apply the minimal fixes needed for runtime compatibility, and publish it under your own scope. The `npm:` prefix lets you alias the fork to the original package name, so you don't need to update import statements throughout your codebase.",
83+
text: 'If the package is abandoned and has no replacement, fork it to your organization, apply the minimal fixes needed for runtime compatibility, and publish it under your own scope. The <span class="font-mono">npm:</span> prefix lets you alias the fork to the original package name, so you don\'t need to update import statements throughout your codebase.',
8684
},
8785
{
8886
lead: "Vendor the code.",
89-
text: "For small packages with simple functionality, copying the source into your repository may be simpler than maintaining a fork. Put it in a `vendor/` directory and apply whatever patches you need.",
87+
text: 'For small packages with simple functionality, copying the source into your repository may be simpler than maintaining a fork. Put it in a <span class="font-mono">vendor/</span> directory and apply whatever patches you need.',
9088
},
9189
{
9290
lead: "Rewrite.",

0 commit comments

Comments
 (0)