diff --git a/src/components/LeftSidebar/RecursiveSidebar.astro b/src/components/LeftSidebar/RecursiveSidebar.astro
index ef774d47504..7bca0ad7c2e 100644
--- a/src/components/LeftSidebar/RecursiveSidebar.astro
+++ b/src/components/LeftSidebar/RecursiveSidebar.astro
@@ -20,6 +20,19 @@ function removeSlashes(url: string): string {
return sanitizedUrl
}
+/** Checks if the URL is external (starts with http:// or https://) */
+function isExternalUrl(url: string): boolean {
+ return url.startsWith("http://") || url.startsWith("https://")
+}
+
+/** Builds the correct href based on whether the URL is internal or external */
+function buildHref(url: string): string {
+ if (isExternalUrl(url)) {
+ return url // Return external URLs as-is
+ }
+ return `${Astro.site?.pathname}${url}` // Prepend base path for internal URLs
+}
+
/**
* Determines if a page matches the current page or should be highlighted.
* Handles:
@@ -29,6 +42,9 @@ function removeSlashes(url: string): string {
function isCurrentPageMatch(sectionUrl: string, currentPage: string, highlightAsCurrent: string[] = []): boolean {
if (!sectionUrl) return false
+ // External URLs should never match the current page
+ if (isExternalUrl(sectionUrl)) return false
+
const normalizedSectionUrl = removeSlashes(sectionUrl)
const normalizedCurrentPage = removeSlashes(currentPage.slice(1))
@@ -51,6 +67,12 @@ function isCurrentPageMatch(sectionUrl: string, currentPage: string, highlightAs
*/
function shouldExpandSection(item: SectionContent, currentPage: string): boolean {
const normalizedCurrentPage = removeSlashes(currentPage.slice(1))
+
+ // For external URLs, we don't need to expand the section
+ if (item.url && isExternalUrl(item.url)) {
+ return false
+ }
+
const normalizedItemUrl = item.url ? removeSlashes(item.url) : ""
// If this item has a URL, check if the current page is this item or a descendant
@@ -87,8 +109,10 @@ function shouldExpandSection(item: SectionContent, currentPage: string): boolean
{item.url ? (
{item.title}
@@ -103,8 +127,10 @@ function shouldExpandSection(item: SectionContent, currentPage: string): boolean
) : (
{item.title}
diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts
index 9861b2571aa..b2f0e3683fe 100644
--- a/src/config/sidebar.ts
+++ b/src/config/sidebar.ts
@@ -105,6 +105,10 @@ export const SIDEBAR: Partial> = {
title: "Flags Contract Registry",
url: "data-feeds/contract-registry",
},
+ {
+ title: "Release Notes",
+ url: "https://dev.chain.link/changelog?product=Data+Feeds",
+ },
],
},
{
@@ -295,7 +299,7 @@ export const SIDEBAR: Partial> = {
},
{
title: "Release Notes",
- url: "data-streams/release-notes",
+ url: "https://dev.chain.link/changelog?product=Data+Streams",
},
],
},
@@ -527,14 +531,14 @@ export const SIDEBAR: Partial> = {
title: "Service Limits",
url: "chainlink-automation/overview/service-limits",
},
- {
- title: "Release Notes",
- url: "chainlink-automation/overview/automation-release-notes",
- },
{
title: "Migrate to Automation v2.1",
url: "chainlink-automation/guides/migrate-to-v2",
},
+ {
+ title: "Release Notes",
+ url: "https://dev.chain.link/changelog?product=Automation",
+ },
],
},
{
@@ -712,7 +716,7 @@ export const SIDEBAR: Partial> = {
},
{
title: "Release Notes",
- url: "chainlink-functions/resources/release-notes",
+ url: "https://dev.chain.link/changelog?product=Functions",
},
],
},
@@ -911,7 +915,7 @@ export const SIDEBAR: Partial> = {
},
{
title: "Release Notes",
- url: "vrf/release-notes",
+ url: "https://dev.chain.link/changelog?product=VRF",
},
],
},
@@ -1092,7 +1096,7 @@ export const SIDEBAR: Partial> = {
},
{
title: "Release Notes",
- url: "ccip/release-notes",
+ url: "https://dev.chain.link/changelog?product=CCIP",
},
],
},
@@ -1576,10 +1580,6 @@ export const SIDEBAR: Partial> = {
title: "Overview",
url: "chainlink-nodes",
},
- {
- title: "Release Notes",
- url: "chainlink-nodes/node-versions",
- },
{
title: "Run a Chainlink Node",
url: "chainlink-nodes/v1/running-a-chainlink-node",
@@ -1606,6 +1606,10 @@ export const SIDEBAR: Partial> = {
title: "System Requirements",
url: "chainlink-nodes/resources/requirements",
},
+ {
+ title: "Release Notes",
+ url: "https://dev.chain.link/changelog?product=Nodes",
+ },
],
},
{
diff --git a/src/content/ccip/release-notes.mdx b/src/content/ccip/release-notes.mdx
deleted file mode 100644
index 703b9b9634f..00000000000
--- a/src/content/ccip/release-notes.mdx
+++ /dev/null
@@ -1,11 +0,0 @@
----
-section: ccip
-date: Last Modified
-title: "Chainlink CCIP Release Notes"
-metadata:
- description: "Stay updated with the latest Chainlink CCIP releases. Find detailed release notes covering new features, improvements, and important updates for the protocol."
----
-
-import { ReleaseNotes } from "@components"
-
-
diff --git a/src/content/chainlink-automation/concepts/best-practice.mdx b/src/content/chainlink-automation/concepts/best-practice.mdx
index f8628fad460..7c7079c7323 100644
--- a/src/content/chainlink-automation/concepts/best-practice.mdx
+++ b/src/content/chainlink-automation/concepts/best-practice.mdx
@@ -32,7 +32,7 @@ Alternatively, set the forwarder address when your upkeep is deployed and read t
### Use the Forwarder
-If your upkeep performs **sensitive** functions in your protocol, consider using the [`Forwarder`](/chainlink-automation/overview/automation-release-notes) to lock it down so `performUpkeep` can only be called by the `Forwarder`. Add other permissible addresses if you need to call it yourself. Note the forwarder is only determined after registration so make this a mutable variable and ensure you add a setter function with permissions for you to set it.
+If your upkeep performs **sensitive** functions in your protocol, consider using the `Forwarder` to lock it down so `performUpkeep` can only be called by the `Forwarder`. Add other permissible addresses if you need to call it yourself. Note the forwarder is only determined after registration so make this a mutable variable and ensure you add a setter function with permissions for you to set it.
### Verify Data Streams reports fetched with StreamsLookup
diff --git a/src/content/chainlink-automation/overview/automation-release-notes.mdx b/src/content/chainlink-automation/overview/automation-release-notes.mdx
deleted file mode 100644
index 7c51b8bb372..00000000000
--- a/src/content/chainlink-automation/overview/automation-release-notes.mdx
+++ /dev/null
@@ -1,20 +0,0 @@
----
-section: automation
-date: Last Modified
-title: "Chainlink Automation Release Notes"
-isMdx: true
-whatsnext:
- {
- "Register Time-Based Upkeeps": "/chainlink-automation/guides/job-scheduler",
- "Register Custom Logic Upkeeps": "/chainlink-automation/guides/register-upkeep",
- "Register Log Trigger Upkeeps": "/chainlink-automation/guides/log-trigger/",
- }
----
-
-import { ReleaseNotes } from "@components"
-
-
-
-## Questions
-
-Ask questions in the [#automation channel](https://discord.com/channels/592041321326182401/821350860302581771) in our [Discord server](https://discord.gg/qj9qarT).
diff --git a/src/content/chainlink-functions/resources/release-notes.mdx b/src/content/chainlink-functions/resources/release-notes.mdx
deleted file mode 100644
index 59bb9c33bda..00000000000
--- a/src/content/chainlink-functions/resources/release-notes.mdx
+++ /dev/null
@@ -1,9 +0,0 @@
----
-section: chainlinkFunctions
-date: Last Modified
-title: "Chainlink Functions Release Notes"
----
-
-import { ReleaseNotes } from "@components"
-
-
diff --git a/src/content/chainlink-nodes/node-versions.mdx b/src/content/chainlink-nodes/node-versions.mdx
deleted file mode 100644
index 3d46fc4d6dd..00000000000
--- a/src/content/chainlink-nodes/node-versions.mdx
+++ /dev/null
@@ -1,19 +0,0 @@
----
-section: nodeOperator
-date: Last Modified
-title: "Chainlink Node Releases"
-whatsnext: { "Running a Chainlink Node": "/chainlink-nodes/v1/running-a-chainlink-node" }
-metadata:
- title: "Node Versions and Release Notes"
- description: "Details about various node versions and how to migrate between them."
----
-
-import { ReleaseNotes } from "@components"
-
-To find the complete list of releases, see [Chainlink GitHub repository release list](https://github.com/smartcontractkit/chainlink/releases).
-
-
-
-## Older release notes
-
-To find release notes for versions before v2.0.0, see [Chainlink GitHub repository release list](https://github.com/smartcontractkit/chainlink/releases).
diff --git a/src/content/data-streams/release-notes.mdx b/src/content/data-streams/release-notes.mdx
deleted file mode 100644
index 42b8eee71be..00000000000
--- a/src/content/data-streams/release-notes.mdx
+++ /dev/null
@@ -1,20 +0,0 @@
----
-section: dataStreams
-date: Last Modified
-title: "Release Notes"
-whatsnext:
- {
- "Learn the basics about how to retrieve Data Streams reports in the Getting Started guide.": "/data-streams/getting-started",
- "Find the list of available feed IDs.": "/data-streams/crypto-streams",
- "Find the schema of data to expect from Data Streams reports.": "/data-streams/reference/report-schema",
- }
----
-
-import { Aside, ReleaseNotes } from "@components"
-
-
-
-
diff --git a/src/content/vrf/release-notes.mdx b/src/content/vrf/release-notes.mdx
deleted file mode 100644
index 1ebcc47fa46..00000000000
--- a/src/content/vrf/release-notes.mdx
+++ /dev/null
@@ -1,11 +0,0 @@
----
-section: vrf
-date: Last Modified
-title: "Chainlink VRF Release Notes"
-isMdx: true
-whatsnext: { "Migrate to VRF V2.5": "/vrf/v2-5/migration-from-v2" }
----
-
-import { ReleaseNotes } from "@components"
-
-
diff --git a/src/features/redirects/redirects.json b/src/features/redirects/redirects.json
index eda7bf7a657..b1de1a528fa 100644
--- a/src/features/redirects/redirects.json
+++ b/src/features/redirects/redirects.json
@@ -2309,6 +2309,36 @@
"source": "data-feeds/feed-registry/feed-registry-functions",
"destination": "data-feeds",
"statusCode": 301
+ },
+ {
+ "source": "data-streams/release-notes",
+ "destination": "https://dev.chain.link/changelog?product=Data+Streams",
+ "statusCode": 301
+ },
+ {
+ "source": "ccip/release-notes",
+ "destination": "https://dev.chain.link/changelog?product=CCIP",
+ "statusCode": 301
+ },
+ {
+ "source": "chainlink-automation/overview/automation-release-notes",
+ "destination": "https://dev.chain.link/changelog?product=Automation",
+ "statusCode": 301
+ },
+ {
+ "source": "chainlink-functions/resources/release-notes",
+ "destination": "https://dev.chain.link/changelog?product=Functions",
+ "statusCode": 301
+ },
+ {
+ "source": "vrf/release-notes",
+ "destination": "https://dev.chain.link/changelog?product=VRF",
+ "statusCode": 301
+ },
+ {
+ "source": "chainlink-nodes/node-versions",
+ "destination": "https://dev.chain.link/changelog?product=Nodes",
+ "statusCode": 301
}
]
}