diff --git a/.deploy/mta.yaml b/.deploy/mta.yaml index 58bea8370..fcc129d85 100644 --- a/.deploy/mta.yaml +++ b/.deploy/mta.yaml @@ -10,7 +10,7 @@ ID: tutorials-ims # Bump this on each release you deploy — it's the version shown by `cf mtas` # and in the mtar filename (tutorials-ims_.mtar). Deploy is manual: # `cd .deploy && mbt build && cf deploy mta_archives/tutorials-ims_.mtar -e ../deploy/.mtaext -f`. -version: 1.41.2 +version: 1.41.3 # Top-level parameters (overridable per-env via deploy/.mtaext). parameters: diff --git a/.github/workflows/rebuild-content-qa.yml b/.github/workflows/rebuild-content-qa.yml index 6a736df0a..d9ad1b6cf 100644 --- a/.github/workflows/rebuild-content-qa.yml +++ b/.github/workflows/rebuild-content-qa.yml @@ -430,7 +430,14 @@ jobs: # infra run and file a false failure issue. if: ${{ steps.source_errors.outputs.bad_slug == '' }} env: - APPROUTER_URL: ${{ secrets.APPROUTER_URL_QA }} + # QA is a feature of PRODUCTION, not a separate environment: /tutorials-qa/* + # is routed by the MAIN (prod) approuter (approuter/xs-app.json → srv-qa-api + # destination), so the QA HTML is dressed by the PROD approuter. The asset + # guard must probe that same approuter. There is no APPROUTER_URL_QA secret + # (only _DEV / _PROD); referencing it resolved to an empty string and the + # guard die()d with "missing --approuter-url" on every full QA rebuild + # (2026-10-25). + APPROUTER_URL: ${{ secrets.APPROUTER_URL_PROD }} # Match the publish step's PUBLISH_SLUG / PUBLISH_SLUGS expressions # EXACTLY (lines 424/431) so the probe scope tracks the publish scope: # a force-publish run ships the WHOLE catalog, so it must NOT pin the diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index beebed31b..0137dec40 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -54,5 +54,19 @@ jobs: # available to all workers unconditionally, matching what the MTA # before-all and local dev do. run: node scripts/bundle-shared.cjs + - name: Generate fingerprinted CSS (sap-fundamental + icon subset) required by the Hugo build test + # test/unit/hugo-homepage-partials.test.ts spawns a real Hugo build, and + # hugo/layouts/partials/head.html:27 does + # resources.Get "css/fundamental-styles-icon.css" | minify | fingerprint + # Since ac6b7e39f ("stop committing generated CSS so deploy & rebuild + # agree on fingerprint") both sap-fundamental.css and + # fundamental-styles-icon.css are gitignored build outputs — absent on a + # fresh checkout. Without them `resources.Get` misses the asset, `minify` + # receives a non-transformable resource.Resource, and the Hugo build exits + # 1 → 7 test files fail. rebuild-content.yml already regenerates these + # before its Hugo build; mirror that here so the unit suite does too. + run: | + npm run build:icon-subset + npm run build:css - name: Run unit tests run: npm test diff --git a/hugo/data/whats_new.json b/hugo/data/whats_new.json index f7a0f5308..4175b76dd 100644 --- a/hugo/data/whats_new.json +++ b/hugo/data/whats_new.json @@ -1,5 +1,5 @@ { - "generatedAt": "2026-10-25T12:04:13.836Z", + "generatedAt": "2026-10-25T13:42:26.548Z", "repos": [ { "key": "tutorials-ims", @@ -8,6 +8,58 @@ } ], "entries": [ + { + "id": "tutorials-ims#2923", + "repo": "tutorials-ims", + "label": "Developer Portal", + "number": 2923, + "title": "fix(ci): QA asset guard probes PROD approuter (QA is a feature of prod)", + "summary": "Fixed the QA author-preview rebuild so its asset check targets the correct approuter, unblocking QA content refreshes.", + "category": "Maintenance", + "mergedAt": "2026-10-25T13:37:15Z", + "week": "2026-W43", + "weekStart": "2026-10-19", + "url": "https://github.com/sap-tutorials/tutorials-ims/pull/2923" + }, + { + "id": "tutorials-ims#2922", + "repo": "tutorials-ims", + "label": "Developer Portal", + "number": 2922, + "title": "fix(ci): regenerate gitignored CSS before unit-test Hugo build", + "summary": "Unit-test build now regenerates its CSS first, so the test suite runs reliably on a clean checkout.", + "category": "Maintenance", + "mergedAt": "2026-10-25T12:48:25Z", + "week": "2026-W43", + "weekStart": "2026-10-19", + "url": "https://github.com/sap-tutorials/tutorials-ims/pull/2922" + }, + { + "id": "tutorials-ims#2921", + "repo": "tutorials-ims", + "label": "Developer Portal", + "number": 2921, + "title": "TypeScript glossary entry corrected", + "summary": "Corrected the glossary definition for TypeScript so the term reads accurately for learners.", + "category": "Fix", + "mergedAt": "2026-10-25T12:23:58Z", + "week": "2026-W43", + "weekStart": "2026-10-19", + "url": "https://github.com/sap-tutorials/tutorials-ims/pull/2921" + }, + { + "id": "tutorials-ims#2919", + "repo": "tutorials-ims", + "label": "Developer Portal", + "number": 2919, + "title": "release v1.41.2 DEV to main promotion", + "summary": "Release 1.41.2 promoted the QA content-pipeline fix from DEV to the production branch.", + "category": "Maintenance", + "mergedAt": "2026-10-25T12:05:49Z", + "week": "2026-W43", + "weekStart": "2026-10-19", + "url": "https://github.com/sap-tutorials/tutorials-ims/pull/2919" + }, { "id": "tutorials-ims#2918", "repo": "tutorials-ims", diff --git a/mta-mcp.yaml b/mta-mcp.yaml index d8855ef84..c74875f39 100644 --- a/mta-mcp.yaml +++ b/mta-mcp.yaml @@ -4,7 +4,7 @@ _schema-version: 3.3.0 # This file lives at repo root → path: gen/srv-mcp (root-relative, no ../). # before-all runs from ROOT (no cd ..) — mbt uses the descriptor's directory as cwd. ID: tutorials-mcp -version: 1.1.2 +version: 1.1.3 # Destinations are subaccount-level, so DEV and PROD (sharing one subaccount) # need DISTINCT destination names. `dest-main-srv` defaults to the PROD name;