Skip to main content

CI Integration

The default Hosanna project template includes all the necessary .yml files and package scripts to support continuous integration (CI) workflows. Out of the box, your project is configured to:

  • Run tests
  • Lint your codebase
  • Generate Hosanna structs and command maps
  • Build or package platform targets

These steps are automated in CI pipelines, ensuring code quality and build consistency.

Playwright and End-to-End Testing

Hosanna projects are ready to work with Playwright for end-to-end testing. Use Web builds for fast cross-platform behavior checks, then run platform smoke tests for the device targets included in the release.

Device Deployment

CI should produce signed or unsigned artifacts for each release target and reserve direct device deployment for dedicated device labs or local validation. Roku, Apple TV, Android TV, Samsung TV, iOS, Android, and Web can share lint, test, generation, and packaging stages while keeping signing credentials scoped to each platform.

Bundling and Release Packaging

Hosanna projects include package scripts for bundling and releasing your app. These scripts are defined in package.json and automate tasks like generating build info, packaging platform artifacts, and running release tools.

Example Scripts

"generate:build-info": "node deployment/scripts/generate-build-info.js",
"package:dev": "node deployment/scripts/package-roku.js --env dev",
"package:prod": "node deployment/scripts/package-roku.js --env prod",
"release:ci": "node deployment/release-tool/index.js --ci-build",
"release:preview": "node deployment/release-tool/index.js --dry-run",
"release:final": "node deployment/release-tool/index.js --final"
  • Use the package script for the platform you are releasing. Roku projects commonly expose package:dev and package:prod; native and web targets use their platform build tooling.
  • The generate:build-info script generates dynamic build metadata and writes it to assets/meta/build-info.json, which is imported into Hosanna at runtime.

Environment Configuration

Before running these scripts, configure your environment in src/config/env.js. Do not commit secrets or sensitive keys to source control. Example (sanitize your values):

export const ENV_DEV = {
CLIENT_ID: 'your-client-id',
API_KEY: 'your-api-key',
NPAW_ACCOUNT_CODE: 'your-account-code',
ROKU_DEV_ID: "your-roku-dev-id",
ROKU_DEV_PASSWORD: 'your-roku-dev-password',
ROKU_PKG_NAME: 'your-key.pkg'
}

export const ENV_PROD = {
// ...similar structure...
}

export const ENV = ENV_PROD;
  • The scripts will use the correct configuration for each build flavor.
  • Keep signing keys, provisioning profiles, passwords, store credentials, and release secrets out of source control.
  • Use platform-specific environment variables for device deployment and store upload jobs.

Notes

  • Keep CI artifacts reproducible: generate build metadata once, pin package versions, and archive the exact platform output used for QA.
  • For more details on each script, see the comments in your package.json and the deployment scripts themselves.

Your Hosanna project is CI-ready for standard development tasks and platform release workflows.