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...
}
}
Build Requests
@if (mobileBuilds$ | async; as builds) {
| ID |
Platforms |
Version |
Status |
Preflight |
Actions |
@for (build of builds; track build.id) {
| #{{ 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' }} |
|
} @empty {
| No build requests yet. |
}
}
@if (selectedMobileBuild; as build) {
@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.' }}
}