{"id":28400077,"url":"https://github.com/game-ci/versioning-backend","last_synced_at":"2025-07-14T17:34:30.565Z","repository":{"id":43020625,"uuid":"301494218","full_name":"game-ci/versioning-backend","owner":"game-ci","description":"Stateful backend to keep track of unity versions and docker build queues","archived":false,"fork":false,"pushed_at":"2025-06-06T03:06:19.000Z","size":937,"stargazers_count":14,"open_issues_count":8,"forks_count":6,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-03T14:27:57.703Z","etag":null,"topics":["ci","docker","firebase","hacktoberfest","unity","unity-ci","unity-versions","versioning"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/game-ci.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"game-ci","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2020-10-05T17:53:52.000Z","updated_at":"2025-06-06T03:06:19.000Z","dependencies_parsed_at":"2023-11-10T15:02:15.668Z","dependency_job_id":"16375022-7b05-4928-a1a2-4be886300894","html_url":"https://github.com/game-ci/versioning-backend","commit_stats":{"total_commits":60,"total_committers":3,"mean_commits":20.0,"dds":0.25,"last_synced_commit":"66b91e96cd232687a1ee9040345c49906966303b"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/game-ci/versioning-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/game-ci%2Fversioning-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/game-ci%2Fversioning-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/game-ci%2Fversioning-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/game-ci%2Fversioning-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/game-ci","download_url":"https://codeload.github.com/game-ci/versioning-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/game-ci%2Fversioning-backend/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264174774,"owners_count":23568322,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci","docker","firebase","hacktoberfest","unity","unity-ci","unity-versions","versioning"],"created_at":"2025-06-01T08:38:25.362Z","updated_at":"2025-07-14T17:34:30.534Z","avatar_url":"https://github.com/game-ci.png","language":"TypeScript","funding_links":["https://github.com/sponsors/game-ci"],"categories":[],"sub_categories":[],"readme":"# GameCI Versioning Backend\n\nThe 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.\n\n## System Overview\n\n```mermaid\ngraph TD\n    A[Unity Version Archive] --\u003e|Scrape \u0026 Detect| B[Version Ingest]\n    B --\u003e|Store| C[Firestore Database]\n    B --\u003e|Notify| D[Discord]\n    C --\u003e|Schedule| E[CI Job Scheduler]\n    E --\u003e|Trigger| F[GitHub Actions Workflows]\n    F --\u003e|Report Status| G[CI Build Reporters]\n    G --\u003e|Update| C\n    H[Ingeminator] --\u003e|Retry Failed Builds| F\n    C --\u003e|Monitor| H\n```\n\n## Unity Version Ingest\n\nThe backend regularly scrapes Unity version information:\n\n1. Uses the [`unity-changeset` package](https://github.com/mob-sakai/unity-changeset) from [mob-sakai](https://github.com/mob-sakai) to detect new Unity versions\n2. Filters versions (only stable versions 2017+)\n3. Stores version details in Firestore\n4. Notifies maintainers via Discord\n5. Schedules build jobs for new versions\n\n## CI Job Workflow\n\nEach Unity version generates CI jobs and builds with the following relationships:\n\n```\nCiJob (e.g., Unity 2022.3.15f1)\n  ├── CiBuild: ubuntu-2022.3.15f1-webgl\n  ├── CiBuild: ubuntu-2022.3.15f1-android\n  ├── CiBuild: windows-2022.3.15f1-webgl\n  └── ... (other baseOS-version-targetPlatform combinations)\n```\n\n## Scheduler\n\nThe scheduler coordinates building Docker images:\n\n- First ensures base and hub images are built\n- Monitors for failed jobs and triggers the Ingeminator to retry them\n- Prioritizes jobs based on Unity version recency\n- Limits concurrent jobs to prevent overloading GitHub Actions\n\n## Ingeminator\n\nThe Ingeminator (\"repeater\") handles the reliability of the build system:\n\n- Detects failed builds and reschedules them\n- Implements an exponential backoff strategy for retries\n- Alerts via Discord when builds reach maximum retry attempts\n- Works with the scheduler to manage retry priorities\n\n## Database Backup\n\nBack up the Firestore database:\n```bash\nexport GOOGLE_APPLICATION_CREDENTIALS=\"/path/to/serviceAccountKey.json\"\nyarn run backfire export ./export/versioningBackendBackup --project unity-ci-versions --keyFile $GOOGLE_APPLICATION_CREDENTIALS\n```\n\nRestore a backup:\n```bash\nyarn run backfire import ./export/versioningBackendBackup --project unity-ci-versions --keyFile $GOOGLE_APPLICATION_CREDENTIALS\n```\n\n## Development\n\nFor instructions on setting up the development environment, see [DEVELOPMENT.md](./DEVELOPMENT.md).\n\n## Contributing\n\nWe welcome contributions! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgame-ci%2Fversioning-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgame-ci%2Fversioning-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgame-ci%2Fversioning-backend/lists"}