-
Notifications
You must be signed in to change notification settings - Fork 27
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor to fetch with latest sha not ref
- Loading branch information
Showing
5 changed files
with
117 additions
and
43 deletions.
There are no files selected for viewing
33 changes: 33 additions & 0 deletions
33
build-libs/__tests__/get-latest-content-sha-for-product.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/** | ||
* Copyright (c) HashiCorp, Inc. | ||
* SPDX-License-Identifier: MPL-2.0 | ||
*/ | ||
|
||
import getLatestContentShaForProduct from '../get-latest-content-sha-for-product' | ||
import fetchGithubFile from '@build-libs/fetch-github-file' | ||
import { PRODUCT_REDIRECT_ENTRIES } from '@build-libs/redirects' | ||
|
||
describe('getLatestContentShaForProduct', () => { | ||
PRODUCT_REDIRECT_ENTRIES.forEach(({ repo, path }) => { | ||
it(`fetches the latest SHA for the "${repo}" repo`, async () => { | ||
const latestSha = await getLatestContentShaForProduct(repo) | ||
expect(typeof latestSha).toBe('string') | ||
}) | ||
|
||
if (['hcp-docs', 'sentinel', 'ptfe-releases'].includes(repo)) { | ||
console.log(`Skipping test for "${repo}" repo, as it's a private repo.`) | ||
} else { | ||
it(`fetches the latest SHA for the "${repo}" repo, then validates the SHA by fetching redirects`, async () => { | ||
const latestSha = await getLatestContentShaForProduct(repo) | ||
expect(typeof latestSha).toBe('string') | ||
const redirectsFileString = await fetchGithubFile({ | ||
owner: 'hashicorp', | ||
repo: repo, | ||
path: path, | ||
ref: latestSha, | ||
}) | ||
expect(typeof redirectsFileString).toBe('string') | ||
}) | ||
} | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/** | ||
* Copyright (c) HashiCorp, Inc. | ||
* SPDX-License-Identifier: MPL-2.0 | ||
*/ | ||
|
||
/** | ||
* We're using the docs endpoints to fetch the latest SHA, so we use | ||
* the env var for the docs API. | ||
*/ | ||
const MKTG_CONTENT_DOCS_API = process.env.MKTG_CONTENT_DOCS_API | ||
|
||
/** | ||
* A map of all possible `product` slugs to known content API endpoints that | ||
* will return an object with a `ref` property that accurately reflects the | ||
* ref from which the latest content was uploaded. | ||
*/ | ||
const KNOWN_LATEST_REF_ENDPOINTS = { | ||
boundary: '/api/content/boundary/nav-data/latest/docs', | ||
nomad: '/api/content/nomad/nav-data/latest/docs', | ||
vault: '/api/content/vault/nav-data/latest/docs', | ||
vagrant: '/api/content/vagrant/nav-data/latest/docs', | ||
packer: '/api/content/packer/nav-data/latest/docs', | ||
consul: '/api/content/consul/nav-data/latest/docs', | ||
'terraform-docs-common': | ||
'/api/content/terraform-docs-common/nav-data/latest/docs', | ||
'hcp-docs': '/api/content/hcp-docs/nav-data/latest/docs', | ||
'ptfe-releases': '/api/content/ptfe-releases/nav-data/latest/enterprise', | ||
sentinel: '/api/content/sentinel/nav-data/latest/sentinel', | ||
} | ||
|
||
/** | ||
* Fetch the latest sha from the content API for a given product. | ||
* This relies on known `nav-data` endpoints for each product. | ||
* | ||
* @param {string} product | ||
* @returns {Promise<string>} | ||
*/ | ||
async function getLatestContentShaForProduct(product) { | ||
const contentUrl = new URL(MKTG_CONTENT_DOCS_API) | ||
const knownEndpoint = KNOWN_LATEST_REF_ENDPOINTS[product] | ||
if (!knownEndpoint) { | ||
throw new Error( | ||
`getLatestContentShaForProduct failed, with unknown product: ${product}. Please add a known endpoint for this product to KNOWN_LATEST_REF_ENDPOINTS.` | ||
) | ||
} | ||
contentUrl.pathname = knownEndpoint | ||
const latestSha = await fetch(contentUrl.toString()) | ||
.then((resp) => resp.json()) | ||
.then((json) => json.result.sha) | ||
return latestSha | ||
} | ||
|
||
module.exports = getLatestContentShaForProduct |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters