From 8e7955636aa5d6ccd1d66528e5037099600b2e12 Mon Sep 17 00:00:00 2001 From: Josh Thomas Date: Mon, 23 Oct 2023 13:14:28 -0500 Subject: [PATCH] Updates to changelog process. (#241) * Updates to changelog process. * Cleanup the send to slack message. * Sort slack messages by release date --- lerna.json | 12 +- scripts/changelog-release.mjs | 111 +++-- scripts/definitions.ts | 4 + scripts/package-lock.json | 427 +++++++++++++++++- scripts/package.json | 1 + scripts/send-to-slack.mjs | 55 +++ website/docs/for-android/changelog.md | 1 + website/docs/for-ios/changelog.md | 1 + website/docs/for-react-native/changelog.md | 1 + website/docs/for-web/changelog.md | 1 + .../components/page/changelog/android.json | 72 ++- .../src/components/page/changelog/index.tsx | 4 +- .../src/components/page/changelog/ios.json | 52 ++- .../page/changelog/react-native.json | 52 ++- .../page/changelog/styles.module.css | 4 +- .../src/components/page/changelog/web.json | 12 + 16 files changed, 766 insertions(+), 44 deletions(-) create mode 100644 scripts/send-to-slack.mjs diff --git a/lerna.json b/lerna.json index 09907a9..0a61c38 100644 --- a/lerna.json +++ b/lerna.json @@ -1,11 +1,11 @@ { - "version": "0.8.1", - "iosVersion": "0.8.0", - "androidVersion": "0.8.3", - "rnVersion": "0.5.0", "capacitorVersion": "5.5.0", "iosMinVersion": "13.0", "androidMinSdk": "22", "rnMinVersion": "0.63.4", - "androidLiveUpdatesVersion": "0.4.1" -} + "androidLiveUpdatesVersion": "0.4.1", + "rnVersion": "0.5.1", + "iosVersion": "0.8.0", + "androidVersion": "0.8.3", + "version": "0.8.1" +} \ No newline at end of file diff --git a/scripts/changelog-release.mjs b/scripts/changelog-release.mjs index 3040baf..2716177 100644 --- a/scripts/changelog-release.mjs +++ b/scripts/changelog-release.mjs @@ -1,6 +1,6 @@ /** - * @typedef {import("./definitions").Release} Release * @typedef {import("./definitions").GithubRelease} GithubRelease + * @typedef {import("./definitions").Release} Release * */ import { promises as fs } from "fs"; import { resolve, dirname } from "path"; @@ -11,39 +11,52 @@ import fetch from "node-fetch"; import { unified } from "unified"; import markdown from "remark-parse"; import html from "remark-html"; +import { postUpdatesToSlack } from "./send-to-slack.mjs"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); -const OUTPUT_PATH = resolve( - __dirname, - "../website/src/components/page/changelog/release-notes.json" -); -const processor = unified().use(markdown).use(html); + +const VERSION_FILE = resolve(__dirname, "../lerna.json"); + const repos = [ { + productTitle: "Portals Web Plugin", repo: "ionic-team/ionic-portals", outputFile: "../website/src/components/page/changelog/web.json", + pageUrl: "https://ionic.io/docs/portals/for-web/changelog", + versionFileKey: "version", }, { + productTitle: "Portals iOS", repo: "ionic-team/ionic-portals-ios", outputFile: "../website/src/components/page/changelog/ios.json", + pageUrl: "https://ionic.io/docs/portals/for-ios/changelog", + versionFileKey: "iosVersion", }, { + productTitle: "Portals Android", repo: "ionic-team/ionic-portals-android", outputFile: "../website/src/components/page/changelog/android.json", + pageUrl: "https://ionic.io/docs/portals/for-android/changelog", + versionFileKey: "androidVersion", }, { + productTitle: "Portals React Native", repo: "ionic-team/ionic-portals-react-native", outputFile: "../website/src/components/page/changelog/react-native.json", + pageUrl: "https://ionic.io/docs/portals/for-react-native/changelog", + versionFileKey: "rnVersion", }, ]; +const processor = unified().use(markdown).use(html); + /** * * @param {GithubRelease[]} releases * @returns {Release[]} */ -const formatReleases = (releases) => { +function formatReleases(releases, repo, productTitle, pageUrl) { let previousRelease = { repo: "", version: "0.0.0", @@ -68,11 +81,10 @@ const formatReleases = (releases) => { // Reverse the list so that the versions are in chronological order .reverse() .map((release) => { - const mdBody = cleanup(release.body); + const mdBody = cleanupMarkdown(release.body); const body = String(processor.processSync(mdBody)); const published_at = formatDate(release.published_at); const version = semver.clean(release.tag_name); - const [, repo] = /.*\/repos\/(.*)\/releases\/.*/.exec(release.url); // if list has iterated onto a new repository set go back to a zero version if (previousRelease.repo !== repo) { @@ -87,9 +99,13 @@ const formatReleases = (releases) => { }; return { + productTitle, + pageUrl, repo, + mdBody, body, name, + raw_published_at: release.published_at, published_at, tag_name, type, @@ -100,30 +116,33 @@ const formatReleases = (releases) => { return -semver.compare(a.tag_name, b.tag_name); }) ); -}; +} /** * * @param {string} markdown */ -function cleanup(markdown) { +function cleanupMarkdown(markdown) { return ( markdown + .replace(/(?:\r\n)+/g, "\n") // Change to smaller header - .replace(/^## What's Changed/, "### What's Changed") - .replace(/^## New Contributors/, "### New Contributors") + .replace(/## What's Changed\n/g, "### What's Changed\n") + // Remove the New Contributors line header + .replace(/## New Contributors\n(.*)/g, "") + // Remove new contributor lines // bold the change type at the beginning of a commit - .replace(/\* (.\S+):/g, (_, type) => `* **${type}**:`) + .replace(/\* (\S+):/g, (_, type) => `* **${type}**:`) // remove the contributor from the commit line .replace(/ by \@(\S+) in /g, "") // change the url to be a link .replace( - /https:\/\/github.com\/ionic-team\/.*\/pull\/(.\d+)/g, + /https:\/\/github.com\/ionic-team\/.*\/pull\/(\d+)/g, (link, commitTag) => { return ` ([#${commitTag}](${link}))`; } ) - .replace(/\*\*Full Changelog\*\*\: (.\S+)/g, "") + .replace(/\*\*Full Changelog\*\*\: (\S+)/g, "") ); } @@ -138,9 +157,9 @@ function cleanup(markdown) { * https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on * * @param {string} repoPath - * @return {Promise} + * @return {Promise} */ -const fetchGithubReleases = async (repoPath) => { +async function fetchGithubReleases(repoPath) { try { const request = await fetch( new URL(`repos/${repoPath}/releases`, "https://api.github.com"), @@ -166,7 +185,7 @@ const fetchGithubReleases = async (repoPath) => { } catch (error) { return []; } -}; +} // Takes the date in format 2019-04-26T18:24:09Z // and returns it as April 26 2019 @@ -186,15 +205,55 @@ function formatDate(datetime) { } async function run() { + // Grab the current contents of the rollup version file so that we can modify it + // during the repo iteration + let rollupVersionContents = JSON.parse(await fs.readFile(VERSION_FILE)); + let slackUpdateList = []; + await Promise.all( - repos.map(async ({ repo, outputFile }) => { - const githubReleaseArray = await fetchGithubReleases(repo); - await fs.writeFile( - outputFile, - JSON.stringify(formatReleases(githubReleaseArray), null, 2) - ); - }) + repos.map( + async ({ repo, outputFile, versionFileKey, productTitle, pageUrl }) => { + // Keep a list of the previous release JSON for comparison + const previousDocReleaseArray = JSON.parse( + await fs.readFile(outputFile) + ); + + const githubReleaseArray = await fetchGithubReleases(repo); + const docReleaseArray = formatReleases( + githubReleaseArray, + repo, + productTitle, + pageUrl + ); + await fs.writeFile( + outputFile, + JSON.stringify(docReleaseArray, null, 2) + ); + + // Set new version into the rollup version contents object + rollupVersionContents[versionFileKey] = docReleaseArray[0].version; + + // Find all release updates that are new by comparing to the previous release JSON + slackUpdateList = [ + ...slackUpdateList, + ...docReleaseArray.filter(({ version }) => { + return previousDocReleaseArray.find(({ prevVersion }) => { + return version === prevVersion; + }); + }), + ]; + } + ) ); + + await fs.writeFile( + VERSION_FILE, + JSON.stringify(rollupVersionContents, null, 2) + ); + + if (slackUpdateList.length > 0) { + await postUpdatesToSlack(slackUpdateList); + } } run(); diff --git a/scripts/definitions.ts b/scripts/definitions.ts index c366350..30c109c 100644 --- a/scripts/definitions.ts +++ b/scripts/definitions.ts @@ -1,6 +1,10 @@ export type Release = { + pageUrl: string; + productTitle: string; + mdBody: string; body: string; name: string; + raw_published_at: string; published_at: string; tag_name: string; type: string; diff --git a/scripts/package-lock.json b/scripts/package-lock.json index 6f6a843..9f16e57 100644 --- a/scripts/package-lock.json +++ b/scripts/package-lock.json @@ -5,10 +5,10 @@ "requires": true, "packages": { "": { - "name": "scripts", "version": "1.0.0", "license": "ISC", "dependencies": { + "@slack/web-api": "^6.9.0", "fetch": "^1.1.0", "node-fetch": "^3.3.2", "remark-html": "^16.0.1", @@ -17,6 +17,49 @@ "unified": "^11.0.3" } }, + "node_modules/@slack/logger": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", + "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "dependencies": { + "@types/node": ">=12.0.0" + }, + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/types": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.9.0.tgz", + "integrity": "sha512-YfZGo0xVOmI7CHhiwCmEC33HzjQl1lakNmyo5GPGb4KHKEaUoY7zenAdKsYCJqYwdaM9OL+hqYt/tZ2zgvVc7g==", + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/web-api": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.9.0.tgz", + "integrity": "sha512-RME5/F+jvQmZHkoP+ogrDbixq1Ms1mBmylzuWq4sf3f7GCpMPWoiZ+WqWk+sism3vrlveKWIgO9R4Qg9fiRyoQ==", + "dependencies": { + "@slack/logger": "^3.0.0", + "@slack/types": "^2.8.0", + "@types/is-stream": "^1.1.0", + "@types/node": ">=12.0.0", + "axios": "^0.27.2", + "eventemitter3": "^3.1.0", + "form-data": "^2.5.0", + "is-electron": "2.2.2", + "is-stream": "^1.1.0", + "p-queue": "^6.6.1", + "p-retry": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, "node_modules/@types/debug": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.9.tgz", @@ -33,6 +76,14 @@ "@types/unist": "*" } }, + "node_modules/@types/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mdast": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", @@ -46,6 +97,19 @@ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.32.tgz", "integrity": "sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==" }, + "node_modules/@types/node": { + "version": "20.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", + "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", + "dependencies": { + "undici-types": "~5.25.1" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, "node_modules/@types/unist": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", @@ -56,6 +120,33 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -112,6 +203,17 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -157,6 +259,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -196,6 +306,11 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -232,6 +347,38 @@ "node": "^12.20 || >= 14.13" } }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -401,6 +548,11 @@ "node": ">=0.10.0" } }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" + }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -412,6 +564,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -898,6 +1058,25 @@ } ] }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -938,6 +1117,57 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -994,6 +1224,14 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1053,6 +1291,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" + }, "node_modules/unified": { "version": "11.0.3", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", @@ -1207,6 +1450,37 @@ } }, "dependencies": { + "@slack/logger": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", + "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "requires": { + "@types/node": ">=12.0.0" + } + }, + "@slack/types": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.9.0.tgz", + "integrity": "sha512-YfZGo0xVOmI7CHhiwCmEC33HzjQl1lakNmyo5GPGb4KHKEaUoY7zenAdKsYCJqYwdaM9OL+hqYt/tZ2zgvVc7g==" + }, + "@slack/web-api": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.9.0.tgz", + "integrity": "sha512-RME5/F+jvQmZHkoP+ogrDbixq1Ms1mBmylzuWq4sf3f7GCpMPWoiZ+WqWk+sism3vrlveKWIgO9R4Qg9fiRyoQ==", + "requires": { + "@slack/logger": "^3.0.0", + "@slack/types": "^2.8.0", + "@types/is-stream": "^1.1.0", + "@types/node": ">=12.0.0", + "axios": "^0.27.2", + "eventemitter3": "^3.1.0", + "form-data": "^2.5.0", + "is-electron": "2.2.2", + "is-stream": "^1.1.0", + "p-queue": "^6.6.1", + "p-retry": "^4.0.0" + } + }, "@types/debug": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.9.tgz", @@ -1223,6 +1497,14 @@ "@types/unist": "*" } }, + "@types/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==", + "requires": { + "@types/node": "*" + } + }, "@types/mdast": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", @@ -1236,6 +1518,19 @@ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.32.tgz", "integrity": "sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==" }, + "@types/node": { + "version": "20.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", + "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", + "requires": { + "undici-types": "~5.25.1" + } + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, "@types/unist": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", @@ -1246,6 +1541,32 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -1279,6 +1600,14 @@ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==" }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -1305,6 +1634,11 @@ "character-entities": "^2.0.0" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -1331,6 +1665,11 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1354,6 +1693,21 @@ "web-streams-polyfill": "^3.0.3" } }, + "follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -1481,11 +1835,21 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" + }, "is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1747,6 +2111,19 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==" }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1767,6 +2144,44 @@ "formdata-polyfill": "^4.0.10" } }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + } + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "requires": { + "p-finally": "^1.0.0" + } + }, "parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -1808,6 +2223,11 @@ "unified": "^11.0.0" } }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1845,6 +2265,11 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" }, + "undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" + }, "unified": { "version": "11.0.3", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", diff --git a/scripts/package.json b/scripts/package.json index 6e07b4d..2980478 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -9,6 +9,7 @@ "author": "", "license": "ISC", "dependencies": { + "@slack/web-api": "^6.9.0", "fetch": "^1.1.0", "node-fetch": "^3.3.2", "remark-html": "^16.0.1", diff --git a/scripts/send-to-slack.mjs b/scripts/send-to-slack.mjs new file mode 100644 index 0000000..fa5b238 --- /dev/null +++ b/scripts/send-to-slack.mjs @@ -0,0 +1,55 @@ +/** + * @typedef {import("./definitions").Release} Release + * @typedef {import("@slack/web-api").ChatPostMessageArguments} ChatPostMessageArguments + */ +import { WebClient } from "@slack/web-api"; + +// This is a specific channel to share updates to. +const SLACK_CONVERSATION_ID = "C061QQ33UEB"; + +/** + * + * @param {Release[]} slackUpdateList + * @returns {Promise} + */ +export async function postUpdatesToSlack(slackUpdateList) { + const token = process.env.SLACK_TOKEN; + const web = new WebClient(token); + const testResult = await web.auth.test({ token }); + + if (testResult.ok) { + console.log("sending to slack"); + } else { + console.error(JSON.stringify(testResult, null, 2)); + } + + const slackBlocks = slackUpdateList + .sort((a, b) => { + return new Date(a.raw_published_at) - new Date(b.raw_published_at); + }) + .map(({ version, published_at, type, productTitle, mdBody, pageUrl }) => ({ + type: "section", + text: { + type: "mrkdwn", + text: + `-------------------------------------\n` + + `*${productTitle} Release ${version}* (${type}) ${published_at}\n` + + `\n${markdownToSlackMarkdown(mdBody)}` + + `<${pageUrl}#release-${version}|shareable link>`, + }, + })); + + await web.chat.postMessage({ + text: "This is text", + blocks: slackBlocks, + channel: SLACK_CONVERSATION_ID, + }); +} + +function markdownToSlackMarkdown(markdown) { + return markdown + .replace(/\*\*(\S+)\*\*/g, (all, one) => `*${one}*`) + .replace(/\[(\S+)\]\((\S+?)\)/g, (all, one, two) => `<${two}|${one}>`) + .replace(/\n\* /g, "\n- ") + .replace(/#+ (.*)\n/, (all, word) => `*${word}*\n`); +} diff --git a/website/docs/for-android/changelog.md b/website/docs/for-android/changelog.md index 5862fe0..367cbaa 100644 --- a/website/docs/for-android/changelog.md +++ b/website/docs/for-android/changelog.md @@ -1,5 +1,6 @@ --- title: Changelog +hide_table_of_contents: true --- import ReleaseNotes from '@site/src/components/page/changelog'; diff --git a/website/docs/for-ios/changelog.md b/website/docs/for-ios/changelog.md index 6906798..499c083 100644 --- a/website/docs/for-ios/changelog.md +++ b/website/docs/for-ios/changelog.md @@ -1,5 +1,6 @@ --- title: Changelog +hide_table_of_contents: true --- import ReleaseNotes from '@site/src/components/page/changelog'; diff --git a/website/docs/for-react-native/changelog.md b/website/docs/for-react-native/changelog.md index 2dbe101..9cc8330 100644 --- a/website/docs/for-react-native/changelog.md +++ b/website/docs/for-react-native/changelog.md @@ -1,5 +1,6 @@ --- title: Changelog +hide_table_of_contents: true --- import ReleaseNotes from '@site/src/components/page/changelog'; diff --git a/website/docs/for-web/changelog.md b/website/docs/for-web/changelog.md index d7d9814..5931e14 100644 --- a/website/docs/for-web/changelog.md +++ b/website/docs/for-web/changelog.md @@ -1,5 +1,6 @@ --- title: Changelog +hide_table_of_contents: true --- import ReleaseNotes from '@site/src/components/page/changelog'; diff --git a/website/src/components/page/changelog/android.json b/website/src/components/page/changelog/android.json index 01b9b38..f6187ef 100644 --- a/website/src/components/page/changelog/android.json +++ b/website/src/components/page/changelog/android.json @@ -1,143 +1,207 @@ [ { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **feat(android)**: Updates to use Capacitor 5.5.X ([#55](https://github.com/ionic-team/ionic-portals-android/pull/55))\n", "body": "

What's Changed

\n
    \n
  • feat(android): Updates to use Capacitor 5.5.X (#55)
  • \n
\n", "name": "0.8.3", + "raw_published_at": "2023-10-13T15:57:31Z", "published_at": "October 13 2023", "tag_name": "0.8.3", "type": "patch", "version": "0.8.3" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* Cap version update ([#50](https://github.com/ionic-team/ionic-portals-android/pull/50))\n* **feat**: added constructor for PortalView that takes a Portal directly ([#51](https://github.com/ionic-team/ionic-portals-android/pull/51))\n", "body": "

What's Changed

\n
    \n
  • Cap version update (#50)
  • \n
  • feat: added constructor for PortalView that takes a Portal directly (#51)
  • \n
\n", "name": "0.8.2", + "raw_published_at": "2023-10-13T16:00:35Z", "published_at": "October 13 2023", "tag_name": "0.8.2", "type": "patch", "version": "0.8.2" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **feat**: remove portal ([#48](https://github.com/ionic-team/ionic-portals-android/pull/48))\n* **chore**: updated to use Capacitor 5.4.+ versions ([#49](https://github.com/ionic-team/ionic-portals-android/pull/49))\n", "body": "

What's Changed

\n
    \n
  • feat: remove portal (#48)
  • \n
  • chore: updated to use Capacitor 5.4.+ versions (#49)
  • \n
\n", "name": "0.8.1", + "raw_published_at": "2023-10-13T16:03:42Z", "published_at": "October 13 2023", "tag_name": "0.8.1", "type": "patch", "version": "0.8.1" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **feat!**: BREAKING Overhauls to the pub/sub system ([#39](https://github.com/ionic-team/ionic-portals-android/pull/39))\n* **feat**: capacitor 5 updates ([#42](https://github.com/ionic-team/ionic-portals-android/pull/42))\n* **feat!**: BREAKING Make WebVitals a Plugin ([#45](https://github.com/ionic-team/ionic-portals-android/pull/45))\n", "body": "

What's Changed

\n
    \n
  • feat!: BREAKING Overhauls to the pub/sub system (#39)
  • \n
  • feat: capacitor 5 updates (#42)
  • \n
  • feat!: BREAKING Make WebVitals a Plugin (#45)
  • \n
\n", "name": "0.8.0", + "raw_published_at": "2023-10-13T16:21:43Z", "published_at": "October 13 2023", "tag_name": "0.8.0", "type": "minor", "version": "0.8.0" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **chore**: update dependencies for Capacitor updates and Live Updates feat ([#38](https://github.com/ionic-team/ionic-portals-android/pull/38))\n", "body": "

What's Changed

\n
    \n
  • chore: update dependencies for Capacitor updates and Live Updates feat (#38)
  • \n
\n", "name": "0.7.5", + "raw_published_at": "2023-10-13T16:29:55Z", "published_at": "October 13 2023", "tag_name": "0.7.5", "type": "patch", "version": "0.7.5" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **feat**: support configuration files on portal-by-portal basis and within live updates ([#35](https://github.com/ionic-team/ionic-portals-android/pull/35))\n* **feat**: asset sharing ([#34](https://github.com/ionic-team/ionic-portals-android/pull/34))\n", "body": "

What's Changed

\n
    \n
  • feat: support configuration files on portal-by-portal basis and within live updates (#35)
  • \n
  • feat: asset sharing (#34)
  • \n
\n", "name": "0.7.4", + "raw_published_at": "2023-10-13T16:36:43Z", "published_at": "October 13 2023", "tag_name": "0.7.4", "type": "patch", "version": "0.7.4" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **feat**: Web Vitals support for FCP, FID, TTFB ([#28](https://github.com/ionic-team/ionic-portals-android/pull/28))\n* **feat**: added jetpack compose support for bridge availability callback ([#29](https://github.com/ionic-team/ionic-portals-android/pull/29))\n", "body": "

What's Changed

\n
    \n
  • feat: Web Vitals support for FCP, FID, TTFB (#28)
  • \n
  • feat: added jetpack compose support for bridge availability callback (#29)
  • \n
\n", "name": "0.7.3", + "raw_published_at": "2023-10-13T16:36:57Z", "published_at": "October 13 2023", "tag_name": "0.7.3", "type": "patch", "version": "0.7.3" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **feat**: callback when bridge is created ([#26](https://github.com/ionic-team/ionic-portals-android/pull/26))\n", "body": "

What's Changed

\n
    \n
  • feat: callback when bridge is created (#26)
  • \n
\n", "name": "0.7.2", + "raw_published_at": "2023-10-13T16:37:11Z", "published_at": "October 13 2023", "tag_name": "0.7.2", "type": "patch", "version": "0.7.2" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **fix**: remove test class ([#23](https://github.com/ionic-team/ionic-portals-android/pull/23))\n* **feat**: plugin instance support ([#22](https://github.com/ionic-team/ionic-portals-android/pull/22))\n", "body": "

What's Changed

\n
    \n
  • fix: remove test class (#23)
  • \n
  • feat: plugin instance support (#22)
  • \n
\n", "name": "0.7.1", + "raw_published_at": "2023-10-13T16:37:36Z", "published_at": "October 13 2023", "tag_name": "0.7.1", "type": "patch", "version": "0.7.1" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **feat**: Always have an initialContext ([#19](https://github.com/ionic-team/ionic-portals-android/pull/19))\n* **feat**: update to cap4 and dependency updates ([#21](https://github.com/ionic-team/ionic-portals-android/pull/21))\n", "body": "

What's Changed

\n
    \n
  • feat: Always have an initialContext (#19)
  • \n
  • feat: update to cap4 and dependency updates (#21)
  • \n
\n", "name": "0.7.0", + "raw_published_at": "2023-10-13T16:38:03Z", "published_at": "October 13 2023", "tag_name": "0.7.0", "type": "minor", "version": "0.7.0" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **fix**: Allow data on SubscriptionResult to be nullable. ([#15](https://github.com/ionic-team/ionic-portals-android/pull/15))\n* **fix**: update Capacitor dependency with web asset load flash fix ([#16](https://github.com/ionic-team/ionic-portals-android/pull/16))\n", "body": "

What's Changed

\n
    \n
  • fix: Allow data on SubscriptionResult to be nullable. (#15)
  • \n
  • fix: update Capacitor dependency with web asset load flash fix (#16)
  • \n
\n", "name": "0.6.4", + "raw_published_at": "2023-10-13T16:38:19Z", "published_at": "October 13 2023", "tag_name": "0.6.4", "type": "patch", "version": "0.6.4" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", + "mdBody": "### What's Changed\n* **chore**: update dependency versions to capacitor 3.4.0 and liveupdates 0.1.1 ([#12](https://github.com/ionic-team/ionic-portals-android/pull/12))\n", "body": "

What's Changed

\n
    \n
  • chore: update dependency versions to capacitor 3.4.0 and liveupdates 0.1.1 (#12)
  • \n
\n", "name": "0.6.3", + "raw_published_at": "2023-10-13T16:38:45Z", "published_at": "October 13 2023", "tag_name": "0.6.3", "type": "patch", "version": "0.6.3" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", - "body": "

What's Changed

\n
    \n
  • fix: added webview destroy call to PortalFragmenthttps://github.com/ionic-team/ionic-portals-android/pull/9
  • \n
\n", + "mdBody": "### What's Changed\n* **fix**: added webview destroy call to PortalFragment ([#9](https://github.com/ionic-team/ionic-portals-android/pull/9))\n", + "body": "

What's Changed

\n
    \n
  • fix: added webview destroy call to PortalFragment (#9)
  • \n
\n", "name": "0.6.2", + "raw_published_at": "2023-10-13T16:38:57Z", "published_at": "October 13 2023", "tag_name": "0.6.2", "type": "patch", "version": "0.6.2" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", - "body": "

What's Changed

\n
    \n
  • fix: fixed race condition when loading fragment with initialContexthttps://github.com/ionic-team/ionic-portals-android/pull/8
  • \n
\n", + "mdBody": "### What's Changed\n* **fix**: fixed race condition when loading fragment with initialContext ([#8](https://github.com/ionic-team/ionic-portals-android/pull/8))\n", + "body": "

What's Changed

\n
    \n
  • fix: fixed race condition when loading fragment with initialContext (#8)
  • \n
\n", "name": "0.6.1", + "raw_published_at": "2023-10-13T16:39:10Z", "published_at": "October 13 2023", "tag_name": "0.6.1", "type": "patch", "version": "0.6.1" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", - "body": "

What's Changed

\n
    \n
  • fix: adds a default config to resolve focus issue for Portals appshttps://github.com/ionic-team/ionic-portals-android/pull/2
  • \n
  • feat: allow an initialContext to be set on PortalFragmenthttps://github.com/ionic-team/ionic-portals-android/pull/5
  • \n
\n", + "mdBody": "### What's Changed\n* **fix**: adds a default config to resolve focus issue for Portals apps ([#2](https://github.com/ionic-team/ionic-portals-android/pull/2))\n* **feat**: allow an initialContext to be set on PortalFragment ([#5](https://github.com/ionic-team/ionic-portals-android/pull/5))\n", + "body": "

What's Changed

\n
    \n
  • fix: adds a default config to resolve focus issue for Portals apps (#2)
  • \n
  • feat: allow an initialContext to be set on PortalFragment (#5)
  • \n
\n", "name": "0.6.0", + "raw_published_at": "2023-10-13T16:39:34Z", "published_at": "October 13 2023", "tag_name": "0.6.0", "type": "minor", "version": "0.6.0" }, { + "productTitle": "Portals Android", + "pageUrl": "https://ionic.io/docs/portals/for-android/changelog", "repo": "ionic-team/ionic-portals-android", - "body": "

What's Changed

\n
    \n
  • feat(android): basic jetpack compose supporthttps://github.com/ionic-team/ionic-portals-android/pull/1
  • \n
\n", + "mdBody": "### What's Changed\n* **feat(android)**: basic jetpack compose support ([#1](https://github.com/ionic-team/ionic-portals-android/pull/1))\n", + "body": "

What's Changed

\n
    \n
  • feat(android): basic jetpack compose support (#1)
  • \n
\n", "name": "0.5.1", + "raw_published_at": "2023-10-13T16:39:47Z", "published_at": "October 13 2023", "tag_name": "0.5.1", "type": "minor", diff --git a/website/src/components/page/changelog/index.tsx b/website/src/components/page/changelog/index.tsx index fa62b6a..1fe9770 100644 --- a/website/src/components/page/changelog/index.tsx +++ b/website/src/components/page/changelog/index.tsx @@ -88,9 +88,9 @@ https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating
-

+

{release.version} diff --git a/website/src/components/page/changelog/ios.json b/website/src/components/page/changelog/ios.json index 6b1d125..8b9057e 100644 --- a/website/src/components/page/changelog/ios.json +++ b/website/src/components/page/changelog/ios.json @@ -1,107 +1,155 @@ [ { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* **feat!**: Breaking overhauls the pub/sub system ([#71](https://github.com/ionic-team/ionic-portals-ios/pull/71))\n* **feat!**: BREAKING update to Capacitor 5 ([#72](https://github.com/ionic-team/ionic-portals-ios/pull/72))\n* **feat!**: BREAKING Required Manual Plugin Registration ([#73](https://github.com/ionic-team/ionic-portals-ios/pull/73))\n* **feat!**: BREAKING Make WebVitals a plugin ([#74](https://github.com/ionic-team/ionic-portals-ios/pull/74))\n", "body": "

What's Changed

\n
\n", "name": "0.8.0", + "raw_published_at": "2023-05-17T20:33:29Z", "published_at": "May 17 2023", "tag_name": "0.8.0", "type": "minor", "version": "0.8.0" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* **feat**: Asset maps ([#66](https://github.com/ionic-team/ionic-portals-ios/pull/66))\n* **chore**: Update IonicLiveUpdates max version upper bound ([#67](https://github.com/ionic-team/ionic-portals-ios/pull/67))\n* **chore**: Bump max IonicLiveUpdates version ([#68](https://github.com/ionic-team/ionic-portals-ios/pull/68))\n", "body": "

What's Changed

\n
    \n
  • feat: Asset maps (#66)
  • \n
  • chore: Update IonicLiveUpdates max version upper bound (#67)
  • \n
  • chore: Bump max IonicLiveUpdates version (#68)
  • \n
\n", "name": "0.7.3", + "raw_published_at": "2023-02-27T18:04:16Z", "published_at": "February 27 2023", "tag_name": "0.7.3", "type": "patch", "version": "0.7.3" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* **feat**: Adds ability to observe FCP metrics from embedded web apps ([#63](https://github.com/ionic-team/ionic-portals-ios/pull/63))\n", "body": "

What's Changed

\n
    \n
  • feat: Adds ability to observe FCP metrics from embedded web apps (#63)
  • \n
\n", "name": "0.7.2", + "raw_published_at": "2023-02-06T20:27:26Z", "published_at": "February 6 2023", "tag_name": "0.7.2", "type": "patch", "version": "0.7.2" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* **feat**: Add plugin registration API ([#58](https://github.com/ionic-team/ionic-portals-ios/pull/58))\n* **fix**: Use updated configs if available ([#59](https://github.com/ionic-team/ionic-portals-ios/pull/59))\n* **fix**: Refactor codable support ([#60](https://github.com/ionic-team/ionic-portals-ios/pull/60))\n", "body": "

What's Changed

\n
    \n
  • feat: Add plugin registration API (#58)
  • \n
  • fix: Use updated configs if available (#59)
  • \n
  • fix: Refactor codable support (#60)
  • \n
\n", "name": "0.7.1", + "raw_published_at": "2022-12-14T18:27:39Z", "published_at": "December 14 2022", "tag_name": "0.7.1", "type": "patch", "version": "0.7.1" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* **feat**: Update to Capacitor 4 ([#53](https://github.com/ionic-team/ionic-portals-ios/pull/53))\n* **feat**: always have an initialContext ([#54](https://github.com/ionic-team/ionic-portals-ios/pull/54))\n", "body": "

What's Changed

\n
    \n
  • feat: Update to Capacitor 4 (#53)
  • \n
  • feat: always have an initialContext (#54)
  • \n
\n", "name": "0.7.0", + "raw_published_at": "2022-11-22T17:22:24Z", "published_at": "November 22 2022", "tag_name": "0.7.0", "type": "minor", "version": "0.7.0" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* **fix**: fix base64url conversion ([#49](https://github.com/ionic-team/ionic-portals-ios/pull/49))\n* **chore**: Remove mention of Cordova plugins being supported from README ([#50](https://github.com/ionic-team/ionic-portals-ios/pull/50))\n* **fix**: Don't let capacitor take over as UNNotificationCenterDelegate ([#51](https://github.com/ionic-team/ionic-portals-ios/pull/51))\n", "body": "

What's Changed

\n
    \n
  • fix: fix base64url conversion (#49)
  • \n
  • chore: Remove mention of Cordova plugins being supported from README (#50)
  • \n
  • fix: Don't let capacitor take over as UNNotificationCenterDelegate (#51)
  • \n
\n", "name": "0.6.5", + "raw_published_at": "2022-10-18T17:06:32Z", "published_at": "October 18 2022", "tag_name": "0.6.5", "type": "patch", "version": "0.6.5" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", - "body": "

What's Changed

\n
    \n
  • feat: Make live updates 0.2.0 compatible with IonicPortals (#45)
  • \n
\n

New Contributors

\n
    \n
  • @msrutek-paylocity made their first contribution in (#43)
  • \n
\n", + "mdBody": "### What's Changed\n* **feat**: Make live updates 0.2.0 compatible with IonicPortals ([#45](https://github.com/ionic-team/ionic-portals-ios/pull/45))\n\n", + "body": "

What's Changed

\n
    \n
  • feat: Make live updates 0.2.0 compatible with IonicPortals (#45)
  • \n
\n", "name": "0.6.4", + "raw_published_at": "2022-09-20T17:52:12Z", "published_at": "September 20 2022", "tag_name": "0.6.4", "type": "patch", "version": "0.6.4" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* **feat**: Add the ability to specify a custom LiveUpdateManager ([#35](https://github.com/ionic-team/ionic-portals-ios/pull/35))\n* **feat**: Add the ability to specify a default file to load other than index.html ([#36](https://github.com/ionic-team/ionic-portals-ios/pull/36))\n* **fix**: Make `reload` on `PortalUIView` work ([#37](https://github.com/ionic-team/ionic-portals-ios/pull/37))\n", "body": "

What's Changed

\n
    \n
  • feat: Add the ability to specify a custom LiveUpdateManager (#35)
  • \n
  • feat: Add the ability to specify a default file to load other than index.html (#36)
  • \n
  • fix: Make reload on PortalUIView work (#37)
  • \n
\n", "name": "0.6.3", + "raw_published_at": "2022-08-04T18:30:40Z", "published_at": "August 4 2022", "tag_name": "0.6.3", "type": "patch", "version": "0.6.3" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* **feat**: Make Portals `Bundle` agnostic ([#32](https://github.com/ionic-team/ionic-portals-ios/pull/32))\n* **fix**: Show UIAlert for registration error when presenting UnregisteredView ([#33](https://github.com/ionic-team/ionic-portals-ios/pull/33))\n", "body": "

What's Changed

\n
    \n
  • feat: Make Portals Bundle agnostic (#32)
  • \n
  • fix: Show UIAlert for registration error when presenting UnregisteredView (#33)
  • \n
\n", "name": "0.6.2", + "raw_published_at": "2022-07-12T20:32:00Z", "published_at": "July 12 2022", "tag_name": "0.6.2", "type": "patch", "version": "0.6.2" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* Add SPM Support ([#28](https://github.com/ionic-team/ionic-portals-ios/pull/28))\n* Support iOS 13 ([#30](https://github.com/ionic-team/ionic-portals-ios/pull/30))\n", "body": "

What's Changed

\n
    \n
  • Add SPM Support (#28)
  • \n
  • Support iOS 13 (#30)
  • \n
\n", "name": "0.6.1", + "raw_published_at": "2022-05-25T16:08:32Z", "published_at": "May 25 2022", "tag_name": "0.6.1", "type": "patch", "version": "0.6.1" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", + "mdBody": "### What's Changed\n* **breaking**: Update PortalManager to be a singleton. ([#16](https://github.com/ionic-team/ionic-portals-ios/pull/16))\n* **fix**: Add cap config and cordova config urls to InstanceDescriptor ([#17](https://github.com/ionic-team/ionic-portals-ios/pull/17))\n* **breaking**: Grand Renaming ([#18](https://github.com/ionic-team/ionic-portals-ios/pull/18))\n* **breaking**: Update IonicLiveUpdates to ~> 0.1 ([#19](https://github.com/ionic-team/ionic-portals-ios/pull/19))\n* **breaking**: Clean(er) Objective-C API ([#20](https://github.com/ionic-team/ionic-portals-ios/pull/20))\n* **feat**: Adds ExpressibleByStringLiteral to `Portal` ([#22](https://github.com/ionic-team/ionic-portals-ios/pull/22))\n* **breaking**: Remove centralized Portal management ([#21](https://github.com/ionic-team/ionic-portals-ios/pull/21))\n* **fix**: Properly coerce NSDictionary to JSObject like Capacitor does. ([#23](https://github.com/ionic-team/ionic-portals-ios/pull/23))\n* **breaking**: API Alignment ([#24](https://github.com/ionic-team/ionic-portals-ios/pull/24))\n* **fix**: Make PortalsPubSub.publish non-blocking ([#25](https://github.com/ionic-team/ionic-portals-ios/pull/25))\n", "body": "

What's Changed

\n
    \n
  • breaking: Update PortalManager to be a singleton. (#16)
  • \n
  • fix: Add cap config and cordova config urls to InstanceDescriptor (#17)
  • \n
  • breaking: Grand Renaming (#18)
  • \n
  • breaking: Update IonicLiveUpdates to ~> 0.1 (#19)
  • \n
  • breaking: Clean(er) Objective-C API (#20)
  • \n
  • feat: Adds ExpressibleByStringLiteral to Portal (#22)
  • \n
  • breaking: Remove centralized Portal management (#21)
  • \n
  • fix: Properly coerce NSDictionary to JSObject like Capacitor does. (#23)
  • \n
  • breaking: API Alignment (#24)
  • \n
  • fix: Make PortalsPubSub.publish non-blocking (#25)
  • \n
\n", "name": "0.6.0", + "raw_published_at": "2022-05-23T14:40:49Z", "published_at": "May 23 2022", "tag_name": "0.6.0", "type": "minor", "version": "0.6.0" }, { + "productTitle": "Portals iOS", + "pageUrl": "https://ionic.io/docs/portals/for-ios/changelog", "repo": "ionic-team/ionic-portals-ios", - "body": "

What's Changed

\n
    \n
  • feat(ios): use @objc for bridge and auxiliary APIshttps://github.com/ionic-team/ionic-portals-ios/pull/4
  • \n
  • Swift ergonomicshttps://github.com/ionic-team/ionic-portals-ios/pull/8
  • \n
  • feat: Make PortalBuilder factory methods annotated with @discardableResult (#10)
  • \n
  • fix: Swift Concurrency (#11)
  • \n
\n", + "mdBody": "### What's Changed\n* **feat(ios)**: use `@objc` for bridge and auxiliary APIs ([#4](https://github.com/ionic-team/ionic-portals-ios/pull/4))\n* Swift ergonomics ([#8](https://github.com/ionic-team/ionic-portals-ios/pull/8))\n* **feat**: Make PortalBuilder factory methods annotated with `@discardableResult` ([#10](https://github.com/ionic-team/ionic-portals-ios/pull/10))\n* **fix**: Swift Concurrency ([#11](https://github.com/ionic-team/ionic-portals-ios/pull/11))\n", + "body": "

What's Changed

\n
    \n
  • feat(ios): use @objc for bridge and auxiliary APIs (#4)
  • \n
  • Swift ergonomics (#8)
  • \n
  • feat: Make PortalBuilder factory methods annotated with @discardableResult (#10)
  • \n
  • fix: Swift Concurrency (#11)
  • \n
\n", "name": "0.5.2", + "raw_published_at": "2022-04-26T21:31:04Z", "published_at": "April 26 2022", "tag_name": "0.5.2", "type": "minor", diff --git a/website/src/components/page/changelog/react-native.json b/website/src/components/page/changelog/react-native.json index b67eae6..9a4818e 100644 --- a/website/src/components/page/changelog/react-native.json +++ b/website/src/components/page/changelog/react-native.json @@ -1,107 +1,155 @@ [ { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* **fix(android)**: Fix android events not emitting ([#49](https://github.com/ionic-team/ionic-portals-react-native/pull/49))\n", "body": "

What's Changed

\n
    \n
  • fix(android): Fix android events not emitting (#49)
  • \n
\n", "name": "0.5.1", + "raw_published_at": "2023-10-02T16:54:50Z", "published_at": "October 2 2023", "tag_name": "0.5.1", "type": "patch", "version": "0.5.1" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* **feat!**: Update to IonicPortals 0.8.0 ([#47](https://github.com/ionic-team/ionic-portals-react-native/pull/47))\n", "body": "

What's Changed

\n
    \n
  • feat!: Update to IonicPortals 0.8.0 (#47)
  • \n
\n", "name": "0.5.0", + "raw_published_at": "2023-09-20T23:36:26Z", "published_at": "September 20 2023", "tag_name": "0.5.0", "type": "minor", "version": "0.5.0" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* **fix(android)**: Remove config creation in the native android code. ([#45](https://github.com/ionic-team/react-native-ionic-portals/pull/45))\n", "body": "

What's Changed

\n
    \n
  • fix(android): Remove config creation in the native android code. (#45)
  • \n
\n", "name": "0.4.1", + "raw_published_at": "2023-09-15T15:24:45Z", "published_at": "September 15 2023", "tag_name": "0.4.1", "type": "patch", "version": "0.4.1" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* **feat!**: BREAKING - Plugin Registration Unification ([#40](https://github.com/ionic-team/react-native-ionic-portals/pull/40))\n* **feat!**: Adds more information regarding a successful live update ([#39](https://github.com/ionic-team/react-native-ionic-portals/pull/39))\n* **feat**: Asset maps ([#41](https://github.com/ionic-team/react-native-ionic-portals/pull/41))\n* **feat**: Web vitals ([#42](https://github.com/ionic-team/react-native-ionic-portals/pull/42))\n", "body": "

What's Changed

\n
    \n
  • feat!: BREAKING - Plugin Registration Unification (#40)
  • \n
  • feat!: Adds more information regarding a successful live update (#39)
  • \n
  • feat: Asset maps (#41)
  • \n
  • feat: Web vitals (#42)
  • \n
\n", "name": "0.4.0", + "raw_published_at": "2023-04-05T14:28:36Z", "published_at": "April 5 2023", "tag_name": "0.4.0", "type": "minor", "version": "0.4.0" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* Portals 0.7.0 update ([#35](https://github.com/ionic-team/react-native-ionic-portals/pull/35))\n", "body": "

What's Changed

\n
    \n
  • Portals 0.7.0 update (#35)
  • \n
\n", "name": "0.3.0", + "raw_published_at": "2022-12-05T18:38:47Z", "published_at": "December 5 2022", "tag_name": "0.3.0", "type": "minor", "version": "0.3.0" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* **feat**: Secure live updates ([#31](https://github.com/ionic-team/react-native-ionic-portals/pull/31))\n* **feat**: Make `getPortal` accessible via the JS interface. ([#32](https://github.com/ionic-team/react-native-ionic-portal/pull/32))\n", "body": "

What's Changed

\n
    \n
  • feat: Secure live updates (#31)
  • \n
  • feat: Make getPortal accessible via the JS interface. (#32)
  • \n
\n", "name": "0.2.0", + "raw_published_at": "2022-10-18T16:00:44Z", "published_at": "October 18 2022", "tag_name": "0.2.0", "type": "minor", "version": "0.2.0" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* **feat**: configurable entry point ([#23](https://github.com/ionic-team/react-native-ionic-portals/pull/23))\n* **breaking**: single portal prop ([#24](https://github.com/ionic-team/react-native-ionic-portals/pull/24))\n", "body": "

What's Changed

\n
    \n
  • feat: configurable entry point (#23)
  • \n
  • breaking: single portal prop (#24)
  • \n
\n", "name": "0.1.0", + "raw_published_at": "2022-08-16T16:49:04Z", "published_at": "August 16 2022", "tag_name": "0.1.0", "type": "minor", "version": "0.1.0" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", - "body": "

What's Changed

\n
    \n
  • fix(android): changed layout behavior to fix render issue (#21)
  • \n
\n

New Contributors

\n
    \n
  • @carlpoole made their first contribution in (#21)
  • \n
\n", + "mdBody": "### What's Changed\n* **fix(android)**: changed layout behavior to fix render issue ([#21](https://github.com/ionic-team/react-native-ionic-portals/pull/21))\n\n", + "body": "

What's Changed

\n
    \n
  • fix(android): changed layout behavior to fix render issue (#21)
  • \n
\n", "name": "0.0.6", + "raw_published_at": "2022-07-18T15:44:56Z", "published_at": "July 18 2022", "tag_name": "0.0.6", "type": "patch", "version": "0.0.6" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* **fix(ios)**: initialContext not always set before name ([#17](https://github.com/ionic-team/react-native-ionic-portals/pull/17))\n* **chore(docs)**: Add `pre_install` hook instructions for Podfile ([#18](https://github.com/ionic-team/react-native-ionic-portals/pull/18))\n", "body": "

What's Changed

\n
    \n
  • fix(ios): initialContext not always set before name (#17)
  • \n
  • chore(docs): Add pre_install hook instructions for Podfile (#18)
  • \n
\n", "name": "0.0.5", + "raw_published_at": "2022-07-01T15:53:46Z", "published_at": "July 1 2022", "tag_name": "0.0.5", "type": "patch", "version": "0.0.5" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* **chore**: iOS portals 0.6.1 ([#13](https://github.com/ionic-team/react-native-ionic-portals/pull/13))\n* **feat**: Live updates ([#14](https://github.com/ionic-team/react-native-ionic-portals/pull/14))\n* **fix(android)**: initial context ([#15](https://github.com/ionic-team/react-native-ionic-portals/pull/15))\n", "body": "

What's Changed

\n
    \n
  • chore: iOS portals 0.6.1 (#13)
  • \n
  • feat: Live updates (#14)
  • \n
  • fix(android): initial context (#15)
  • \n
\n", "name": "0.0.4", + "raw_published_at": "2022-06-24T20:28:49Z", "published_at": "June 24 2022", "tag_name": "0.0.4", "type": "patch", "version": "0.0.4" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", + "mdBody": "### What's Changed\n* Pub/Sub Fix (again) ([#11](https://github.com/ionic-team/react-native-ionic-portals/pull/11))\n", "body": "

What's Changed

\n
    \n
  • Pub/Sub Fix (again) (#11)
  • \n
\n", "name": "0.0.3", + "raw_published_at": "2022-06-02T15:19:12Z", "published_at": "June 2 2022", "tag_name": "0.0.3", "type": "patch", "version": "0.0.3" }, { + "productTitle": "Portals React Native", + "pageUrl": "https://ionic.io/docs/portals/for-react-native/changelog", "repo": "ionic-team/ionic-portals-react-native", - "body": "

What's Changed

\n
    \n
  • Pub sub fixhttps://github.com/ionic-team/react-native-ionic-portals/pull/9
  • \n
\n", + "mdBody": "### What's Changed\n* Pub sub fix ([#9](https://github.com/ionic-team/react-native-ionic-portals/pull/9))\n", + "body": "

What's Changed

\n
    \n
  • Pub sub fix (#9)
  • \n
\n", "name": "0.0.2", + "raw_published_at": "2022-06-01T15:54:07Z", "published_at": "June 1 2022", "tag_name": "0.0.2", "type": "patch", diff --git a/website/src/components/page/changelog/styles.module.css b/website/src/components/page/changelog/styles.module.css index 3b291f0..6c55332 100644 --- a/website/src/components/page/changelog/styles.module.css +++ b/website/src/components/page/changelog/styles.module.css @@ -41,6 +41,9 @@ .release-notes h2 { margin: 0; + /* These lines exist for correct positioning of anchor links */ + padding-top: 55px; + margin-top: -55px; font-size: 32px; } @@ -52,7 +55,6 @@ font-size: 20px; } -.release-notes h2, .release-notes h3 { padding-top: 0; } diff --git a/website/src/components/page/changelog/web.json b/website/src/components/page/changelog/web.json index 68e2a55..14f7ced 100644 --- a/website/src/components/page/changelog/web.json +++ b/website/src/components/page/changelog/web.json @@ -1,26 +1,38 @@ [ { + "productTitle": "Portals Web Plugin", + "pageUrl": "https://ionic.io/docs/portals/for-web/changelog", "repo": "ionic-team/ionic-portals", + "mdBody": "### What's Changed\n* **fix**: Peer dep was not upgraded to cap 5 ([#228](https://github.com/ionic-team/ionic-portals/pull/228))\n", "body": "

What's Changed

\n
    \n
  • fix: Peer dep was not upgraded to cap 5 (#228)
  • \n
\n", "name": "0.8.1", + "raw_published_at": "2023-05-19T15:35:49Z", "published_at": "May 19 2023", "tag_name": "0.8.1", "type": "patch", "version": "0.8.1" }, { + "productTitle": "Portals Web Plugin", + "pageUrl": "https://ionic.io/docs/portals/for-web/changelog", "repo": "ionic-team/ionic-portals", + "mdBody": "### What's Changed\n* **feat**: BREAKING! Overhauls to pub/sub ([#222](https://github.com/ionic-team/ionic-portals/pull/222))\n* **chore**: Update method for retrieving initial context on Android ([#226](https://github.com/ionic-team/ionic-portals/pull/226))\n", "body": "

What's Changed

\n
    \n
  • feat: BREAKING! Overhauls to pub/sub (#222)
  • \n
  • chore: Update method for retrieving initial context on Android (#226)
  • \n
\n", "name": "0.8.0", + "raw_published_at": "2023-05-17T20:58:22Z", "published_at": "May 17 2023", "tag_name": "0.8.0", "type": "minor", "version": "0.8.0" }, { + "productTitle": "Portals Web Plugin", + "pageUrl": "https://ionic.io/docs/portals/for-web/changelog", "repo": "ionic-team/ionic-portals", + "mdBody": "### What's Changed\n* **feat(plugin)**: Add `assetMaps` key to initialContext ([#209](https://github.com/ionic-team/ionic-portals/pull/209))\n", "body": "

What's Changed

\n
    \n
  • feat(plugin): Add assetMaps key to initialContext (#209)
  • \n
\n", "name": "0.7.1", + "raw_published_at": "2023-03-02T00:05:59Z", "published_at": "March 1 2023", "tag_name": "0.7.1", "type": "minor",