diff --git a/website/components/remote-plugin-docs/server.js b/website/components/remote-plugin-docs/server.js
index 0b73c4c07..26522e520 100644
--- a/website/components/remote-plugin-docs/server.js
+++ b/website/components/remote-plugin-docs/server.js
@@ -6,6 +6,7 @@ import {
} from '@hashicorp/react-docs-page/server'
import renderPageMdx from '@hashicorp/react-docs-page/render-page-mdx'
import resolveNavData from './utils/resolve-nav-data'
+import fetchLatestReleaseTag from './utils/fetch-latest-release-tag'
async function generateStaticPaths({
navDataFile,
@@ -49,6 +50,14 @@ async function generateStaticProps({
const githubFileUrl = remoteFile
? remoteFile.sourceUrl
: `https://github.com/hashicorp/${product.slug}/blob/${mainBranch}/website/${filePath}`
+ // If this is a plugin, and if
+ // the version has been specified as "latest",
+ // determine the tag this corresponds to, so that
+ // we can show this explicit version number in docs
+ const latestReleaseTag =
+ pluginData?.version === 'latest'
+ ? await fetchLatestReleaseTag(pluginData.repo)
+ : pluginData?.version
// For plugin pages, prefix the MDX content with a
// label that reflects the plugin tier
// (current options are "Official" or "Community")
@@ -64,6 +73,10 @@ async function generateStaticProps({
if (pluginData?.isHcpPackerReady) {
badgesMdx.push(``)
}
+ // Add badge showing the latest release version number
+ if (latestReleaseTag) {
+ badgesMdx.push(``)
+ }
// If we have badges to add, inject them into the MDX
if (badgesMdx.length > 0) {
const badgeChildrenMdx = badgesMdx.join('')
diff --git a/website/components/remote-plugin-docs/utils/fetch-latest-release-tag.js b/website/components/remote-plugin-docs/utils/fetch-latest-release-tag.js
new file mode 100644
index 000000000..4b1b10d9a
--- /dev/null
+++ b/website/components/remote-plugin-docs/utils/fetch-latest-release-tag.js
@@ -0,0 +1,24 @@
+async function fetchLatestReleaseTag(repo) {
+ const latestReleaseUrl = `https://github.com/${repo}/releases/latest`
+ const redirectedUrl = await getRedirectedUrl(latestReleaseUrl)
+ if (!redirectedUrl) return false
+ const latestTag = redirectedUrl.match(/tag\/(.*)/)[1]
+ return latestTag
+}
+
+async function getRedirectedUrl(url) {
+ return new Promise((resolve, reject) => {
+ const https = require('https')
+ const req = https.request(url, (res) => {
+ if (res.statusCode >= 300 && res.statusCode < 400) {
+ resolve(res.headers.location)
+ } else {
+ resolve(false)
+ }
+ })
+ req.on('error', reject)
+ req.end()
+ })
+}
+
+module.exports = fetchLatestReleaseTag
diff --git a/website/components/remote-plugin-docs/utils/resolve-nav-data.js b/website/components/remote-plugin-docs/utils/resolve-nav-data.js
index bc974b145..21e8ae518 100644
--- a/website/components/remote-plugin-docs/utils/resolve-nav-data.js
+++ b/website/components/remote-plugin-docs/utils/resolve-nav-data.js
@@ -184,8 +184,10 @@ async function resolvePluginEntryDocs(pluginConfigEntry, currentPath) {
path: urlPath,
remoteFile: { filePath, fileString, sourceUrl },
pluginData: {
+ repo,
tier: parsedPluginTier,
isHcpPackerReady,
+ version,
},
}
})