diff --git a/.github/workflows/course-quality.yml b/.github/workflows/course-quality.yml index 0740e4b..bd7c790 100644 --- a/.github/workflows/course-quality.yml +++ b/.github/workflows/course-quality.yml @@ -34,10 +34,23 @@ jobs: node-version: '22' - name: Install run: npm install + - name: Record dependency audit + run: npm audit --json > npm-audit.json || true + - name: Enforce no critical dependency vulnerabilities + run: npm audit --audit-level=critical - name: Validate course structure run: npm run validate:content - name: Build Docusaurus run: npm run build + - name: Upload dependency evidence + if: always() + uses: actions/upload-artifact@v4 + with: + name: drools-course-dependency-evidence + path: | + course-site/package-lock.json + course-site/npm-audit.json + if-no-files-found: error - name: Upload production build uses: actions/upload-artifact@v4 with: diff --git a/course-site/docusaurus.config.js b/course-site/docusaurus.config.js index 9ff5d57..9a025eb 100644 --- a/course-site/docusaurus.config.js +++ b/course-site/docusaurus.config.js @@ -7,7 +7,11 @@ const config = { organizationName: 'skunkworks-academy', projectName: 'drools', onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'throw', + markdown: { + hooks: { + onBrokenMarkdownLinks: 'throw' + } + }, trailingSlash: false, presets: [ [ @@ -67,7 +71,7 @@ const config = { copyright: `Copyright © ${new Date().getFullYear()} Skunkworks Academy. Course source is version controlled.` }, prism: { - additionalLanguages: ['java', 'xml', 'bash', 'yaml'] + additionalLanguages: ['java', 'markup', 'bash', 'yaml'] }, colorMode: { defaultMode: 'light', diff --git a/course-site/sidebars.js b/course-site/sidebars.js index 3669abf..d482ce8 100644 --- a/course-site/sidebars.js +++ b/course-site/sidebars.js @@ -4,14 +4,14 @@ module.exports = { 'learner-guide', 'course-map', 'environment-setup', - {type: 'category', label: 'Module 1 — Decision Automation Foundations', items: ['modules/01-foundations', 'labs/lab-01-first-rules']}, - {type: 'category', label: 'Module 2 — DRL Rule Authoring', items: ['modules/02-drl', 'labs/lab-02-rule-authoring']}, - {type: 'category', label: 'Module 3 — KIE Runtime and Sessions', items: ['modules/03-kie-runtime', 'labs/lab-03-kie-sessions']}, - {type: 'category', label: 'Module 4 — Inference and Execution Control', items: ['modules/04-inference', 'labs/lab-04-inference']}, - {type: 'category', label: 'Module 5 — Decision Tables and DMN', items: ['modules/05-decision-models', 'labs/lab-05-dmn']}, - {type: 'category', label: 'Module 6 — Complex Event Processing', items: ['modules/06-cep', 'labs/lab-06-cep']}, - {type: 'category', label: 'Module 7 — Testing, Performance and Troubleshooting', items: ['modules/07-quality', 'labs/lab-07-testing']}, - {type: 'category', label: 'Module 8 — Integration, Security and Operations', items: ['modules/08-operations', 'labs/lab-08-service']}, + {type: 'category', label: 'Module 1 — Decision Automation Foundations', items: ['modules/foundations', 'labs/lab-01-first-rules']}, + {type: 'category', label: 'Module 2 — DRL Rule Authoring', items: ['modules/drl', 'labs/lab-02-rule-authoring']}, + {type: 'category', label: 'Module 3 — KIE Runtime and Sessions', items: ['modules/kie-runtime', 'labs/lab-03-kie-sessions']}, + {type: 'category', label: 'Module 4 — Inference and Execution Control', items: ['modules/inference', 'labs/lab-04-inference']}, + {type: 'category', label: 'Module 5 — Decision Tables and DMN', items: ['modules/decision-models', 'labs/lab-05-dmn']}, + {type: 'category', label: 'Module 6 — Complex Event Processing', items: ['modules/cep', 'labs/lab-06-cep']}, + {type: 'category', label: 'Module 7 — Testing, Performance and Troubleshooting', items: ['modules/quality', 'labs/lab-07-testing']}, + {type: 'category', label: 'Module 8 — Integration, Security and Operations', items: ['modules/operations', 'labs/lab-08-service']}, 'capstone', {type: 'category', label: 'Assessment', items: ['assessment/diagnostic', 'assessment/final-assessment']}, {type: 'category', label: 'Learning Aids', items: ['resources/glossary','resources/cheat-sheet','resources/troubleshooting','resources/student-notes','resources/references']},