Mobile Build Orchestration

Derived Defaults

@if (mobileBuildDefaults; as defaults) {
Tenant: {{ defaults.tenant_key }}
App Name: {{ defaults.app_name }}
Support Email: {{ defaults.support_email }}
Website: {{ defaults.website }}
Stream URL: {{ defaults.stream_url || '(not set)' }}
} @else {

Defaults unavailable. Check station config.

}

Theme Export

@if (themeJsonStatus$ | async; as status) { @if (status.exists) {
theme.json — ready
Path: {{ status.path }}
Generated: {{ status.generated_at }}
Size: {{ status.size }} bytes
} @else {

theme.json not found at {{ status.path }}

Regenerate to create it from the current station config.

} } @else { @if (themeJsonLoading$ | async) {

Loading...

} }

Create Build Request

Required Files

@if (mobileBuildStatusMessage) {

{{ mobileBuildStatusMessage }}

} @if (mobileBuildErrorMessage) {

{{ mobileBuildErrorMessage }}

}

Build Requests

@if (mobileBuilds$ | async; as builds) { @for (build of builds; track build.id) { } @empty { }
ID Platforms Version Status Preflight Actions
#{{ build.id }} {{ build.platform_android ? 'Android' : '' }} {{ build.platform_android && build.platform_ios ? ' + ' : '' }} {{ build.platform_ios ? 'iOS' : '' }} {{ build.version_name }} ({{ build.build_number }}) {{ build.status }} {{ build.preflight_passed ? 'Passed' : 'Pending/Failed' }}
No build requests yet.
}
@if (selectedMobileBuild; as build) {

Selected Request #{{ build.id }}

@if (mobileBuildPreflightIssues.length > 0) {
Preflight issues:
    @for (issue of mobileBuildPreflightIssues; track issue) {
  • {{ issue }}
  • }
} @if (build.error_message) {

Error: {{ build.error_message }}

}

Artifacts

@for (artifact of build.artifacts; track artifact.id) {
{{ artifact.file_name }}
{{ artifact.platform }} • {{ artifact.artifact_type }} • {{ artifact.sha256.slice(0, 12) }}… • {{ formatFileSize(artifact.size) }}
} @empty {

No artifacts available yet.

}

Build Log

{{ build.build_log || 'No logs yet.' }}
}