diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 000000000..68adbda1a
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,12 @@
+version: 2
+updates:
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+
+ - package-ecosystem: "npm"
+ directory: "/docs"
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 10
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 7d4544298..bf8cf618e 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -12,17 +12,17 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
with:
# fetch all commits to get last updated time or other git log info
fetch-depth: 0
-
+
- name: Setup Node.js
- uses: actions/setup-node@v3
+ uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
# choose node.js version to use
node-version: 24
-
+
- name: Install dependencies
run: cd docs && npm ci
@@ -32,7 +32,7 @@ jobs:
# please check out the docs of the workflow for more details
# @see https://github.com/crazy-max/ghaction-github-pages
- name: Deploy to GitHub Pages
- uses: crazy-max/ghaction-github-pages@v4
+ uses: crazy-max/ghaction-github-pages@df5cc2bfa78282ded844b354faee141f06b41865 # v4.2.0
with:
# deploy to gh-pages branch
target_branch: gh-pages
diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index 125503931..44060071e 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -12,14 +12,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
-
+ - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
+
- name: Setup Node.js
- uses: actions/setup-node@v3
+ uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
# choose node.js version to use
node-version: 24
-
+
- name: Install dependencies
run: cd docs && npm ci
diff --git a/docs/package.json b/docs/package.json
index df52c905b..b9182f9c0 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -16,14 +16,14 @@
"@vuepress/plugin-markdown-math": "2.0.0-rc.121",
"@vuepress/plugin-markdown-tab": "2.0.0-rc.121",
"@vuepress/plugin-slimsearch": "2.0.0-rc.121",
- "katex": "^0.16.28",
- "sass-embedded": "^1.97.3",
- "sass-loader": "^16.0.7",
- "vue": "^3.5.28",
+ "katex": "0.16.28",
+ "sass-embedded": "1.97.3",
+ "sass-loader": "16.0.7",
+ "vue": "3.5.28",
"vuepress": "2.0.0-rc.26",
"vuepress-theme-hope": "2.0.0-rc.102"
},
"optionalDependencies": {
- "@rollup/rollup-linux-x64-gnu": "^4.57.1"
+ "@rollup/rollup-linux-x64-gnu": "4.59.0"
}
}
diff --git a/docs/src/.vuepress/client.ts b/docs/src/.vuepress/client.ts
index 5d8b1b1b5..7ee02bc47 100644
--- a/docs/src/.vuepress/client.ts
+++ b/docs/src/.vuepress/client.ts
@@ -5,11 +5,11 @@ import Layout from './layouts/PageLayout.vue'
import NotFoundLayout from './layouts/NotFoundLayout.vue'
import BlogLayout from './layouts/BlogLayout.vue';
-
+import OldVersions from './components/OldVersions.vue';
export default defineClientConfig({
enhance({ app }) {
-
+ app.component('OldVersions', OldVersions);
},
layouts: {
ParentLayout,
diff --git a/docs/src/.vuepress/components/OldVersions.vue b/docs/src/.vuepress/components/OldVersions.vue
new file mode 100644
index 000000000..6793ec0ee
--- /dev/null
+++ b/docs/src/.vuepress/components/OldVersions.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/docs/src/.vuepress/data/releases.ts b/docs/src/.vuepress/data/releases.ts
index 4e2275624..f49e036e6 100644
--- a/docs/src/.vuepress/data/releases.ts
+++ b/docs/src/.vuepress/data/releases.ts
@@ -26,6 +26,38 @@ export const releases: Record = {
},
};
+// --- Version registry (single source of truth) ---
+// Sidebar keys reference generator functions by name; mapped in theme.ts.
+// Ordered newest-first.
+export type SidebarKey = 'v2_latest' | 'v2_0_0' | 'v1_latest' | 'v1_gte_1_7' | 'v1_gte_1_5' | 'v1_gte_1_0';
+
+export interface VersionEntry {
+ tag: string;
+ sidebar: SidebarKey;
+}
+
+export const allVersions: VersionEntry[] = [
+ { tag: '2.1.0', sidebar: 'v2_latest' },
+ { tag: '2.0.2', sidebar: 'v2_0_0' },
+ { tag: '2.0.1', sidebar: 'v2_0_0' },
+ { tag: '2.0.0', sidebar: 'v2_0_0' },
+ { tag: '1.9.0', sidebar: 'v1_latest' },
+ { tag: '1.8.0', sidebar: 'v1_gte_1_7' },
+ { tag: '1.7.1', sidebar: 'v1_gte_1_7' },
+ { tag: '1.7.0', sidebar: 'v1_gte_1_7' },
+ { tag: '1.6.0', sidebar: 'v1_gte_1_5' },
+ { tag: '1.5.2', sidebar: 'v1_gte_1_5' },
+ { tag: '1.5.1', sidebar: 'v1_gte_1_5' },
+ { tag: '1.5.0', sidebar: 'v1_gte_1_5' },
+ { tag: '1.4.0', sidebar: 'v1_gte_1_0' },
+ { tag: '1.3.2', sidebar: 'v1_gte_1_0' },
+ { tag: '1.3.1', sidebar: 'v1_gte_1_0' },
+ { tag: '1.3.0', sidebar: 'v1_gte_1_0' },
+ { tag: '1.2.0', sidebar: 'v1_gte_1_0' },
+ { tag: '1.1.0', sidebar: 'v1_gte_1_0' },
+ { tag: '1.0.0', sidebar: 'v1_gte_1_0' },
+];
+
export const latestVersion = '2.1.0';
export function getReleaseFromPath(path: string): Release | undefined {
diff --git a/docs/src/.vuepress/layouts/PageLayout.vue b/docs/src/.vuepress/layouts/PageLayout.vue
index daab1228f..c730251b1 100644
--- a/docs/src/.vuepress/layouts/PageLayout.vue
+++ b/docs/src/.vuepress/layouts/PageLayout.vue
@@ -2,10 +2,10 @@
import { Layout as ParentLayout, PageContent } from 'vuepress-theme-hope/client'
import { useRoute, useRouter } from "vue-router";
import { ref, onMounted } from 'vue'
+import { allVersions, latestVersion } from '../data/releases'
const version = ref("");
-const latestVersion = "v2.1.0";
-
+const latestTag = `v${latestVersion}`;
function setVersionBasedOnCurrentPath() : void {
if (route.path.startsWith('/operations/')) {
@@ -13,11 +13,9 @@ function setVersionBasedOnCurrentPath() : void {
const firstSlash = input.indexOf("/");
var result = firstSlash !== -1 ? input.slice(0, firstSlash) : input;
if (result === "latest") {
- result = latestVersion;
+ result = latestTag;
}
version.value = result;
-
-
} else {
version.value = "";
}
@@ -25,7 +23,6 @@ function setVersionBasedOnCurrentPath() : void {
const route = useRoute();
-
const router = useRouter();
router.afterEach((_to, _from) => {
setVersionBasedOnCurrentPath();
@@ -39,11 +36,10 @@ function navigateToNewVersion() {
const input = route.path.substring('/operations/'.length);
const firstSlash = input.indexOf("/");
const result = firstSlash !== -1 ? input.slice(firstSlash + 1) : "";
- if (version.value === latestVersion) {
+ if (version.value === latestTag) {
router.push('/operations/' + "latest" + "/" + result);
} else {
router.push('/operations/' + version.value + "/" + result);
-
}
}
@@ -55,25 +51,9 @@ function navigateToNewVersion() {
@@ -84,4 +64,4 @@ function navigateToNewVersion() {
.version-selector {
margin-top: 20px;
}
-
\ No newline at end of file
+
diff --git a/docs/src/.vuepress/scripts/create-version.ts b/docs/src/.vuepress/scripts/create-version.ts
new file mode 100644
index 000000000..36b57e3b4
--- /dev/null
+++ b/docs/src/.vuepress/scripts/create-version.ts
@@ -0,0 +1,115 @@
+#!/usr/bin/env npx tsx
+// Creates a new DSF documentation version.
+//
+// Usage: npx tsx docs/src/.vuepress/scripts/create-version.ts
+// Example: npx tsx docs/src/.vuepress/scripts/create-version.ts 2.2.0
+//
+// What it does:
+// 1. Copies the current latest version folder to operations/v/
+// 2. Updates releases.ts: adds new entry to allVersions, updates latestVersion,
+// adds a releases entry with TODO digests
+// 3. Updates the latest symlink to point to v/
+// 4. Runs fetch-versioned-release-notes.ts if a GitHub release exists
+
+import { cpSync, existsSync, readFileSync, writeFileSync, unlinkSync, symlinkSync, realpathSync } from 'fs';
+import { resolve, dirname } from 'path';
+import { fileURLToPath } from 'url';
+import { execSync } from 'child_process';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+const OPERATIONS_DIR = resolve(__dirname, '../../operations');
+const RELEASES_FILE = resolve(__dirname, '../data/releases.ts');
+
+function die(msg: string): never {
+ console.error(`Error: ${msg}`);
+ process.exit(1);
+}
+
+function parseVersion(v: string): [number, number, number] {
+ const m = v.match(/^(\d+)\.(\d+)\.(\d+)$/);
+ if (!m) die(`Invalid version format: "${v}". Expected X.Y.Z`);
+ return [parseInt(m![1]), parseInt(m![2]), parseInt(m![3])];
+}
+
+function main() {
+ const newVersion = process.argv[2];
+ if (!newVersion) die('Usage: npx tsx create-version.ts \n Example: npx tsx create-version.ts 2.2.0');
+
+ parseVersion(newVersion); // validate format
+
+ const newDir = resolve(OPERATIONS_DIR, `v${newVersion}`);
+ if (existsSync(newDir)) die(`Directory ${newDir} already exists.`);
+
+ // --- 1. Determine current latest and copy ---
+ const latestLink = resolve(OPERATIONS_DIR, 'latest');
+ const currentLatestDir = realpathSync(latestLink);
+ const currentLatestVersion = currentLatestDir.match(/v(\d+\.\d+\.\d+)$/)?.[1];
+ if (!currentLatestVersion) die(`Could not determine current latest version from symlink: ${currentLatestDir}`);
+
+ console.log(`Copying v${currentLatestVersion}/ ā v${newVersion}/...`);
+ cpSync(currentLatestDir, newDir, { recursive: true });
+
+ // --- 2. Update releases.ts ---
+ console.log('Updating releases.ts...');
+ let src = readFileSync(RELEASES_FILE, 'utf-8');
+
+ // Determine sidebar key from previous latest
+ const prevSidebarMatch = src.match(new RegExp(`\\{\\s*tag:\\s*'${currentLatestVersion}'\\s*,\\s*sidebar:\\s*'([^']+)'`));
+ const sidebarKey = prevSidebarMatch?.[1] ?? 'v2_latest';
+
+ // Add new entry at the top of allVersions
+ const allVersionsMarker = 'export const allVersions: VersionEntry[] = [';
+ const newEntry = ` { tag: '${newVersion}', sidebar: '${sidebarKey}' },`;
+ src = src.replace(allVersionsMarker, `${allVersionsMarker}\n${newEntry}`);
+
+ // Update latestVersion
+ src = src.replace(
+ /export const latestVersion = '[^']+';/,
+ `export const latestVersion = '${newVersion}';`
+ );
+
+ // Add releases entry with TODO digests (if major >= 2)
+ const [major] = parseVersion(newVersion);
+ if (major >= 2) {
+ const releasesClosingBrace = /^};$/m;
+ const newRelease = ` '${newVersion}': {
+ tag: '${newVersion}',
+ previousTag: '${currentLatestVersion}',
+ images: {
+ fhir: { digest: 'sha256:TODO' },
+ fhir_proxy: { digest: 'sha256:TODO' },
+ bpe: { digest: 'sha256:TODO' },
+ bpe_proxy: { digest: 'sha256:TODO' },
+ },
+ },\n`;
+ src = src.replace(releasesClosingBrace, `${newRelease}};`);
+ }
+
+ writeFileSync(RELEASES_FILE, src, 'utf-8');
+
+ // --- 3. Update latest symlink ---
+ console.log(`Updating latest symlink ā v${newVersion}/...`);
+ unlinkSync(latestLink);
+ symlinkSync(`v${newVersion}`, latestLink);
+
+ // --- 4. Fetch release notes (if release exists) ---
+ const fetchScript = resolve(__dirname, '../sidebar/fetch-versioned-release-notes.ts');
+ if (existsSync(fetchScript)) {
+ console.log('Fetching release notes...');
+ try {
+ execSync(`npx tsx "${fetchScript}"`, { stdio: 'inherit' });
+ } catch {
+ console.log('(Release notes fetch had warnings ā may not exist on GitHub yet)');
+ }
+ }
+
+ // --- Done ---
+ console.log(`\nā Version ${newVersion} created successfully.\n`);
+ console.log('Remaining manual steps:');
+ console.log(` 1. Update image digests in releases.ts (replace sha256:TODO)`);
+ console.log(` 2. Review/edit release-specific content in operations/v${newVersion}/`);
+ console.log(` (release-notes.md, upgrade-from-*.md if upgrade steps differ)`);
+ console.log(` 3. Run: cd docs && npm run docs:build`);
+}
+
+main();
diff --git a/docs/src/.vuepress/sidebar/fetch-versioned-release-notes.sh b/docs/src/.vuepress/sidebar/fetch-versioned-release-notes.sh
deleted file mode 100755
index f5de21af4..000000000
--- a/docs/src/.vuepress/sidebar/fetch-versioned-release-notes.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-# To run: chmod +x fetch-versioned-release-notes.sh && ./fetch-versioned-release-notes.sh
-# Dokumentation https://wiki.gecko.hs-heilbronn.de/doc/dokumentation-release-notes-script-45Ex3hoxjB
-
-# GitHub repository details
-REPO_OWNER="datasharingframework"
-REPO_NAME="dsf"
-
-# Output base directory (this will hold the versioned folders)
-OUTPUT_BASE_DIR="../../operations"
-
-# Define the range of versions
-VERSIONS=("v1.0.0" "v1.1.0" "v1.2.0" "v1.3.0" "v1.3.1" "v1.3.2" "v1.4.0" "v1.5.0" "v1.5.1" "v1.5.2" "v1.6.0" "v1.7.0" "v1.7.1" "v1.8.0" "v1.9.0" "v2.0.0" "v2.0.1" "v2.0.2" "v2.1.0")
-
-# Fetch all release details
-echo "Fetching all releases..."
-RELEASES=$(curl -s https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases)
-
-# Loop through each version in the version list
-for VERSION in "${VERSIONS[@]}"; do
- VERSION_FOUND=$(echo "$RELEASES" | jq -r ".[] | select(.tag_name == \"$VERSION\")")
-
- if [ ! -z "$VERSION_FOUND" ]; then
- VERSION_DIR="$OUTPUT_BASE_DIR/$VERSION"
-
- if [ ! -d "$VERSION_DIR" ]; then
- echo "Directory $VERSION_DIR does not exist. Skipping $VERSION."
- continue
- fi
-
- OUTPUT_FILE="$VERSION_DIR/release-notes.md"
-
-
-# Write frontmatter at the top of the Markdown file
-cat < "$OUTPUT_FILE"
----
-title: Release Notes ($VERSION)
-icon: note
----
-
-## [Release Notes for $VERSION](https://github.com/$REPO_OWNER/$REPO_NAME/releases/tag/$VERSION)
-
-::: tip Release Notes
-You can access all release notes on our [GitHub](https://github.com/datasharingframework/dsf/releases).
-:::
-
-EOF
-
- echo "$RELEASES" | jq -r ".[] | select(.tag_name == \"$VERSION\") | @base64" | while read -r RELEASE; do
- RELEASE_JSON=$(echo "$RELEASE" | base64 --decode)
- RELEASE_BODY=$(echo "$RELEASE_JSON" | jq -r '.body')
- RELEASE_NAME=$(echo "$RELEASE_JSON" | jq -r '.name')
-
- # Convert #issue_number to GitHub issue link
- RELEASE_BODY=$(echo "$RELEASE_BODY" | sed -E 's/#([0-9]+)/[#\1](https:\/\/github.com\/datasharingframework\/dsf\/issues\/\1)/g')
-
- # Convert @username to GitHub user link
- RELEASE_BODY=$(echo "$RELEASE_BODY" | sed -E 's/@([a-zA-Z0-9_-]+)/[@\1](https:\/\/github.com\/\1)/g')
-
-
- echo "### $RELEASE_NAME" >> "$OUTPUT_FILE"
- echo "$RELEASE_BODY" >> "$OUTPUT_FILE"
- echo "" >> "$OUTPUT_FILE"
- done
-
- echo "Release notes for version $VERSION saved to $OUTPUT_FILE"
- else
- echo "No release found for version $VERSION"
- fi
-done
-
-echo "Process completed."
diff --git a/docs/src/.vuepress/sidebar/fetch-versioned-release-notes.ts b/docs/src/.vuepress/sidebar/fetch-versioned-release-notes.ts
new file mode 100644
index 000000000..7338edab6
--- /dev/null
+++ b/docs/src/.vuepress/sidebar/fetch-versioned-release-notes.ts
@@ -0,0 +1,90 @@
+#!/usr/bin/env npx tsx
+// Fetches GitHub release notes for all versions in releases.ts and writes them
+// as Markdown files into the corresponding operations/v/ directories.
+//
+// Usage: npx tsx fetch-versioned-release-notes.ts
+// Docs: https://wiki.gecko.hs-heilbronn.de/doc/dokumentation-release-notes-script-45Ex3hoxjB
+
+import { writeFileSync, existsSync } from 'fs';
+import { resolve, dirname } from 'path';
+import { fileURLToPath } from 'url';
+import { allVersions } from '../data/releases.js';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+const REPO_OWNER = 'datasharingframework';
+const REPO_NAME = 'dsf';
+const OUTPUT_BASE = resolve(__dirname, '../../operations');
+
+interface GitHubRelease {
+ tag_name: string;
+ name: string;
+ body: string;
+}
+
+async function fetchAllReleases(): Promise {
+ const url = `https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/releases?per_page=100`;
+ console.log('Fetching all releases...');
+ const res = await fetch(url, {
+ headers: { Accept: 'application/vnd.github+json' },
+ });
+ if (!res.ok) throw new Error(`GitHub API error: ${res.status} ${res.statusText}`);
+ return res.json() as Promise;
+}
+
+function linkify(body: string): string {
+ // Convert #123 to GitHub issue link
+ body = body.replace(/#(\d+)/g, `[#$1](https://github.com/${REPO_OWNER}/${REPO_NAME}/issues/$1)`);
+ // Convert @username to GitHub user link
+ body = body.replace(/@([a-zA-Z0-9_-]+)/g, '[@$1](https://github.com/$1)');
+ return body;
+}
+
+async function main() {
+ const releases = await fetchAllReleases();
+ const releaseByTag = new Map(releases.map(r => [r.tag_name, r]));
+
+ for (const { tag } of allVersions) {
+ const version = `v${tag}`;
+ const release = releaseByTag.get(version);
+
+ if (!release) {
+ console.log(`No release found for version ${version}`);
+ continue;
+ }
+
+ const versionDir = resolve(OUTPUT_BASE, version);
+ if (!existsSync(versionDir)) {
+ console.log(`Directory ${versionDir} does not exist. Skipping ${version}.`);
+ continue;
+ }
+
+ const outputFile = resolve(versionDir, 'release-notes.md');
+ const body = linkify(release.body ?? '');
+
+ const content = `---
+title: Release Notes (${version})
+icon: note
+---
+
+## [Release Notes for ${version}](https://github.com/${REPO_OWNER}/${REPO_NAME}/releases/tag/${version})
+
+::: tip Release Notes
+You can access all release notes on our [GitHub](https://github.com/datasharingframework/dsf/releases).
+:::
+
+### ${release.name}
+${body}
+`;
+
+ writeFileSync(outputFile, content, 'utf-8');
+ console.log(`Release notes for version ${version} saved to ${outputFile}`);
+ }
+
+ console.log('Process completed.');
+}
+
+main().catch((err) => {
+ console.error(err);
+ process.exit(1);
+});
diff --git a/docs/src/.vuepress/theme.ts b/docs/src/.vuepress/theme.ts
index 83dc211bc..105034682 100644
--- a/docs/src/.vuepress/theme.ts
+++ b/docs/src/.vuepress/theme.ts
@@ -2,6 +2,27 @@ import { slimsearchPlugin } from "@vuepress/plugin-slimsearch";
import { hopeTheme } from "vuepress-theme-hope";
import { generate_v1_latest_sidebar, generate_v1_gt_eq_1_7_0_sidebar, generate_v1_gt_eq_1_5_0_sidebar, generate_v1_gt_eq_1_0_0_sidebar } from "./sidebar/operations-v1";
import { generate_v2_0_0_sidebar, generate_v2_latest_sidebar } from "./sidebar/operations-v2";
+import { allVersions, latestVersion, type SidebarKey } from "./data/releases";
+
+const sidebarGenerators: Record any[]> = {
+ v2_latest: generate_v2_latest_sidebar,
+ v2_0_0: generate_v2_0_0_sidebar,
+ v1_latest: generate_v1_latest_sidebar,
+ v1_gte_1_7: generate_v1_gt_eq_1_7_0_sidebar,
+ v1_gte_1_5: generate_v1_gt_eq_1_5_0_sidebar,
+ v1_gte_1_0: generate_v1_gt_eq_1_0_0_sidebar,
+};
+
+function buildOperationsSidebar(): Record {
+ const map: Record = {
+ '/operations/latest/': sidebarGenerators[allVersions.find(v => v.tag === latestVersion)!.sidebar](),
+ '/operations/next/': [],
+ };
+ for (const v of allVersions) {
+ map[`/operations/v${v.tag}/`] = sidebarGenerators[v.sidebar]();
+ }
+ return map;
+}
export default hopeTheme({
author: {
@@ -39,7 +60,7 @@ export default hopeTheme({
icon: "launch",
prefix: "/operations/",
children: [ {
- text: "Current Version - 2.1.0",
+ text: `Current Version - ${latestVersion}`,
link: "get-started.md",
icon: "launch"
}, "old-versions.md"],
@@ -125,27 +146,7 @@ export default hopeTheme({
"/spring-school": [],
"/news": [],
"/operations/old-versions": [],
- "/operations/latest/": generate_v2_latest_sidebar(),
- "/operations/next/": [],
- "/operations/v2.1.0/": generate_v2_latest_sidebar(),
- "/operations/v2.0.2/": generate_v2_0_0_sidebar(),
- "/operations/v2.0.1/": generate_v2_0_0_sidebar(),
- "/operations/v2.0.0/": generate_v2_0_0_sidebar(),
- "/operations/v1.9.0/": generate_v1_latest_sidebar(),
- "/operations/v1.8.0/": generate_v1_gt_eq_1_7_0_sidebar(),
- "/operations/v1.7.1/": generate_v1_gt_eq_1_7_0_sidebar(),
- "/operations/v1.7.0/": generate_v1_gt_eq_1_7_0_sidebar(),
- "/operations/v1.6.0/": generate_v1_gt_eq_1_5_0_sidebar(),
- "/operations/v1.5.2/": generate_v1_gt_eq_1_5_0_sidebar(),
- "/operations/v1.5.1/": generate_v1_gt_eq_1_5_0_sidebar(),
- "/operations/v1.5.0/": generate_v1_gt_eq_1_5_0_sidebar(),
- "/operations/v1.4.0/": generate_v1_gt_eq_1_0_0_sidebar(),
- "/operations/v1.3.2/": generate_v1_gt_eq_1_0_0_sidebar(),
- "/operations/v1.3.1/": generate_v1_gt_eq_1_0_0_sidebar(),
- "/operations/v1.3.0/": generate_v1_gt_eq_1_0_0_sidebar(),
- "/operations/v1.2.0/": generate_v1_gt_eq_1_0_0_sidebar(),
- "/operations/v1.1.0/": generate_v1_gt_eq_1_0_0_sidebar(),
- "/operations/v1.0.0/": generate_v1_gt_eq_1_0_0_sidebar(),
+ ...buildOperationsSidebar(),
"/process-development": [
{
text: "API v1",
diff --git a/docs/src/operations/old-versions.md b/docs/src/operations/old-versions.md
index e20a096ec..316965d4b 100644
--- a/docs/src/operations/old-versions.md
+++ b/docs/src/operations/old-versions.md
@@ -3,27 +3,4 @@ title: Old Versions
icon: launch
---
-## DSF v2
-
-- [2.1.0](./v2.1.0/)
-- [2.0.1](./v2.0.1/)
-- [2.0.0](./v2.0.0/)
-
-
-## DSF v1
-
-- [1.9.0](./v1.9.0/)
-- [1.8.0](./v1.8.0/)
-- [1.7.1](./v1.7.1/)
-- [1.7.0](./v1.7.0/)
-- [1.6.0](./v1.6.0/)
-- [1.5.2](./v1.5.2/)
-- [1.5.1](./v1.5.1/)
-- [1.5.0](./v1.5.0/)
-- [1.4.0](./v1.4.0/)
-- [1.3.2](./v1.3.2/)
-- [1.3.1](./v1.3.1/)
-- [1.3.0](./v1.3.0/)
-- [1.2.0](./v1.2.0/)
-- [1.1.0](./v1.1.0/)
-- [1.0.0](./v1.0.0/)
+
diff --git a/docs/src/operations/v1.0.0/release-notes.md b/docs/src/operations/v1.0.0/release-notes.md
index 9a295f644..0f65fbff4 100644
--- a/docs/src/operations/v1.0.0/release-notes.md
+++ b/docs/src/operations/v1.0.0/release-notes.md
@@ -75,4 +75,3 @@ Issues closed:
- Migrate to dsf.dev Namespace [#1](https://github.com/datasharingframework/dsf/issues/1)
This release contains contributions from [@schwzr](https://github.com/schwzr), [@wetret](https://github.com/wetret) and [@hhund](https://github.com/hhund).
-
diff --git a/docs/src/operations/v1.1.0/release-notes.md b/docs/src/operations/v1.1.0/release-notes.md
index ff8c087a5..7bbccfa08 100644
--- a/docs/src/operations/v1.1.0/release-notes.md
+++ b/docs/src/operations/v1.1.0/release-notes.md
@@ -51,4 +51,3 @@ Issues closed:
- Improve Task HTML view [#56](https://github.com/datasharingframework/dsf/issues/56)
This release contains contributions from [@wetret](https://github.com/wetret) and [@hhund](https://github.com/hhund).
-
diff --git a/docs/src/operations/v1.2.0/release-notes.md b/docs/src/operations/v1.2.0/release-notes.md
index 8d85f9d6f..6bba5fb74 100644
--- a/docs/src/operations/v1.2.0/release-notes.md
+++ b/docs/src/operations/v1.2.0/release-notes.md
@@ -51,4 +51,3 @@ Issues closed:
- Make FHIR proxy server context path customizable [#85](https://github.com/datasharingframework/dsf/issues/85)
This release contains contributions from [@wetret](https://github.com/wetret) and [@hhund](https://github.com/hhund).
-
diff --git a/docs/src/operations/v1.3.0/release-notes.md b/docs/src/operations/v1.3.0/release-notes.md
index e21deaf63..e921554dc 100644
--- a/docs/src/operations/v1.3.0/release-notes.md
+++ b/docs/src/operations/v1.3.0/release-notes.md
@@ -43,4 +43,3 @@ Issues closed:
- Make FHIR proxy server context path customizable [#85](https://github.com/datasharingframework/dsf/issues/85)
This release contains contributions from [@EmteZogaf](https://github.com/EmteZogaf), [@wetret](https://github.com/wetret) and [@hhund](https://github.com/hhund).
-
diff --git a/docs/src/operations/v1.3.1/release-notes.md b/docs/src/operations/v1.3.1/release-notes.md
index d0812b34e..b8436cd4d 100644
--- a/docs/src/operations/v1.3.1/release-notes.md
+++ b/docs/src/operations/v1.3.1/release-notes.md
@@ -50,4 +50,3 @@ Issues closed:
- Unsafe 3DES Cipher Suite in FHIR Proxy [#117](https://github.com/datasharingframework/dsf/issues/117)
This release contains contributions from [@wetret](https://github.com/wetret), [@schwzr](https://github.com/schwzr) and [@hhund](https://github.com/hhund).
-
diff --git a/docs/src/operations/v1.3.2/release-notes.md b/docs/src/operations/v1.3.2/release-notes.md
index d245cbfe0..bb74d9c9c 100644
--- a/docs/src/operations/v1.3.2/release-notes.md
+++ b/docs/src/operations/v1.3.2/release-notes.md
@@ -35,4 +35,3 @@ Issues closed:
- Use UUID generator instead of database id generator [#139](https://github.com/datasharingframework/dsf/issues/139)
This release contains contributions from [@EmteZogaf](https://github.com/EmteZogaf), [@wetret](https://github.com/wetret), [@schwzr](https://github.com/schwzr) and [@hhund](https://github.com/hhund).
-
diff --git a/docs/src/operations/v1.4.0/release-notes.md b/docs/src/operations/v1.4.0/release-notes.md
index 3a776a924..23e468da0 100644
--- a/docs/src/operations/v1.4.0/release-notes.md
+++ b/docs/src/operations/v1.4.0/release-notes.md
@@ -56,4 +56,3 @@ Issues closed:
- Treat RC releases similar to SNAPSHOT releases [#131](https://github.com/datasharingframework/dsf/issues/131)
This release contains contributions from [@EmteZogaf](https://github.com/EmteZogaf), [@hhund](https://github.com/hhund), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v1.5.0/release-notes.md b/docs/src/operations/v1.5.0/release-notes.md
index eff44fafa..c75ee0c9a 100644
--- a/docs/src/operations/v1.5.0/release-notes.md
+++ b/docs/src/operations/v1.5.0/release-notes.md
@@ -58,4 +58,3 @@ Issues closed:
- Add community guidelines [#152](https://github.com/datasharingframework/dsf/issues/152)
This release contains contributions from [@EmteZogaf](https://github.com/EmteZogaf), [@hhund](https://github.com/hhund), [@jbellmann](https://github.com/jbellmann), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v1.5.1/release-notes.md b/docs/src/operations/v1.5.1/release-notes.md
index d7343143b..374032862 100644
--- a/docs/src/operations/v1.5.1/release-notes.md
+++ b/docs/src/operations/v1.5.1/release-notes.md
@@ -41,4 +41,3 @@ Issues closed:
- FHIR Server GUI: Fix recipient in Task view [#189](https://github.com/datasharingframework/dsf/issues/189)
This release contains contributions from [@EmteZogaf](https://github.com/EmteZogaf), [@hhund](https://github.com/hhund), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v1.5.2/release-notes.md b/docs/src/operations/v1.5.2/release-notes.md
index 4e61564cf..5ad6857b8 100644
--- a/docs/src/operations/v1.5.2/release-notes.md
+++ b/docs/src/operations/v1.5.2/release-notes.md
@@ -43,4 +43,3 @@ Issues closed:
- Start New Development Cycle [#198](https://github.com/datasharingframework/dsf/issues/198)
This release contains contributions from [@hhund](https://github.com/hhund) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v1.6.0/release-notes.md b/docs/src/operations/v1.6.0/release-notes.md
index 7669b4b80..3bb139f4d 100644
--- a/docs/src/operations/v1.6.0/release-notes.md
+++ b/docs/src/operations/v1.6.0/release-notes.md
@@ -52,4 +52,3 @@ Issues closed:
- Start New Development Cycle [#219](https://github.com/datasharingframework/dsf/issues/219)
This release contains contributions from [@hhund](https://github.com/hhund), [@jaboehri](https://github.com/jaboehri), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v1.7.0/release-notes.md b/docs/src/operations/v1.7.0/release-notes.md
index 710f9f365..8f7963cd9 100644
--- a/docs/src/operations/v1.7.0/release-notes.md
+++ b/docs/src/operations/v1.7.0/release-notes.md
@@ -42,4 +42,3 @@ Issues closed:
- Start New Development Cycle [#245](https://github.com/datasharingframework/dsf/issues/245)
This release contains contributions from [@hhund](https://github.com/hhund), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v1.7.1/release-notes.md b/docs/src/operations/v1.7.1/release-notes.md
index 98689be80..ca20b0090 100644
--- a/docs/src/operations/v1.7.1/release-notes.md
+++ b/docs/src/operations/v1.7.1/release-notes.md
@@ -35,4 +35,3 @@ Issues closed:
- Modify Documentation Generator to Support SECRET_FILE Environment Variables [#265](https://github.com/datasharingframework/dsf/issues/265)
This release contains contributions from [@hhund](https://github.com/hhund), [@jaboehri](https://github.com/jaboehri), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v1.8.0/release-notes.md b/docs/src/operations/v1.8.0/release-notes.md
index 11b823994..ea46974b4 100644
--- a/docs/src/operations/v1.8.0/release-notes.md
+++ b/docs/src/operations/v1.8.0/release-notes.md
@@ -37,4 +37,3 @@ Issues closed:
- Adapt Github Actions to build on pull request [#163](https://github.com/datasharingframework/dsf/issues/163)
This release contains contributions from [@hhund](https://github.com/hhund), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v1.9.0/release-notes.md b/docs/src/operations/v1.9.0/release-notes.md
index 9e75bda9b..c6a9feca4 100644
--- a/docs/src/operations/v1.9.0/release-notes.md
+++ b/docs/src/operations/v1.9.0/release-notes.md
@@ -35,4 +35,3 @@ Issues closed:
- Support for running the proxy containers as non-root by default [#352](https://github.com/datasharingframework/dsf/issues/352)
This release contains contributions from [@EmteZogaf](https://github.com/EmteZogaf), [@hhund](https://github.com/hhund), [@jaboehri](https://github.com/jaboehri) and [@schwzr](https://github.com/schwzr).
-
diff --git a/docs/src/operations/v2.0.0/release-notes.md b/docs/src/operations/v2.0.0/release-notes.md
index cc7ac2829..9ac6b38b7 100644
--- a/docs/src/operations/v2.0.0/release-notes.md
+++ b/docs/src/operations/v2.0.0/release-notes.md
@@ -113,4 +113,3 @@ Issues closed:
- Improve DefaultUserTaskListener [#78](https://github.com/datasharingframework/dsf/issues/78)
This release contains contributions from [@alexanderkiel](https://github.com/alexanderkiel), [@EmteZogaf](https://github.com/EmteZogaf), [@hhund](https://github.com/hhund), [@jaboehri](https://github.com/jaboehri), [@MadMax93](https://github.com/MadMax93), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v2.0.1/release-notes.md b/docs/src/operations/v2.0.1/release-notes.md
index 30a1b0749..62861972a 100644
--- a/docs/src/operations/v2.0.1/release-notes.md
+++ b/docs/src/operations/v2.0.1/release-notes.md
@@ -57,4 +57,3 @@ Issues closed:
- DSF Fails to Start with Certain ECC Client Certificates [#405](https://github.com/datasharingframework/dsf/issues/405)
This release contains contributions from [@hhund](https://github.com/hhund) and [@schwzr](https://github.com/schwzr).
-
diff --git a/docs/src/operations/v2.0.2/release-notes.md b/docs/src/operations/v2.0.2/release-notes.md
index 39b840688..9743fb929 100644
--- a/docs/src/operations/v2.0.2/release-notes.md
+++ b/docs/src/operations/v2.0.2/release-notes.md
@@ -68,4 +68,3 @@ Issues closed:
- Property dev.dsf.bpe.fhir.client.connections.config.default.enable.debug.logging Used for Unrelated Configuration Values [#411](https://github.com/datasharingframework/dsf/issues/411)
This release contains contributions from [@EmteZogaf](https://github.com/EmteZogaf), [@hhund](https://github.com/hhund), [@jaboehri](https://github.com/jaboehri), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-
diff --git a/docs/src/operations/v2.1.0/release-notes.md b/docs/src/operations/v2.1.0/release-notes.md
index 67fe39011..7f76a9df4 100644
--- a/docs/src/operations/v2.1.0/release-notes.md
+++ b/docs/src/operations/v2.1.0/release-notes.md
@@ -30,6 +30,7 @@ Feature Summary:
- The DSF FHIR server front-end was improved to display the `Binary` resource content inline. This feature is enabled for `Binary` resources with content-types: `text/html` and `text/plain`.
- The performance of allow-list and other bundle executions was improved by modifying the database schema and optimizing the FHIR server code base. A new `current` column was added to resource tables together with a number of new database indexes. A "not found" cache was added for metadata resources to reduce unnecessary database calls.
- Other security improvements were implemented and are detailed in the [DSF 2.1.0 hardening measures](https://dsf.dev/operations/v2.1.0/hardening-measures.html) document.
+- Starting with this release our docker images are cryptographically signed. Take a look at the [Verify Image Signatures](https://dsf.dev/operations/latest/image-verification.html) document for details.
Docker images for this release can be accessed via the GitHub Docker registry - ghcr.io:
* **bpe**: [ghcr.io/datasharingframework/bpe:2.1.0](https://github.com/datasharingframework/dsf/pkgs/container/bpe/796016761?tag=2.1.0)
@@ -78,4 +79,3 @@ Issues closed:
- ClientConfig in DsfClientJersey overwrites Authentication Features [#432](https://github.com/datasharingframework/dsf/issues/432)
This release contains contributions from [@EmteZogaf](https://github.com/EmteZogaf), [@hhund](https://github.com/hhund), [@jaboehri](https://github.com/jaboehri), [@schwzr](https://github.com/schwzr) and [@wetret](https://github.com/wetret).
-