diff --git a/.astro/types.d.ts b/.astro/types.d.ts index 9aa22e7..a0cadf1 100644 --- a/.astro/types.d.ts +++ b/.astro/types.d.ts @@ -325,6 +325,20 @@ declare module 'astro:content' { collection: "docs"; data: InferEntrySchema<"docs"> } & { render(): Render[".mdx"] }; +"quickstart.mdx": { + id: "quickstart.mdx"; + slug: "quickstart"; + body: string; + collection: "docs"; + data: InferEntrySchema<"docs"> +} & { render(): Render[".mdx"] }; +"releasenotes.mdx": { + id: "releasenotes.mdx"; + slug: "releasenotes"; + body: string; + collection: "docs"; + data: InferEntrySchema<"docs"> +} & { render(): Render[".mdx"] }; "settings/connection.mdx": { id: "settings/connection.mdx"; slug: "settings/connection"; @@ -353,13 +367,6 @@ declare module 'astro:content' { collection: "docs"; data: InferEntrySchema<"docs"> } & { render(): Render[".mdx"] }; -"tips/quickstart.mdx": { - id: "tips/quickstart.mdx"; - slug: "tips/quickstart"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; "tips/setup.mdx": { id: "tips/setup.mdx"; slug: "tips/setup"; diff --git a/.env example b/.env example new file mode 100644 index 0000000..49aee05 --- /dev/null +++ b/.env example @@ -0,0 +1,2 @@ +# Github Token with `public_repo` scope https://github.com/settings/tokens +API_GITHUB_TOKEN= \ No newline at end of file diff --git a/.github/workflows/astro.yml b/.github/workflows/astro.yml index 4dbb0fc..6120513 100644 --- a/.github/workflows/astro.yml +++ b/.github/workflows/astro.yml @@ -65,6 +65,8 @@ jobs: run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} working-directory: ${{ env.BUILD_PATH }} - name: Build with Astro + env: + API_GITHUB_TOKEN: ${{ secrets.API_GITHUB_TOKEN }} run: | ${{ steps.detect-package-manager.outputs.runner }} astro build \ --site "${{ steps.pages.outputs.origin }}" \ diff --git a/.gitignore b/.gitignore index ee00f73..4efa686 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules .vscode-test/ *.vsix dist -.DS_Store \ No newline at end of file +.DS_Store +.env \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f2d1c53..fcda12a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,8 @@ "@astrojs/check": "^0.5.5", "@astrojs/starlight": "^0.19.1", "astro": "^4.3.5", + "dotenv": "^16.4.5", + "marked": "^12.0.0", "sharp": "^0.32.5", "typescript": "^5.3.3" } @@ -3132,6 +3134,17 @@ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dset": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", @@ -4351,6 +4364,17 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/marked": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.0.tgz", + "integrity": "sha512-Vkwtq9rLqXryZnWaQc86+FHLC6tr/fycMfYAhiOIXkrNmeGAyhSxjqu0Rs1i0bBqw5u0S7+lV9fdH2ZSVaoa0w==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/mdast-util-definitions": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", diff --git a/package.json b/package.json index 0fa0921..ddcd97b 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,12 @@ "astro": "astro" }, "dependencies": { + "@astrojs/check": "^0.5.5", "@astrojs/starlight": "^0.19.1", "astro": "^4.3.5", + "dotenv": "^16.4.5", + "marked": "^12.0.0", "sharp": "^0.32.5", - "@astrojs/check": "^0.5.5", "typescript": "^5.3.3" } -} \ No newline at end of file +} diff --git a/src/assets/github-mark-black.svg b/src/assets/github-mark-black.svg new file mode 100644 index 0000000..37fa923 --- /dev/null +++ b/src/assets/github-mark-black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/github-mark-white.svg b/src/assets/github-mark-white.svg new file mode 100644 index 0000000..d5e6491 --- /dev/null +++ b/src/assets/github-mark-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReleaseNotes.astro b/src/components/ReleaseNotes.astro new file mode 100644 index 0000000..14c32c6 --- /dev/null +++ b/src/components/ReleaseNotes.astro @@ -0,0 +1,28 @@ +--- +import { marked } from 'marked'; +import { fetchFromGitHub } from './githubAPI'; + +// Fetch the releases server-side +const releases = await fetchFromGitHub('releases'); + +// Check if releases is defined before trying to parse +let releasesBodyHtml = []; +if (releases) { + releasesBodyHtml = releases.map((release : any) => { + return { + name: release.name, + body: marked(release.body) + }; + }); +} +--- + +{releasesBodyHtml.map((release: any) => ( +
+

{release.name}

+
+
+
+
+
+))} \ No newline at end of file diff --git a/src/components/ReleaseVersion.astro b/src/components/ReleaseVersion.astro new file mode 100644 index 0000000..7510857 --- /dev/null +++ b/src/components/ReleaseVersion.astro @@ -0,0 +1,14 @@ +--- +import { fetchFromGitHub } from './githubAPI'; + +// Fetch the latest release server-side +const release = await fetchFromGitHub('releases/latest'); + +// Extract the version number +let version = ''; +if (release) { + version = release.tag_name; +} +--- + +{version} \ No newline at end of file diff --git a/src/components/githubAPI.ts b/src/components/githubAPI.ts new file mode 100644 index 0000000..7e9549b --- /dev/null +++ b/src/components/githubAPI.ts @@ -0,0 +1,45 @@ +import dotenv from 'dotenv'; +dotenv.config(); + +// GitHub repository details +const baseURL = 'https://api.github.com/repos'; +const owner = 'codefori'; +const repo = 'vscode-ibmi'; +const token = process.env.API_GITHUB_TOKEN || ''; + +/** + * Fetch data from GitHub API. + * + * @param {string} endpoint - The API endpoint to fetch from. + * @param {number} limit - The maximum number of items to fetch (default is 5). + * @return {Promise} The data from the API, or null if an error occurred. + */ +async function fetchFromGitHub(endpoint: string, limit: number = 5) { + + if (!token) { + console.error('No GitHub token provided. Setup .env file.'); + return null; + } + + const url = new URL(`${baseURL}/${owner}/${repo}/${endpoint}`); + url.searchParams.append('per_page', String(limit)); + + const headers = { + 'Authorization': `token ${token}`, + 'Accept': 'application/vnd.github.v3+json' + }; + try { + const response = await fetch(url.toString(), { headers }); + if (!response.ok) { + console.error(`HTTP error! status: ${response.status}`); + return null; + } + const data = await response.json(); + return data; + } catch (error) { + console.error(`Failed to fetch from GitHub: ${error}`); + return null; + } +} + +export { fetchFromGitHub }; \ No newline at end of file diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx index abfae21..b8fa839 100644 --- a/src/content/docs/index.mdx +++ b/src/content/docs/index.mdx @@ -3,13 +3,17 @@ title: Code for IBM i --- import { CardGrid, Card, Icon } from '@astrojs/starlight/components'; +import ReleaseVersion from '../../components/ReleaseVersion.astro'; -## IBM i development extension for VS Code +## IBM i development extension for VS Code Maintain and compile your RPGLE, CL, COBOL, C/CPP on the IBM i right from Visual Studio Code. ![intro_01.png](../../assets/intro_01.png) +### What's New in Code for IBM i +See our [Release Notes](./releasenotes/) for the latest updates and features. + ## Requirements - SSH Daemon must be started on IBM i. diff --git a/src/content/docs/releasenotes.mdx b/src/content/docs/releasenotes.mdx new file mode 100644 index 0000000..24022d2 --- /dev/null +++ b/src/content/docs/releasenotes.mdx @@ -0,0 +1,15 @@ +--- +title: Release Notes +tableOfContents: false +hero: + image: + dark: ../../assets/github-mark-white.svg + light: ../../assets/github-mark-black.svg +--- + +import ReleaseNotes from '../../components/ReleaseNotes.astro'; +import { LinkCard } from '@astrojs/starlight/components'; + + + + \ No newline at end of file