| Workflow | Trigger | Purpose |
|---|---|---|
ci.yml |
push to main, pull requests, manual run |
Unit/contract tests via npm run test:unit, installed-extension E2E via npm run test:e2e on Node.js + Playwright, plus the Chrome for Testing version matrix (chrome-matrix job) |
release.yml |
push of a v<version> tag, manual run |
Builds every platform and attaches the installers to the GitHub Release |
- Bump
"version"inpackage.jsonand commit it onmain. Every build script copies that version into its own manifest (chrome/manifest.json,edge/manifest.json,firefox/manifest.json,obsidian/manifest.json,mobile/pubspec.yaml, and the VS Codepackage.json), so the tag and the manifests cannot drift apart. - Push the tag:
git tag v5.4.0 && git push origin v5.4.0. The tag must bevplus thepackage.jsonversion, otherwiserelease.ymlstops in itspreparejob before building anything. - Watch the run. Re-run it from the Actions tab (
workflow_dispatch, with the tag name as input) to rebuild a release — assets are overwritten withgh release upload --clobber, so re-runs are safe.
| Asset | Platform | Built by |
|---|---|---|
chrome-v<version>.zip |
Chrome / Chromium | npm run build:chrome |
edge-v<version>.zip |
Microsoft Edge | npm run build:edge |
firefox-v<version>.zip |
Firefox | npm run build:firefox |
vscode-v<version>.vsix |
VS Code / Open VSX | npm run build:vscode |
obsidian-v<version>.zip |
Obsidian (bundle) | npm run build:obsidian |
main.js, manifest.json, styles.css |
Obsidian (registry files) | npm run build:obsidian |
documd-cli-v<version>.tgz |
HTML CLI (npm tarball) | npm run build:cli |
android-v<version>.apk / .aab |
Mobile app | node mobile/build-app.js android |
Obsidian resolves plugin updates through releases/download/<version>/main.js
and reads the manifest from releases/latest/download/manifest.json, so it needs
a release whose tag is the bare version. Every stable release therefore also
publishes a small release tagged 5.4.0 holding only the three plugin files and
carrying the Latest marker; the v5.4.0 release is the main one (all platforms)
and is published explicitly without that marker.
Prerelease tags (v5.4.0-beta.1) skip the Obsidian release, so beta builds never
reach Obsidian users.
Both releases are created as drafts and published only after every build job succeeded, so a failed build never leaves an incomplete release visible.
Some platform builds only warn when a Slidev asset is absent and then ship
without Slidev support. release.yml builds those assets explicitly and asserts
them in the artifacts:
npm run build:vscodeneedsnpm run build:slidevandnpx tsx slidev-shell/build-themes.tsto have run first.npm run build:obsidianreadsdist/vscode/webview/slidev-shell-inline.htmlandslidev-theme-bundles.json, so it needs a VS Code build first.npm run build:mobileneedsdist/slidev-shell-vscodeanddist/themes.
Without secrets the APK is debug-signed (side-loadable, rejected by the Play
Store) and the AAB is skipped, matching what node mobile/build-app.js android
does locally. To produce Play Store artifacts, add these repository secrets:
ANDROID_KEYSTORE_BASE64—base64 -i mobile/android/markdown_viewer.keystoreANDROID_KEYSTORE_PASSWORDANDROID_KEY_ALIAS(markdown_viewer)ANDROID_KEY_PASSWORD
- iOS and macOS builds: they need a macOS runner plus Apple certificates and provisioning profiles.
- Store submissions: Chrome Web Store, Edge Add-ons, AMO, VS Code Marketplace, Open VSX, npm, Play Store / App Store.
docker run --rm -v "$PWD:/repo" --workdir /repo rhysd/actionlint:latest