diff --git a/.github/workflows/docs-new-announcement.yml b/.github/workflows/docs-new-announcement.yml
new file mode 100644
index 0000000000000..5e980cee24ba8
--- /dev/null
+++ b/.github/workflows/docs-new-announcement.yml
@@ -0,0 +1,48 @@
+name: Generate Docs Release Announcement Bar
+on:
+ release:
+ types: [published]
+
+jobs:
+ add-announcement:
+ runs-on: ubuntu-latest
+ env:
+ GH_TOKEN: ${{ secrets.REFERENCE_PAT }}
+ steps:
+ - name: Cancel Previous Runs
+ uses: styfle/cancel-workflow-action@0.9.1
+ with:
+ access_token: ${{ github.token }}
+
+ - name: Checkout
+ uses: actions/checkout@v2.3.5
+ with:
+ fetch-depth: 0
+
+ - name: Setup Node.js environment
+ uses: actions/setup-node@v2.4.1
+ with:
+ node-version: "14"
+ cache: "yarn"
+
+ - name: Install dependencies
+ uses: ./.github/actions/cache-deps
+ with:
+ extension: docs-release
+
+ - name: Build Packages
+ run: yarn build
+
+ - name: Generate Announcement Bar
+ run: yarn generate:announcement
+
+ - name: Create Pull Request
+ uses: peter-evans/create-pull-request@v4
+ with:
+ commit-message: 'chore(docs): Generated Docs Announcement Bar (automated)'
+ base: 'master'
+ title: 'chore(docs): Generated Docs Announcement Bar (automated)'
+ labels: 'type: chore'
+ add-paths: www/docs/**
+ branch: 'chore/generate-announcement'
+ branch-suffix: 'timestamp'
\ No newline at end of file
diff --git a/.github/workflows/docs-remove-announcement.yml b/.github/workflows/docs-remove-announcement.yml
new file mode 100644
index 0000000000000..18adccfb22b2f
--- /dev/null
+++ b/.github/workflows/docs-remove-announcement.yml
@@ -0,0 +1,49 @@
+# Checks if the announcement bar info was last edited more than 6 days ago, and if so removes it
+name: Remove Docs Release Announcement Bar
+on:
+ schedule:
+ - cron: '0 0 * * *'
+
+jobs:
+ remove-announcement:
+ runs-on: ubuntu-latest
+ env:
+ GH_TOKEN: ${{ secrets.REFERENCE_PAT }}
+ steps:
+ - name: Cancel Previous Runs
+ uses: styfle/cancel-workflow-action@0.9.1
+ with:
+ access_token: ${{ github.token }}
+
+ - name: Checkout
+ uses: actions/checkout@v2.3.5
+ with:
+ fetch-depth: 0
+
+ - name: Setup Node.js environment
+ uses: actions/setup-node@v2.4.1
+ with:
+ node-version: "14"
+ cache: "yarn"
+
+ - name: Install dependencies
+ uses: ./.github/actions/cache-deps
+ with:
+ extension: docs-remove-announcement
+
+ - name: Build Packages
+ run: yarn build
+
+ - name: Remove Announcement Bar
+ run: yarn generate:announcement --expire
+
+ - name: Create Pull Request
+ uses: peter-evans/create-pull-request@v4
+ with:
+ commit-message: 'chore(docs): Removed Docs Announcement Bar (automated)'
+ base: 'master'
+ title: 'chore(docs): Removed Docs Announcement Bar (automated)'
+ labels: 'type: chore'
+ add-paths: www/docs/**
+ branch: 'chore/remove-announcement'
+ branch-suffix: 'timestamp'
\ No newline at end of file
diff --git a/package.json b/package.json
index 85290fcd72e70..35899d1079790 100644
--- a/package.json
+++ b/package.json
@@ -69,11 +69,13 @@
"generate:services": "typedoc --options typedoc.services.js",
"generate:js-client": "typedoc --options typedoc.js-client.js",
"generate:entities": "typedoc --options typedoc.entities.js",
- "release:snapshot": "changeset publish --no-git-tags --snapshot --tag snapshot"
+ "release:snapshot": "changeset publish --no-git-tags --snapshot --tag snapshot",
+ "generate:announcement": "node ./scripts/doc-change-release.js"
},
"dependencies": {
"@changesets/changelog-github": "^0.4.5",
"@changesets/cli": "^2.23.0",
+ "@octokit/core": "^4.0.5",
"global": "^4.4.0",
"import-from": "^3.0.0",
"oas-normalize": "^5.0.1",
diff --git a/scripts/doc-change-release.js b/scripts/doc-change-release.js
new file mode 100644
index 0000000000000..48a07799c4ab9
--- /dev/null
+++ b/scripts/doc-change-release.js
@@ -0,0 +1,61 @@
+#!/usr/bin/env node
+
+const { Octokit } = require("@octokit/core");
+const fs = require('fs');
+const path = require('path');
+
+const shouldExpire = process.argv.indexOf('--expire') !== -1;
+const octokit = new Octokit({
+ auth: process.env.GH_TOKEN
+});
+
+async function main () {
+ let announcement = {};
+
+ if (shouldExpire) {
+ //check if the file was last updated 6 days ago
+ try {
+ const fileStat = fs.statSync(path.join(__dirname, '..', 'www', 'docs', 'announcement.json'));
+ if (dateDiffInDays(fileStat.mtime, new Date()) < 6) {
+ console.log("File was edited less than 6 days ago. Expiry canceled.");
+ return;
+ }
+ } catch (e) {
+ //file doesn't exist, continue
+ }
+ } else {
+ //retrieve the latest release
+ const response = await octokit.request('GET /repos/{owner}/{repo}/releases/latest', {
+ owner: 'medusajs',
+ repo: 'medusa'
+ });
+
+ const version = response.data.tag_name;
+
+ //add new announcement
+ announcement = {
+ id: `release-${version.replace(/\./g, '-')}`,
+ content: `New Release! Version ${version} of Medusa is out now! Read all about it here.`,
+ backgroundColor: '#7C53FF',
+ textColor: '#fff',
+ isCloseable: false,
+ }
+ }
+
+ //write new config file
+ fs.writeFileSync(path.join(__dirname, '..', 'www', 'docs', 'announcement.json'), JSON.stringify(announcement));
+ console.log(`Announcement Bar has been ${shouldExpire ? 'removed' : 'added'}`);
+}
+
+const _MS_PER_DAY = 1000 * 60 * 60 * 24;
+
+// a and b are javascript Date objects
+function dateDiffInDays(a, b) {
+ // Discard the time and time-zone information.
+ const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
+ const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
+
+ return Math.floor((utc2 - utc1) / _MS_PER_DAY);
+}
+
+main();
\ No newline at end of file
diff --git a/www/docs/announcement.json b/www/docs/announcement.json
new file mode 100644
index 0000000000000..1aa06c2068716
--- /dev/null
+++ b/www/docs/announcement.json
@@ -0,0 +1 @@
+{"id":"release-v1-4-1","content":"New Release! Version v1.4.1 of Medusa is out now! Read all about it here.","backgroundColor":"#7C53FF","textColor":"#fff","isCloseable":false}
\ No newline at end of file
diff --git a/www/docs/docusaurus.config.js b/www/docs/docusaurus.config.js
index 90f4d119ca818..d9c5b5052a081 100644
--- a/www/docs/docusaurus.config.js
+++ b/www/docs/docusaurus.config.js
@@ -1,12 +1,15 @@
const path = require("path")
+const fs = require("fs")
const docsPath = path.join(__dirname, "../../docs/content")
const apisPath = path.join(__dirname, "../../docs/api")
const algoliaAppId = process.env.ALGOLIA_APP_ID || "temp"
const algoliaApiKey = process.env.ALGOLIA_API_KEY || "temp"
+const announcementBar = JSON.parse(fs.readFileSync('./announcement.json'))
+
/** @type {import('@docusaurus/types').DocusaurusConfig} */
-module.exports = {
+const config = {
title: "Medusa",
tagline: "Explore and learn how to use Medusa",
url: "https://docs.medusajs.com",
@@ -32,14 +35,6 @@ module.exports = {
]
],
themeConfig: {
- announcementBar: {
- id: 'release-1-4-1',
- content:
- 'New Release! Version 1.4.1 of Medusa is out now! Read all about it here.',
- backgroundColor: '#7C53FF',
- textColor: '#fff',
- isCloseable: false,
- },
colorMode: {
defaultMode: 'light',
disableSwitch: false,
@@ -226,4 +221,10 @@ module.exports = {
},
],
],
-}
\ No newline at end of file
+}
+
+if (Object.keys(announcementBar).length) {
+ config.themeConfig.announcementBar = announcementBar
+}
+
+module.exports = config
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 21d623387b383..d623f59059c61 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4720,6 +4720,93 @@ __metadata:
languageName: node
linkType: hard
+"@octokit/auth-token@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "@octokit/auth-token@npm:3.0.1"
+ dependencies:
+ "@octokit/types": ^7.0.0
+ checksum: f52087d6680dd151ac5db49d330a544c07340680a6cc39a8a32ee366d34e57c00b7f0396f32644af2614afe158ee6a692a6f0a00cc949ea03828ea7e2532fefd
+ languageName: node
+ linkType: hard
+
+"@octokit/core@npm:^4.0.5":
+ version: 4.0.5
+ resolution: "@octokit/core@npm:4.0.5"
+ dependencies:
+ "@octokit/auth-token": ^3.0.0
+ "@octokit/graphql": ^5.0.0
+ "@octokit/request": ^6.0.0
+ "@octokit/request-error": ^3.0.0
+ "@octokit/types": ^7.0.0
+ before-after-hook: ^2.2.0
+ universal-user-agent: ^6.0.0
+ checksum: 9de824e033a1f8f80156168322bba9933434d3435afed2b0eee315e86f44728f7b86e33064eff7823e6c6f1dc4ec836baf38cd62cf08fbcdc90b018d5ce3b438
+ languageName: node
+ linkType: hard
+
+"@octokit/endpoint@npm:^7.0.0":
+ version: 7.0.2
+ resolution: "@octokit/endpoint@npm:7.0.2"
+ dependencies:
+ "@octokit/types": ^7.0.0
+ is-plain-object: ^5.0.0
+ universal-user-agent: ^6.0.0
+ checksum: 0a74012756159f3269d55f331c0c0e3b1e79b6d8c4a3cd3c1216c5b3fd0efd0ee183f65407160103e8507ab8c9a3ad58ace050b5bea76e9a9eb8900f7c118637
+ languageName: node
+ linkType: hard
+
+"@octokit/graphql@npm:^5.0.0":
+ version: 5.0.1
+ resolution: "@octokit/graphql@npm:5.0.1"
+ dependencies:
+ "@octokit/request": ^6.0.0
+ "@octokit/types": ^7.0.0
+ universal-user-agent: ^6.0.0
+ checksum: 096ca4d78790b5e43422b5076b721b1b6d8b7b55fc5a33c5edca66a613ba043a072cf20a739ef2f76380fecaf1f9d2bf26af290aff2e158a354a4b2aea5b38e2
+ languageName: node
+ linkType: hard
+
+"@octokit/openapi-types@npm:^13.11.0":
+ version: 13.12.0
+ resolution: "@octokit/openapi-types@npm:13.12.0"
+ checksum: 30ffc7ad56197b52b2898bb438cfe25f77d7c41d7f2f1dab6eff1015861966947fb557a7b54305b3381f028e49610e844c2951d2a142c5321d1c45aa70047678
+ languageName: node
+ linkType: hard
+
+"@octokit/request-error@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "@octokit/request-error@npm:3.0.1"
+ dependencies:
+ "@octokit/types": ^7.0.0
+ deprecation: ^2.0.0
+ once: ^1.4.0
+ checksum: 73389dcc36dc0e5fcf58c6e2763a907d0b304953393884623bf2e37705b4cafeb142f9b6d2f5d394617b49568e93ac0cf1b40491695fe1b18e10a8785c609fb9
+ languageName: node
+ linkType: hard
+
+"@octokit/request@npm:^6.0.0":
+ version: 6.2.1
+ resolution: "@octokit/request@npm:6.2.1"
+ dependencies:
+ "@octokit/endpoint": ^7.0.0
+ "@octokit/request-error": ^3.0.0
+ "@octokit/types": ^7.0.0
+ is-plain-object: ^5.0.0
+ node-fetch: ^2.6.7
+ universal-user-agent: ^6.0.0
+ checksum: 61329ea64f032240a1ee6f77d94840f0aa1c24c2467acd747cad1ca78a49c4526116a09641f696f4e47cb5a82ffcd000555fcf6127f5b07d2f871285b9f5ee04
+ languageName: node
+ linkType: hard
+
+"@octokit/types@npm:^7.0.0":
+ version: 7.5.0
+ resolution: "@octokit/types@npm:7.5.0"
+ dependencies:
+ "@octokit/openapi-types": ^13.11.0
+ checksum: 65501fd2dc106497d403be9d26763fb7a89f385bc8cba61a2ac842d273f1b2fb0b1db8b0081d2d42d37fe354f2e6b159b4fec694a51b7bf4c6cc1cb098d6ad57
+ languageName: node
+ linkType: hard
+
"@open-draft/until@npm:^1.0.3":
version: 1.0.3
resolution: "@open-draft/until@npm:1.0.3"
@@ -10870,6 +10957,13 @@ __metadata:
languageName: node
linkType: hard
+"before-after-hook@npm:^2.2.0":
+ version: 2.2.2
+ resolution: "before-after-hook@npm:2.2.2"
+ checksum: 7457bfb8f40e8cbce943ea6e6531261925c6c8a451fea540762367a3e2e52b5979978963a7ec65f232a4f5b87310930bf152c9a055608c64ecee5115bad60b9a
+ languageName: node
+ linkType: hard
+
"better-opn@npm:^2.1.1":
version: 2.1.1
resolution: "better-opn@npm:2.1.1"
@@ -13922,6 +14016,13 @@ __metadata:
languageName: node
linkType: hard
+"deprecation@npm:^2.0.0":
+ version: 2.3.1
+ resolution: "deprecation@npm:2.3.1"
+ checksum: 23d688ba66b74d09b908c40a76179418acbeeb0bfdf218c8075c58ad8d0c315130cb91aa3dffb623aa3a411a3569ce56c6460de6c8d69071c17fe6dd2442f032
+ languageName: node
+ linkType: hard
+
"des.js@npm:^1.0.0":
version: 1.0.1
resolution: "des.js@npm:1.0.1"
@@ -19793,7 +19894,7 @@ __metadata:
languageName: node
linkType: hard
-"is-plain-object@npm:5.0.0":
+"is-plain-object@npm:5.0.0, is-plain-object@npm:^5.0.0":
version: 5.0.0
resolution: "is-plain-object@npm:5.0.0"
checksum: 893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c
@@ -29949,6 +30050,7 @@ __metadata:
"@babel/runtime": ^7.11.2
"@changesets/changelog-github": ^0.4.5
"@changesets/cli": ^2.23.0
+ "@octokit/core": ^4.0.5
"@redocly/cli": latest
"@typescript-eslint/eslint-plugin": ^5.36.2
"@typescript-eslint/parser": ^5.36.2
@@ -33692,6 +33794,13 @@ __metadata:
languageName: node
linkType: hard
+"universal-user-agent@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "universal-user-agent@npm:6.0.0"
+ checksum: ebeb0206963666c13bcf9ebc86d0577c7daed5870c05cd34d4972ee7a43b9ef20679baf2a8c83bf1b71d899bae67243ac4982d84ddaf9ba0355ff76595819961
+ languageName: node
+ linkType: hard
+
"universalify@npm:^0.1.0, universalify@npm:^0.1.2":
version: 0.1.2
resolution: "universalify@npm:0.1.2"