This folder is the operational manual for everyone working with the SAP Developers tutorial system. It replaces the historical meta-tutorials run-book.
If you have never published through this platform, start with New tutorial author — it comes first because you complete it first. Once you are set up and writing markdown day-to-day, Tutorial author is your reference.
| If you are a... | Read | What you do |
|---|---|---|
| New tutorial author learning the ropes | meta-tutorials.md | First time here: follow the platform's own "how to write a tutorial" tutorials (on the QA channel) to get set up end-to-end |
| Tutorial author writing markdown | writing-tutorials.md | Already onboarded: write, preview, and publish tutorials as part of your ongoing work |
| Any author getting a change merged | branch-protection-and-pull-requests.md | Branches, forks, and PRs under the OSPO branch-protection rules (no more direct pushes to main) |
Repo group owner in sap-tutorials |
repo-group-owners.md | Review PRs, plan tutorials, manage your repos |
| Center admin running the platform | center-admin.md | Catalog, taxonomy, pipeline, access, support |
| Analytics admin exploring usage | analytics-admin.md | Run queries, monitor events, export data |
Previewing your tutorials on the QA channel (/tutorials-qa/*) requires the Tutorial.Author BTP scope, granted through the Tutorials Author role collection. New authors do not have it by default — you request it once.
To request access, do either of the following:
- Post a request in the Tutorial Authors channel in Microsoft Teams, or
- Email thomas.jung@sap.com.
Include the SAP e-mail address (SAP IDP identity) that you log in to the platform with — that is the identity the role collection is assigned to.
After your access is granted you must log out and log back in to the platform so your new scope appears in your session; until then /tutorials-qa/* returns a 403 even once the grant is in place.
For operators: the mechanics of assigning the
Tutorials Authorrole collection (BTP Cockpit andbtpCLI) are documented in XSUAA Role Collection Assignment.
- Authoring branched missions — pick-one alternatives within a mission
- Authoring branched tutorials — alternative step-runs and skip-runs within a single tutorial
- Branching cookbook — copy-paste examples for cloud/on-prem, IDE pick, and skip-ahead
- Reading branch telemetry — how to interpret the Branch Performance section in the Missions admin app, and when the staleness lint suggests collapsing a branch.
- Source repos —
sap-tutorialsGitHub organization (one repo per topical group) - Platform repo —
sap-tutorials/tutorials-ims(this repo) - Admin UI —
/admin-ui/on the deployed app (XSUAA-gated,Adminscope) - Analytics UI —
/analytics-ui/on the deployed app (Adminscope) - Public site —
https://developers.sap.com/tutorials/<slug> - HANA Cloud — managed instance bound to the CAP
srvapp; backups via BTP cockpit - Cloud Foundry —
devandprodspaces in thetutorial-systemsubaccount
If you find yourself doing something operationally important that isn't documented:
- Decide which persona file it belongs in (or whether it's a historic mapping for
../historic/). - Use the standard task template — heading with verb-led title, Interval, Status, Purpose and Objective, Prerequisites, numbered steps, Related links.
- Open a PR against this folder.
- Sage VS Code extension — author-time linting and preview.
- QA channel — author-preview for
*-Contributionrepo content (Tutorial.Authorscope required).
- build.md — fetch → parse → Hugo → HANA in detail
- mta-deployment.md — how the MTA is structured and deployed
- authentication.md — XSUAA, role collections, IAS
- testing-endpoints.md — canonical endpoint reference for smoke testing
- historic/decommissioned-tasks.md — historic task mapping
When you add a new page under docs/end-users/, docs/authors/, docs/developers/, or docs/historic/, you must register it in the sidebar at docs/.vitepress/config.ts under the matching persona block. The build runs scripts/check-docs-sidebar.cjs as predocs:build — it fails with a clear diff if a page is unregistered or a link is dead.
Run locally to verify:
npm run docs:build