The GameCI Versioning Backend automates the tracking, scheduling, and building of Unity versions and Docker images for the GameCI ecosystem. It connects with GitHub Actions for CI/CD workflows and Discord for notifications.
graph TD
A[Unity Version Archive] -->|Scrape & Detect| B[Version Ingest]
B -->|Store| C[Firestore Database]
B -->|Notify| D[Discord]
C -->|Schedule| E[CI Job Scheduler]
E -->|Trigger| F[GitHub Actions Workflows]
F -->|Report Status| G[CI Build Reporters]
G -->|Update| C
H[Ingeminator] -->|Retry Failed Builds| F
C -->|Monitor| H
The backend regularly scrapes Unity version information:
- Uses the
unity-changeset
package from mob-sakai to detect new Unity versions - Filters versions (only stable versions 2017+)
- Stores version details in Firestore
- Notifies maintainers via Discord
- Schedules build jobs for new versions
Each Unity version generates CI jobs and builds with the following relationships:
CiJob (e.g., Unity 2022.3.15f1)
├── CiBuild: ubuntu-2022.3.15f1-webgl
├── CiBuild: ubuntu-2022.3.15f1-android
├── CiBuild: windows-2022.3.15f1-webgl
└── ... (other baseOS-version-targetPlatform combinations)
The scheduler coordinates building Docker images:
- First ensures base and hub images are built
- Monitors for failed jobs and triggers the Ingeminator to retry them
- Prioritizes jobs based on Unity version recency
- Limits concurrent jobs to prevent overloading GitHub Actions
The Ingeminator ("repeater") handles the reliability of the build system:
- Detects failed builds and reschedules them
- Implements an exponential backoff strategy for retries
- Alerts via Discord when builds reach maximum retry attempts
- Works with the scheduler to manage retry priorities
Back up the Firestore database:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/serviceAccountKey.json"
yarn run backfire export ./export/versioningBackendBackup --project unity-ci-versions --keyFile $GOOGLE_APPLICATION_CREDENTIALS
Restore a backup:
yarn run backfire import ./export/versioningBackendBackup --project unity-ci-versions --keyFile $GOOGLE_APPLICATION_CREDENTIALS
For instructions on setting up the development environment, see DEVELOPMENT.md.
We welcome contributions! See CONTRIBUTING.md for guidelines.