Continuous integration
Native packages should be built on their target operating systems. A practical GitHub Actions matrix is:
| Runner | Typical outputs |
|---|---|
macos-15 |
arm64/x64/universal .app and .dmg, iOS simulator/archive |
windows-latest |
win-x64 executable and .msi |
ubuntu-latest |
linux-x64 .AppImage, .deb, .rpm, Android APK/AAB |
Each job should:
- Check out the same commit.
- Install the pinned .NET SDK and required workload.
- Install Node and the project’s package manager.
- Restore with the committed lockfile.
- Run unit tests and
carbon capabilities check. - Build or bundle the platform artifact.
- Verify the output and upload it without recompression when signatures cover exact bytes.
Keep signing identities, certificates, passwords, and updater private keys in protected environment secrets. Use release environments for production credentials and require approval where appropriate.
For mobile smoke tests, boot an emulator/simulator, install the produced artifact, launch it, and assert a real JavaScript-to-C# bridge round trip. Build-only jobs do not catch missing native executables, fast-deployment APKs, capability omissions, or WebView startup failures.
