From 3dac01603688e1813ba8cf392adc661e25e3f8aa Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 01:51:19 +0000 Subject: [PATCH 01/60] Add custom providers documentation for the plugin system Document how to use custom providers via GitHub repos, NPM packages, or local paths. Covers the ProviderInterface, supported source formats, caching behavior, and a full example implementation. Also updates the API reference to mention custom providers under providerStrategy. Co-Authored-By: Claude Opus 4.6 --- .../04-api-reference.mdx | 5 +- .../07-custom-providers.mdx | 182 ++++++++++++++++++ 2 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 docs/03-github-orchestrator/06-advanced-topics/07-custom-providers.mdx diff --git a/docs/03-github-orchestrator/04-api-reference.mdx b/docs/03-github-orchestrator/04-api-reference.mdx index 6a46b5c3..6b1b85d1 100644 --- a/docs/03-github-orchestrator/04-api-reference.mdx +++ b/docs/03-github-orchestrator/04-api-reference.mdx @@ -90,8 +90,9 @@ attempt to read them from current directory's git repo (e.g branch, commit SHA, providerStrategy ``` -Specifies the Cloud Provider to use for Orchestrator jobs. Accepted values: `aws`, `k8s`, -`local-docker`, `local`. +Specifies the Cloud Provider to use for Orchestrator jobs. Built-in values: `aws`, `k8s`, +`local-docker`, `local`. You can also specify a custom provider via GitHub URL, NPM package, or +local path (see [Custom Providers](advanced-topics/custom-providers)). ```bash - containerCpu diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-custom-providers.mdx b/docs/03-github-orchestrator/06-advanced-topics/07-custom-providers.mdx new file mode 100644 index 00000000..b855a223 --- /dev/null +++ b/docs/03-github-orchestrator/06-advanced-topics/07-custom-providers.mdx @@ -0,0 +1,182 @@ +# Custom Providers + +Orchestrator uses a plugin system that lets you extend it with custom providers. A **provider** is a +pluggable backend that controls where and how your builds run. Built-in providers include `aws`, +`k8s`, `local-docker`, and `local`. + +With custom providers, you can point `providerStrategy` at a GitHub repository, NPM package, or +local path and Orchestrator will dynamically load it at runtime. + +## Using a Custom Provider + +Set `providerStrategy` to a provider source instead of a built-in name: + +```yaml +# GitHub repository +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: 'https://github.com/your-org/my-provider' + targetPlatform: StandaloneLinux64 + +# GitHub shorthand +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: 'your-org/my-provider' + targetPlatform: StandaloneLinux64 + +# Specific branch +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: 'your-org/my-provider@develop' + targetPlatform: StandaloneLinux64 +``` + +### Supported Source Formats + +| Format | Example | +| ------------------------------------- | -------------------------------------------------------- | +| GitHub HTTPS URL | `https://github.com/user/repo` | +| GitHub URL with branch | `https://github.com/user/repo/tree/main` | +| GitHub URL with branch and path | `https://github.com/user/repo/tree/main/src/my-provider` | +| GitHub shorthand | `user/repo` | +| GitHub shorthand with branch | `user/repo@develop` | +| GitHub shorthand with branch and path | `user/repo@develop/src/my-provider` | +| GitHub SSH | `git@github.com:user/repo.git` | +| NPM package | `my-provider-package` | +| Scoped NPM package | `@scope/my-provider` | +| Local relative path | `./my-local-provider` | +| Local absolute path | `/path/to/provider` | + +## Creating a Custom Provider + +A provider is a module that exports a class implementing the `ProviderInterface`. The module must +have an entry point at one of: `index.js`, `index.ts`, `src/index.js`, `src/index.ts`, +`lib/index.js`, `lib/index.ts`, or `dist/index.js`. + +### Required Methods + +Every provider must implement these 7 methods: + +```typescript +interface ProviderInterface { + setupWorkflow( + buildGuid: string, + buildParameters: BuildParameters, + branchName: string, + defaultSecretsArray: { + ParameterKey: string; + EnvironmentVariable: string; + ParameterValue: string; + }[], + ): Promise; + + runTaskInWorkflow( + buildGuid: string, + image: string, + commands: string, + mountdir: string, + workingdir: string, + environment: OrchestratorEnvironmentVariable[], + secrets: OrchestratorSecret[], + ): Promise; + + cleanupWorkflow( + buildParameters: BuildParameters, + branchName: string, + defaultSecretsArray: { + ParameterKey: string; + EnvironmentVariable: string; + ParameterValue: string; + }[], + ): Promise; + + garbageCollect( + filter: string, + previewOnly: boolean, + olderThan: Number, + fullCache: boolean, + baseDependencies: boolean, + ): Promise; + + listResources(): Promise; + listWorkflow(): Promise; + watchWorkflow(): Promise; +} +``` + +### Example Implementation + +```typescript +// index.ts +export default class MyProvider { + constructor(private buildParameters: any) {} + + async setupWorkflow(buildGuid, buildParameters, branchName, defaultSecretsArray) { + // Initialize your build environment + } + + async runTaskInWorkflow(buildGuid, image, commands, mountdir, workingdir, environment, secrets) { + // Execute the build task in your environment + return 'Build output'; + } + + async cleanupWorkflow(buildParameters, branchName, defaultSecretsArray) { + // Tear down resources after the build + } + + async garbageCollect(filter, previewOnly, olderThan, fullCache, baseDependencies) { + // Clean up old resources + return 'Garbage collection complete'; + } + + async listResources() { + // Return active resources + return []; + } + + async listWorkflow() { + // Return running workflows + return []; + } + + async watchWorkflow() { + // Stream logs from a running workflow + return ''; + } +} +``` + +## How It Works + +When `providerStrategy` is set to a value that doesn't match a built-in provider name, Orchestrator +will: + +1. **Detect the source type** — GitHub URL, NPM package, or local path. +2. **Fetch the provider** — For GitHub repos, the repository is cloned (shallow, depth 1) into a + `.provider-cache/` directory. Cached repos are automatically updated on subsequent runs. +3. **Load the module** — The entry point is imported and the default export is used. +4. **Validate the interface** — All 7 required methods are checked. If any are missing, loading + fails. +5. **Fallback** — If loading fails for any reason, Orchestrator logs the error and falls back to the + local provider so your pipeline doesn't break. + +## Caching + +GitHub repositories are cached in the `.provider-cache/` directory, keyed by owner, repo, and +branch. On subsequent runs the loader checks for updates and pulls them automatically. + +### Environment Variables + +| Variable | Default | Description | +| -------------------- | ----------------- | --------------------------------------- | +| `PROVIDER_CACHE_DIR` | `.provider-cache` | Custom cache directory for cloned repos | +| `GIT_TIMEOUT` | `30000` | Git operation timeout in milliseconds | + +## Best Practices + +- **Pin a branch or tag** — Use `user/repo@v1.0` or a specific branch to avoid unexpected changes. +- **Test locally first** — Use a local path during development before publishing. +- **Handle errors gracefully** — Your provider methods should throw clear errors so Orchestrator can + log them and fall back if needed. +- **Keep it lightweight** — The provider module is loaded at runtime. Minimize dependencies to keep + startup fast. From d706850fdffc9874086e26aa938163391240c290 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 05:20:57 +0000 Subject: [PATCH 02/60] Comprehensive orchestrator documentation overhaul - Restructure providers into dedicated section with overview, custom providers, community providers (with GitHub edit link), and GitHub/GitLab integration pages - Rewrite API reference with proper tables, all missing parameters (orchestratorRepoName, githubOwner, allowDirtyBuild, postBuildSteps, preBuildSteps, customHookFiles, customCommandHooks, useCleanupCron), and environment variables (AWS_FORCE_PROVIDER, PURGE_REMOTE_BUILDER_CACHE, ORCHESTRATOR_AWS_STACK_WAIT_TIME, GIT_PRIVATE_TOKEN) - Document premade rclone hooks and Steam deployment hooks - Add S3/rclone workspace locking documentation - Tighten language across all pages for clarity - Add ASCII diagrams to introduction, caching, logging, and config override - Add tasteful emoji to section headers - Rename "Game-CI vs Orchestrator" to "Standard Game-CI vs Orchestrator Mode" - Remove outdated Deno section from command line docs - Improve examples with proper tables, workflow snippets, and cross-links Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 142 +++---- .../02-game-ci-vs-orchestrator.mdx | 61 ++- .../03-examples/01-command-line.mdx | 66 ++-- .../03-examples/02-github-examples/02-aws.mdx | 73 ++-- .../02-github-examples/03-kubernetes.mdx | 68 ++-- .../04-api-reference.mdx | 364 +++++++----------- .../06-advanced-topics/01-caching.mdx | 66 ++-- .../02-retained-workspace.mdx | 34 +- .../03-garbage-collection.mdx | 33 +- .../04-configuration-override.mdx | 45 ++- .../04-custom-hooks/01-custom-job.mdx | 19 +- .../04-custom-hooks/03-command-hooks.mdx | 27 +- .../04-custom-hooks/04-container-hooks.mdx | 25 +- .../05-premade-container-jobs.mdx | 60 +-- .../06-advanced-topics/05-logging.mdx | 35 +- .../06-advanced-topics/06-secrets.mdx | 15 +- .../07-providers/01-overview.mdx | 57 +++ .../02-custom-providers.mdx} | 0 .../07-providers/03-community-providers.mdx | 47 +++ .../07-providers/04-github-integration.mdx | 41 ++ .../07-providers/05-gitlab-integration.mdx | 30 ++ .../07-providers/_category_.yaml | 5 + .../09-gitlab/01-introduction-gitlab.mdx | 3 - .../09-gitlab/_category_.yaml | 5 - .../10-github/01-github-checks.mdx | 7 - .../10-github/_category_.yaml | 5 - 26 files changed, 776 insertions(+), 557 deletions(-) create mode 100644 docs/03-github-orchestrator/06-advanced-topics/07-providers/01-overview.mdx rename docs/03-github-orchestrator/06-advanced-topics/{07-custom-providers.mdx => 07-providers/02-custom-providers.mdx} (100%) create mode 100644 docs/03-github-orchestrator/06-advanced-topics/07-providers/03-community-providers.mdx create mode 100644 docs/03-github-orchestrator/06-advanced-topics/07-providers/04-github-integration.mdx create mode 100644 docs/03-github-orchestrator/06-advanced-topics/07-providers/05-gitlab-integration.mdx create mode 100644 docs/03-github-orchestrator/06-advanced-topics/07-providers/_category_.yaml delete mode 100644 docs/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx delete mode 100644 docs/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml delete mode 100644 docs/03-github-orchestrator/06-advanced-topics/10-github/01-github-checks.mdx delete mode 100644 docs/03-github-orchestrator/06-advanced-topics/10-github/_category_.yaml diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 3ae13efb..3e2af6d9 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -1,104 +1,78 @@ # Introduction -## Concept - What Does Orchestrator Do +## What Does Orchestrator Do? -**Orchestrator enables you to run, build and test (Unity) projects in the cloud. You can start jobs -from the command line, the "Workbench" GUI in the Unity Editor or from GitHub Actions.** +**Orchestrator runs Unity builds on cloud infrastructure.** Start jobs from GitHub Actions, the +command line, or any CI system. Orchestrator provisions a cloud environment, sends your project to +be built, and streams results back. -**Orchestrator will automatically provision an environment at a Cloud Provider such as GCP and AWS. -It will then send the project to be built and/or tested depending on your workflow configuration.** - -**Orchestrator is especially useful for game development because it supports large projects. -Orchestrator provides first class support for the Unity game engine.** - -Orchestrator uses git to track and syncronize your projects and uses native cloud services such as -AWS Fargate and Kubernetes to run your jobs. Other version control systems are not actively -supported. - -## Why Orchestrator? - -1. **Orchestrator is flexible and elastic** - 1. _You can balance your use of high-performance and cost saving modes._ Configurable cost/speed - effeciency - 2. _Works great for projects of almost any size, from AAA projects and assets to micro projects_ - 3. _Extended configuration options._ More control over disk size, memory and CPU - 4. _Easily scale all job resources as your project grows_ e.g storage, CPU and memory -2. **Scale fully on demand from zero (not in use) to many concurrent jobs.** Benefits from - "pay-for-what-you-use" cloud billing models. We have made an effort to make sure that it costs - you nothing (aside from artifact and cache storage) while there are no builds running (no - guarantees) -3. **Easy setup and configuration** -4. **Run custom jobs** and extend the system for any workload - -## Why not orchestrator? - -1. Your project is small in size. Below 5GB Orchestrator should not be needed. -2. You already have dedicated servers running you can use. - -Although the speed of a CI pipelines is an important metric to consider, there are real challenges -for game development pipelines. - -This solution prefers convenience, ease of use, scalability, throughput and flexibility. - -Faster solutions exist, but would all involve self-hosted hardware with an immediate local cache of -the large project files and working directory and a dedicated server. - -# Orchestrator Release Status - -Orchestrator is in "active development" ⚠️🔨 +``` + Your Machine / CI Cloud Provider + ┌──────────────┐ git push ┌──────────────────┐ + │ │ ──────────────────► │ ☁️ AWS Fargate │ + │ GitHub │ │ ☁️ Kubernetes │ + │ Actions │ ◄──────────────── │ 🐳 Local Docker │ + │ │ build artifacts │ │ + └──────────────┘ └──────────────────┘ + │ │ + │ Orchestrator handles: │ + │ • Provisioning │ + │ • Git sync + LFS │ + │ • Caching │ + │ • Cleanup │ + └─────────────────────────────────────┘ +``` -Orchestrator overall release status: `preview` This means some APIs may change, features are still -being added but the minimum feature set works and is stable. +Orchestrator supports large projects with first-class Unity support and native cloud services like +AWS Fargate and Kubernetes. -Release Stages: `experimental` ➡️ `preview` ➡️ `full release` +## ✅ Why Orchestrator? -You must use a provider with Orchestrator, each provider's release status is described below. This -indicates the stability and support for orchestrator features and workflows. +1. **Flexible and elastic** — balance speed and cost, configure CPU, memory, and disk per build +2. **Scale from zero** — no idle servers, pay only while builds run +3. **Easy setup** — minimal configuration to get started +4. **Extensible** — run custom jobs, add hooks, or bring your own provider via the plugin system -### Supported Orchestrator Platforms +## ❌ When You Don't Need It -```md -| Cloud Provider Platform | Release Status | -| ----------------------- | ------------------ | -| Kubernetes | ✔️ preview release | -| AWS | ✔️ full release | -| GCP | ⚠ Considered | -| Azure | ⚠ Considered | -``` +- Your project is under 5 GB — standard GitHub runners should work fine +- You have dedicated build servers already running -_Note for Kubernetes support:_ _Usually the cluster needs to be up and running at all times, as -starting up a cluster is slow._ _Use Google Cloud's Kubernetes Autopilot you can scale down to the -free tier automatically while not in use._ _Kubernetes support currently requires cloud storage, -only S3 support is built-in._ - -```md -| Git Platform | Release Status | -| --------------------- | ------------------ | -| GitHub | ✔️ full release | -| GitLab | ✔️ preview release | -| Command Line | ✔️ preview release | -| Any Git repository | ✔️ preview release | -| Any Git automation/Ci | ✔️ preview release | -``` +## 📦 Release Status -## External Links +Orchestrator is in **active development** ⚠️ -### Orchestrator Releases +Overall status: `preview` — core features are stable, some APIs may change. -[Game CI Releases - GitHub](https://github.com/game-ci/unity-builder/releases) _Packaged and -released with game-ci's unity-builder module._ +Release stages: `experimental` → `preview` → `full release` -### Open Incoming Pull Requests +### Provider Support -[Orchestrator PRs - GitHub](https://github.com/game-ci/unity-builder/pulls?q=is%3Apr+orchestrator) +| Cloud Provider | Release Status | +| -------------- | ------------------ | +| AWS Fargate | ✔️ Full release | +| Kubernetes | ✔️ Preview release | +| GCP | ⚠️ Considered | +| Azure | ⚠️ Considered | -### 💬Suggestions and 🐛Bugs (GitHub Issues): +See [Providers](advanced-topics/providers/overview) for details on each provider. -[Game CI Issues - GitHub](https://github.com/game-ci/unity-builder/labels/orchestrator) +### Platform Support -### Community +| Platform | Release Status | +| ------------------ | ------------------ | +| GitHub Actions | ✔️ Full release | +| GitLab CI | ✔️ Preview release | +| Command Line | ✔️ Preview release | +| Any Git repository | ✔️ Preview release | +| Any CI system | ✔️ Preview release | -**Share your feedback with us!** +## 🔗 External Links -- [**Discord Channel**](https://discord.com/channels/710946343828455455/789631903157583923) -- [**Feedback Form**](https://forms.gle/3Wg1gGf9FnZ72RiJ9) +- [Releases](https://github.com/game-ci/unity-builder/releases) — packaged with + game-ci/unity-builder +- [Pull Requests](https://github.com/game-ci/unity-builder/pulls?q=is%3Apr+orchestrator) — open + orchestrator PRs +- [Issues](https://github.com/game-ci/unity-builder/labels/orchestrator) — bugs and feature requests +- [Discord](https://discord.com/channels/710946343828455455/789631903157583923) — community chat +- [Feedback Form](https://forms.gle/3Wg1gGf9FnZ72RiJ9) — share your experience diff --git a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx index 369bc10e..61e46eb5 100644 --- a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx +++ b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx @@ -1,42 +1,41 @@ -# Game-CI vs Orchestrator +# Standard Game-CI vs Orchestrator Mode -# Standard Game-CI (Use Cases) +## 🎮 Standard Game-CI -The Game CI core is a maintained set of docker images that can be used to run workloads in many -scenarios. +Game CI provides Docker images and GitHub Actions for running Unity workflows on the build server +resources provided by your CI platform (GitHub, GitLab, Circle CI). -Game CI also provides specific GitHub actions for running workflows on GitHub. And a similar -workflow for running Game CI on GitLab and Circle CI. _All of these options use the build server -resources provided by those systems, this can be a constraint or very convenient depending on the -size of your project and the workloads you need to run._ +**Best for:** Small to medium projects that fit within GitHub's resource limits. -# Orchestrator (Use Cases) +## ☁️ Orchestrator Mode -## Sending Builds to the cloud +Orchestrator sends builds to cloud infrastructure (AWS Fargate, Kubernetes) instead of running on +the CI runner itself. This is useful when: -You may want to take advantage of cloud resources for lots of reasons (scale, speed, cost, -flexibility) or may want to start remote builds from the command line without slowing down your -development machine. Orchestrator can help you do this. +- Your project **exceeds disk space limits** on GitHub-hosted runners +- You need **more CPU or memory** than the CI platform provides +- You want to **scale to many concurrent builds** without managing servers -This may be a preference, more effecient or you may want to use systems that struggle to handle -large game development projects (GitHub being a good example). +``` + Standard Game-CI Orchestrator Mode -### Large GitHub Projects + ┌──────────────┐ ┌──────────────┐ ┌────────────┐ + │ GitHub │ │ GitHub │ ───► │ Cloud │ + │ Runner │ │ Runner │ │ Container │ + │ (builds │ │ (dispatches │ ◄─── │ (builds │ + │ locally) │ │ only) │ │ remotely) │ + └──────────────┘ └──────────────┘ └────────────┘ + ~14 GB disk Configurable CPU, memory, disk + Fixed resources Scales to zero when idle +``` -GitHub Actions by default run on -[build machines provided by GitHub](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners). -For Unity projects the available disk size is quite small. You may experience an error related to -running out of disk space. You may also want to run the build on a server with more memory or -processing resources. +## Self-Hosted Runners vs Orchestrator -### GitHub Self-Hosted Runners vs Game CI Orchestrator +Both options let you build larger projects. Here's when to pick which: -_GitHub users can consider: -[GitHub self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners) -and Orchestrator. Both can enable you to build larger projects._ - -_Orchestrator is better if you don't have a server setup or don't want to manage or maintain your -own build server._ - -_Self-hosted runners are best used when you already have a server available, running 24/7 that you -can setup as a runner. And you're happy to maintain and keep that server available and running._ +| | Self-Hosted Runners | Orchestrator | +| --------------- | ---------------------------------- | ------------------------------------- | +| **Setup** | Requires a dedicated server | Cloud account + credentials | +| **Maintenance** | You manage the server 24/7 | Fully managed, no servers to maintain | +| **Cost model** | Fixed (server always running) | Pay per build (scales to zero) | +| **Best for** | Teams with existing infrastructure | Teams without dedicated servers | diff --git a/docs/03-github-orchestrator/03-examples/01-command-line.mdx b/docs/03-github-orchestrator/03-examples/01-command-line.mdx index 636144e9..17b7f4ec 100644 --- a/docs/03-github-orchestrator/03-examples/01-command-line.mdx +++ b/docs/03-github-orchestrator/03-examples/01-command-line.mdx @@ -3,47 +3,67 @@ _Preview Support Only_ You can install Game CI locally and start orchestrator jobs from the command line or by integrating -your own tools. All parameters in [API Reference](../api-reference) can be specified as command line -input fields. +your own tools. All parameters in the [API Reference](../api-reference) can be specified as CLI +flags. -# Install - -Currently (development) +## Install ```bash git clone https://github.com/game-ci/unity-builder.git +cd unity-builder yarn install -yarn run cli -m {mode parameter} --projectPath {Your project path} {... other command line parameters} ``` -# Planned (does not work currently) +## Usage + +```bash +yarn run cli -m --projectPath [options] +``` + +### Examples -We plan to offer support for Game CI via Deno. This will enable fast, typescript native runtime and -you will be able to access this via the following: +Run a standard build: ```bash -dpx game-ci build +yarn run cli -m cli-build \ + --projectPath /path/to/your/unity/project \ + --providerStrategy aws \ + --targetPlatform StandaloneLinux64 \ + --gitPrivateToken $GIT_TOKEN ``` -# Help +List active resources: + +```bash +yarn run cli -m list-resources --providerStrategy aws +``` -_You can run `yarn run cli -h` or `yarn run cli --help` to list all modes and paramters with -descriptions_ +Watch a running build: + +```bash +yarn run cli -m watch --providerStrategy aws +``` + +Clean up old resources: + +```bash +yarn run cli -m garbage-collect --providerStrategy aws +``` -# Main Command Parameters +## Help -- Default: `cli` (runs a standard build workflow) -- See API Reference "Modes" +Run `yarn run cli --help` to list all modes and parameters with descriptions. -# Keeping command line parameters short +## Keeping Commands Short -You can avoid specifying long command line input for credentials by using environment variables or -[the input override feature](../advanced-topics/configuration-override#example) to shorten commands -signficantly. +You can avoid long CLI flags for credentials by using environment variables or the +[Configuration Override](../advanced-topics/configuration-override#example) feature. -This enables you to provide a command to pull input, e.g you can pull from a file or from a secret -manager. +This lets you pull input from a file or secret manager: ```bash -yarn run cli --populateOverride true --pullInputList UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD --inputPullCommand="gcloud secrets versions access 1 --secret=\"{0}\"" +yarn run cli \ + --populateOverride true \ + --pullInputList UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD \ + --inputPullCommand='gcloud secrets versions access 1 --secret="{0}"' ``` diff --git a/docs/03-github-orchestrator/03-examples/02-github-examples/02-aws.mdx b/docs/03-github-orchestrator/03-examples/02-github-examples/02-aws.mdx index 3c18f3e3..442dad1e 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-examples/02-aws.mdx +++ b/docs/03-github-orchestrator/03-examples/02-github-examples/02-aws.mdx @@ -2,18 +2,20 @@ ## Requirements -- You must have an AWS account setup and ready to create resources. -- Create a service account and generate an AWS access key and key id. +- An AWS account with permission to create resources (ECS, CloudFormation, S3, Kinesis, CloudWatch). +- An IAM user or role with an access key and secret key. ## AWS Credentials -Setup the following as `env` variables for orchestrator to use: +Set the following as `env` variables in your workflow: -- `AWS_ACCESS_KEY_ID` -- `AWS_SECRET_ACCESS_KEY` -- `AWS_DEFAULT_REGION` (should be the same AWS region as the base stack e.g `eu-west-2`) +| Variable | Description | +| ----------------------- | ------------------------------------------------------- | +| `AWS_ACCESS_KEY_ID` | IAM access key ID. | +| `AWS_SECRET_ACCESS_KEY` | IAM secret access key. | +| `AWS_DEFAULT_REGION` | AWS region matching your base stack (e.g. `eu-west-2`). | -If you're using GitHub you can use a GitHub Action: +If you're using GitHub Actions, configure credentials with: ```yaml - name: Configure AWS Credentials @@ -24,48 +26,49 @@ If you're using GitHub you can use a GitHub Action: aws-region: eu-west-2 ``` -_Note:_ _This enables Orchestrator access AWS._ +## CPU and Memory -## Configuration For AWS Orchestrator Jobs +AWS Fargate only accepts specific CPU/memory combinations. Values use the format `1024 = 1 vCPU` or +`1 GB`. Do not include the vCPU or GB suffix. -Refer to [Configuration page](../../api-reference) or the [example below](#example). +See the full list: +[AWS Fargate Task Definitions](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size) -### Allowed CPU/Memory Combinations +Common combinations: -There are some limitations to the CPU and Memory parameters. AWS will only accept the following -combinations: -[AWS Fargate Documentation, Allowed CPU and memory values (Task Definitions)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size) +| CPU (`containerCpu`) | Memory (`containerMemory`) | +| -------------------- | -------------------------- | +| `256` (0.25 vCPU) | `512`, `1024`, `2048` | +| `512` (0.5 vCPU) | `1024` – `4096` | +| `1024` (1 vCPU) | `2048` – `8192` | +| `2048` (2 vCPU) | `4096` – `16384` | +| `4096` (4 vCPU) | `8192` – `30720` | -#### Summary Of Format - -- Values are represented as 1024:1 GB or CPU. -- Do not include the vCPU or GB suffix. -- 1 CPU can go to a max of 6 GB of memory. 2 CPU's are required to go higher. - -#### Valid CPU and Memory Values - -```yaml -- orchestratorMemory: 4096 -- orchestratorCpu: 1024 -``` - -## Example +## Example Workflow ```yaml -- uses: game-ci/unity-builder@orchestrator-develop +- uses: game-ci/unity-builder@v4 id: aws-fargate-unity-build with: providerStrategy: aws versioning: None - projectPath: `your path here` - unityVersion: `unity version here` + projectPath: path/to/your/project + unityVersion: 2022.3.0f1 targetPlatform: ${{ matrix.targetPlatform }} gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} - # You may want to export your builds somewhere external so you can access it: + containerCpu: 1024 + containerMemory: 4096 + # Export builds to S3: containerHookFiles: aws-s3-upload-build ``` -_[Custom Steps](../../advanced-topics/custom-hooks/container-hooks)_ +See [Container Hooks](../../advanced-topics/custom-hooks/container-hooks) for more on +`containerHookFiles`. + +A full workflow example is available in the builder source: +[orchestrator-pipeline.yml](https://github.com/game-ci/unity-builder/blob/main/.github/workflows/orchestrator-pipeline.yml). + +## AWS Parameters -A full workflow example can be seen in builder's -[Orchestrator GitHub sourcecode for GitHub Pipeline](https://github.com/game-ci/unity-builder/blob/309d668d637ae3e7ffe90d61612968db92e1e376/.github/workflows/orchestrator-pipeline.yml#L109). +For the full list of AWS-specific parameters (`awsStackName`, endpoint overrides, etc.), see the +[API Reference — AWS section](../../api-reference#aws). diff --git a/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx b/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx index a71f41a8..f5b5faf1 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx +++ b/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx @@ -2,50 +2,64 @@ ## Requirements -- You must have a Kubernetes cluster setup and ready that supports persistent volumes. -- Create a kubeconfig and encode it as base64. +- A running Kubernetes cluster that supports persistent volumes. +- A kubeconfig file encoded as base64. ## K8s Credentials -Setup the following as `env` variables for the GitHub build step: +Pass the base64-encoded kubeconfig via the `kubeConfig` parameter or as an environment variable: -- `kubeConfig` (should be encoded as base64) - -## Configuration For Kubernetes Orchestrator Jobs - -Refer to [Configuration page](../../api-reference) or the [example below](#example). - -### Allowed CPU/Memory Combinations - -- `0.25 vCPU` - 0.5 GB, 1 GB, 2 GB -- `0.5 vCPU` - 1 GB, 2 GB, 3 GB, 4 GB -- `1 vCPU` - 2 GB, 3 GB, 4 GB, 5 GB, 6 GB, 7 GB, 8 GB -- `2 vCPU` - Between 4 GB and 16 GB in 1-GB increments -- `4 vCPU` - Between 8 GB and 30 GB in 1-GB increments +```yaml +env: + kubeConfig: ${{ secrets.KUBE_CONFIG }} +``` -#### Summary Of Format +## CPU and Memory -- Values are represented as 1024:1 GB or CPU. +Kubernetes accepts the same unit format as AWS — `1024 = 1 vCPU`, memory in MB. Do not include the +vCPU or GB suffix. -Do not include the vCPU or GB suffix. +| CPU (`containerCpu`) | Memory (`containerMemory`) | +| -------------------- | -------------------------- | +| `256` (0.25 vCPU) | `512`, `1024`, `2048` | +| `512` (0.5 vCPU) | `1024` – `4096` | +| `1024` (1 vCPU) | `2048` – `8192` | +| `2048` (2 vCPU) | `4096` – `16384` | +| `4096` (4 vCPU) | `8192` – `30720` | -### Example +## Example Workflow ```yaml -- uses: game-ci/unity-builder@orchestrator-develop +- uses: game-ci/unity-builder@v4 id: k8s-unity-build with: providerStrategy: k8s versioning: None - projectPath: `your path here` - unityVersion: `unity version here` + projectPath: path/to/your/project + unityVersion: 2022.3.0f1 targetPlatform: ${{ matrix.targetPlatform }} gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} - # You may want to export your builds somewhere external so you can access it: + kubeVolumeSize: 10Gi + containerCpu: 1024 + containerMemory: 4096 + # Export builds to S3: containerHookFiles: aws-s3-upload-build ``` -_[Custom Steps](../../advanced-topics/custom-hooks/container-hooks)_ +See [Container Hooks](../../advanced-topics/custom-hooks/container-hooks) for more on +`containerHookFiles`. + +A full workflow example is available in the builder source: +[orchestrator-k8s-pipeline.yml](https://github.com/game-ci/unity-builder/blob/main/.github/workflows/orchestrator-k8s-pipeline.yml). + +### Cluster Tips + +- **Keep the cluster running.** Cold-starting a Kubernetes cluster is slow. If you need auto-scaling + to zero, consider Google Cloud Kubernetes Autopilot. +- **Cloud storage required.** Kubernetes support currently requires cloud storage for caching. S3 is + built-in, or use rclone for other backends. + +## K8s Parameters -A full workflow example can be seen in builder's -[Orchestrator GitHub sourcecode for AWS Pipeline](https://github.com/game-ci/unity-builder/blob/main/.github/workflows/orchestrator-k8s-pipeline.yml). +For the full list of Kubernetes parameters (`kubeConfig`, `kubeVolume`, `kubeStorageClass`, etc.), +see the [API Reference — Kubernetes section](../../api-reference#kubernetes). diff --git a/docs/03-github-orchestrator/04-api-reference.mdx b/docs/03-github-orchestrator/04-api-reference.mdx index 6b1b85d1..45b6a31e 100644 --- a/docs/03-github-orchestrator/04-api-reference.mdx +++ b/docs/03-github-orchestrator/04-api-reference.mdx @@ -1,260 +1,158 @@ # API Reference -## Configuration - -_You can specify input parameters via any of the following methods._ - -- **GitHub Action `with`** _See "Getting Started" examples._ -- **Command Line** _You can specify input parameters via command line._ -- **Environment Variables** _You can specify input parameters via environment variables._ -- **Configuration Override** _[Advanced Topics / Overrides](advanced-topics/configuration-override)_ - -## Modes - -Orchestrator can accept a parameter to run a specific mode, by default cli-build is run. - -```bash -cli-build -``` - -_runs an orchestrator build_ - -```bash -list-resources -``` - -_lists active resources_ - -```bash -list-workflow -``` - -_lists running workflows_ - -```bash -watch -``` - -_follows logs of a running workflow_ - -```bash -garbage-collect -``` - -_runs garbage collection_ - -```bash -- cache-push -- cache-pull -``` - -Cache commands to push and pull from the local caching directory. Used in orchestrator workflows. -Uses `cachePullFrom` and `cachePushTo` parameters. - -```bash -- hash (hash folder contents recursively) -- print-input (prints all input parameters) -``` - -Utility commands - -```bash -- remote-cli-pre-build (sets up a repository, usually before a game-ci build) -- remote-cli-post-build (pushes to LFS and Library cache) -``` - -Commands called during orchestrator workflows before/after a build. - -## Common Parameters - -### Git synchronization parameters - -```bash -gitPrivateToken (should be a GitHub access token with permission to get repositories) -``` - -Used to authenticate remote job's access to repository. Also used for LFS file pulling if -`GIT_PRIVATE_TOKEN` is not set separately. - -```bash -- GITHUB_REPOSITORY -- GITHUB_REF || branch || GitSHA -``` - -Used to synchronize the repository to the Orchestrator job. If parameters are not provided, will -attempt to read them from current directory's git repo (e.g branch, commit SHA, remote URL). - -### Orchestrator parameters - -```bash -providerStrategy -``` - -Specifies the Cloud Provider to use for Orchestrator jobs. Built-in values: `aws`, `k8s`, -`local-docker`, `local`. You can also specify a custom provider via GitHub URL, NPM package, or -local path (see [Custom Providers](advanced-topics/custom-providers)). - -```bash -- containerCpu -- containerMemory -``` - -Specifies the CPU and Memory resources to be used for cloud containers created by Orchestrator. -(See: getting started section for more configuration options per provider.) - -```bash -orchestratorBranch -``` - -Specifies the release branch of Orchestrator to use for remote containers. Accepted values: `main` -(default), `orchestrator-develop` (latest/development). - -```bash -cloneDepth -``` - -Specifies the depth of the git clone for the repository. Defaults to `50`. Use `0` for a full clone. - -### Custom commands from files parameters - -```bash -- containerHookFiles -- commandHookFiles -- commandHooks -- postBuildContainerHooks -- preBuildContainerHooks -``` - -Specifies the name of custom hook or step files to include in workflow. (Accepted Format: see -"[container hooks](advanced-topics/custom-hooks/container-hooks) -[command hooks](advanced-topics/custom-hooks/command-hooks)") - -### Custom commands from yaml parameters - -```bash -customJob -``` - -Specifies a custom job to override default build workflow. (Accepted Format: see -"[advanced topics / custom job](advanced-topics/custom-hooks/custom-job)") +## ⚙️ Configuration Methods + +| Method | Description | +| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| **GitHub Action `with`** | Pass parameters directly in your workflow file. See [Getting Started](getting-started). | +| **Command Line** | Pass parameters as CLI flags. See [Command Line](examples/command-line). | +| **Environment Variables** | Set parameters as environment variables in your shell or CI environment. | +| **Configuration Override** | Pull parameters dynamically from secret managers or files. See [Configuration Override](advanced-topics/configuration-override). | + +## 🔧 Modes + +Set the mode to control what Orchestrator does. Default: `cli-build`. + +| Mode | Description | +| ----------------------- | ------------------------------------------------------------------------------------- | +| `cli-build` | Run a standard build workflow. | +| `list-resources` | List active cloud resources. | +| `list-workflow` | List running workflows. | +| `watch` | Follow logs of a running workflow. | +| `garbage-collect` | Clean up old resources. See [Garbage Collection](advanced-topics/garbage-collection). | +| `cache-push` | Push to the caching directory. Uses `cachePushTo`. | +| `cache-pull` | Pull from the caching directory. Uses `cachePullFrom`. | +| `hash` | Hash folder contents recursively. | +| `print-input` | Print all resolved input parameters. | +| `remote-cli-pre-build` | Set up a repository before a build (used internally by workflows). | +| `remote-cli-post-build` | Push LFS files and Library cache after a build (used internally). | + +## 📋 Parameters + +### Provider + +| Parameter | Default | Description | +| ---------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `providerStrategy` | `local` | Cloud provider to use. Built-in: `aws`, `k8s`, `local-docker`, `local`. Also accepts a GitHub URL, NPM package, or local path for [custom providers](advanced-topics/providers/custom-providers). | +| `containerCpu` | `1024` | CPU units for cloud containers (`1024` = 1 vCPU). See provider setup guides for allowed values. | +| `containerMemory` | `3072` | Memory in MB for cloud containers (`4096` = 4 GB). See provider setup guides for allowed values. | +| `orchestratorBranch` | `main` | Release branch of Orchestrator for remote containers. Use `orchestrator-develop` for latest development builds. | +| `orchestratorRepoName` | `game-ci/unity-builder` | Repository for Orchestrator source. Override to use a fork for testing or custom builds. | + +### Git Synchronization + +| Parameter | Default | Description | +| ------------------- | -------- | ------------------------------------------------------------------- | +| `gitPrivateToken` | — | GitHub access token with repo access. Used for git clone and LFS. | +| `githubOwner` | — | GitHub owner or organization name. | +| `GITHUB_REPOSITORY` | _(auto)_ | Repository in `owner/repo` format. Auto-detected in GitHub Actions. | +| `GITHUB_REF` | _(auto)_ | Git ref to build. Falls back to `branch` or `GitSHA` parameters. | +| `cloneDepth` | `50` | Depth of the git clone. Use `0` for a full clone. | +| `allowDirtyBuild` | `false` | Allow building from a branch with uncommitted changes. | + +### Custom Hooks + +| Parameter | Default | Description | +| ------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------ | +| `containerHookFiles` | — | Names of [container hook](advanced-topics/custom-hooks/container-hooks) files from `.game-ci/container-hooks/`. | +| `customHookFiles` | — | Names of custom hook files from `.game-ci/hooks/`. | +| `customCommandHooks` | — | Inline [command hooks](advanced-topics/custom-hooks/command-hooks) as YAML. | +| `postBuildSteps` | — | Post-build job in YAML format with keys: `image`, `secrets`, `command`. | +| `preBuildSteps` | — | Pre-build job (after repo setup, before build) in YAML format. | +| `postBuildContainerHooks` | — | Container hook files to run after the build step. | +| `preBuildContainerHooks` | — | Container hook files to run before the build step. | +| `customJob` | — | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/custom-hooks/custom-job). | ### Configuration Override -```bash -readInputOverrideCommand -``` - -Read parameter from command line output, such as a secret manager. Must include a `{0}` to inject -the name of the parameter to pull. Built-in presets: `gcp-secret-manager`, `aws-secret-manager`. -(See: [Configuration Override](advanced-topics/configuration-override)) - -```bash -readInputFromOverrideList -``` - -Comma separated list of parameters to apply with `readInputOverrideCommand`. (See: -[Configuration Override](advanced-topics/configuration-override)) +| Parameter | Default | Description | +| --------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `readInputOverrideCommand` | — | Command to read a parameter value from an external source. Use `{0}` as the parameter name placeholder. Built-in presets: `gcp-secret-manager`, `aws-secret-manager`. See [Configuration Override](advanced-topics/configuration-override). | +| `readInputFromOverrideList` | — | Comma-separated list of parameter names to pull via `readInputOverrideCommand`. | ### Storage -```bash -storageProvider -``` - -Specifies the storage backend for caching and artifacts. Accepted values: `s3` (default), `rclone`. - -```bash -rcloneRemote -``` - -Configures the rclone remote storage endpoint. Required when using `storageProvider: rclone`. +| Parameter | Default | Description | +| ----------------- | ------- | --------------------------------------------------------------------------- | +| `storageProvider` | `s3` | Storage backend for caching and artifacts. Accepted values: `s3`, `rclone`. | +| `rcloneRemote` | — | Rclone remote endpoint. Required when `storageProvider` is `rclone`. | ### AWS -```bash -awsStackName -``` - -Name of the persistent shared base stack, used to store artifacts and caching. Defaults to -`game-ci`. - -```bash -- awsEndpoint (base endpoint override for all AWS services) -- awsCloudFormationEndpoint -- awsEcsEndpoint -- awsKinesisEndpoint -- awsCloudWatchLogsEndpoint -- awsS3Endpoint -``` - -Optional AWS service endpoint overrides. Useful for testing with LocalStack or other AWS-compatible -services. - -### K8s - -```bash -- kubeConfig (base64 encoded kubernetes config) -- kubeVolume -- kubeVolumeSize (default: 5Gi) -- kubeStorageClass -``` - -Override name of persistent volume used, size of volume and storage class used. +| Parameter | Default | Description | +| --------------------------- | --------- | -------------------------------------------------------------- | +| `awsStackName` | `game-ci` | Name of the persistent shared CloudFormation base stack. | +| `awsEndpoint` | — | Base endpoint override for all AWS services (e.g. LocalStack). | +| `awsCloudFormationEndpoint` | — | CloudFormation service endpoint override. | +| `awsEcsEndpoint` | — | ECS service endpoint override. | +| `awsKinesisEndpoint` | — | Kinesis service endpoint override. | +| `awsCloudWatchLogsEndpoint` | — | CloudWatch Logs service endpoint override. | +| `awsS3Endpoint` | — | S3 service endpoint override. | + +### Kubernetes + +| Parameter | Default | Description | +| ------------------ | ------- | ----------------------------------------------------------------------- | +| `kubeConfig` | — | Base64-encoded Kubernetes config file. | +| `kubeVolume` | — | Name of the persistent volume claim to use. | +| `kubeVolumeSize` | `5Gi` | Size of the persistent volume. | +| `kubeStorageClass` | — | Storage class for the persistent volume. Empty = auto-install via rook. | ### Caching -```bash -cacheKey -``` +| Parameter | Default | Description | +| ----------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `cacheKey` | _(branch name)_ | Scope for sharing cache entries. Builds with the same key share a cache. | +| `maxRetainedWorkspaces` | `0` | Maximum number of [retained workspaces](advanced-topics/retained-workspace). `0` = unlimited. Above the limit, jobs use standard caching. | -Defaults to branch name. Defines the scope for sharing cache entries. +### GitHub Integration -### Utility +| Parameter | Default | Description | +| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- | +| `githubCheck` | `false` | Create a GitHub Check for each orchestrator step. See [GitHub Integration](advanced-topics/providers/github-integration). | +| `asyncOrchestrator` | `false` | Run in async mode — returns immediately without waiting for the build to complete. | +| `watchToEnd` | `true` | Whether to follow the build logs until completion. | -```bash -- orchestratorDebug (Debug logging for Orchestrator) -- resourceTracking (Enable resource tracking logs for disk usage summaries) -- useLargePackages (Any packages in manifest.json containing phrase "LargePackage" will be - redirected to a shared folder for all builds sharing a cache key) -- useSharedBuilder (Use a shared clone of Game-CI, saves some storage space and can be used if - you're using one release branch of Orchestrator) -- useCompressionStrategy (Use Lz4 compression for cache and build artifacts. Enabled by default) -- watchToEnd (Whether to watch the build to the end, default: true) -- asyncOrchestrator (Run in async mode, returns immediately without waiting for build completion) -``` +### Build Options -### Retained Workspace - -```bash -- maxRetainedWorkspaces -``` - -See: [Advanced Topics / Retained Workspaces](advanced-topics/retained-workspace), enables caching -entire project folder. +| Parameter | Default | Description | +| ------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------ | +| `orchestratorDebug` | `false` | Enable verbose debug logging (resource tracking, directory tree, environment listing). | +| `resourceTracking` | `false` | Enable resource tracking logs with disk usage summaries. | +| `useLargePackages` | `false` | Redirect packages containing "LargePackage" in `manifest.json` to a shared folder across builds with the same cache key. | +| `useSharedBuilder` | `false` | Use a shared clone of Game CI. Saves storage when using a single Orchestrator release branch. | +| `useCompressionStrategy` | `true` | Use LZ4 compression for cache and build artifacts. | +| `useCleanupCron` | `true` | Create an AWS CloudFormation cron job to automatically clean up old resources. | ### Garbage Collection -```bash -- garbageMaxAge (Maximum age in hours before resources are cleaned up, default: 24) -``` +| Parameter | Default | Description | +| --------------- | ------- | ----------------------------------------------------- | +| `garbageMaxAge` | `24` | Maximum age in hours before resources are cleaned up. | + +## 🖥️ CLI-Only Parameters -## Command Line Only Parameters +These parameters are only available when using Orchestrator from the command line. -```bash -- populateOverride -- cachePushFrom -- cachePushTo -- artifactName -- select -``` +| Parameter | Description | +| ------------------ | ---------------------------------------------------- | +| `populateOverride` | Enable reading parameters from the override command. | +| `cachePushFrom` | Local directory to push cache from. | +| `cachePushTo` | Remote path to push cache to. | +| `artifactName` | Name for the build artifact. | +| `select` | Select a specific workflow or resource by name. | -## Other Environment Variables +## 🌍 Environment Variables -```bash -- USE_IL2CPP (Set to `false`) -``` +| Variable | Description | +| ---------------------------------- | --------------------------------------------------------------------------------- | +| `USE_IL2CPP` | Set to `false` to disable IL2CPP builds. | +| `AWS_FORCE_PROVIDER` | Force provider when LocalStack is detected. Values: `aws`, `aws-local`, or empty. | +| `ORCHESTRATOR_AWS_STACK_WAIT_TIME` | CloudFormation stack timeout in seconds. Default: `600`. | +| `PURGE_REMOTE_BUILDER_CACHE` | Set to clear the remote builder cache before a build. | +| `GIT_PRIVATE_TOKEN` | Separate token for LFS pulls (falls back to `gitPrivateToken`). | -# External Links +## 🔗 External Links -All accepted parameters given here with a description: -[https://github.com/game-ci/unity-builder/blob/main/action.yml](https://github.com/game-ci/unity-builder/blob/main/action.yml) +All parameters with descriptions: +[game-ci/unity-builder action.yml](https://github.com/game-ci/unity-builder/blob/main/action.yml) diff --git a/docs/03-github-orchestrator/06-advanced-topics/01-caching.mdx b/docs/03-github-orchestrator/06-advanced-topics/01-caching.mdx index 7e04489b..a7eb3563 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/01-caching.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/01-caching.mdx @@ -1,42 +1,54 @@ # Caching -Orchestrator supports two main caching modes: +Orchestrator supports two caching strategies. You can mix both by setting `maxRetainedWorkspaces` — +once the limit is reached, additional jobs fall back to standard caching. + +``` + Standard Caching Retained Workspace + ┌─────────────────┐ ┌─────────────────┐ + │ 📁 LFS files │ │ 📁 Entire │ + │ 📁 Library/ │ │ project │ + │ │ │ folder │ + │ Smaller storage │ │ Faster builds │ + │ Good for small │ │ Good for large │ + │ projects │ │ projects │ + └─────────────────┘ └─────────────────┘ +``` -- Standard Caching -- Retained Workspace - -_You can even mix the two by specifying a "MaxRetainedWorkspaces" parameter. Above the max_ -_concurrent jobs a new job will use standard caching._ - -## Storage Providers - -Orchestrator supports two storage backends for caching: +## Standard Caching -- **S3** (default) - Uses AWS S3 for cache storage. Works with both AWS and LocalStack. -- **Rclone** - Uses rclone for flexible cloud storage. Supports many storage backends. +Caches only the Unity **Library** folder and **LFS** files between builds. Uses less storage but +requires re-importing unchanged assets. -Configure via the `storageProvider` parameter. When using rclone, also set `rcloneRemote` to your -configured remote endpoint. +- ✅ Minimum storage cost +- ✅ Best for smaller projects +- ⚠️ Slower rebuilds for large asset libraries -## Standard Caching +## Retained Workspace -#### Good For +Caches the **entire project folder** between builds. Provides the fastest rebuilds but consumes more +storage. -- Minimum storage use -- Smaller projects +- ✅ Maximum build speed +- ✅ Best for large projects with long import times +- ⚠️ Higher storage cost -#### What is cached between builds +See [Retained Workspaces](retained-workspace) for configuration details. -- LFS files -- Unity Library folder +## 🗄️ Storage Providers -## Retained Workspace +| Provider | `storageProvider` | Description | +| -------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| S3 | `s3` (default) | AWS S3 storage. Works with both AWS and LocalStack. | +| Rclone | `rclone` | Flexible cloud storage via [rclone](https://rclone.org). Supports 70+ backends (Google Cloud, Azure Blob, Backblaze, SFTP, etc). | -#### Good For +Configure with the `storageProvider` parameter. When using rclone, also set `rcloneRemote` to your +configured remote endpoint. -- Maximum build speed -- Larger projects with long import times +## 🔒 Workspace Locking -#### What is cached between builds +When using retained workspaces, Orchestrator uses distributed locking (via S3 or rclone) to ensure +only one build uses a workspace at a time. This enables safe concurrent builds that share and reuse +workspaces without conflicts. -- Entire Project Folder +Locking is managed automatically — no configuration required beyond setting `maxRetainedWorkspaces`. diff --git a/docs/03-github-orchestrator/06-advanced-topics/02-retained-workspace.mdx b/docs/03-github-orchestrator/06-advanced-topics/02-retained-workspace.mdx index 0e1bfbcd..cce787cf 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/02-retained-workspace.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/02-retained-workspace.mdx @@ -1,8 +1,32 @@ # Retained Workspaces -Caches the entire project folder. This option provides the best responsiveness, but also can consume -lots of storage. +Retained workspaces cache the **entire project folder** between builds. This provides the fastest +possible rebuilds at the cost of more cloud storage. -Using API: `maxRetainedWorkspaces`. You can specify a maximum number of retained workspaces, only -one job can use a retained workspace at one time. Each retained workspace consumes more cloud -storage. +## Configuration + +Set `maxRetainedWorkspaces` to control how many workspaces are kept: + +| Value | Behavior | +| ----- | ------------------------------------------------------------------------- | +| `0` | Unlimited retained workspaces (default). | +| `> 0` | Keep at most N workspaces. Additional jobs fall back to standard caching. | + +Each retained workspace is locked during use — only one build can use a workspace at a time. +Orchestrator handles locking automatically via S3 or rclone. + +## Example + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + maxRetainedWorkspaces: 3 + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +## ⚠️ Storage Considerations + +Each retained workspace stores a full copy of your project. For a 20 GB project with 3 retained +workspaces, expect ~60 GB of cloud storage usage. diff --git a/docs/03-github-orchestrator/06-advanced-topics/03-garbage-collection.mdx b/docs/03-github-orchestrator/06-advanced-topics/03-garbage-collection.mdx index b49d1a52..6400f1f1 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/03-garbage-collection.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/03-garbage-collection.mdx @@ -1,29 +1,16 @@ # Garbage Collection -Orchestrator creates, manages and destroys cloud workloads you request. Resources have to be -created. +Orchestrator creates cloud resources (containers, stacks, volumes) for each build and cleans them up +automatically. If a build fails or is interrupted, resources may be left behind. -It is possible a resource doesn't get deleted by orchestrator after a failed or interrupted build. - -You can use garbage collection to verify everything has been cleaned up. - -Use the **Mode**: `garbage-collect`. - -## Parameters - -```bash -garbageMaxAge -``` - -Maximum age in hours before resources are considered stale and eligible for cleanup. Defaults to -`24`. +Use garbage collection to clean up stale resources. ## Usage ### GitHub Actions ```yaml -- uses: game-ci/unity-builder@main +- uses: game-ci/unity-builder@v4 with: providerStrategy: aws mode: garbage-collect @@ -35,3 +22,15 @@ Maximum age in hours before resources are considered stale and eligible for clea ```bash yarn run cli -m garbage-collect --providerStrategy aws ``` + +## Parameters + +| Parameter | Default | Description | +| --------------- | ------- | ----------------------------------------------------- | +| `garbageMaxAge` | `24` | Maximum age in hours before resources are cleaned up. | + +## 🔄 Automatic Cleanup + +When using the AWS provider, Orchestrator can create a CloudFormation-based cleanup cron job that +automatically removes old ECS task definitions and resources. This is controlled by the +`useCleanupCron` parameter (enabled by default). diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx b/docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx index 94134fc1..e2ac2640 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx @@ -1,19 +1,42 @@ # Configuration Override -When running any unity workload you must provide valid unity credentials. In addition to any other -credentials this is already quite a lot of input. For this reason, it is common to use the command -line mode with input override (link here). This enables you to provide a command to pull input, with -this approach you can create a file to store credentials or pull from a secret manager. +Pull parameter values from external sources like secret managers or files at runtime. This avoids +hardcoding credentials and keeps CLI commands short. + +``` + Orchestrator External Source + ┌──────────────┐ command ┌──────────────────┐ + │ Reads input │ ──────────────► │ Secret Manager │ + │ override │ │ (GCP, AWS, file) │ + │ list │ ◄────────────── │ │ + │ │ value │ │ + └──────────────┘ └──────────────────┘ +``` + +## Parameters + +| Parameter | Description | +| --------------------------- | ------------------------------------------------------------------ | +| `populateOverride` | Must be `true` to enable override (CLI only). | +| `readInputFromOverrideList` | Comma-separated list of parameter names to pull. | +| `readInputOverrideCommand` | Command to run. Use `{0}` as a placeholder for the parameter name. | + +### Built-in Presets + +Instead of writing a full command, you can use these presets as the `readInputOverrideCommand`: + +| Preset | Expands to | +| -------------------- | ----------------------------------------------------- | +| `gcp-secret-manager` | `gcloud secrets versions access 1 --secret="{0}"` | +| `aws-secret-manager` | `aws secretsmanager get-secret-value --secret-id {0}` | ## Example ```bash -game-ci -m cli --populateOverride true --readInputFromOverrideList UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD --readInputOverrideCommand="gcloud secrets versions access 1 --secret=\"{0}\"" +yarn run cli -m cli-build \ + --populateOverride true \ + --readInputFromOverrideList UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD \ + --readInputOverrideCommand='gcloud secrets versions access 1 --secret="{0}"' ``` -## Required Parameters - -- `populateOverride` - Must be true to run the commands. -- `readInputFromOverrideList` - Comma separated list of parameters to read from override command. -- `readInputOverrideCommand` - A command line command to run (The command is formatted to replace - "{0}" with the parameter parameter name). +This runs the GCP command for each parameter name in the list and uses the output as the value. diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/01-custom-job.mdx b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/01-custom-job.mdx index ade52d59..22d35a90 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/01-custom-job.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/01-custom-job.mdx @@ -1,4 +1,19 @@ # Custom Jobs -You can run a custom job instead of the default build workflow simplfy by specifying the `customJob` -parameter. +Override the default build workflow entirely by specifying the `customJob` parameter with a YAML job +definition. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + customJob: | + - name: my-custom-step + image: ubuntu + commands: | + echo "Running custom job" + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +This replaces the standard build steps with your own. Useful for running non-Unity workloads or +fully custom pipelines through Orchestrator's cloud infrastructure. diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/03-command-hooks.mdx b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/03-command-hooks.mdx index ee1f2378..8a4327e7 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/03-command-hooks.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/03-command-hooks.mdx @@ -1,6 +1,8 @@ # Command Hooks -Custom commands can be injected into the standard build workflow via yaml or files. +Inject custom shell commands into the standard build workflow at specific points. + +## Format ```yaml - name: example hook @@ -10,3 +12,26 @@ Custom commands can be injected into the standard build workflow via yaml or fil commands: | echo "hello world!" ``` + +## Hook Points + +| Step | When it runs | +| -------- | ------------------------------- | +| `before` | Before the build step starts. | +| `after` | After the build step completes. | + +## Usage + +Pass hooks inline via the `commandHooks` parameter or reference files from the `.game-ci/hooks/` +directory via `customHookFiles`. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + customHookFiles: my-hook + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +Place hook files at `.game-ci/hooks/my-hook.yaml` in your repository. diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/04-container-hooks.mdx b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/04-container-hooks.mdx index 6e0a9adc..70bcdeea 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/04-container-hooks.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/04-container-hooks.mdx @@ -1,9 +1,9 @@ # Container Hooks -Custom docker container steps can be run as part of the standard build workflow. Custom steps can -also be run standalone. +Run custom Docker containers as steps in the build workflow. Useful for uploading artifacts, +deploying builds, or running additional tools. -Custom steps can be specified via the CustomSteps parameter or via Custom Step files. +## Format ```yaml - name: upload @@ -11,3 +11,22 @@ Custom steps can be specified via the CustomSteps parameter or via Custom Step f commands: | echo "hello world!" ``` + +## Usage + +Define container hooks inline via `preBuildContainerHooks` / `postBuildContainerHooks`, or reference +files from `.game-ci/container-hooks/` via `containerHookFiles`. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + containerHookFiles: aws-s3-upload-build + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +## Pre-built Hooks + +Orchestrator ships with ready-to-use hooks for S3, rclone, and Steam. See +[Premade Container Hooks](premade-container-jobs) for the full list. diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx index a87c9586..48a61d01 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx @@ -1,38 +1,46 @@ -# Premade Container Jobs +# Premade Container Hooks -## Cache syncronization +Orchestrator ships with pre-built container hooks for common tasks. Use them by name with the +`containerHookFiles` parameter. -### Upload Cache entry to AWS S3 +```yaml +containerHookFiles: aws-s3-upload-build +``` -Upload cache results from build to AWS S3. +## 📦 AWS S3 -`aws-s3-upload-cache` +| Hook Name | Description | +| --------------------- | ----------------------------------------- | +| `aws-s3-upload-build` | Upload build artifacts to S3. | +| `aws-s3-pull-build` | Pull cached build artifacts from S3. | +| `aws-s3-upload-cache` | Upload Unity Library and LFS cache to S3. | +| `aws-s3-pull-cache` | Pull Unity Library and LFS cache from S3. | -### Download Latest Cache entry from AWS S3 +Requires AWS credentials configured. Respects `useCompressionStrategy` for LZ4 compression. -Downloads library and git LFS cache from AWS S3. +## 📂 Rclone -`aws-s3-pull-cache` +| Hook Name | Description | +| --------------------- | ---------------------------------------------- | +| `rclone-upload-build` | Upload build artifacts via rclone. | +| `rclone-pull-build` | Pull cached build artifacts via rclone. | +| `rclone-upload-cache` | Upload Unity Library and LFS cache via rclone. | +| `rclone-pull-cache` | Pull Unity Library and LFS cache via rclone. | -## Artifacts +Requires `storageProvider: rclone` and `rcloneRemote` to be configured. Uses the `rclone/rclone` +Docker image. Respects `useCompressionStrategy` for LZ4 compression. -## Upload Build Artifact To AWS S3 +## 🎮 Steam -`aws-s3-upload-build` +| Hook Name | Description | +| ---------------------- | --------------------------------------------- | +| `steam-deploy-client` | Deploy a client build to Steam via SteamCMD. | +| `steam-deploy-project` | Deploy a project build to Steam via SteamCMD. | -Upload build artifact to AWS S3. (Currently only supports lz4 enabled which is default.) +Uses the `steamcmd/steamcmd` Docker image. Requires the following secrets to be configured: -## Upload Project Artifact To AWS S3 (To Do) - -Upload project artifact to AWS S3. (Currently only supports lz4 enabled which is default.) - -## Artifact entire project folder (To Do) - -archive to tar format, compress with lz4 if enabled and store in persistent cache folder. (Can then -upload.) - -## Deploy - -## Upload to Steam (To Do) - -upload build folder to given steam branch +- `STEAM_USERNAME`, `STEAM_PASSWORD` +- `STEAM_APPID` +- `STEAM_SSFN_FILE_NAME`, `STEAM_SSFN_FILE_CONTENTS` +- `STEAM_CONFIG_VDF_1` through `STEAM_CONFIG_VDF_4` +- `BUILD_GUID_TARGET`, `RELEASE_BRANCH` diff --git a/docs/03-github-orchestrator/06-advanced-topics/05-logging.mdx b/docs/03-github-orchestrator/06-advanced-topics/05-logging.mdx index 99660d31..c044820d 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/05-logging.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/05-logging.mdx @@ -1,13 +1,34 @@ # Logging -Logs are streamed from the workload to the GameCI origin unless you use the +Orchestrator streams logs from the remote build back to your CI runner in real time. -## Kubernetes +``` + Cloud Container Orchestrator Your CI + ┌───────────────┐ ┌──────────┐ ┌──────────────┐ + │ Build output │ ─────► │ Log │ ─────► │ Console │ + │ │ │ stream │ │ output │ + └───────────────┘ └──────────┘ └──────────────┘ +``` -- Native Kubernetes logging api +## Provider-Specific Log Transport -## AWS +### Kubernetes -- Fargate log to Cloud Watch -- Subscription from Cloud Watch to Kinesis -- GameCI streams from logs from Kinesis +Uses the native Kubernetes logging API to stream pod logs directly. + +### AWS + +Logs flow through a CloudWatch → Kinesis pipeline: + +1. Fargate tasks write to **CloudWatch Logs** +2. A **Kinesis** subscription forwards logs in real time +3. Orchestrator consumes from the Kinesis stream + +## 🐛 Debug Logging + +Enable `orchestratorDebug: true` to get verbose output including: + +- Resource allocation summaries (CPU, memory, disk) +- Directory structure via `tree` +- Environment variable listing +- Disk usage snapshots (`df -h`, `du -sh`) diff --git a/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx b/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx index 17bae040..2c04fbb5 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx @@ -1,14 +1,19 @@ # Secrets -Secrets are transferred to workload containers as secrets via the built-in secrets system the -provider being used supports. +Orchestrator securely transfers secrets to remote build containers using each provider's native +secrets system. ## Kubernetes -Secrets are created as native Kubernetes secret objects and mounted to job containers as env -variables. +Secrets are created as native **Kubernetes Secret** objects and mounted as environment variables in +job containers. ## AWS -Secrets are created as aws secret manager secrets and mounted to fargate tasks from secrets to env +Secrets are stored in **AWS Secrets Manager** and injected into Fargate tasks as environment variables. + +## 🔐 Managing Secrets + +For pulling secrets from external sources (e.g. GCP Secret Manager, AWS Secrets Manager) into +Orchestrator parameters, see [Configuration Override](configuration-override). diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/01-overview.mdx b/docs/03-github-orchestrator/06-advanced-topics/07-providers/01-overview.mdx new file mode 100644 index 00000000..217c17bf --- /dev/null +++ b/docs/03-github-orchestrator/06-advanced-topics/07-providers/01-overview.mdx @@ -0,0 +1,57 @@ +# Providers + +A **provider** is the backend that Orchestrator uses to run your builds. You choose a provider by +setting the `providerStrategy` parameter. + +## Built-in Providers + +These providers ship with Orchestrator and are maintained by the Game CI team. + +| Provider | `providerStrategy` | Description | Release Status | +| -------------- | ------------------ | ----------------------------------------------------------------------------- | -------------- | +| AWS Fargate | `aws` | Runs jobs on AWS Fargate (ECS). Fully managed, no servers to maintain. | Full release | +| Kubernetes | `k8s` | Runs jobs on any Kubernetes cluster. Flexible but requires a running cluster. | Preview | +| Local Docker | `local-docker` | Runs jobs in Docker containers on the local machine. | Preview | +| Local (direct) | `local` | Runs jobs directly on the local machine without containers. | Preview | + +### AWS Fargate + +Best for most users. Orchestrator automatically provisions and tears down Fargate tasks — you only +pay while a build is running. Requires an AWS account with IAM credentials. + +See [AWS setup guide](../../examples/github-examples/aws) for credentials and configuration. + +### Kubernetes + +Run builds on your own Kubernetes cluster. The cluster must support persistent volumes and should +stay running (cold starts are slow). Google Cloud Kubernetes Autopilot can scale to near-zero when +idle. + +See [Kubernetes setup guide](../../examples/github-examples/kubernetes) for credentials and +configuration. + +### Local Docker + +Runs the build workflow inside a Docker container on the machine running the action. Useful for +self-hosted runners with Docker installed. + +### Local + +Runs builds directly on the host machine with no container isolation. Useful for testing and +development. + +## Custom Providers + +You can extend Orchestrator with your own provider by pointing `providerStrategy` at a GitHub +repository, NPM package, or local file path. Orchestrator will dynamically load and validate it at +runtime. + +See [Custom Providers](custom-providers) for the full guide on creating and using custom providers. + +## Community Providers + +Community providers are third-party providers shared by the Game CI community. They are not +maintained by the Game CI team but have been reviewed and listed here for discoverability. + +See the [Community Providers](community-providers) page for the current list and instructions on how +to submit your own. diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-custom-providers.mdx b/docs/03-github-orchestrator/06-advanced-topics/07-providers/02-custom-providers.mdx similarity index 100% rename from docs/03-github-orchestrator/06-advanced-topics/07-custom-providers.mdx rename to docs/03-github-orchestrator/06-advanced-topics/07-providers/02-custom-providers.mdx diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/03-community-providers.mdx b/docs/03-github-orchestrator/06-advanced-topics/07-providers/03-community-providers.mdx new file mode 100644 index 00000000..213aaed9 --- /dev/null +++ b/docs/03-github-orchestrator/06-advanced-topics/07-providers/03-community-providers.mdx @@ -0,0 +1,47 @@ +# Community Providers + +Community providers are third-party Orchestrator providers built and shared by the community. They +are **not maintained by the Game CI team** but are listed here to help you discover and evaluate +options. + +:::caution + +Community providers are provided as-is. Review the source code and documentation of any community +provider before using it in your pipelines. + +::: + +## Provider List + +_No community providers have been submitted yet. Yours could be the first!_ + +{/\* When adding a provider, use this format: + +### Provider Name + +| | | +| -------------------- | -------------------------------------------------------------------------- | +| **Repository** | [user/repo](https://github.com/user/repo) | +| **providerStrategy** | `user/repo` | +| **Description** | Brief description of what the provider does and which platform it targets. | +| **Maintainer** | [@username](https://github.com/username) | + +\*/} + +## Submit Your Provider + +Built a custom provider? Share it with the community by adding it to this page. + +1. [Edit this file directly on GitHub](https://github.com/game-ci/documentation/edit/main/docs/03-github-orchestrator/06-advanced-topics/07-providers/03-community-providers.mdx) +2. Add your provider to the **Provider List** section above using the commented template +3. Submit a pull request for review + +Your provider should: + +- Have a public GitHub repository or published NPM package +- Implement the full [ProviderInterface](custom-providers#required-methods) +- Include a README with setup instructions +- Be actively maintained + +The Game CI team will review submissions for completeness before merging. Inclusion in this list +does not imply endorsement or a security guarantee. diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/04-github-integration.mdx b/docs/03-github-orchestrator/06-advanced-topics/07-providers/04-github-integration.mdx new file mode 100644 index 00000000..989573a6 --- /dev/null +++ b/docs/03-github-orchestrator/06-advanced-topics/07-providers/04-github-integration.mdx @@ -0,0 +1,41 @@ +# GitHub Integration + +Orchestrator has first-class support for GitHub Actions. When running from a GitHub Actions +workflow, Orchestrator automatically detects the repository, branch, and commit from the +environment. + +## GitHub Checks + +By enabling the `githubCheck` parameter, the orchestrator job will create a GitHub check for each +step. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + githubCheck: true + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +The step will show useful details about the job. This is especially useful in combination with async +mode, as you can run very long jobs and monitor their progress directly from the GitHub pull request +UI. + +## Async Mode + +Set `asyncOrchestrator: true` to start a build without waiting for it to complete. The GitHub Action +will return immediately and you can check progress via GitHub Checks or by running the `watch` mode. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + asyncOrchestrator: true + githubCheck: true + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +See the [AWS](../../examples/github-examples/aws) and +[Kubernetes](../../examples/github-examples/kubernetes) example pages for full workflow files. diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/05-gitlab-integration.mdx b/docs/03-github-orchestrator/06-advanced-topics/07-providers/05-gitlab-integration.mdx new file mode 100644 index 00000000..f7b59864 --- /dev/null +++ b/docs/03-github-orchestrator/06-advanced-topics/07-providers/05-gitlab-integration.mdx @@ -0,0 +1,30 @@ +# GitLab Integration + +You can use GitLab with Orchestrator via the Command Line mode. Orchestrator is not limited to +GitHub Actions — any CI system that can run shell commands can trigger orchestrator builds. + +## Setup + +1. Install the Orchestrator CLI (see [Command Line](../../examples/command-line)) +2. Set your git credentials and provider configuration as environment variables +3. Run the CLI from your `.gitlab-ci.yml` pipeline + +## Example `.gitlab-ci.yml` + +```yaml +build-unity: + stage: build + script: + - git clone https://github.com/game-ci/unity-builder.git /tmp/game-ci + - cd /tmp/game-ci && yarn install + - > + yarn run cli -m cli-build --projectPath $CI_PROJECT_DIR --providerStrategy aws + --gitPrivateToken $GIT_TOKEN + variables: + AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY + AWS_DEFAULT_REGION: eu-west-2 +``` + +See the [Command Line](../../examples/command-line) page for more details on CLI usage and the +[Configuration Override](../configuration-override) page for managing credentials. diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/_category_.yaml b/docs/03-github-orchestrator/06-advanced-topics/07-providers/_category_.yaml new file mode 100644 index 00000000..280c7133 --- /dev/null +++ b/docs/03-github-orchestrator/06-advanced-topics/07-providers/_category_.yaml @@ -0,0 +1,5 @@ +--- +position: 7.0 +label: Providers +collapsible: true +collapsed: true diff --git a/docs/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx b/docs/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx deleted file mode 100644 index 70e5079e..00000000 --- a/docs/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# GitLab Introduction - -You can use GitLab with Orchestrator via the Command Line mode. diff --git a/docs/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml b/docs/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml deleted file mode 100644 index 0407bcd5..00000000 --- a/docs/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -position: 9.0 -label: GitLab Integration -collapsible: true -collapsed: true diff --git a/docs/03-github-orchestrator/06-advanced-topics/10-github/01-github-checks.mdx b/docs/03-github-orchestrator/06-advanced-topics/10-github/01-github-checks.mdx deleted file mode 100644 index c0625fe3..00000000 --- a/docs/03-github-orchestrator/06-advanced-topics/10-github/01-github-checks.mdx +++ /dev/null @@ -1,7 +0,0 @@ -# GitHub Checks - -By enabling the `githubCheck` parameter, the orchestrator job will create a GitHub check for each -step. - -The step will show useful details about the job. This is especially useful in combination with async -mode, as you can run very long jobs. diff --git a/docs/03-github-orchestrator/06-advanced-topics/10-github/_category_.yaml b/docs/03-github-orchestrator/06-advanced-topics/10-github/_category_.yaml deleted file mode 100644 index ecbee03f..00000000 --- a/docs/03-github-orchestrator/06-advanced-topics/10-github/_category_.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -position: 10.0 -label: GitHub Integration -collapsible: true -collapsed: true From 172ae89333ac0eaa312b280445744ff9fc81fb59 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 05:53:19 +0000 Subject: [PATCH 03/60] Remove old standalone GitLab pages from versioned docs Content already merged into the providers section at 07-providers/05-gitlab-integration.mdx Co-Authored-By: Claude Opus 4.6 --- .../06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx | 3 --- .../06-advanced-topics/09-gitlab/_category_.yaml | 5 ----- .../06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx | 3 --- .../06-advanced-topics/09-gitlab/_category_.yaml | 5 ----- 4 files changed, 16 deletions(-) delete mode 100644 versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx delete mode 100644 versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml delete mode 100644 versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx delete mode 100644 versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml diff --git a/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx b/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx deleted file mode 100644 index 70e5079e..00000000 --- a/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# GitLab Introduction - -You can use GitLab with Orchestrator via the Command Line mode. diff --git a/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml b/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml deleted file mode 100644 index 0407bcd5..00000000 --- a/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -position: 9.0 -label: GitLab Integration -collapsible: true -collapsed: true diff --git a/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx b/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx deleted file mode 100644 index 70e5079e..00000000 --- a/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# GitLab Introduction - -You can use GitLab with Orchestrator via the Command Line mode. diff --git a/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml b/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml deleted file mode 100644 index 0407bcd5..00000000 --- a/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -position: 9.0 -label: GitLab Integration -collapsible: true -collapsed: true From c95128de19e780bf6aea8cf0d71e005641e16084 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:07:28 +0000 Subject: [PATCH 04/60] Restructure Orchestrator docs: promote Providers to top-level, improve cross-linking - Promote Providers from Advanced Topics to top-level section (05-providers/) with dedicated pages for AWS, Kubernetes, Local Docker, Local, Custom, Community, GitHub Integration, and GitLab Integration - Move Secrets out of Advanced Topics to top-level (06-secrets.mdx) - Rename custom-hooks to hooks throughout - Remove all WIP/preview/release-status notices (project is stable) - Fix floating {/* */} comment symbols in community-providers (use code block template) - Update ASCII diagram in Game-CI vs Orchestrator to show CLI/any CI dispatch - Add sidebar_label frontmatter for Game-CI vs Orchestrator page - Add comprehensive cross-linking across all orchestrator docs: - Introduction links to providers, hooks, getting started, platforms - API Reference links to caching, hooks, providers, configuration override - Provider pages link to caching, hooks, API Reference sections - Getting Started links to provider setup guides and secrets - GitHub Integration links to API Reference for parameters and modes - Advanced Topics pages cross-reference each other and API Reference - Fix all broken links from old directory structure - Delete old directories (examples/github-examples, advanced-topics/providers) - Run Prettier on all files Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 49 +++++++--------- .../02-game-ci-vs-orchestrator.mdx | 13 +++-- .../02-getting-started.mdx | 9 +-- .../03-examples/01-command-line.mdx | 2 - .../02-github-examples/_category_.yaml | 5 -- .../04-api-reference.mdx | 52 ++++++++--------- .../05-providers/01-overview.mdx | 36 ++++++++++++ .../02-aws.mdx | 5 +- .../03-kubernetes.mdx | 9 ++- .../05-providers/04-local-docker.mdx | 34 +++++++++++ .../05-providers/05-local.mdx | 43 ++++++++++++++ .../06-custom-providers.mdx} | 0 .../07-community-providers.mdx} | 30 +++++----- .../08-github-integration.mdx} | 12 ++-- .../09-gitlab-integration.mdx} | 6 +- .../_category_.yaml | 2 +- .../07-providers/01-overview.mdx | 57 ------------------- .../{06-advanced-topics => }/06-secrets.mdx | 2 +- .../01-caching.mdx | 9 +-- .../02-retained-workspace.mdx | 3 +- .../03-garbage-collection.mdx | 3 +- .../04-hooks}/01-custom-job.mdx | 0 .../04-hooks}/03-command-hooks.mdx | 3 + .../04-hooks}/04-container-hooks.mdx | 3 +- .../04-hooks}/05-premade-container-jobs.mdx | 0 .../04-hooks}/_category_.yaml | 2 +- .../05-configuration-override.mdx} | 0 .../06-logging.mdx} | 2 +- .../_category_.yaml | 0 29 files changed, 222 insertions(+), 169 deletions(-) delete mode 100644 docs/03-github-orchestrator/03-examples/02-github-examples/_category_.yaml create mode 100644 docs/03-github-orchestrator/05-providers/01-overview.mdx rename docs/03-github-orchestrator/{03-examples/02-github-examples => 05-providers}/02-aws.mdx (93%) rename docs/03-github-orchestrator/{03-examples/02-github-examples => 05-providers}/03-kubernetes.mdx (84%) create mode 100644 docs/03-github-orchestrator/05-providers/04-local-docker.mdx create mode 100644 docs/03-github-orchestrator/05-providers/05-local.mdx rename docs/03-github-orchestrator/{06-advanced-topics/07-providers/02-custom-providers.mdx => 05-providers/06-custom-providers.mdx} (100%) rename docs/03-github-orchestrator/{06-advanced-topics/07-providers/03-community-providers.mdx => 05-providers/07-community-providers.mdx} (75%) rename docs/03-github-orchestrator/{06-advanced-topics/07-providers/04-github-integration.mdx => 05-providers/08-github-integration.mdx} (63%) rename docs/03-github-orchestrator/{06-advanced-topics/07-providers/05-gitlab-integration.mdx => 05-providers/09-gitlab-integration.mdx} (75%) rename docs/03-github-orchestrator/{06-advanced-topics/07-providers => 05-providers}/_category_.yaml (79%) delete mode 100644 docs/03-github-orchestrator/06-advanced-topics/07-providers/01-overview.mdx rename docs/03-github-orchestrator/{06-advanced-topics => }/06-secrets.mdx (83%) rename docs/03-github-orchestrator/{06-advanced-topics => 07-advanced-topics}/01-caching.mdx (89%) rename docs/03-github-orchestrator/{06-advanced-topics => 07-advanced-topics}/02-retained-workspace.mdx (90%) rename docs/03-github-orchestrator/{06-advanced-topics => 07-advanced-topics}/03-garbage-collection.mdx (88%) rename docs/03-github-orchestrator/{06-advanced-topics/04-custom-hooks => 07-advanced-topics/04-hooks}/01-custom-job.mdx (100%) rename docs/03-github-orchestrator/{06-advanced-topics/04-custom-hooks => 07-advanced-topics/04-hooks}/03-command-hooks.mdx (81%) rename docs/03-github-orchestrator/{06-advanced-topics/04-custom-hooks => 07-advanced-topics/04-hooks}/04-container-hooks.mdx (86%) rename docs/03-github-orchestrator/{06-advanced-topics/04-custom-hooks => 07-advanced-topics/04-hooks}/05-premade-container-jobs.mdx (100%) rename docs/03-github-orchestrator/{06-advanced-topics/04-custom-hooks => 07-advanced-topics/04-hooks}/_category_.yaml (72%) rename docs/03-github-orchestrator/{06-advanced-topics/04-configuration-override.mdx => 07-advanced-topics/05-configuration-override.mdx} (100%) rename docs/03-github-orchestrator/{06-advanced-topics/05-logging.mdx => 07-advanced-topics/06-logging.mdx} (92%) rename docs/03-github-orchestrator/{06-advanced-topics => 07-advanced-topics}/_category_.yaml (100%) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 3e2af6d9..bbc87337 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -18,8 +18,8 @@ be built, and streams results back. │ Orchestrator handles: │ │ • Provisioning │ │ • Git sync + LFS │ - │ • Caching │ - │ • Cleanup │ + │ • Caching (S3 / rclone) │ + │ • Automatic cleanup │ └─────────────────────────────────────┘ ``` @@ -30,42 +30,35 @@ AWS Fargate and Kubernetes. 1. **Flexible and elastic** — balance speed and cost, configure CPU, memory, and disk per build 2. **Scale from zero** — no idle servers, pay only while builds run -3. **Easy setup** — minimal configuration to get started -4. **Extensible** — run custom jobs, add hooks, or bring your own provider via the plugin system +3. **Easy setup** — minimal configuration to [get started](getting-started) +4. **Extensible** — run [custom hooks](advanced-topics/hooks), or bring your own + [provider plugin](providers/custom-providers) ## ❌ When You Don't Need It - Your project is under 5 GB — standard GitHub runners should work fine - You have dedicated build servers already running -## 📦 Release Status +## 📦 Supported Providers -Orchestrator is in **active development** ⚠️ +| Cloud Provider | Description | +| -------------------------------------- | -------------------------------------------------------- | +| [AWS Fargate](providers/aws) | Fully managed containers on AWS. No servers to maintain. | +| [Kubernetes](providers/kubernetes) | Run on any Kubernetes cluster. | +| [Local Docker](providers/local-docker) | Docker containers on the local machine. | +| [Local](providers/local) | Direct execution on the host machine. | -Overall status: `preview` — core features are stable, some APIs may change. +See [Providers](providers/overview) for the full list including [custom](providers/custom-providers) +and [community](providers/community-providers) providers. -Release stages: `experimental` → `preview` → `full release` +## 🖥️ Supported Platforms -### Provider Support - -| Cloud Provider | Release Status | -| -------------- | ------------------ | -| AWS Fargate | ✔️ Full release | -| Kubernetes | ✔️ Preview release | -| GCP | ⚠️ Considered | -| Azure | ⚠️ Considered | - -See [Providers](advanced-topics/providers/overview) for details on each provider. - -### Platform Support - -| Platform | Release Status | -| ------------------ | ------------------ | -| GitHub Actions | ✔️ Full release | -| GitLab CI | ✔️ Preview release | -| Command Line | ✔️ Preview release | -| Any Git repository | ✔️ Preview release | -| Any CI system | ✔️ Preview release | +| Platform | Description | +| ---------------------------------------------- | ------------------------------------- | +| [GitHub Actions](providers/github-integration) | First-class support with Checks. | +| [GitLab CI](providers/gitlab-integration) | Via the Command Line mode. | +| [Command Line](examples/command-line) | Run from any terminal or script. | +| Any CI system | Anything that can run shell commands. | ## 🔗 External Links diff --git a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx index 61e46eb5..59ed793a 100644 --- a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx +++ b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx @@ -1,3 +1,7 @@ +--- +sidebar_label: Game-CI vs Orchestrator +--- + # Standard Game-CI vs Orchestrator Mode ## 🎮 Standard Game-CI @@ -20,10 +24,11 @@ the CI runner itself. This is useful when: Standard Game-CI Orchestrator Mode ┌──────────────┐ ┌──────────────┐ ┌────────────┐ - │ GitHub │ │ GitHub │ ───► │ Cloud │ - │ Runner │ │ Runner │ │ Container │ - │ (builds │ │ (dispatches │ ◄─── │ (builds │ - │ locally) │ │ only) │ │ remotely) │ + │ GitHub │ │ GitHub Action │ │ │ + │ Runner │ │ CLI / Any CI │ ───► │ Cloud │ + │ (builds │ │ │ │ Container │ + │ locally) │ │ (dispatches │ ◄─── │ (builds │ + │ │ │ only) │ │ remotely) │ └──────────────┘ └──────────────┘ └────────────┘ ~14 GB disk Configurable CPU, memory, disk Fixed resources Scales to zero when idle diff --git a/docs/03-github-orchestrator/02-getting-started.mdx b/docs/03-github-orchestrator/02-getting-started.mdx index f14c1a59..def9b8ce 100644 --- a/docs/03-github-orchestrator/02-getting-started.mdx +++ b/docs/03-github-orchestrator/02-getting-started.mdx @@ -7,7 +7,7 @@ runners. This is useful for large projects that exceed GitHub's disk or resource - A Unity project in a GitHub repository - A cloud provider account (AWS or a Kubernetes cluster) -- Provider credentials configured as GitHub secrets +- Provider credentials configured as GitHub [secrets](secrets) ## Quick Start @@ -15,10 +15,11 @@ runners. This is useful for large projects that exceed GitHub's disk or resource 2. **Configure credentials** for your chosen provider 3. **Add the orchestrator step** to your workflow -See the provider-specific examples for complete setup: +See the provider-specific setup guides: -- [AWS Example](examples/github-examples/aws) -- [Kubernetes Example](examples/github-examples/kubernetes) +- [AWS Fargate](providers/aws) +- [Kubernetes](providers/kubernetes) +- [Local Docker](providers/local-docker) - [Command Line](examples/command-line) ## Minimal Example diff --git a/docs/03-github-orchestrator/03-examples/01-command-line.mdx b/docs/03-github-orchestrator/03-examples/01-command-line.mdx index 17b7f4ec..72e81bac 100644 --- a/docs/03-github-orchestrator/03-examples/01-command-line.mdx +++ b/docs/03-github-orchestrator/03-examples/01-command-line.mdx @@ -1,7 +1,5 @@ # Command Line -_Preview Support Only_ - You can install Game CI locally and start orchestrator jobs from the command line or by integrating your own tools. All parameters in the [API Reference](../api-reference) can be specified as CLI flags. diff --git a/docs/03-github-orchestrator/03-examples/02-github-examples/_category_.yaml b/docs/03-github-orchestrator/03-examples/02-github-examples/_category_.yaml deleted file mode 100644 index b9807118..00000000 --- a/docs/03-github-orchestrator/03-examples/02-github-examples/_category_.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -position: 2.0 -label: GitHub -collapsible: true -collapsed: true diff --git a/docs/03-github-orchestrator/04-api-reference.mdx b/docs/03-github-orchestrator/04-api-reference.mdx index 45b6a31e..87645484 100644 --- a/docs/03-github-orchestrator/04-api-reference.mdx +++ b/docs/03-github-orchestrator/04-api-reference.mdx @@ -31,13 +31,13 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. ### Provider -| Parameter | Default | Description | -| ---------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `providerStrategy` | `local` | Cloud provider to use. Built-in: `aws`, `k8s`, `local-docker`, `local`. Also accepts a GitHub URL, NPM package, or local path for [custom providers](advanced-topics/providers/custom-providers). | -| `containerCpu` | `1024` | CPU units for cloud containers (`1024` = 1 vCPU). See provider setup guides for allowed values. | -| `containerMemory` | `3072` | Memory in MB for cloud containers (`4096` = 4 GB). See provider setup guides for allowed values. | -| `orchestratorBranch` | `main` | Release branch of Orchestrator for remote containers. Use `orchestrator-develop` for latest development builds. | -| `orchestratorRepoName` | `game-ci/unity-builder` | Repository for Orchestrator source. Override to use a fork for testing or custom builds. | +| Parameter | Default | Description | +| ---------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `providerStrategy` | `local` | Cloud provider to use. Built-in: `aws`, `k8s`, `local-docker`, `local`. Also accepts a GitHub URL, NPM package, or local path for [custom providers](providers/custom-providers). | +| `containerCpu` | `1024` | CPU units for cloud containers (`1024` = 1 vCPU). See provider setup guides for allowed values. | +| `containerMemory` | `3072` | Memory in MB for cloud containers (`4096` = 4 GB). See provider setup guides for allowed values. | +| `orchestratorBranch` | `main` | Release branch of Orchestrator for remote containers. Use `orchestrator-develop` for latest development builds. | +| `orchestratorRepoName` | `game-ci/unity-builder` | Repository for Orchestrator source. Override to use a fork for testing or custom builds. | ### Git Synchronization @@ -52,16 +52,16 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. ### Custom Hooks -| Parameter | Default | Description | -| ------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------ | -| `containerHookFiles` | — | Names of [container hook](advanced-topics/custom-hooks/container-hooks) files from `.game-ci/container-hooks/`. | -| `customHookFiles` | — | Names of custom hook files from `.game-ci/hooks/`. | -| `customCommandHooks` | — | Inline [command hooks](advanced-topics/custom-hooks/command-hooks) as YAML. | -| `postBuildSteps` | — | Post-build job in YAML format with keys: `image`, `secrets`, `command`. | -| `preBuildSteps` | — | Pre-build job (after repo setup, before build) in YAML format. | -| `postBuildContainerHooks` | — | Container hook files to run after the build step. | -| `preBuildContainerHooks` | — | Container hook files to run before the build step. | -| `customJob` | — | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/custom-hooks/custom-job). | +| Parameter | Default | Description | +| ------------------------- | ------- | ----------------------------------------------------------------------------------------------------------- | +| `containerHookFiles` | — | Names of [container hook](advanced-topics/hooks/container-hooks) files from `.game-ci/container-hooks/`. | +| `customHookFiles` | — | Names of custom hook files from `.game-ci/hooks/`. | +| `customCommandHooks` | — | Inline [command hooks](advanced-topics/hooks/command-hooks) as YAML. | +| `postBuildSteps` | — | Post-build job in YAML format with keys: `image`, `secrets`, `command`. | +| `preBuildSteps` | — | Pre-build job (after repo setup, before build) in YAML format. | +| `postBuildContainerHooks` | — | Container hook files to run after the build step. | +| `preBuildContainerHooks` | — | Container hook files to run before the build step. | +| `customJob` | — | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/hooks/custom-job). | ### Configuration Override @@ -72,10 +72,10 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. ### Storage -| Parameter | Default | Description | -| ----------------- | ------- | --------------------------------------------------------------------------- | -| `storageProvider` | `s3` | Storage backend for caching and artifacts. Accepted values: `s3`, `rclone`. | -| `rcloneRemote` | — | Rclone remote endpoint. Required when `storageProvider` is `rclone`. | +| Parameter | Default | Description | +| ----------------- | ------- | ------------------------------------------------------------------------------------------------------ | +| `storageProvider` | `s3` | Storage backend for [caching](advanced-topics/caching) and artifacts. Accepted values: `s3`, `rclone`. | +| `rcloneRemote` | — | Rclone remote endpoint. Required when `storageProvider` is `rclone`. | ### AWS @@ -107,11 +107,11 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. ### GitHub Integration -| Parameter | Default | Description | -| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- | -| `githubCheck` | `false` | Create a GitHub Check for each orchestrator step. See [GitHub Integration](advanced-topics/providers/github-integration). | -| `asyncOrchestrator` | `false` | Run in async mode — returns immediately without waiting for the build to complete. | -| `watchToEnd` | `true` | Whether to follow the build logs until completion. | +| Parameter | Default | Description | +| ------------------- | ------- | --------------------------------------------------------------------------------------------------------- | +| `githubCheck` | `false` | Create a GitHub Check for each orchestrator step. See [GitHub Integration](providers/github-integration). | +| `asyncOrchestrator` | `false` | Run in async mode — returns immediately without waiting for the build to complete. | +| `watchToEnd` | `true` | Whether to follow the build logs until completion. | ### Build Options diff --git a/docs/03-github-orchestrator/05-providers/01-overview.mdx b/docs/03-github-orchestrator/05-providers/01-overview.mdx new file mode 100644 index 00000000..a5094b96 --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/01-overview.mdx @@ -0,0 +1,36 @@ +# Providers + +A **provider** is the backend that Orchestrator uses to run your builds. You choose a provider by +setting the `providerStrategy` parameter. + +## Built-in Providers + +These providers ship with Orchestrator and are maintained by the Game CI team. + +| Provider | `providerStrategy` | Description | +| -------------- | ------------------ | ----------------------------------------------------------------------------- | +| AWS Fargate | `aws` | Runs jobs on AWS Fargate (ECS). Fully managed, no servers to maintain. | +| Kubernetes | `k8s` | Runs jobs on any Kubernetes cluster. Flexible but requires a running cluster. | +| Local Docker | `local-docker` | Runs jobs in Docker containers on the local machine. | +| Local (direct) | `local` | Runs jobs directly on the local machine without containers. | + +Each provider has its own page with setup instructions: + +- [AWS Fargate](aws) +- [Kubernetes](kubernetes) +- [Local Docker](local-docker) +- [Local](local) + +## Custom Providers + +Extend Orchestrator with your own provider by pointing `providerStrategy` at a GitHub repository, +NPM package, or local file path. + +See [Custom Providers](custom-providers) for the full guide. + +## Community Providers + +Third-party providers shared by the Game CI community. + +See the [Community Providers](community-providers) page for the current list and how to submit your +own. diff --git a/docs/03-github-orchestrator/03-examples/02-github-examples/02-aws.mdx b/docs/03-github-orchestrator/05-providers/02-aws.mdx similarity index 93% rename from docs/03-github-orchestrator/03-examples/02-github-examples/02-aws.mdx rename to docs/03-github-orchestrator/05-providers/02-aws.mdx index 442dad1e..21ce26dc 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-examples/02-aws.mdx +++ b/docs/03-github-orchestrator/05-providers/02-aws.mdx @@ -62,8 +62,7 @@ Common combinations: containerHookFiles: aws-s3-upload-build ``` -See [Container Hooks](../../advanced-topics/custom-hooks/container-hooks) for more on -`containerHookFiles`. +See [Container Hooks](../advanced-topics/hooks/container-hooks) for more on `containerHookFiles`. A full workflow example is available in the builder source: [orchestrator-pipeline.yml](https://github.com/game-ci/unity-builder/blob/main/.github/workflows/orchestrator-pipeline.yml). @@ -71,4 +70,4 @@ A full workflow example is available in the builder source: ## AWS Parameters For the full list of AWS-specific parameters (`awsStackName`, endpoint overrides, etc.), see the -[API Reference — AWS section](../../api-reference#aws). +[API Reference — AWS section](../api-reference#aws). diff --git a/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx b/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx similarity index 84% rename from docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx rename to docs/03-github-orchestrator/05-providers/03-kubernetes.mdx index f5b5faf1..5453a8e2 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx +++ b/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx @@ -46,8 +46,7 @@ vCPU or GB suffix. containerHookFiles: aws-s3-upload-build ``` -See [Container Hooks](../../advanced-topics/custom-hooks/container-hooks) for more on -`containerHookFiles`. +See [Container Hooks](../advanced-topics/hooks/container-hooks) for more on `containerHookFiles`. A full workflow example is available in the builder source: [orchestrator-k8s-pipeline.yml](https://github.com/game-ci/unity-builder/blob/main/.github/workflows/orchestrator-k8s-pipeline.yml). @@ -56,10 +55,10 @@ A full workflow example is available in the builder source: - **Keep the cluster running.** Cold-starting a Kubernetes cluster is slow. If you need auto-scaling to zero, consider Google Cloud Kubernetes Autopilot. -- **Cloud storage required.** Kubernetes support currently requires cloud storage for caching. S3 is - built-in, or use rclone for other backends. +- **Cloud storage required.** Kubernetes requires cloud storage for + [caching](../advanced-topics/caching). S3 is built-in, or use rclone for other backends. ## K8s Parameters For the full list of Kubernetes parameters (`kubeConfig`, `kubeVolume`, `kubeStorageClass`, etc.), -see the [API Reference — Kubernetes section](../../api-reference#kubernetes). +see the [API Reference — Kubernetes section](../api-reference#kubernetes). diff --git a/docs/03-github-orchestrator/05-providers/04-local-docker.mdx b/docs/03-github-orchestrator/05-providers/04-local-docker.mdx new file mode 100644 index 00000000..0d20acf9 --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/04-local-docker.mdx @@ -0,0 +1,34 @@ +# Local Docker + +Runs the build workflow inside a Docker container on the local machine. No cloud account required. + +## Requirements + +- Docker installed and running on the build machine. + +## Example Workflow + +### GitHub Actions (self-hosted runner) + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: local-docker + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +### Command Line + +```bash +yarn run cli -m cli-build \ + --providerStrategy local-docker \ + --projectPath /path/to/your/project \ + --targetPlatform StandaloneLinux64 +``` + +## When to Use + +- You have a self-hosted runner with Docker installed +- You want container isolation without cloud infrastructure +- Testing builds locally before deploying to AWS or Kubernetes diff --git a/docs/03-github-orchestrator/05-providers/05-local.mdx b/docs/03-github-orchestrator/05-providers/05-local.mdx new file mode 100644 index 00000000..14287da2 --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/05-local.mdx @@ -0,0 +1,43 @@ +# Local + +Runs builds directly on the host machine with no container isolation. The simplest provider — useful +for development and testing. + +## Requirements + +- Unity installed on the build machine. +- No Docker or cloud account needed. + +## Example Workflow + +### GitHub Actions (self-hosted runner) + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: local + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +### Command Line + +```bash +yarn run cli -m cli-build \ + --providerStrategy local \ + --projectPath /path/to/your/project \ + --targetPlatform StandaloneLinux64 +``` + +## When to Use + +- Local development and testing of Orchestrator workflows +- Debugging build issues before deploying to cloud providers +- Self-hosted runners where you want direct execution without containers + +## ⚠️ Notes + +- Builds run directly on the host with no isolation. Ensure the machine has the required Unity + version and dependencies installed. +- This is the fallback provider — if a custom provider fails to load, Orchestrator falls back to + `local`. diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/02-custom-providers.mdx b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx similarity index 100% rename from docs/03-github-orchestrator/06-advanced-topics/07-providers/02-custom-providers.mdx rename to docs/03-github-orchestrator/05-providers/06-custom-providers.mdx diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/03-community-providers.mdx b/docs/03-github-orchestrator/05-providers/07-community-providers.mdx similarity index 75% rename from docs/03-github-orchestrator/06-advanced-topics/07-providers/03-community-providers.mdx rename to docs/03-github-orchestrator/05-providers/07-community-providers.mdx index 213aaed9..7e5b7ed4 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/07-providers/03-community-providers.mdx +++ b/docs/03-github-orchestrator/05-providers/07-community-providers.mdx @@ -15,27 +15,27 @@ provider before using it in your pipelines. _No community providers have been submitted yet. Yours could be the first!_ -{/\* When adding a provider, use this format: - -### Provider Name - -| | | -| -------------------- | -------------------------------------------------------------------------- | -| **Repository** | [user/repo](https://github.com/user/repo) | -| **providerStrategy** | `user/repo` | -| **Description** | Brief description of what the provider does and which platform it targets. | -| **Maintainer** | [@username](https://github.com/username) | - -\*/} - ## Submit Your Provider Built a custom provider? Share it with the community by adding it to this page. -1. [Edit this file directly on GitHub](https://github.com/game-ci/documentation/edit/main/docs/03-github-orchestrator/06-advanced-topics/07-providers/03-community-providers.mdx) -2. Add your provider to the **Provider List** section above using the commented template +1. [Edit this file directly on GitHub](https://github.com/game-ci/documentation/edit/main/docs/03-github-orchestrator/05-providers/07-community-providers.mdx) +2. Add your provider using the template below 3. Submit a pull request for review +### Template + +```markdown +### Provider Name + +| | | +| -------------------- | -------------------------------------------- | +| **Repository** | [user/repo](https://github.com/user/repo) | +| **providerStrategy** | `user/repo` | +| **Description** | Brief description of what the provider does. | +| **Maintainer** | [@username](https://github.com/username) | +``` + Your provider should: - Have a public GitHub repository or published NPM package diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/04-github-integration.mdx b/docs/03-github-orchestrator/05-providers/08-github-integration.mdx similarity index 63% rename from docs/03-github-orchestrator/06-advanced-topics/07-providers/04-github-integration.mdx rename to docs/03-github-orchestrator/05-providers/08-github-integration.mdx index 989573a6..ca43528c 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/07-providers/04-github-integration.mdx +++ b/docs/03-github-orchestrator/05-providers/08-github-integration.mdx @@ -6,8 +6,8 @@ environment. ## GitHub Checks -By enabling the `githubCheck` parameter, the orchestrator job will create a GitHub check for each -step. +By enabling the [`githubCheck`](../api-reference#github-integration) parameter, the orchestrator job +will create a GitHub check for each step. ```yaml - uses: game-ci/unity-builder@v4 @@ -24,8 +24,9 @@ UI. ## Async Mode -Set `asyncOrchestrator: true` to start a build without waiting for it to complete. The GitHub Action -will return immediately and you can check progress via GitHub Checks or by running the `watch` mode. +Set [`asyncOrchestrator: true`](../api-reference#github-integration) to start a build without +waiting for it to complete. The GitHub Action will return immediately and you can check progress via +GitHub Checks or by running the [`watch` mode](../api-reference#modes). ```yaml - uses: game-ci/unity-builder@v4 @@ -37,5 +38,4 @@ will return immediately and you can check progress via GitHub Checks or by runni gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -See the [AWS](../../examples/github-examples/aws) and -[Kubernetes](../../examples/github-examples/kubernetes) example pages for full workflow files. +See the [AWS](aws) and [Kubernetes](kubernetes) provider pages for full workflow files. diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/05-gitlab-integration.mdx b/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx similarity index 75% rename from docs/03-github-orchestrator/06-advanced-topics/07-providers/05-gitlab-integration.mdx rename to docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx index f7b59864..d1113e51 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/07-providers/05-gitlab-integration.mdx +++ b/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx @@ -5,7 +5,7 @@ GitHub Actions — any CI system that can run shell commands can trigger orchest ## Setup -1. Install the Orchestrator CLI (see [Command Line](../../examples/command-line)) +1. Install the Orchestrator CLI (see [Command Line](../examples/command-line)) 2. Set your git credentials and provider configuration as environment variables 3. Run the CLI from your `.gitlab-ci.yml` pipeline @@ -26,5 +26,5 @@ build-unity: AWS_DEFAULT_REGION: eu-west-2 ``` -See the [Command Line](../../examples/command-line) page for more details on CLI usage and the -[Configuration Override](../configuration-override) page for managing credentials. +See the [Command Line](../examples/command-line) page for more details on CLI usage and the +[Configuration Override](../advanced-topics/configuration-override) page for managing credentials. diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/_category_.yaml b/docs/03-github-orchestrator/05-providers/_category_.yaml similarity index 79% rename from docs/03-github-orchestrator/06-advanced-topics/07-providers/_category_.yaml rename to docs/03-github-orchestrator/05-providers/_category_.yaml index 280c7133..94aafd4d 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/07-providers/_category_.yaml +++ b/docs/03-github-orchestrator/05-providers/_category_.yaml @@ -1,5 +1,5 @@ --- -position: 7.0 +position: 5.0 label: Providers collapsible: true collapsed: true diff --git a/docs/03-github-orchestrator/06-advanced-topics/07-providers/01-overview.mdx b/docs/03-github-orchestrator/06-advanced-topics/07-providers/01-overview.mdx deleted file mode 100644 index 217c17bf..00000000 --- a/docs/03-github-orchestrator/06-advanced-topics/07-providers/01-overview.mdx +++ /dev/null @@ -1,57 +0,0 @@ -# Providers - -A **provider** is the backend that Orchestrator uses to run your builds. You choose a provider by -setting the `providerStrategy` parameter. - -## Built-in Providers - -These providers ship with Orchestrator and are maintained by the Game CI team. - -| Provider | `providerStrategy` | Description | Release Status | -| -------------- | ------------------ | ----------------------------------------------------------------------------- | -------------- | -| AWS Fargate | `aws` | Runs jobs on AWS Fargate (ECS). Fully managed, no servers to maintain. | Full release | -| Kubernetes | `k8s` | Runs jobs on any Kubernetes cluster. Flexible but requires a running cluster. | Preview | -| Local Docker | `local-docker` | Runs jobs in Docker containers on the local machine. | Preview | -| Local (direct) | `local` | Runs jobs directly on the local machine without containers. | Preview | - -### AWS Fargate - -Best for most users. Orchestrator automatically provisions and tears down Fargate tasks — you only -pay while a build is running. Requires an AWS account with IAM credentials. - -See [AWS setup guide](../../examples/github-examples/aws) for credentials and configuration. - -### Kubernetes - -Run builds on your own Kubernetes cluster. The cluster must support persistent volumes and should -stay running (cold starts are slow). Google Cloud Kubernetes Autopilot can scale to near-zero when -idle. - -See [Kubernetes setup guide](../../examples/github-examples/kubernetes) for credentials and -configuration. - -### Local Docker - -Runs the build workflow inside a Docker container on the machine running the action. Useful for -self-hosted runners with Docker installed. - -### Local - -Runs builds directly on the host machine with no container isolation. Useful for testing and -development. - -## Custom Providers - -You can extend Orchestrator with your own provider by pointing `providerStrategy` at a GitHub -repository, NPM package, or local file path. Orchestrator will dynamically load and validate it at -runtime. - -See [Custom Providers](custom-providers) for the full guide on creating and using custom providers. - -## Community Providers - -Community providers are third-party providers shared by the Game CI community. They are not -maintained by the Game CI team but have been reviewed and listed here for discoverability. - -See the [Community Providers](community-providers) page for the current list and instructions on how -to submit your own. diff --git a/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx b/docs/03-github-orchestrator/06-secrets.mdx similarity index 83% rename from docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx rename to docs/03-github-orchestrator/06-secrets.mdx index 2c04fbb5..56631718 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx +++ b/docs/03-github-orchestrator/06-secrets.mdx @@ -16,4 +16,4 @@ variables. ## 🔐 Managing Secrets For pulling secrets from external sources (e.g. GCP Secret Manager, AWS Secrets Manager) into -Orchestrator parameters, see [Configuration Override](configuration-override). +Orchestrator parameters, see [Configuration Override](advanced-topics/configuration-override). diff --git a/docs/03-github-orchestrator/06-advanced-topics/01-caching.mdx b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx similarity index 89% rename from docs/03-github-orchestrator/06-advanced-topics/01-caching.mdx rename to docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx index a7eb3563..40ee1ef6 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/01-caching.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx @@ -1,7 +1,8 @@ # Caching -Orchestrator supports two caching strategies. You can mix both by setting `maxRetainedWorkspaces` — -once the limit is reached, additional jobs fall back to standard caching. +Orchestrator supports two caching strategies. You can mix both by setting +[`maxRetainedWorkspaces`](../api-reference#caching) — once the limit is reached, additional jobs +fall back to standard caching. ``` Standard Caching Retained Workspace @@ -42,8 +43,8 @@ See [Retained Workspaces](retained-workspace) for configuration details. | S3 | `s3` (default) | AWS S3 storage. Works with both AWS and LocalStack. | | Rclone | `rclone` | Flexible cloud storage via [rclone](https://rclone.org). Supports 70+ backends (Google Cloud, Azure Blob, Backblaze, SFTP, etc). | -Configure with the `storageProvider` parameter. When using rclone, also set `rcloneRemote` to your -configured remote endpoint. +Configure with the [`storageProvider`](../api-reference#storage) parameter. When using rclone, also +set `rcloneRemote` to your configured remote endpoint. ## 🔒 Workspace Locking diff --git a/docs/03-github-orchestrator/06-advanced-topics/02-retained-workspace.mdx b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx similarity index 90% rename from docs/03-github-orchestrator/06-advanced-topics/02-retained-workspace.mdx rename to docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx index cce787cf..ab998997 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/02-retained-workspace.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx @@ -13,7 +13,8 @@ Set `maxRetainedWorkspaces` to control how many workspaces are kept: | `> 0` | Keep at most N workspaces. Additional jobs fall back to standard caching. | Each retained workspace is locked during use — only one build can use a workspace at a time. -Orchestrator handles locking automatically via S3 or rclone. +Orchestrator handles locking automatically via S3 or rclone. See [Caching](caching) for storage +provider details. ## Example diff --git a/docs/03-github-orchestrator/06-advanced-topics/03-garbage-collection.mdx b/docs/03-github-orchestrator/07-advanced-topics/03-garbage-collection.mdx similarity index 88% rename from docs/03-github-orchestrator/06-advanced-topics/03-garbage-collection.mdx rename to docs/03-github-orchestrator/07-advanced-topics/03-garbage-collection.mdx index 6400f1f1..140c036a 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/03-garbage-collection.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/03-garbage-collection.mdx @@ -3,7 +3,8 @@ Orchestrator creates cloud resources (containers, stacks, volumes) for each build and cleans them up automatically. If a build fails or is interrupted, resources may be left behind. -Use garbage collection to clean up stale resources. +Use garbage collection to clean up stale resources. See the +[API Reference](../api-reference#garbage-collection) for all parameters. ## Usage diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/01-custom-job.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/01-custom-job.mdx similarity index 100% rename from docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/01-custom-job.mdx rename to docs/03-github-orchestrator/07-advanced-topics/04-hooks/01-custom-job.mdx diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/03-command-hooks.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx similarity index 81% rename from docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/03-command-hooks.mdx rename to docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx index 8a4327e7..918420f6 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/03-command-hooks.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx @@ -35,3 +35,6 @@ directory via `customHookFiles`. ``` Place hook files at `.game-ci/hooks/my-hook.yaml` in your repository. + +For running Docker containers as build steps, see [Container Hooks](container-hooks). For +ready-to-use hooks (S3, rclone, Steam), see [Premade Container Hooks](premade-container-jobs). diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/04-container-hooks.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx similarity index 86% rename from docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/04-container-hooks.mdx rename to docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx index 70bcdeea..0931539c 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/04-container-hooks.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx @@ -1,7 +1,8 @@ # Container Hooks Run custom Docker containers as steps in the build workflow. Useful for uploading artifacts, -deploying builds, or running additional tools. +deploying builds, or running additional tools. For inline shell commands instead, see +[Command Hooks](command-hooks). ## Format diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/05-premade-container-jobs.mdx similarity index 100% rename from docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx rename to docs/03-github-orchestrator/07-advanced-topics/04-hooks/05-premade-container-jobs.mdx diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/_category_.yaml b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/_category_.yaml similarity index 72% rename from docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/_category_.yaml rename to docs/03-github-orchestrator/07-advanced-topics/04-hooks/_category_.yaml index 445f7ab4..6983ed19 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/_category_.yaml +++ b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/_category_.yaml @@ -1,5 +1,5 @@ --- position: 4.0 -label: Custom Hooks +label: Hooks collapsible: true collapsed: true diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx b/docs/03-github-orchestrator/07-advanced-topics/05-configuration-override.mdx similarity index 100% rename from docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx rename to docs/03-github-orchestrator/07-advanced-topics/05-configuration-override.mdx diff --git a/docs/03-github-orchestrator/06-advanced-topics/05-logging.mdx b/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx similarity index 92% rename from docs/03-github-orchestrator/06-advanced-topics/05-logging.mdx rename to docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx index c044820d..843d578b 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/05-logging.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx @@ -26,7 +26,7 @@ Logs flow through a CloudWatch → Kinesis pipeline: ## 🐛 Debug Logging -Enable `orchestratorDebug: true` to get verbose output including: +Enable [`orchestratorDebug: true`](../api-reference#build-options) to get verbose output including: - Resource allocation summaries (CPU, memory, disk) - Directory structure via `tree` diff --git a/docs/03-github-orchestrator/06-advanced-topics/_category_.yaml b/docs/03-github-orchestrator/07-advanced-topics/_category_.yaml similarity index 100% rename from docs/03-github-orchestrator/06-advanced-topics/_category_.yaml rename to docs/03-github-orchestrator/07-advanced-topics/_category_.yaml From 07229a6a6a740dd9e72fb2b9247e943f08e380ad Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:10:12 +0000 Subject: [PATCH 05/60] Merge Configuration Override into Secrets page, rename to Pull Secrets - Merge configuration-override.mdx content into secrets.mdx as a section - Delete standalone configuration-override page - Rename "Configuration Override" to "Pull Secrets" in API reference - Update all cross-links (command-line, GitLab integration, API reference) - Fix logging: "Orchestrator job (Fargate task)" instead of "Fargate tasks" Co-Authored-By: Claude Opus 4.6 --- .../03-examples/01-command-line.mdx | 4 +- .../04-api-reference.mdx | 36 +++++++-------- .../05-providers/09-gitlab-integration.mdx | 2 +- docs/03-github-orchestrator/06-secrets.mdx | 44 +++++++++++++++++-- .../05-configuration-override.mdx | 42 ------------------ .../07-advanced-topics/06-logging.mdx | 2 +- 6 files changed, 63 insertions(+), 67 deletions(-) delete mode 100644 docs/03-github-orchestrator/07-advanced-topics/05-configuration-override.mdx diff --git a/docs/03-github-orchestrator/03-examples/01-command-line.mdx b/docs/03-github-orchestrator/03-examples/01-command-line.mdx index 72e81bac..9159f7d3 100644 --- a/docs/03-github-orchestrator/03-examples/01-command-line.mdx +++ b/docs/03-github-orchestrator/03-examples/01-command-line.mdx @@ -55,9 +55,9 @@ Run `yarn run cli --help` to list all modes and parameters with descriptions. ## Keeping Commands Short You can avoid long CLI flags for credentials by using environment variables or the -[Configuration Override](../advanced-topics/configuration-override#example) feature. +[Pull Secrets](../secrets#-pulling-secrets-from-external-sources) feature. -This lets you pull input from a file or secret manager: +This lets you pull input from a secret manager: ```bash yarn run cli \ diff --git a/docs/03-github-orchestrator/04-api-reference.mdx b/docs/03-github-orchestrator/04-api-reference.mdx index 87645484..3e72974a 100644 --- a/docs/03-github-orchestrator/04-api-reference.mdx +++ b/docs/03-github-orchestrator/04-api-reference.mdx @@ -2,12 +2,12 @@ ## ⚙️ Configuration Methods -| Method | Description | -| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -| **GitHub Action `with`** | Pass parameters directly in your workflow file. See [Getting Started](getting-started). | -| **Command Line** | Pass parameters as CLI flags. See [Command Line](examples/command-line). | -| **Environment Variables** | Set parameters as environment variables in your shell or CI environment. | -| **Configuration Override** | Pull parameters dynamically from secret managers or files. See [Configuration Override](advanced-topics/configuration-override). | +| Method | Description | +| ------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| **GitHub Action `with`** | Pass parameters directly in your workflow file. See [Getting Started](getting-started). | +| **Command Line** | Pass parameters as CLI flags. See [Command Line](examples/command-line). | +| **Environment Variables** | Set parameters as environment variables in your shell or CI environment. | +| **Pull Secrets** | Pull parameters dynamically from secret managers or files. See [Secrets](secrets#-pulling-secrets-from-external-sources). | ## 🔧 Modes @@ -63,12 +63,12 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. | `preBuildContainerHooks` | — | Container hook files to run before the build step. | | `customJob` | — | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/hooks/custom-job). | -### Configuration Override +### Pull Secrets -| Parameter | Default | Description | -| --------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `readInputOverrideCommand` | — | Command to read a parameter value from an external source. Use `{0}` as the parameter name placeholder. Built-in presets: `gcp-secret-manager`, `aws-secret-manager`. See [Configuration Override](advanced-topics/configuration-override). | -| `readInputFromOverrideList` | — | Comma-separated list of parameter names to pull via `readInputOverrideCommand`. | +| Parameter | Default | Description | +| --------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `readInputOverrideCommand` | — | Command to read a parameter value from an external source. Use `{0}` as the parameter name placeholder. Built-in presets: `gcp-secret-manager`, `aws-secret-manager`. See [Secrets](secrets). | +| `readInputFromOverrideList` | — | Comma-separated list of parameter names to pull via `readInputOverrideCommand`. | ### Storage @@ -134,13 +134,13 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. These parameters are only available when using Orchestrator from the command line. -| Parameter | Description | -| ------------------ | ---------------------------------------------------- | -| `populateOverride` | Enable reading parameters from the override command. | -| `cachePushFrom` | Local directory to push cache from. | -| `cachePushTo` | Remote path to push cache to. | -| `artifactName` | Name for the build artifact. | -| `select` | Select a specific workflow or resource by name. | +| Parameter | Description | +| ------------------ | -------------------------------------------------------------------------------------------------- | +| `populateOverride` | Enable [pulling secrets](secrets#-pulling-secrets-from-external-sources) from an external command. | +| `cachePushFrom` | Local directory to push cache from. | +| `cachePushTo` | Remote path to push cache to. | +| `artifactName` | Name for the build artifact. | +| `select` | Select a specific workflow or resource by name. | ## 🌍 Environment Variables diff --git a/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx b/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx index d1113e51..a6d5d944 100644 --- a/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx +++ b/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx @@ -27,4 +27,4 @@ build-unity: ``` See the [Command Line](../examples/command-line) page for more details on CLI usage and the -[Configuration Override](../advanced-topics/configuration-override) page for managing credentials. +[Secrets](../secrets) page for managing credentials. diff --git a/docs/03-github-orchestrator/06-secrets.mdx b/docs/03-github-orchestrator/06-secrets.mdx index 56631718..d79182cb 100644 --- a/docs/03-github-orchestrator/06-secrets.mdx +++ b/docs/03-github-orchestrator/06-secrets.mdx @@ -13,7 +13,45 @@ job containers. Secrets are stored in **AWS Secrets Manager** and injected into Fargate tasks as environment variables. -## 🔐 Managing Secrets +## 🔐 Pulling Secrets from External Sources -For pulling secrets from external sources (e.g. GCP Secret Manager, AWS Secrets Manager) into -Orchestrator parameters, see [Configuration Override](advanced-topics/configuration-override). +You can pull parameter values from external secret managers or files at runtime instead of +hardcoding credentials. This keeps CLI commands short and secrets out of your repository. + +``` + Orchestrator External Source + ┌──────────────┐ command ┌──────────────────┐ + │ Reads input │ ──────────────► │ Secret Manager │ + │ override │ │ (GCP, AWS, file) │ + │ list │ ◄────────────── │ │ + │ │ value │ │ + └──────────────┘ └──────────────────┘ +``` + +### Parameters + +| Parameter | Default | Description | +| --------------------------- | ------- | ----------------------------------------------------------------------------------------------------- | +| `readInputOverrideCommand` | — | Command to run for each secret. Use `{0}` as a placeholder for the parameter name. | +| `readInputFromOverrideList` | — | Comma-separated list of parameter names to pull via `readInputOverrideCommand`. | +| `populateOverride` | — | Must be `true` to enable pulling secrets (CLI only). Auto-enabled in GitHub Actions when command set. | + +### Built-in Presets + +Instead of writing a full command, use these presets as the `readInputOverrideCommand`: + +| Preset | Expands to | +| -------------------- | ----------------------------------------------------- | +| `gcp-secret-manager` | `gcloud secrets versions access 1 --secret="{0}"` | +| `aws-secret-manager` | `aws secretsmanager get-secret-value --secret-id {0}` | + +### Example + +```bash +yarn run cli -m cli-build \ + --populateOverride true \ + --readInputFromOverrideList UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD \ + --readInputOverrideCommand='gcloud secrets versions access 1 --secret="{0}"' +``` + +This runs the GCP command for each parameter name in the list and uses the output as the value. diff --git a/docs/03-github-orchestrator/07-advanced-topics/05-configuration-override.mdx b/docs/03-github-orchestrator/07-advanced-topics/05-configuration-override.mdx deleted file mode 100644 index e2ac2640..00000000 --- a/docs/03-github-orchestrator/07-advanced-topics/05-configuration-override.mdx +++ /dev/null @@ -1,42 +0,0 @@ -# Configuration Override - -Pull parameter values from external sources like secret managers or files at runtime. This avoids -hardcoding credentials and keeps CLI commands short. - -``` - Orchestrator External Source - ┌──────────────┐ command ┌──────────────────┐ - │ Reads input │ ──────────────► │ Secret Manager │ - │ override │ │ (GCP, AWS, file) │ - │ list │ ◄────────────── │ │ - │ │ value │ │ - └──────────────┘ └──────────────────┘ -``` - -## Parameters - -| Parameter | Description | -| --------------------------- | ------------------------------------------------------------------ | -| `populateOverride` | Must be `true` to enable override (CLI only). | -| `readInputFromOverrideList` | Comma-separated list of parameter names to pull. | -| `readInputOverrideCommand` | Command to run. Use `{0}` as a placeholder for the parameter name. | - -### Built-in Presets - -Instead of writing a full command, you can use these presets as the `readInputOverrideCommand`: - -| Preset | Expands to | -| -------------------- | ----------------------------------------------------- | -| `gcp-secret-manager` | `gcloud secrets versions access 1 --secret="{0}"` | -| `aws-secret-manager` | `aws secretsmanager get-secret-value --secret-id {0}` | - -## Example - -```bash -yarn run cli -m cli-build \ - --populateOverride true \ - --readInputFromOverrideList UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD \ - --readInputOverrideCommand='gcloud secrets versions access 1 --secret="{0}"' -``` - -This runs the GCP command for each parameter name in the list and uses the output as the value. diff --git a/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx b/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx index 843d578b..8794ea02 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx @@ -20,7 +20,7 @@ Uses the native Kubernetes logging API to stream pod logs directly. Logs flow through a CloudWatch → Kinesis pipeline: -1. Fargate tasks write to **CloudWatch Logs** +1. Orchestrator job (Fargate task) writes logs to **CloudWatch Logs** 2. A **Kinesis** subscription forwards logs in real time 3. Orchestrator consumes from the Kinesis stream From 6f9667fdbb7888cff5179e37537e8000922b6ecd Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:11:48 +0000 Subject: [PATCH 06/60] Fix broken link: hooks directory has no index page Link to container-hooks page instead of the hooks directory. Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/01-introduction.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index bbc87337..ff5aea21 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -31,7 +31,7 @@ AWS Fargate and Kubernetes. 1. **Flexible and elastic** — balance speed and cost, configure CPU, memory, and disk per build 2. **Scale from zero** — no idle servers, pay only while builds run 3. **Easy setup** — minimal configuration to [get started](getting-started) -4. **Extensible** — run [custom hooks](advanced-topics/hooks), or bring your own +4. **Extensible** — run [custom hooks](advanced-topics/hooks/container-hooks), or bring your own [provider plugin](providers/custom-providers) ## ❌ When You Don't Need It From 843fe49fb80f0e02d8e6a462b8d9ef27f70c37a1 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:18:06 +0000 Subject: [PATCH 07/60] Add comprehensive GitHub Actions examples page Complete workflow examples for every provider and common patterns: - Minimal workflow, AWS Fargate, Kubernetes, Local Docker - Async mode with GitHub Checks - Scheduled garbage collection - Multi-platform matrix builds - Retained workspaces for faster rebuilds - Container hooks (S3 upload + Steam deploy) - Required secrets tables and cross-links to all relevant docs Co-Authored-By: Claude Opus 4.6 --- .../03-examples/02-github-actions.mdx | 338 ++++++++++++++++++ 1 file changed, 338 insertions(+) create mode 100644 docs/03-github-orchestrator/03-examples/02-github-actions.mdx diff --git a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx new file mode 100644 index 00000000..cc17ad6b --- /dev/null +++ b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx @@ -0,0 +1,338 @@ +# GitHub Actions + +Orchestrator has first-class GitHub Actions support. This page shows complete, copy-paste workflow +files for every provider. + +## 🔑 Prerequisites + +1. A Unity project in a GitHub repository +2. Provider credentials stored as + [GitHub Actions secrets](https://docs.github.com/en/actions/security/encrypted-secrets) +3. A `UNITY_LICENSE` or activation secret (see the + [Game CI activation docs](https://game.ci/docs/github/activation)) + +## Minimal Workflow + +The simplest possible Orchestrator workflow. Uses AWS Fargate with default CPU and memory. + +```yaml +name: Build with Orchestrator + +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-west-2 + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +## ☁️ AWS Fargate + +Full workflow with custom CPU/memory, S3 artifact export, and GitHub Checks. + +```yaml +name: Orchestrator — AWS Fargate + +on: + push: + branches: [main, develop] + pull_request: + branches: [main] + +jobs: + build: + name: Build (${{ matrix.targetPlatform }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + targetPlatform: + - StandaloneLinux64 + - StandaloneWindows64 + - StandaloneOSX + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-west-2 + + - uses: game-ci/unity-builder@v4 + id: build + with: + providerStrategy: aws + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + unityVersion: 2022.3.0f1 + containerCpu: 2048 + containerMemory: 8192 + # Export build artifacts to S3: + containerHookFiles: aws-s3-upload-build + # Show build progress as GitHub Checks: + githubCheck: true +``` + +### Required Secrets + +| Secret | Description | +| ----------------------- | ---------------------------------------------------------------- | +| `AWS_ACCESS_KEY_ID` | IAM access key with ECS, CloudFormation, S3, Kinesis, CloudWatch | +| `AWS_SECRET_ACCESS_KEY` | IAM secret key | + +See the [AWS provider page](../providers/aws) for allowed CPU/memory combinations and full setup. + +## ☸️ Kubernetes + +Full workflow targeting a Kubernetes cluster. + +```yaml +name: Orchestrator — Kubernetes + +on: + push: + branches: [main] + +jobs: + build: + name: Build (${{ matrix.targetPlatform }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + targetPlatform: + - StandaloneLinux64 + - StandaloneWindows64 + env: + kubeConfig: ${{ secrets.KUBE_CONFIG }} + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@v4 + id: build + with: + providerStrategy: k8s + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + unityVersion: 2022.3.0f1 + kubeVolumeSize: 10Gi + containerCpu: 1024 + containerMemory: 4096 + containerHookFiles: aws-s3-upload-build + githubCheck: true +``` + +### Required Secrets + +| Secret | Description | +| ------------- | ------------------------------- | +| `KUBE_CONFIG` | Base64-encoded kubeconfig file. | + +Generate it with: + +```bash +cat ~/.kube/config | base64 -w 0 +``` + +See the [Kubernetes provider page](../providers/kubernetes) for cluster tips and full setup. + +## 🐳 Local Docker (Self-Hosted Runner) + +Run builds in Docker on your own machine. No cloud account needed. + +```yaml +name: Orchestrator — Local Docker + +on: + push: + branches: [main] + +jobs: + build: + runs-on: self-hosted + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: local-docker + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +Requires Docker installed on the self-hosted runner. + +## ⏳ Async Mode + +For long builds, use async mode so the GitHub Action returns immediately. Monitor progress via +GitHub Checks. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + asyncOrchestrator: true + githubCheck: true +``` + +The build runs in the background. Check progress from the **Checks** tab on your pull request. + +See [GitHub Integration](../providers/github-integration) for more on async mode and GitHub Checks. + +## 🗑️ Scheduled Garbage Collection + +Add a scheduled workflow to clean up stale cloud resources. Useful as a safety net alongside the +automatic cleanup cron. + +```yaml +name: Orchestrator — Garbage Collect + +on: + schedule: + - cron: '0 4 * * *' # Daily at 4 AM UTC + +jobs: + cleanup: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-west-2 + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + mode: garbage-collect + garbageMaxAge: 24 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +See [Garbage Collection](../advanced-topics/garbage-collection) for details. + +## 📦 Multi-Platform Matrix Build + +Build for multiple platforms in parallel. Each platform runs as a separate Orchestrator job. + +```yaml +name: Orchestrator — Multi-Platform + +on: + push: + branches: [main] + +jobs: + build: + name: Build ${{ matrix.targetPlatform }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + targetPlatform: + - StandaloneLinux64 + - StandaloneWindows64 + - StandaloneOSX + - iOS + - Android + - WebGL + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-west-2 + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + containerCpu: 2048 + containerMemory: 8192 + containerHookFiles: aws-s3-upload-build + githubCheck: true +``` + +## 🔁 Retained Workspaces for Faster Rebuilds + +For large projects, keep the entire project folder cached between builds. Dramatically speeds up +rebuilds at the cost of more storage. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + maxRetainedWorkspaces: 3 + containerCpu: 2048 + containerMemory: 8192 +``` + +See [Retained Workspaces](../advanced-topics/retained-workspace) and +[Caching](../advanced-topics/caching) for details on storage strategies. + +## 🪝 Container Hooks — S3 Upload + Steam Deploy + +Chain multiple container hooks to export builds to S3 and deploy to Steam in a single workflow. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + containerHookFiles: aws-s3-upload-build,steam-deploy-client + env: + STEAM_USERNAME: ${{ secrets.STEAM_USERNAME }} + STEAM_PASSWORD: ${{ secrets.STEAM_PASSWORD }} + STEAM_APPID: ${{ secrets.STEAM_APPID }} +``` + +See [Premade Container Hooks](../advanced-topics/hooks/premade-container-jobs) for all available +hooks (S3, rclone, Steam). + +## 🔗 Reference + +- [API Reference](../api-reference) — full list of all parameters +- [Providers](../providers/overview) — setup guides for each provider +- [Secrets](../secrets) — how credentials are transferred to build containers +- [Real-world pipeline](https://github.com/game-ci/unity-builder/blob/main/.github/workflows/orchestrator-integrity.yml) + — Game CI's own Orchestrator test pipeline From e9abe7767438a81ae20f25c3ab5685b225bffcc9 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:21:20 +0000 Subject: [PATCH 08/60] Fix ASCII diagram alignment in Game-CI vs Orchestrator Equalize box widths and arrow spacing for consistent rendering. Co-Authored-By: Claude Opus 4.6 --- .../02-game-ci-vs-orchestrator.mdx | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx index 59ed793a..e4ce3c61 100644 --- a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx +++ b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx @@ -21,17 +21,17 @@ the CI runner itself. This is useful when: - You want to **scale to many concurrent builds** without managing servers ``` - Standard Game-CI Orchestrator Mode - - ┌──────────────┐ ┌──────────────┐ ┌────────────┐ - │ GitHub │ │ GitHub Action │ │ │ - │ Runner │ │ CLI / Any CI │ ───► │ Cloud │ - │ (builds │ │ │ │ Container │ - │ locally) │ │ (dispatches │ ◄─── │ (builds │ - │ │ │ only) │ │ remotely) │ - └──────────────┘ └──────────────┘ └────────────┘ - ~14 GB disk Configurable CPU, memory, disk - Fixed resources Scales to zero when idle + Standard Game-CI Orchestrator Mode + + ┌────────────────┐ ┌─────────────────┐ ┌──────────────┐ + │ GitHub │ │ GitHub Action │ │ │ + │ Runner │ │ CLI / Any CI │───►│ Cloud │ + │ │ │ │ │ Container │ + │ (builds │ │ (dispatches │◄───│ (builds │ + │ locally) │ │ only) │ │ remotely) │ + └────────────────┘ └─────────────────┘ └──────────────┘ + ~14 GB disk Configurable CPU, memory, disk + Fixed resources Scales to zero when idle ``` ## Self-Hosted Runners vs Orchestrator From d1284150033178d6e31d8806ef0461fabf613c8e Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:23:08 +0000 Subject: [PATCH 09/60] Add ASCII diagrams to custom providers, GitHub integration, and retained workspaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Custom Providers: plugin loading flow (source → fetch → ProviderInterface) - GitHub Integration: async mode lifecycle (dispatch → return → Check updates) - Retained Workspaces: workspace locking across concurrent builds Co-Authored-By: Claude Opus 4.6 --- .../05-providers/06-custom-providers.mdx | 13 +++++++++++++ .../05-providers/08-github-integration.mdx | 12 ++++++++++++ .../07-advanced-topics/02-retained-workspace.mdx | 14 ++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx index b855a223..dcb82cba 100644 --- a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx +++ b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx @@ -7,6 +7,19 @@ pluggable backend that controls where and how your builds run. Built-in provider With custom providers, you can point `providerStrategy` at a GitHub repository, NPM package, or local path and Orchestrator will dynamically load it at runtime. +``` + providerStrategy Build + ┌─────────────────┐ fetch ┌───────────────┐ ┌──────────────┐ + │ "user/repo" │────────────►│ Clone repo / │ │ │ + │ "npm-package" │ │ Install pkg / │───►│ Provider │ + │ "./local/path" │ │ Resolve path │ │ Interface │ + └─────────────────┘ └───────────────┘ │ │ + cached in │ setupWorkflow│ + .provider-cache/ │ runTask │ + │ cleanup │ + └──────────────┘ +``` + ## Using a Custom Provider Set `providerStrategy` to a provider source instead of a built-in name: diff --git a/docs/03-github-orchestrator/05-providers/08-github-integration.mdx b/docs/03-github-orchestrator/05-providers/08-github-integration.mdx index ca43528c..b9886599 100644 --- a/docs/03-github-orchestrator/05-providers/08-github-integration.mdx +++ b/docs/03-github-orchestrator/05-providers/08-github-integration.mdx @@ -28,6 +28,18 @@ Set [`asyncOrchestrator: true`](../api-reference#github-integration) to start a waiting for it to complete. The GitHub Action will return immediately and you can check progress via GitHub Checks or by running the [`watch` mode](../api-reference#modes). +``` + GitHub Action Cloud GitHub PR + ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ + │ 1. Dispatch │───────────►│ 2. Building │ │ │ + │ 3. Return ✓ │ │ ... │─────────►│ 4. Check │ + │ (done) │ │ ... │ update │ updated │ + └──────────────┘ │ 5. Complete │─────────►│ 6. Check ✓ │ + Action finishes └──────────────┘ └──────────────┘ + in seconds Build runs for Monitor from + minutes/hours the PR page +``` + ```yaml - uses: game-ci/unity-builder@v4 with: diff --git a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx index ab998997..6faa0023 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx @@ -16,6 +16,20 @@ Each retained workspace is locked during use — only one build can use a worksp Orchestrator handles locking automatically via S3 or rclone. See [Caching](caching) for storage provider details. +``` + maxRetainedWorkspaces: 3 + + Workspace 1 Workspace 2 Workspace 3 + ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ + │ 🔒 Build A │ │ 🔒 Build B │ │ (idle) │ + │ Full project │ │ Full project │ │ Full project │ + │ copy │ │ copy │ │ copy │ + └──────────────┘ └──────────────┘ └──────────────┘ + + Build C arrives → claims Workspace 3 + Build D arrives → all locked → falls back to standard caching +``` + ## Example ```yaml From 759a16f9970ea45d60f460a277a6bc6654ff7b3c Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:25:34 +0000 Subject: [PATCH 10/60] Add ASCII diagrams to container hooks, garbage collection, AWS, and providers overview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Container Hooks: build pipeline with pre/post hook execution points - Garbage Collection: resource lifecycle (normal cleanup vs stale → GC) - AWS: CloudFormation resource stack (ECS, S3, CloudWatch, Kinesis) - Providers Overview: decision flowchart for choosing a provider Co-Authored-By: Claude Opus 4.6 --- .../05-providers/01-overview.mdx | 16 +++++++++++++ .../05-providers/02-aws.mdx | 23 +++++++++++++++++++ .../03-garbage-collection.mdx | 17 ++++++++++++++ .../04-hooks/04-container-hooks.mdx | 12 ++++++++++ 4 files changed, 68 insertions(+) diff --git a/docs/03-github-orchestrator/05-providers/01-overview.mdx b/docs/03-github-orchestrator/05-providers/01-overview.mdx index a5094b96..78e4f1dd 100644 --- a/docs/03-github-orchestrator/05-providers/01-overview.mdx +++ b/docs/03-github-orchestrator/05-providers/01-overview.mdx @@ -3,6 +3,22 @@ A **provider** is the backend that Orchestrator uses to run your builds. You choose a provider by setting the `providerStrategy` parameter. +``` + Which provider should I use? + + Need cloud scaling? ──── Yes ──► Have AWS account? ── Yes ──► aws + │ │ + No No + │ │ + ▼ ▼ + Have Docker? ─── Yes ──► local-docker Have K8s cluster? ── Yes ──► k8s + │ │ + No No + │ │ + ▼ ▼ + local Consider aws (easiest cloud setup) +``` + ## Built-in Providers These providers ship with Orchestrator and are maintained by the Game CI team. diff --git a/docs/03-github-orchestrator/05-providers/02-aws.mdx b/docs/03-github-orchestrator/05-providers/02-aws.mdx index 21ce26dc..38a30c6c 100644 --- a/docs/03-github-orchestrator/05-providers/02-aws.mdx +++ b/docs/03-github-orchestrator/05-providers/02-aws.mdx @@ -1,5 +1,28 @@ # AWS +## Architecture + +Orchestrator creates and manages these AWS resources automatically: + +``` + CloudFormation (base stack) + ┌─────────────────────────────────────────────────┐ + │ │ + │ ┌────────────┐ ┌────────────┐ │ + │ │ ECS │ │ S3 │ │ + │ │ Fargate │ │ Bucket │ │ + │ │ (build │ │ (cache + │ │ + │ │ tasks) │ │ artifacts)│ │ + │ └────────────┘ └────────────┘ │ + │ │ + │ ┌────────────┐ ┌────────────┐ │ + │ │ CloudWatch │───►│ Kinesis │──► Log stream │ + │ │ Logs │ │ Stream │ to CI │ + │ └────────────┘ └────────────┘ │ + │ │ + └─────────────────────────────────────────────────┘ +``` + ## Requirements - An AWS account with permission to create resources (ECS, CloudFormation, S3, Kinesis, CloudWatch). diff --git a/docs/03-github-orchestrator/07-advanced-topics/03-garbage-collection.mdx b/docs/03-github-orchestrator/07-advanced-topics/03-garbage-collection.mdx index 140c036a..38bf1cc8 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/03-garbage-collection.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/03-garbage-collection.mdx @@ -3,6 +3,23 @@ Orchestrator creates cloud resources (containers, stacks, volumes) for each build and cleans them up automatically. If a build fails or is interrupted, resources may be left behind. +``` + Normal Build Failed / Interrupted Build + + ┌──────────┐ ┌──────────┐ ┌─────┐ ┌──────────┐ ┌──────────┐ + │ Create │─►│ Build │─►│ ✓ │ │ Create │─►│ Build │──► ✗ crash + │ resources│ │ │ │Clean│ │ resources│ │ │ + └──────────┘ └──────────┘ └─────┘ └──────────┘ └──────────┘ + auto ▼ + cleanup Resources left behind + ▼ + ┌─────────────────┐ + │ garbage-collect │ + │ removes after │ + │ garbageMaxAge │ + └─────────────────┘ +``` + Use garbage collection to clean up stale resources. See the [API Reference](../api-reference#garbage-collection) for all parameters. diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx index 0931539c..61f55d0e 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx @@ -4,6 +4,18 @@ Run custom Docker containers as steps in the build workflow. Useful for uploadin deploying builds, or running additional tools. For inline shell commands instead, see [Command Hooks](command-hooks). +``` + Build Pipeline + + preBuildContainerHooks Unity Build postBuildContainerHooks + ┌─────────────────────┐ ┌──────────────┐ ┌──────────────────────┐ + │ 🐳 Pull cache │ │ │ │ 🐳 Upload build │ + │ 🐳 Setup deps │───►│ 🔨 Build │───►│ 🐳 Deploy to Steam │ + │ 🐳 ... │ │ │ │ 🐳 ... │ + └─────────────────────┘ └──────────────┘ └──────────────────────┘ + Runs before build Core build step Runs after build +``` + ## Format ```yaml From db90cbc3cc3469ae4eaf279ca6be38dfae90b745 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:26:19 +0000 Subject: [PATCH 11/60] Replace provider decision tree with simple 4-across comparison Shows each provider side-by-side with its key trait instead of a decision flowchart. Co-Authored-By: Claude Opus 4.6 --- .../05-providers/01-overview.mdx | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/docs/03-github-orchestrator/05-providers/01-overview.mdx b/docs/03-github-orchestrator/05-providers/01-overview.mdx index 78e4f1dd..ff91331c 100644 --- a/docs/03-github-orchestrator/05-providers/01-overview.mdx +++ b/docs/03-github-orchestrator/05-providers/01-overview.mdx @@ -4,19 +4,15 @@ A **provider** is the backend that Orchestrator uses to run your builds. You cho setting the `providerStrategy` parameter. ``` - Which provider should I use? - - Need cloud scaling? ──── Yes ──► Have AWS account? ── Yes ──► aws - │ │ - No No - │ │ - ▼ ▼ - Have Docker? ─── Yes ──► local-docker Have K8s cluster? ── Yes ──► k8s - │ │ - No No - │ │ - ▼ ▼ - local Consider aws (easiest cloud setup) + ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ + │ aws │ │ k8s │ │ local-docker │ │ local │ + │ │ │ │ │ │ │ │ + │ ☁️ Fargate │ │ ☸️ Cluster │ │ 🐳 Container │ │ 🖥️ Direct │ + │ Fully │ │ Bring your │ │ No cloud │ │ No container │ + │ managed │ │ own cluster │ │ needed │ │ needed │ + └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ + Cloud scaling Cloud scaling Local builds Local builds + No servers Flexible Docker required Simplest setup ``` ## Built-in Providers From 07da84a39f17ce7253f2233861b89f187e35f2e9 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:27:07 +0000 Subject: [PATCH 12/60] Fix sidebar ordering: Secrets before Advanced Topics Set Advanced Topics position to 7.0 so it renders after Secrets (position 6 from filename). Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/07-advanced-topics/_category_.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/03-github-orchestrator/07-advanced-topics/_category_.yaml b/docs/03-github-orchestrator/07-advanced-topics/_category_.yaml index da411968..24f7ad99 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/_category_.yaml +++ b/docs/03-github-orchestrator/07-advanced-topics/_category_.yaml @@ -1,5 +1,5 @@ --- -position: 5.0 +position: 7.0 label: Advanced topics collapsible: true collapsed: true From 557659defa6009890e3d7b4c6c829d181b235765 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:28:35 +0000 Subject: [PATCH 13/60] Rename Premade Container Hooks to Built-In Hooks Update title and all cross-references across container hooks, command hooks, and GitHub Actions examples. Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/03-examples/02-github-actions.mdx | 4 ++-- .../07-advanced-topics/04-hooks/03-command-hooks.mdx | 2 +- .../07-advanced-topics/04-hooks/04-container-hooks.mdx | 2 +- .../07-advanced-topics/04-hooks/05-premade-container-jobs.mdx | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx index cc17ad6b..ecd1b30e 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx +++ b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx @@ -326,8 +326,8 @@ Chain multiple container hooks to export builds to S3 and deploy to Steam in a s STEAM_APPID: ${{ secrets.STEAM_APPID }} ``` -See [Premade Container Hooks](../advanced-topics/hooks/premade-container-jobs) for all available -hooks (S3, rclone, Steam). +See [Built-In Hooks](../advanced-topics/hooks/premade-container-jobs) for all available hooks (S3, +rclone, Steam). ## 🔗 Reference diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx index 918420f6..14c58490 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx @@ -37,4 +37,4 @@ directory via `customHookFiles`. Place hook files at `.game-ci/hooks/my-hook.yaml` in your repository. For running Docker containers as build steps, see [Container Hooks](container-hooks). For -ready-to-use hooks (S3, rclone, Steam), see [Premade Container Hooks](premade-container-jobs). +ready-to-use hooks (S3, rclone, Steam), see [Built-In Hooks](premade-container-jobs). diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx index 61f55d0e..9bc19015 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx @@ -42,4 +42,4 @@ files from `.game-ci/container-hooks/` via `containerHookFiles`. ## Pre-built Hooks Orchestrator ships with ready-to-use hooks for S3, rclone, and Steam. See -[Premade Container Hooks](premade-container-jobs) for the full list. +[Built-In Hooks](premade-container-jobs) for the full list. diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/05-premade-container-jobs.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/05-premade-container-jobs.mdx index 48a61d01..40b53c80 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/05-premade-container-jobs.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/04-hooks/05-premade-container-jobs.mdx @@ -1,4 +1,4 @@ -# Premade Container Hooks +# Built-In Hooks Orchestrator ships with pre-built container hooks for common tasks. Use them by name with the `containerHookFiles` parameter. From 9df05bccf730cd3a9760c45de11cd95edd6a967c Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:30:59 +0000 Subject: [PATCH 14/60] Rename Built-In Hooks file, move Custom Job out of Hooks, fix alignment - Rename premade-container-jobs.mdx to built-in-hooks.mdx (fixes URL slug) - Update all links from premade-container-jobs to built-in-hooks - Rename "Pre-built Hooks" section header to "Built-In Hooks" - Move Custom Job from hooks/ to advanced-topics/ (it's not a hook) - Rename "Custom Jobs" to "Custom Job" (singular) - Update API reference link to advanced-topics/custom-job - Fix numbering conflicts in advanced-topics - Fix retained workspace diagram alignment (remove emoji, align box walls) Co-Authored-By: Claude Opus 4.6 --- .../03-examples/02-github-actions.mdx | 2 +- .../04-api-reference.mdx | 2 +- .../02-retained-workspace.mdx | 18 +++++++++--------- .../01-custom-job.mdx => 03-custom-job.mdx} | 2 +- ...ollection.mdx => 04-garbage-collection.mdx} | 0 .../03-command-hooks.mdx | 2 +- .../04-container-hooks.mdx | 4 ++-- .../05-built-in-hooks.mdx} | 0 .../{04-hooks => 05-hooks}/_category_.yaml | 0 9 files changed, 15 insertions(+), 15 deletions(-) rename docs/03-github-orchestrator/07-advanced-topics/{04-hooks/01-custom-job.mdx => 03-custom-job.mdx} (97%) rename docs/03-github-orchestrator/07-advanced-topics/{03-garbage-collection.mdx => 04-garbage-collection.mdx} (100%) rename docs/03-github-orchestrator/07-advanced-topics/{04-hooks => 05-hooks}/03-command-hooks.mdx (91%) rename docs/03-github-orchestrator/07-advanced-topics/{04-hooks => 05-hooks}/04-container-hooks.mdx (95%) rename docs/03-github-orchestrator/07-advanced-topics/{04-hooks/05-premade-container-jobs.mdx => 05-hooks/05-built-in-hooks.mdx} (100%) rename docs/03-github-orchestrator/07-advanced-topics/{04-hooks => 05-hooks}/_category_.yaml (100%) diff --git a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx index ecd1b30e..34e1d7dd 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx +++ b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx @@ -326,7 +326,7 @@ Chain multiple container hooks to export builds to S3 and deploy to Steam in a s STEAM_APPID: ${{ secrets.STEAM_APPID }} ``` -See [Built-In Hooks](../advanced-topics/hooks/premade-container-jobs) for all available hooks (S3, +See [Built-In Hooks](../advanced-topics/hooks/built-in-hooks) for all available hooks (S3, rclone, Steam). ## 🔗 Reference diff --git a/docs/03-github-orchestrator/04-api-reference.mdx b/docs/03-github-orchestrator/04-api-reference.mdx index 3e72974a..38824bc0 100644 --- a/docs/03-github-orchestrator/04-api-reference.mdx +++ b/docs/03-github-orchestrator/04-api-reference.mdx @@ -61,7 +61,7 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. | `preBuildSteps` | — | Pre-build job (after repo setup, before build) in YAML format. | | `postBuildContainerHooks` | — | Container hook files to run after the build step. | | `preBuildContainerHooks` | — | Container hook files to run before the build step. | -| `customJob` | — | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/hooks/custom-job). | +| `customJob` | — | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/custom-job). | ### Pull Secrets diff --git a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx index 6faa0023..f4076e34 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx @@ -19,15 +19,15 @@ provider details. ``` maxRetainedWorkspaces: 3 - Workspace 1 Workspace 2 Workspace 3 - ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ - │ 🔒 Build A │ │ 🔒 Build B │ │ (idle) │ - │ Full project │ │ Full project │ │ Full project │ - │ copy │ │ copy │ │ copy │ - └──────────────┘ └──────────────┘ └──────────────┘ - - Build C arrives → claims Workspace 3 - Build D arrives → all locked → falls back to standard caching + Workspace 1 Workspace 2 Workspace 3 + ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ + │ [locked] │ │ [locked] │ │ (idle) │ + │ Build A │ │ Build B │ │ │ + │ Full project │ │ Full project │ │ Full project │ + └───────────────┘ └───────────────┘ └───────────────┘ + + Build C arrives --> claims Workspace 3 + Build D arrives --> all locked --> falls back to standard caching ``` ## Example diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/01-custom-job.mdx b/docs/03-github-orchestrator/07-advanced-topics/03-custom-job.mdx similarity index 97% rename from docs/03-github-orchestrator/07-advanced-topics/04-hooks/01-custom-job.mdx rename to docs/03-github-orchestrator/07-advanced-topics/03-custom-job.mdx index 22d35a90..4bcaddc8 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/01-custom-job.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/03-custom-job.mdx @@ -1,4 +1,4 @@ -# Custom Jobs +# Custom Job Override the default build workflow entirely by specifying the `customJob` parameter with a YAML job definition. diff --git a/docs/03-github-orchestrator/07-advanced-topics/03-garbage-collection.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx similarity index 100% rename from docs/03-github-orchestrator/07-advanced-topics/03-garbage-collection.mdx rename to docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/03-command-hooks.mdx similarity index 91% rename from docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx rename to docs/03-github-orchestrator/07-advanced-topics/05-hooks/03-command-hooks.mdx index 14c58490..5e0a71cc 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/03-command-hooks.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/03-command-hooks.mdx @@ -37,4 +37,4 @@ directory via `customHookFiles`. Place hook files at `.game-ci/hooks/my-hook.yaml` in your repository. For running Docker containers as build steps, see [Container Hooks](container-hooks). For -ready-to-use hooks (S3, rclone, Steam), see [Built-In Hooks](premade-container-jobs). +ready-to-use hooks (S3, rclone, Steam), see [Built-In Hooks](built-in-hooks). diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx similarity index 95% rename from docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx rename to docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx index 9bc19015..70a710e5 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/04-container-hooks.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx @@ -39,7 +39,7 @@ files from `.game-ci/container-hooks/` via `containerHookFiles`. gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -## Pre-built Hooks +## Built-In Hooks Orchestrator ships with ready-to-use hooks for S3, rclone, and Steam. See -[Built-In Hooks](premade-container-jobs) for the full list. +[Built-In Hooks](built-in-hooks) for the full list. diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/05-premade-container-jobs.mdx b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/05-built-in-hooks.mdx similarity index 100% rename from docs/03-github-orchestrator/07-advanced-topics/04-hooks/05-premade-container-jobs.mdx rename to docs/03-github-orchestrator/07-advanced-topics/05-hooks/05-built-in-hooks.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-hooks/_category_.yaml b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/_category_.yaml similarity index 100% rename from docs/03-github-orchestrator/07-advanced-topics/04-hooks/_category_.yaml rename to docs/03-github-orchestrator/07-advanced-topics/05-hooks/_category_.yaml From b70b662abe5a9a91bec8f7be61decf227f6732a6 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:35:58 +0000 Subject: [PATCH 15/60] Fix alignment of all ASCII diagrams across orchestrator docs Remove emoji characters from diagrams (variable width across platforms makes alignment impossible). Fix box wall alignment, arrow connections, and consistent spacing in all 11 diagrams: - Introduction (architecture overview) - Caching (standard vs retained) - Providers overview (4-across comparison) - Container hooks (build pipeline) - GitHub integration (async mode lifecycle) - AWS (CloudFormation resource stack) - Secrets (pull flow) - Logging (log pipeline) - Garbage collection (resource lifecycle) - Custom providers (plugin loading) - Retained workspaces (already fixed) Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 28 ++++++++--------- .../03-examples/02-github-actions.mdx | 4 +-- .../04-api-reference.mdx | 20 ++++++------- .../05-providers/01-overview.mdx | 2 +- .../05-providers/02-aws.mdx | 30 +++++++++---------- .../05-providers/06-custom-providers.mdx | 20 ++++++------- .../05-providers/08-github-integration.mdx | 18 +++++------ docs/03-github-orchestrator/06-secrets.mdx | 14 ++++----- .../07-advanced-topics/01-caching.mdx | 18 +++++------ .../04-garbage-collection.mdx | 30 ++++++++++--------- .../05-hooks/04-container-hooks.mdx | 14 ++++----- .../07-advanced-topics/06-logging.mdx | 10 +++---- 12 files changed, 105 insertions(+), 103 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index ff5aea21..1060b6b3 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -7,20 +7,20 @@ command line, or any CI system. Orchestrator provisions a cloud environment, sen be built, and streams results back. ``` - Your Machine / CI Cloud Provider - ┌──────────────┐ git push ┌──────────────────┐ - │ │ ──────────────────► │ ☁️ AWS Fargate │ - │ GitHub │ │ ☁️ Kubernetes │ - │ Actions │ ◄──────────────── │ 🐳 Local Docker │ - │ │ build artifacts │ │ - └──────────────┘ └──────────────────┘ - │ │ - │ Orchestrator handles: │ - │ • Provisioning │ - │ • Git sync + LFS │ - │ • Caching (S3 / rclone) │ - │ • Automatic cleanup │ - └─────────────────────────────────────┘ + Your Machine / CI Cloud Provider + ┌──────────────┐ git push ┌─────────────────┐ + │ │ ─────────────────►│ AWS Fargate │ + │ GitHub │ │ Kubernetes │ + │ Actions │ ◄─────────────────│ Local Docker │ + │ │ build artifacts │ │ + └──────────────┘ └─────────────────┘ + │ │ + │ Orchestrator handles: │ + │ * Provisioning │ + │ * Git sync + LFS │ + │ * Caching (S3 / rclone) │ + │ * Automatic cleanup │ + └───────────────────────────────────┘ ``` Orchestrator supports large projects with first-class Unity support and native cloud services like diff --git a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx index 34e1d7dd..e069d311 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx +++ b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx @@ -326,8 +326,8 @@ Chain multiple container hooks to export builds to S3 and deploy to Steam in a s STEAM_APPID: ${{ secrets.STEAM_APPID }} ``` -See [Built-In Hooks](../advanced-topics/hooks/built-in-hooks) for all available hooks (S3, -rclone, Steam). +See [Built-In Hooks](../advanced-topics/hooks/built-in-hooks) for all available hooks (S3, rclone, +Steam). ## 🔗 Reference diff --git a/docs/03-github-orchestrator/04-api-reference.mdx b/docs/03-github-orchestrator/04-api-reference.mdx index 38824bc0..4048dd84 100644 --- a/docs/03-github-orchestrator/04-api-reference.mdx +++ b/docs/03-github-orchestrator/04-api-reference.mdx @@ -52,16 +52,16 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. ### Custom Hooks -| Parameter | Default | Description | -| ------------------------- | ------- | ----------------------------------------------------------------------------------------------------------- | -| `containerHookFiles` | — | Names of [container hook](advanced-topics/hooks/container-hooks) files from `.game-ci/container-hooks/`. | -| `customHookFiles` | — | Names of custom hook files from `.game-ci/hooks/`. | -| `customCommandHooks` | — | Inline [command hooks](advanced-topics/hooks/command-hooks) as YAML. | -| `postBuildSteps` | — | Post-build job in YAML format with keys: `image`, `secrets`, `command`. | -| `preBuildSteps` | — | Pre-build job (after repo setup, before build) in YAML format. | -| `postBuildContainerHooks` | — | Container hook files to run after the build step. | -| `preBuildContainerHooks` | — | Container hook files to run before the build step. | -| `customJob` | — | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/custom-job). | +| Parameter | Default | Description | +| ------------------------- | ------- | -------------------------------------------------------------------------------------------------------- | +| `containerHookFiles` | — | Names of [container hook](advanced-topics/hooks/container-hooks) files from `.game-ci/container-hooks/`. | +| `customHookFiles` | — | Names of custom hook files from `.game-ci/hooks/`. | +| `customCommandHooks` | — | Inline [command hooks](advanced-topics/hooks/command-hooks) as YAML. | +| `postBuildSteps` | — | Post-build job in YAML format with keys: `image`, `secrets`, `command`. | +| `preBuildSteps` | — | Pre-build job (after repo setup, before build) in YAML format. | +| `postBuildContainerHooks` | — | Container hook files to run after the build step. | +| `preBuildContainerHooks` | — | Container hook files to run before the build step. | +| `customJob` | — | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/custom-job). | ### Pull Secrets diff --git a/docs/03-github-orchestrator/05-providers/01-overview.mdx b/docs/03-github-orchestrator/05-providers/01-overview.mdx index ff91331c..be952d2d 100644 --- a/docs/03-github-orchestrator/05-providers/01-overview.mdx +++ b/docs/03-github-orchestrator/05-providers/01-overview.mdx @@ -7,7 +7,7 @@ setting the `providerStrategy` parameter. ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ aws │ │ k8s │ │ local-docker │ │ local │ │ │ │ │ │ │ │ │ - │ ☁️ Fargate │ │ ☸️ Cluster │ │ 🐳 Container │ │ 🖥️ Direct │ + │ Fargate │ │ Cluster │ │ Container │ │ Direct │ │ Fully │ │ Bring your │ │ No cloud │ │ No container │ │ managed │ │ own cluster │ │ needed │ │ needed │ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ diff --git a/docs/03-github-orchestrator/05-providers/02-aws.mdx b/docs/03-github-orchestrator/05-providers/02-aws.mdx index 38a30c6c..3beabbe1 100644 --- a/docs/03-github-orchestrator/05-providers/02-aws.mdx +++ b/docs/03-github-orchestrator/05-providers/02-aws.mdx @@ -6,21 +6,21 @@ Orchestrator creates and manages these AWS resources automatically: ``` CloudFormation (base stack) - ┌─────────────────────────────────────────────────┐ - │ │ - │ ┌────────────┐ ┌────────────┐ │ - │ │ ECS │ │ S3 │ │ - │ │ Fargate │ │ Bucket │ │ - │ │ (build │ │ (cache + │ │ - │ │ tasks) │ │ artifacts)│ │ - │ └────────────┘ └────────────┘ │ - │ │ - │ ┌────────────┐ ┌────────────┐ │ - │ │ CloudWatch │───►│ Kinesis │──► Log stream │ - │ │ Logs │ │ Stream │ to CI │ - │ └────────────┘ └────────────┘ │ - │ │ - └─────────────────────────────────────────────────┘ + ┌──────────────────────────────────────────────────┐ + │ │ + │ ┌────────────┐ ┌─────────────┐ │ + │ │ ECS │ │ S3 │ │ + │ │ Fargate │ │ Bucket │ │ + │ │ (build │ │ (cache + │ │ + │ │ tasks) │ │ artifacts) │ │ + │ └────────────┘ └─────────────┘ │ + │ │ + │ ┌────────────┐ ┌─────────────┐ │ + │ │ CloudWatch │───►│ Kinesis │──► Log stream │ + │ │ Logs │ │ Stream │ to CI │ + │ └────────────┘ └─────────────┘ │ + │ │ + └──────────────────────────────────────────────────┘ ``` ## Requirements diff --git a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx index dcb82cba..93688b1b 100644 --- a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx +++ b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx @@ -8,16 +8,16 @@ With custom providers, you can point `providerStrategy` at a GitHub repository, local path and Orchestrator will dynamically load it at runtime. ``` - providerStrategy Build - ┌─────────────────┐ fetch ┌───────────────┐ ┌──────────────┐ - │ "user/repo" │────────────►│ Clone repo / │ │ │ - │ "npm-package" │ │ Install pkg / │───►│ Provider │ - │ "./local/path" │ │ Resolve path │ │ Interface │ - └─────────────────┘ └───────────────┘ │ │ - cached in │ setupWorkflow│ - .provider-cache/ │ runTask │ - │ cleanup │ - └──────────────┘ + providerStrategy Build + ┌─────────────────┐ fetch ┌────────────────┐ ┌──────────────┐ + │ "user/repo" │──────────►│ Clone repo / │ │ │ + │ "npm-package" │ │ Install pkg / │──►│ Provider │ + │ "./local/path" │ │ Resolve path │ │ Interface │ + └─────────────────┘ └────────────────┘ │ │ + cached in │ setupWorkflow│ + .provider-cache/ │ runTask │ + │ cleanup │ + └──────────────┘ ``` ## Using a Custom Provider diff --git a/docs/03-github-orchestrator/05-providers/08-github-integration.mdx b/docs/03-github-orchestrator/05-providers/08-github-integration.mdx index b9886599..9225960f 100644 --- a/docs/03-github-orchestrator/05-providers/08-github-integration.mdx +++ b/docs/03-github-orchestrator/05-providers/08-github-integration.mdx @@ -29,15 +29,15 @@ waiting for it to complete. The GitHub Action will return immediately and you ca GitHub Checks or by running the [`watch` mode](../api-reference#modes). ``` - GitHub Action Cloud GitHub PR - ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ - │ 1. Dispatch │───────────►│ 2. Building │ │ │ - │ 3. Return ✓ │ │ ... │─────────►│ 4. Check │ - │ (done) │ │ ... │ update │ updated │ - └──────────────┘ │ 5. Complete │─────────►│ 6. Check ✓ │ - Action finishes └──────────────┘ └──────────────┘ - in seconds Build runs for Monitor from - minutes/hours the PR page + GitHub Action Cloud GitHub PR + ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ + │ 1. Dispatch │──────────►│ 2. Building │ │ │ + │ 3. Return │ │ ... │────────►│ 4. Check │ + │ (done) │ │ ... │ update │ updated │ + └──────────────┘ │ 5. Complete │────────►│ 6. Check │ + Action finishes └──────────────┘ └──────────────┘ + in seconds Build runs for Monitor from + minutes/hours the PR page ``` ```yaml diff --git a/docs/03-github-orchestrator/06-secrets.mdx b/docs/03-github-orchestrator/06-secrets.mdx index d79182cb..9354f08d 100644 --- a/docs/03-github-orchestrator/06-secrets.mdx +++ b/docs/03-github-orchestrator/06-secrets.mdx @@ -19,13 +19,13 @@ You can pull parameter values from external secret managers or files at runtime hardcoding credentials. This keeps CLI commands short and secrets out of your repository. ``` - Orchestrator External Source - ┌──────────────┐ command ┌──────────────────┐ - │ Reads input │ ──────────────► │ Secret Manager │ - │ override │ │ (GCP, AWS, file) │ - │ list │ ◄────────────── │ │ - │ │ value │ │ - └──────────────┘ └──────────────────┘ + Orchestrator External Source + ┌──────────────┐ command ┌──────────────────┐ + │ Reads input │ ────────────────►│ Secret Manager │ + │ override │ │ (GCP, AWS, file) │ + │ list │ ◄────────────────│ │ + │ │ value │ │ + └──────────────┘ └──────────────────┘ ``` ### Parameters diff --git a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx index 40ee1ef6..be546e84 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx @@ -5,15 +5,15 @@ Orchestrator supports two caching strategies. You can mix both by setting fall back to standard caching. ``` - Standard Caching Retained Workspace - ┌─────────────────┐ ┌─────────────────┐ - │ 📁 LFS files │ │ 📁 Entire │ - │ 📁 Library/ │ │ project │ - │ │ │ folder │ - │ Smaller storage │ │ Faster builds │ - │ Good for small │ │ Good for large │ - │ projects │ │ projects │ - └─────────────────┘ └─────────────────┘ + Standard Caching Retained Workspace + ┌─────────────────┐ ┌─────────────────┐ + │ LFS files │ │ Entire project │ + │ Library/ │ │ folder │ + │ │ │ │ + │ Smaller storage │ │ Faster builds │ + │ Good for small │ │ Good for large │ + │ projects │ │ projects │ + └─────────────────┘ └─────────────────┘ ``` ## Standard Caching diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx index 38bf1cc8..30830fba 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx @@ -4,20 +4,22 @@ Orchestrator creates cloud resources (containers, stacks, volumes) for each buil automatically. If a build fails or is interrupted, resources may be left behind. ``` - Normal Build Failed / Interrupted Build - - ┌──────────┐ ┌──────────┐ ┌─────┐ ┌──────────┐ ┌──────────┐ - │ Create │─►│ Build │─►│ ✓ │ │ Create │─►│ Build │──► ✗ crash - │ resources│ │ │ │Clean│ │ resources│ │ │ - └──────────┘ └──────────┘ └─────┘ └──────────┘ └──────────┘ - auto ▼ - cleanup Resources left behind - ▼ - ┌─────────────────┐ - │ garbage-collect │ - │ removes after │ - │ garbageMaxAge │ - └─────────────────┘ + Normal Build Failed / Interrupted Build + + ┌──────────┐ ┌──────────┐ Auto ┌──────────┐ ┌──────────┐ + │ Create │─►│ Build │─►Clean │ Create │─►│ Build │──► crash + │ resources│ │ │ up │ resources│ │ │ + └──────────┘ └──────────┘ └──────────┘ └──────────┘ + | + v + Resources left behind + | + v + ┌─────────────────┐ + │ garbage-collect │ + │ removes after │ + │ garbageMaxAge │ + └─────────────────┘ ``` Use garbage collection to clean up stale resources. See the diff --git a/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx index 70a710e5..f88a41ae 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx @@ -7,13 +7,13 @@ deploying builds, or running additional tools. For inline shell commands instead ``` Build Pipeline - preBuildContainerHooks Unity Build postBuildContainerHooks - ┌─────────────────────┐ ┌──────────────┐ ┌──────────────────────┐ - │ 🐳 Pull cache │ │ │ │ 🐳 Upload build │ - │ 🐳 Setup deps │───►│ 🔨 Build │───►│ 🐳 Deploy to Steam │ - │ 🐳 ... │ │ │ │ 🐳 ... │ - └─────────────────────┘ └──────────────┘ └──────────────────────┘ - Runs before build Core build step Runs after build + preBuildContainerHooks Unity Build postBuildContainerHooks + ┌──────────────────────┐ ┌──────────────┐ ┌──────────────────────┐ + │ Pull cache │ │ │ │ Upload build │ + │ Setup deps │──►│ Build │──►│ Deploy to Steam │ + │ ... │ │ │ │ ... │ + └──────────────────────┘ └──────────────┘ └──────────────────────┘ + Runs before build Core build step Runs after build ``` ## Format diff --git a/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx b/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx index 8794ea02..e7c8c9af 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx @@ -3,11 +3,11 @@ Orchestrator streams logs from the remote build back to your CI runner in real time. ``` - Cloud Container Orchestrator Your CI - ┌───────────────┐ ┌──────────┐ ┌──────────────┐ - │ Build output │ ─────► │ Log │ ─────► │ Console │ - │ │ │ stream │ │ output │ - └───────────────┘ └──────────┘ └──────────────┘ + Cloud Container Orchestrator Your CI + ┌───────────────┐ ┌──────────────┐ ┌──────────────┐ + │ Build output │──────►│ Log stream │─────►│ Console │ + │ │ │ │ │ output │ + └───────────────┘ └──────────────┘ └──────────────┘ ``` ## Provider-Specific Log Transport From c7ac032886df512c75da403a314bf419c6c017bd Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:47:22 +0000 Subject: [PATCH 16/60] Add Load Balancing documentation page Documents how to route builds across multiple providers using GitHub Actions scripting: platform-based routing, branch-based routing, runner availability fallback, weighted distribution, and async mode integration. Co-Authored-By: Claude Opus 4.6 --- .../07-advanced-topics/07-load-balancing.mdx | 257 ++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx new file mode 100644 index 00000000..eb527e54 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx @@ -0,0 +1,257 @@ +# Load Balancing + +Orchestrator supports multiple providers, and you can use standard GitHub Actions scripting to route +builds across them. This lets you distribute builds based on platform, project size, runner +availability, or any custom logic. + +``` + ┌──────────────────────┐ + │ Incoming Build │ + │ Request │ + └──────────┬─────────────┘ + │ + ┌──────────▼─────────────┐ + │ Router Logic │ + │ (GitHub Actions / │ + │ script / matrix) │ + └──┬───────┬──────────┬───┘ + │ │ │ + ┌──────────────▼┐ ┌───▼────────┐ ┌▼──────────────┐ + │ aws │ │ k8s │ │ local-docker │ + │ │ │ │ │ │ + │ Fargate │ │ Cluster │ │ Self-hosted │ + │ (scalable) │ │ (flexible) │ │ (no cost) │ + └───────────────┘ └────────────┘ └───────────────┘ +``` + +## Why Load Balance? + +- **Cost control** — Route small or test builds to free self-hosted runners and reserve cloud + providers for production builds. +- **Availability** — Fall back to a cloud provider when your self-hosted runner is busy or offline. +- **Platform routing** — Send Linux builds to AWS and Windows builds to a local runner. +- **Parallel scaling** — Split a multi-platform matrix across providers to finish faster. + +## Basic Provider Routing + +Use a GitHub Actions matrix or conditional logic to route builds to different providers. + +### Route by Platform + +```yaml +name: Platform-Based Routing + +on: + push: + branches: [main] + +jobs: + build: + name: Build ${{ matrix.targetPlatform }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + # Linux builds go to AWS (fast, scalable) + - targetPlatform: StandaloneLinux64 + provider: aws + # Windows builds go to self-hosted runner + - targetPlatform: StandaloneWindows64 + provider: local-docker + # WebGL builds go to Kubernetes + - targetPlatform: WebGL + provider: k8s + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: ${{ matrix.provider }} + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +### Route by Branch + +Send production builds to a high-resource cloud provider and development builds to a cheaper option. + +```yaml +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - name: Select provider + id: provider + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + echo "strategy=aws" >> "$GITHUB_OUTPUT" + echo "cpu=4096" >> "$GITHUB_OUTPUT" + echo "memory=16384" >> "$GITHUB_OUTPUT" + else + echo "strategy=local-docker" >> "$GITHUB_OUTPUT" + echo "cpu=1024" >> "$GITHUB_OUTPUT" + echo "memory=3072" >> "$GITHUB_OUTPUT" + fi + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: ${{ steps.provider.outputs.strategy }} + targetPlatform: StandaloneLinux64 + containerCpu: ${{ steps.provider.outputs.cpu }} + containerMemory: ${{ steps.provider.outputs.memory }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +## Fallback on Runner Availability + +If your self-hosted runner is offline or busy, fall back to a cloud provider. Use a short initial +job to check runner health, then pick the provider accordingly. + +```yaml +name: Fallback Routing + +on: + push: + branches: [main] + +jobs: + check-runner: + name: Check self-hosted availability + runs-on: ubuntu-latest + outputs: + provider: ${{ steps.pick.outputs.provider }} + steps: + - name: Check if self-hosted runner is available + id: pick + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Query runner status via the GitHub API + RUNNERS=$(gh api repos/${{ github.repository }}/actions/runners --jq '[.runners[] | select(.status == "online")] | length') + if [[ "$RUNNERS" -gt 0 ]]; then + echo "provider=local-docker" >> "$GITHUB_OUTPUT" + echo "Self-hosted runner available — using local-docker" + else + echo "provider=aws" >> "$GITHUB_OUTPUT" + echo "No runners online — falling back to AWS" + fi + + build: + name: Build + needs: check-runner + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: ${{ needs.check-runner.outputs.provider }} + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +## Async Mode for Load Balancing + +The [`asyncOrchestrator`](../api-reference#github-integration) parameter works well with load +balancing. When enabled, the GitHub Action dispatches the build and returns immediately without +waiting for it to finish. This means your routing job completes in seconds regardless of which +provider handles the actual build. + +``` + Router Job (seconds) Provider A Provider B + ┌───────────────────┐ ┌──────────────┐ ┌──────────────┐ + │ 1. Check runners │ │ │ │ │ + │ 2. Pick provider │ │ │ │ │ + │ 3. Dispatch build ├──────►│ 3a. Building │ OR ─►│ 3b. Building │ + │ 4. Return (done) │ │ ... │ │ ... │ + └───────────────────┘ │ ... │ │ ... │ + Completes instantly │ 5. Complete │ │ 5. Complete │ + └──────┬───────┘ └──────┬───────┘ + │ │ + ┌──────▼───────────────────────▼──────┐ + │ GitHub Check updated │ + │ (monitor from PR page) │ + └─────────────────────────────────────┘ +``` + +Benefits of combining async mode with load balancing: + +- **No wasted runner minutes** — The router job finishes in seconds. You don't pay for a + GitHub-hosted runner to sit idle while the build runs in the cloud. +- **Parallel dispatch** — Launch multiple builds to different providers simultaneously. Each + dispatches and returns immediately. +- **Monitor everything from one place** — Enable `githubCheck: true` and all builds report status + back to the pull request Checks tab, regardless of which provider ran them. + +```yaml +jobs: + build: + name: Build ${{ matrix.targetPlatform }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - targetPlatform: StandaloneLinux64 + provider: aws + - targetPlatform: StandaloneWindows64 + provider: k8s + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: ${{ matrix.provider }} + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + asyncOrchestrator: true + githubCheck: true +``` + +Each matrix job dispatches its build and exits immediately. The builds continue running on their +respective providers and report progress via GitHub Checks. + +## Weighted Distribution + +For teams with both cloud and self-hosted capacity, distribute builds based on a ratio. This example +sends 70% of builds to AWS and 30% to a local runner using a simple hash. + +```yaml +- name: Weighted provider selection + id: provider + run: | + # Hash the run ID to get a stable pseudo-random number + HASH=$(echo "${{ github.run_id }}" | md5sum | cut -c1-8) + DECIMAL=$((16#$HASH % 100)) + if [[ $DECIMAL -lt 70 ]]; then + echo "strategy=aws" >> "$GITHUB_OUTPUT" + else + echo "strategy=local-docker" >> "$GITHUB_OUTPUT" + fi +``` + +## Tips + +- **Start simple** — A platform-based matrix with different providers per entry is the easiest + starting point. Add dynamic routing only when you need it. +- **Use async for long builds** — Combining `asyncOrchestrator: true` with `githubCheck: true` keeps + your routing job fast and gives you build status on the PR page. +- **Cache keys are provider-independent** — The [`cacheKey`](../api-reference#caching) parameter + works the same across all providers, so builds routed to different providers can still share + caches if they use the same storage backend. +- **Test fallback logic** — Temporarily disable your self-hosted runner to verify that your fallback + routing works before you need it in production. +- **Custom providers** — The same routing patterns work with + [custom providers](../providers/custom-providers). Set `providerStrategy` to a GitHub repo or NPM + package and Orchestrator loads it dynamically. From cf9039be18f8fd699634b826b061b5a94e5ed398 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 06:54:45 +0000 Subject: [PATCH 17/60] Add Storage, Architecture pages and Build Caching section - Storage page: documents project files, build output, caches, S3 and rclone backends, LZ4 compression, workspace locking, large packages, and container file system layout - Architecture page: describes build lifecycle, core components, provider system, workflow composition, hook system, configuration resolution, remote client, CLI modes, and source code map - Caching page: add Build Caching section explaining automatic build output caching based on cache key Co-Authored-By: Claude Opus 4.6 --- .../07-advanced-topics/01-caching.mdx | 22 ++ .../07-advanced-topics/08-storage.mdx | 215 ++++++++++++ .../07-advanced-topics/09-architecture.mdx | 308 ++++++++++++++++++ 3 files changed, 545 insertions(+) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx create mode 100644 docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx index be546e84..cc458ebb 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx @@ -25,6 +25,28 @@ requires re-importing unchanged assets. - ✅ Best for smaller projects - ⚠️ Slower rebuilds for large asset libraries +## Build Caching + +Orchestrator automatically caches build output alongside the Library cache. After each build, the +compiled output folder is archived and stored using the same cache key (branch name by default). On +the next build with the same cache key, the previous build output is available at +`/data/cache/{cacheKey}/build/`. + +This happens automatically — no configuration required. The cache key controls which builds share +output: + +```yaml +# Builds on the same branch share cached output (default behavior) +cacheKey: ${{ github.ref_name }} + +# Or share across branches by using a fixed key +cacheKey: shared-cache +``` + +Build caching uses the same compression and storage provider as Library caching. Archives are stored +as `build-{buildGuid}.tar.lz4` (or `.tar` if compression is disabled). See [Storage](storage) for +details on compression and storage backends. + ## Retained Workspace Caches the **entire project folder** between builds. Provides the fastest rebuilds but consumes more diff --git a/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx b/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx new file mode 100644 index 00000000..900caa39 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx @@ -0,0 +1,215 @@ +# Storage + +Orchestrator manages three categories of files during a build: **project files** (your Unity project +and Git LFS assets), **build output** (the compiled game), and **caches** (Unity Library folder and +LFS files). This page explains how each category flows through the system and how to configure the +storage backend. + +``` + CI / Local Machine Build Container + ┌──────────────────┐ ┌──────────────────────────────────┐ + │ Git repository │──── clone ────►│ /data/{buildGuid}/repo/ │ + │ + LFS assets │ │ ├── Assets/ │ + │ │ │ ├── Library/ (cached) │ + └──────────────────┘ │ └── .git/lfs/ (cached) │ + │ │ + │ /data/cache/{cacheKey}/ │ + │ ├── Library/ (tar.lz4) │ + │ └── build/ (tar.lz4) │ + └────────────┬─────────────────────┘ + │ + ┌────────────▼─────────────────────┐ + │ Cloud Storage (S3 / rclone) │ + │ ├── Library cache archives │ + │ ├── Build artifacts │ + │ └── Workspace locks │ + └──────────────────────────────────┘ +``` + +## File Categories + +### Project Files + +Your Unity project is cloned into the build container at `/data/{buildGuid}/repo/`. Orchestrator +handles Git and LFS automatically: + +1. **Shallow clone** — The repository is cloned with `--depth` controlled by the + [`cloneDepth`](../api-reference#git-synchronization) parameter (default: 50). +2. **LFS pull** — Git LFS is installed and configured inside the container. LFS files are pulled + after the clone completes. +3. **LFS hashing** — Orchestrator generates `.lfs-assets-guid` and `.lfs-assets-guid-sum` files to + track LFS content for cache invalidation. + +For retained workspaces, the project folder persists between builds at +`/data/{lockedWorkspace}/repo/` instead of being cloned fresh each time. See +[Retained Workspaces](retained-workspace) for details. + +### Build Output + +After Unity finishes building, the compiled output lives at `/data/{buildGuid}/repo/{buildPath}/`. +Orchestrator archives this folder as `build-{buildGuid}.tar` (or `.tar.lz4` with compression +enabled). + +To export build artifacts out of the container, use [container hooks](hooks/container-hooks). The +most common approach is the built-in S3 or rclone upload hooks: + +```yaml +# Upload build artifacts to S3 +containerHookFiles: aws-s3-upload-build + +# Or upload via rclone to any backend +containerHookFiles: rclone-upload-build +``` + +See [Built-In Hooks](hooks/built-in-hooks) for all available hooks. + +### Caches + +Orchestrator caches two things between builds to speed up subsequent runs: + +| Cache | Contents | Path in container | +| ------------- | ------------------------------------------- | --------------------------------- | +| Library cache | Unity's `Library/` folder (imported assets) | `/data/cache/{cacheKey}/Library/` | +| Build cache | Previous build output | `/data/cache/{cacheKey}/build/` | + +Caches are scoped by the [`cacheKey`](../api-reference#caching) parameter, which defaults to the +branch name. Builds on the same branch share a cache. + +After a build completes, Orchestrator runs `remote-cli-post-build` which: + +1. Archives the Library folder as `lib-{buildGuid}.tar` (or `.tar.lz4`). +2. Archives the build output as `build-{buildGuid}.tar` (or `.tar.lz4`). +3. Pushes both archives to cloud storage via the configured storage provider. + +Before the next build, `remote-cli-pre-build` pulls these archives and extracts them, so Unity can +skip re-importing unchanged assets. + +## Storage Providers + +Orchestrator supports two storage backends for caches, artifacts, and workspace locks. + +``` + storageProvider: "s3" storageProvider: "rclone" + ┌────────────────────┐ ┌────────────────────┐ + │ AWS S3 │ │ Rclone │ + │ │ │ │ + │ - Default backend │ │ - 70+ backends │ + │ - Works with │ │ - Google Cloud │ + │ LocalStack │ │ - Azure Blob │ + │ - Built-in lock │ │ - Backblaze B2 │ + │ support │ │ - SFTP, FTP │ + │ │ │ - Any rclone │ + │ │ │ remote │ + └────────────────────┘ └────────────────────┘ +``` + +### S3 (Default) + +S3 is the default storage backend. It works with AWS S3 and LocalStack (for local testing). + +No extra configuration is needed when using the `aws` provider — the S3 bucket is created +automatically as part of the CloudFormation base stack. For other providers, ensure AWS credentials +and region are set in the environment. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + # storageProvider defaults to "s3" + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +### Rclone + +[Rclone](https://rclone.org) is a command-line tool that supports 70+ cloud storage backends. Use it +when you want to store caches and artifacts somewhere other than S3. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: k8s + storageProvider: rclone + rcloneRemote: 'myremote:bucket/path' + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +Rclone hooks run in the `rclone/rclone` Docker image. Configure your rclone remote beforehand (see +[rclone docs](https://rclone.org/docs/)). + +**Supported backends include:** Google Cloud Storage, Azure Blob, Backblaze B2, DigitalOcean Spaces, +Wasabi, MinIO, SFTP, FTP, and [many more](https://rclone.org/overview/). + +## Compression + +Orchestrator uses **LZ4 compression** by default for all cache and build archives. LZ4 is optimized +for speed over compression ratio, which is ideal for large Unity Library folders where fast +decompression matters more than file size. + +| `useCompressionStrategy` | Archive format | Description | +| ------------------------ | -------------- | ------------------------------------------------ | +| `true` (default) | `.tar.lz4` | LZ4 compressed. Faster extract, ~30-50% smaller. | +| `false` | `.tar` | Uncompressed. Slightly faster to create. | + +```yaml +# Disable compression (not recommended for most projects) +useCompressionStrategy: false +``` + +## Workspace Locking + +When using [retained workspaces](retained-workspace), Orchestrator uses distributed locking to +ensure only one build occupies a workspace at a time. Locks are stored in the configured storage +provider: + +- **S3**: Lock files at `s3://{awsStackName}/locks/{workspaceName}/{buildGuid}` +- **Rclone**: Lock files at `{rcloneRemote}/locks/{workspaceName}/{buildGuid}` + +Locking is fully automatic. When a build starts, it acquires a lock. When it finishes (or fails), +the lock is released. If all workspaces are locked, the build falls back to standard caching. + +## Large Packages + +The [`useLargePackages`](../api-reference#build-options) parameter optimizes storage for Unity +packages containing "LargePackage" in `manifest.json`. When enabled, these packages are redirected +to a shared folder so multiple builds with the same cache key share one copy instead of duplicating +data. + +```yaml +useLargePackages: true +``` + +## Container File System Layout + +Inside the build container, Orchestrator uses the `/data/` volume mount as the root for all project +and cache data. + +``` +/data/ +├── {buildGuid}/ # Unique job folder (or {lockedWorkspace}/) +│ ├── repo/ # Cloned repository +│ │ ├── Assets/ +│ │ ├── Library/ # Unity Library (restored from cache) +│ │ ├── .git/ +│ │ │ └── lfs/ # Git LFS objects +│ │ └── {buildPath}/ # Build output +│ └── builder/ # Cloned game-ci/unity-builder +│ └── dist/ +│ └── index.js +└── cache/ + └── {cacheKey}/ # Scoped by branch name + ├── Library/ + │ └── lib-{guid}.tar.lz4 # Library cache archive + └── build/ + └── build-{guid}.tar.lz4 # Build output archive +``` + +## Storage Parameters + +For the full list of storage-related parameters, see the API Reference: + +- [Storage](../api-reference#storage) — `storageProvider`, `rcloneRemote` +- [Caching](../api-reference#caching) — `cacheKey`, `maxRetainedWorkspaces` +- [Build Options](../api-reference#build-options) — `useCompressionStrategy`, `useLargePackages` +- [AWS](../api-reference#aws) — `awsStackName`, `awsS3Endpoint` diff --git a/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx b/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx new file mode 100644 index 00000000..fc838dc1 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx @@ -0,0 +1,308 @@ +# Architecture + +This page describes the internal architecture of Orchestrator — how the components fit together, how +a build flows through the system, and where to look in the source code. + +``` + ┌───────────────────────────┐ + │ Entry Point │ + │ GitHub Action / CLI │ + └─────────────┬─────────────┘ + │ + ┌─────────────▼─────────────┐ + │ Orchestrator │ + │ (orchestrator.ts) │ + │ │ + │ - setup() │ + │ - run() │ + │ - Provider selection │ + └──┬──────────┬──────────┬──┘ + │ │ │ + ┌──────────────────▼┐ ┌──────▼───────┐ ┌▼──────────────────┐ + │ Provider │ │ Workflow │ │ Services │ + │ (pluggable) │ │ Composition │ │ │ + │ │ │ Root │ │ - Logger │ + │ - aws │ │ │ │ - Hooks │ + │ - k8s │ │ - Standard │ │ - Caching │ + │ - local-docker │ │ - Async │ │ - Locking │ + │ - local │ │ - Custom Job │ │ - LFS │ + │ - custom plugin │ │ │ │ - GitHub Checks │ + └────────────────────┘ └──────────────┘ └────────────────────┘ +``` + +## Build Lifecycle + +A standard Orchestrator build follows these steps: + +``` + 1. Initialize 2. Setup Provider 3. Acquire Workspace + ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ + │ Parse inputs │ │ Create cloud │ │ Lock retained │ + │ Select provider │──►│ resources │──►│ workspace │ + │ Generate GUID │ │ (stacks, PVCs) │ │ (if enabled) │ + │ Create GH check │ │ │ │ │ + └──────────────────┘ └──────────────────┘ └──────────────────┘ + │ + 6. Cleanup 5. Post-Build 4. Build + ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ + │ Release workspace│ │ Push Library │ │ Clone repo + LFS │ + │ Delete cloud │◄──│ and build cache │◄──│ Restore cache │ + │ resources │ │ Run post hooks │ │ Run Unity build │ + │ Update GH check │ │ │ │ Run pre/post │ + └──────────────────┘ └──────────────────┘ │ container hooks │ + └──────────────────┘ +``` + +### Step-by-Step + +1. **Initialize** — `Orchestrator.setup()` parses inputs from GitHub Action `with`, CLI flags, or + environment variables. It selects a provider, generates a unique build GUID, and optionally + creates a GitHub Check. + +2. **Setup Provider** — `Provider.setupWorkflow()` provisions cloud resources. For AWS this means + creating a CloudFormation base stack (ECS cluster, S3 bucket, Kinesis stream). For Kubernetes it + creates a service account. Local providers skip this step. + +3. **Acquire Workspace** — If `maxRetainedWorkspaces` is set, `SharedWorkspaceLocking` acquires a + distributed lock on a workspace via S3 or rclone. If all workspaces are locked, the build falls + back to standard caching. + +4. **Build** — The workflow composition root selects a workflow (standard, async, or custom job). + The standard workflow clones your repo, restores caches, runs the Unity build, and executes + pre/post container hooks. + +5. **Post-Build** — `remote-cli-post-build` archives the Unity Library folder and build output, + pushes them to cloud storage, and runs any post-build hooks. + +6. **Cleanup** — The workspace lock is released, cloud resources are torn down + (`Provider.cleanupWorkflow()`), and the GitHub Check is updated with the final result. + +## Core Components + +### Orchestrator (`orchestrator.ts`) + +The static `Orchestrator` class is the central coordinator. It holds: + +- `Provider` — the selected provider implementation +- `buildParameters` — all resolved configuration +- `buildGuid` — unique identifier for this build +- `lockedWorkspace` — retained workspace name (if any) + +`Orchestrator.run()` is the main entry point that drives the full lifecycle. Provider selection +happens in `setupSelectedBuildPlatform()`, which handles LocalStack detection, `AWS_FORCE_PROVIDER` +overrides, and fallback to the plugin loader for custom providers. + +### Provider System + +Providers implement the `ProviderInterface`: + +```typescript +interface ProviderInterface { + setupWorkflow(buildGuid, buildParameters, branchName, secrets): Promise; + runTaskInWorkflow( + buildGuid, + image, + commands, + mountdir, + workingdir, + env, + secrets, + ): Promise; + cleanupWorkflow(buildParameters, branchName, secrets): Promise; + garbageCollect(filter, previewOnly, olderThan, fullCache, baseDependencies): Promise; + listResources(): Promise; + listWorkflow(): Promise; + watchWorkflow(): Promise; +} +``` + +Each provider handles `runTaskInWorkflow()` differently: + +| Provider | How it runs the build | +| -------------- | -------------------------------------------------------------- | +| `aws` | Creates a CloudFormation job stack, starts an ECS Fargate task | +| `k8s` | Creates a PVC, Kubernetes Secret, and Job; streams pod logs | +| `local-docker` | Runs a Docker container with volume mounts | +| `local` | Executes shell commands directly on the host | + +#### Custom Provider Loading + +When `providerStrategy` doesn't match a built-in name, the provider loader: + +1. Parses the source (GitHub URL, NPM package, or local path) via `ProviderUrlParser` +2. Clones or installs the module via `ProviderGitManager` +3. Validates that all 7 interface methods exist +4. Falls back to the local provider if loading fails + +See [Custom Providers](../providers/custom-providers) for the user-facing guide. + +### Workflow System + +The `WorkflowCompositionRoot` selects which workflow to run: + +``` + asyncOrchestrator: true? + │ + ┌────▼────┐ + │ Yes │──► AsyncWorkflow + └────┬────┘ Dispatches build to cloud container + │ and returns immediately + ┌────▼────┐ + │ No │ + └────┬────┘ + │ + customJob set? + │ + ┌────▼────┐ + │ Yes │──► CustomWorkflow + └────┬────┘ Parses YAML job definition + │ and runs container steps + ┌────▼────┐ + │ No │──► BuildAutomationWorkflow + └─────────┘ Standard build pipeline +``` + +**BuildAutomationWorkflow** generates a shell script that runs inside the container. The script: + +1. Installs toolchain (Node.js, npm, yarn, git-lfs) for remote providers +2. Clones game-ci/unity-builder into the container +3. Runs `remote-cli-pre-build` (restores caches, clones the target repo) +4. Executes the Unity build via the standard Game CI entrypoint +5. Runs `remote-cli-post-build` (pushes caches) +6. Writes log markers for collection + +**AsyncWorkflow** runs the entire build inside a cloud container. It installs the AWS CLI, clones +both the builder and target repos, and executes `index.js -m async-workflow`. The calling GitHub +Action returns immediately. Progress is reported via +[GitHub Checks](../providers/github-integration). + +### Hook System + +Orchestrator has two hook mechanisms: + +**Command Hooks** — Shell commands injected before or after the setup and build steps. Defined via +the `customCommandHooks` YAML parameter or as files in `.game-ci/command-hooks/`. + +**Container Hooks** — Separate Docker containers that run before or after the build. Defined via +`containerHookFiles` (built-in names like `aws-s3-upload-build`) or `preBuildSteps` / +`postBuildSteps` YAML. Each hook specifies an image, commands, and optional secrets. + +See [Hooks](hooks/container-hooks) for the full guide. + +### Configuration Resolution + +Orchestrator reads configuration from multiple sources with this priority: + +``` + Highest Priority + ┌──────────────────────┐ + │ GitHub Action inputs │ with: providerStrategy: aws + ├──────────────────────┤ + │ CLI flags │ --providerStrategy aws + ├──────────────────────┤ + │ Query overrides │ Pull Secrets from external sources + ├──────────────────────┤ + │ Environment variables │ PROVIDER_STRATEGY=aws + └──────────────────────┘ + Lowest Priority +``` + +The `OrchestratorOptions` class handles this resolution. Environment variables accept both +`camelCase` and `UPPER_SNAKE_CASE` formats. + +### Remote Client + +The remote client runs **inside** the build container (not on the CI runner). It provides two CLI +modes: + +- **`remote-cli-pre-build`** — Called before the Unity build. Handles git clone, LFS pull, cache + restoration, retained workspace setup, large package optimization, and custom hook execution. +- **`remote-cli-post-build`** — Called after the Unity build. Pushes the Library and build caches to + cloud storage. + +### GitHub Integration + +The `GitHub` class manages GitHub Checks and async workflow dispatch: + +- **`createGitHubCheck()`** — Creates a check run on the commit via the GitHub API. +- **`updateGitHubCheck()`** — Updates check status. In async environments, updates are routed + through the `Async Checks API` workflow (since containers can't call the Checks API directly). +- **`runUpdateAsyncChecksWorkflow()`** — Triggers a GitHub Actions workflow that updates the check + run on behalf of the container. + +### Caching and Storage + +Caching is split between the remote client (push/pull logic) and the storage provider (S3 or +rclone): + +- **Standard caching** — Archives the `Library/` folder and LFS files as `.tar.lz4` archives. +- **Retained workspaces** — Keeps the entire project folder. Uses distributed locking via S3 or + rclone to prevent concurrent access. + +See [Storage](storage) for the full breakdown of file categories, compression, and storage backends. + +## CLI Modes + +The CLI system uses a decorator-based registry (`@CliFunction`). Each mode maps to a static method: + +| Mode | Description | +| ----------------------- | ---------------------------------------------------- | +| `cli-build` | Full build workflow (default) | +| `async-workflow` | Async build execution (called from within container) | +| `remote-cli-pre-build` | Pre-build setup (runs inside container) | +| `remote-cli-post-build` | Post-build cache push (runs inside container) | +| `remote-cli-log-stream` | Pipe and capture build logs | +| `checks-update` | Update GitHub Checks from async container | +| `cache-push` | Push a directory to cache storage | +| `cache-pull` | Pull a directory from cache storage | +| `garbage-collect` | Clean up old cloud resources | +| `list-resources` | List active cloud resources | +| `list-workflow` | List running workflows | +| `watch` | Follow logs of a running workflow | +| `hash` | Hash folder contents recursively | +| `print-input` | Print all resolved parameters | + +## Source Code Map + +``` +src/model/orchestrator/ +├── orchestrator.ts # Main coordinator +├── options/ +│ ├── orchestrator-options.ts # Configuration resolution +│ └── orchestrator-folders.ts # Path management (/data/...) +├── workflows/ +│ ├── workflow-composition-root.ts # Workflow selection +│ ├── build-automation-workflow.ts # Standard build pipeline +│ ├── async-workflow.ts # Async dispatch +│ └── custom-workflow.ts # Custom job execution +├── providers/ +│ ├── provider-interface.ts # 7-method contract +│ ├── provider-loader.ts # Dynamic plugin loading +│ ├── provider-url-parser.ts # GitHub/NPM/local parsing +│ ├── provider-git-manager.ts # Clone and cache repos +│ ├── aws/ # AWS Fargate provider +│ ├── k8s/ # Kubernetes provider +│ ├── docker/ # Local Docker provider +│ └── local/ # Direct execution provider +├── services/ +│ ├── core/ +│ │ ├── orchestrator-logger.ts +│ │ ├── orchestrator-system.ts # Shell command execution +│ │ ├── shared-workspace-locking.ts +│ │ └── follow-log-stream-service.ts +│ ├── hooks/ +│ │ ├── command-hook-service.ts +│ │ └── container-hook-service.ts +│ └── cache/ +│ └── local-cache-service.ts +├── remote-client/ +│ ├── index.ts # Pre/post build logic +│ └── caching.ts # Cache push/pull with LZ4 +└── tests/ + +src/model/cli/ +├── cli.ts # CLI entry point +└── cli-functions-repository.ts # @CliFunction registry + +src/model/github.ts # GitHub Checks + async dispatch +``` From a99718604103b45865a550ea5fffc30abb3ec099 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 07:05:26 +0000 Subject: [PATCH 18/60] Fix introduction diagram to list all supported CI platforms The box previously said "GitHub Actions" which contradicted the "Your Machine / CI" header. Now lists GitHub Actions, GitLab CI, CLI, etc. to reflect that Orchestrator works from any entry point. Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/01-introduction.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 1060b6b3..0f222435 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -9,10 +9,10 @@ be built, and streams results back. ``` Your Machine / CI Cloud Provider ┌──────────────┐ git push ┌─────────────────┐ - │ │ ─────────────────►│ AWS Fargate │ - │ GitHub │ │ Kubernetes │ - │ Actions │ ◄─────────────────│ Local Docker │ - │ │ build artifacts │ │ + │ GitHub │ ─────────────────►│ AWS Fargate │ + │ Actions, │ │ Kubernetes │ + │ GitLab CI, │ ◄─────────────────│ Local Docker │ + │ CLI, etc. │ build artifacts │ │ └──────────────┘ └─────────────────┘ │ │ │ Orchestrator handles: │ From 7b370f197214e1825cb14c1ae99988017c6d3b56 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 07:20:40 +0000 Subject: [PATCH 19/60] Fix ASCII diagram alignment in load balancing page Co-Authored-By: Claude Opus 4.6 --- .../07-advanced-topics/07-load-balancing.mdx | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx index eb527e54..dcd45b12 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx @@ -5,23 +5,23 @@ builds across them. This lets you distribute builds based on platform, project s availability, or any custom logic. ``` - ┌──────────────────────┐ - │ Incoming Build │ - │ Request │ - └──────────┬─────────────┘ - │ - ┌──────────▼─────────────┐ - │ Router Logic │ - │ (GitHub Actions / │ - │ script / matrix) │ - └──┬───────┬──────────┬───┘ - │ │ │ - ┌──────────────▼┐ ┌───▼────────┐ ┌▼──────────────┐ - │ aws │ │ k8s │ │ local-docker │ - │ │ │ │ │ │ - │ Fargate │ │ Cluster │ │ Self-hosted │ - │ (scalable) │ │ (flexible) │ │ (no cost) │ - └───────────────┘ └────────────┘ └───────────────┘ + ┌─────────────────────┐ + │ Incoming Build │ + │ Request │ + └─────────┬───────────┘ + │ + ┌─────────▼───────────┐ + │ Router Logic │ + │ (GitHub Actions / │ + │ script / matrix) │ + └──┬──────┬────────┬──┘ + │ │ │ + ┌───────────▼──┐ ┌─▼──────────┐ ┌▼─────────────┐ + │ aws │ │ k8s │ │ local-docker │ + │ │ │ │ │ │ + │ Fargate │ │ Cluster │ │ Self-hosted │ + │ (scalable) │ │ (flexible) │ │ (no cost) │ + └──────────────┘ └────────────┘ └──────────────┘ ``` ## Why Load Balance? From 1bc57cbbb6bb4e07d19beff543091346dd6dce21 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 07:29:00 +0000 Subject: [PATCH 20/60] =?UTF-8?q?docs(orchestrator):=20build=20services=20?= =?UTF-8?q?=E2=80=94=20submodule=20profiles,=20caching,=20LFS,=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a new advanced topics page documenting orchestrator build services: - Submodule profiles (YAML, glob patterns, variant overlays) - Local build caching (Library + LFS filesystem cache) - Custom LFS transfer agents (elastic-git-storage, etc.) - Git hooks (lefthook/husky detection, skip lists) Related: game-ci/unity-builder#777 Co-Authored-By: Claude Opus 4.6 --- .../07-advanced-topics/10-build-services.mdx | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx new file mode 100644 index 00000000..bcbcc384 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx @@ -0,0 +1,197 @@ +# Build Services + +Build services run during the build lifecycle to handle submodule initialization, caching, LFS +configuration, and git hooks. They work with any provider — local, AWS, Kubernetes, GCP Cloud Run, +Azure ACI, or custom CLI providers. + +``` + Build lifecycle + ┌─────────────────────────────────────────────────────────┐ + │ 1. Submodule init (selective, from YAML profile) │ + │ 2. LFS agent config (custom transfer agent) │ + │ 3. Cache restore (Library + LFS from filesystem) │ + │ 4. Hook install (lefthook / husky) │ + │ 5. ──── BUILD ──── │ + │ 6. Cache save (Library + LFS to filesystem) │ + └─────────────────────────────────────────────────────────┘ +``` + +## Submodule Profiles + +Selectively initialize submodules from a YAML profile instead of cloning everything. Useful for +monorepos where builds only need a subset of submodules. + +### Profile Format + +```yaml +primary_submodule: MyGameFramework +submodules: + - name: CoreFramework + branch: main # initialize this submodule + - name: OptionalModule + branch: empty # skip this submodule (empty branch) + - name: Plugins* # glob pattern — matches PluginsCore, PluginsAudio, etc. + branch: main +``` + +- `branch: main` — initialize the submodule on its configured branch +- `branch: empty` — skip the submodule (checked out to an empty branch) +- Trailing `*` enables glob matching against submodule names + +### Variant Overlays + +A variant file merges on top of the base profile for build-type or platform-specific overrides: + +```yaml +# server-variant.yml +submodules: + - name: ClientOnlyAssets + branch: empty # skip client assets for server builds + - name: ServerTools + branch: main # add server-only tools +``` + +### Inputs + +| Input | Default | Description | +| ---------------------- | ------- | ------------------------------------------------ | +| `submoduleProfilePath` | — | Path to YAML submodule profile | +| `submoduleVariantPath` | — | Path to variant overlay (merged on top) | +| `submoduleToken` | — | Auth token for private submodule clones | + +### How It Works + +1. Parses the profile YAML and optional variant overlay +2. Reads `.gitmodules` to discover all submodules +3. Matches each submodule against profile entries (exact name or glob) +4. Initializes matched submodules; skips the rest +5. If `submoduleToken` is set, configures git URL rewriting for auth + +### Example + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: local + submoduleProfilePath: config/submodule-profiles/game/client/profile.yml + submoduleVariantPath: config/submodule-profiles/game/client/server.yml + submoduleToken: ${{ secrets.SUBMODULE_TOKEN }} + targetPlatform: StandaloneLinux64 +``` + +--- + +## Local Build Caching + +Cache the Unity Library folder and LFS objects between local builds without external cache actions. +Filesystem-based — works on self-hosted runners with persistent storage. + +### How It Works + +- **Cache key**: `{platform}-{version}-{branch}` (sanitized) +- **Cache root**: `localCacheRoot` > `$RUNNER_TEMP/game-ci-cache` > `.game-ci/cache` +- **Restore**: extracts `library-{key}.tar` / `lfs-{key}.tar` if they exist +- **Save**: creates tar archives of the Library and LFS folders after the build +- **Garbage collection**: removes cache entries that haven't been accessed recently + +### Inputs + +| Input | Default | Description | +| ------------------- | ------- | ------------------------------------- | +| `localCacheEnabled` | `false` | Enable filesystem caching | +| `localCacheRoot` | — | Cache directory override | +| `localCacheLibrary` | `true` | Cache Unity Library folder | +| `localCacheLfs` | `true` | Cache LFS objects | + +### Example + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: local + localCacheEnabled: true + localCacheRoot: /mnt/cache # persistent disk on self-hosted runner + targetPlatform: StandaloneLinux64 +``` + +--- + +## Custom LFS Transfer Agents + +Register external Git LFS transfer agents that handle LFS object storage via custom backends like +[elastic-git-storage](https://github.com/frostebite/elastic-git-storage), S3-backed agents, or +any custom transfer protocol. + +### How It Works + +Configures git to use a custom transfer agent: + +``` +git config lfs.customtransfer.{name}.path +git config lfs.customtransfer.{name}.args +git config lfs.standalonetransferagent {name} +``` + +The agent name is derived from the executable filename (e.g. `elastic-git-storage` from +`./tools/elastic-git-storage`). + +### Inputs + +| Input | Default | Description | +| ------------------- | ------- | -------------------------------------------- | +| `lfsTransferAgent` | — | Path to custom LFS agent executable | +| `lfsTransferAgentArgs` | — | Arguments passed to the agent | +| `lfsStoragePaths` | — | Sets `LFS_STORAGE_PATHS` environment variable| + +### Example + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: local + lfsTransferAgent: ./tools/elastic-git-storage + lfsTransferAgentArgs: --config ./lfs-config.yml + lfsStoragePaths: /mnt/lfs-cache + targetPlatform: StandaloneLinux64 +``` + +--- + +## Git Hooks + +Detect and install lefthook or husky during builds. **Disabled by default** for build performance — +enable when your build pipeline depends on hooks running. + +### How It Works + +1. **Detect**: looks for `lefthook.yml` / `.lefthook.yml` (lefthook) or `.husky/` directory (husky) +2. **If enabled**: runs `npx lefthook install` or sets up husky +3. **If disabled** (default): sets `core.hooksPath` to an empty directory to bypass all hooks +4. **Skip list**: specific hooks can be skipped via environment variables: + - Lefthook: `LEFTHOOK_EXCLUDE=pre-commit,prepare-commit-msg` + - Husky: `HUSKY=0` disables all hooks + +### Inputs + +| Input | Default | Description | +| ------------------ | ------- | ------------------------------------------- | +| `gitHooksEnabled` | `false` | Install and run git hooks during build | +| `gitHooksSkipList` | — | Comma-separated hooks to skip | + +### Example + +```yaml +# Enable hooks but skip pre-commit +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: local + gitHooksEnabled: true + gitHooksSkipList: pre-commit,prepare-commit-msg + targetPlatform: StandaloneLinux64 +``` + +## Related + +- [CLI Provider Protocol](/docs/github-orchestrator/providers/cli-provider-protocol) — Write providers in any language +- [Cloud Providers](/docs/github-orchestrator/providers/gcp-cloud-run) — GCP Cloud Run and Azure ACI +- [Caching](caching) — Orchestrator caching strategies From 2321c1e565ebad0e392c0a883b104debfbd956f2 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 07:31:41 +0000 Subject: [PATCH 21/60] docs(providers): add GCP Cloud Run and Azure ACI provider documentation Covers storage type comparison tables, inputs, examples, and cross-links to related providers. Both marked as experimental. Co-Authored-By: Claude Opus 4.6 --- .../05-providers/10-gcp-cloud-run.mdx | 116 +++++++++++++++++ .../05-providers/11-azure-aci.mdx | 117 ++++++++++++++++++ 2 files changed, 233 insertions(+) create mode 100644 docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx create mode 100644 docs/03-github-orchestrator/05-providers/11-azure-aci.mdx diff --git a/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx new file mode 100644 index 00000000..682bd416 --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx @@ -0,0 +1,116 @@ +# GCP Cloud Run (Experimental) + +Run Unity builds as [Cloud Run Jobs](https://cloud.google.com/run/docs/create-jobs) — one-off +serverless container executions with configurable storage backends. + +:::caution Experimental +This provider is experimental. APIs and behavior may change between releases. +::: + +``` + GitHub Actions Runner + ┌──────────────────────────┐ + │ unity-builder │ + │ providerStrategy: │ gcloud CLI + │ gcp-cloud-run │────────────────► Cloud Run Jobs API + │ │ ┌─────────────────┐ + │ gcpStorageType: │ │ Job: unity-build│ + │ gcs-fuse / gcs-copy / │ │ │ + │ nfs / in-memory │ │ Image: unityci │ + │ │ │ Storage: ... │ + └──────────────────────────┘ └─────────────────┘ +``` + +## Prerequisites + +- Google Cloud SDK installed and authenticated (`gcloud auth login` or `GOOGLE_APPLICATION_CREDENTIALS`) +- Cloud Run Jobs API enabled: `gcloud services enable run.googleapis.com` +- Service account with roles: **Cloud Run Admin**, **Storage Admin**, **Logs Viewer** + +## Storage Types + +Set `gcpStorageType` to control how the build accesses large files. Each type has different +trade-offs for performance, persistence, and complexity. + +| Type | How it works | Best for | Size limit | +| ----------- | ------------------------------------------------- | ----------------------------------- | ---------- | +| `gcs-fuse` | Mounts a GCS bucket as a POSIX filesystem via FUSE | Large sequential I/O, artifacts | Unlimited | +| `gcs-copy` | Copies artifacts in/out via `gsutil` | Simple upload/download | Unlimited | +| `nfs` | Mounts a Filestore instance as NFS share | Unity Library (small random reads) | 100 TiB | +| `in-memory` | tmpfs volume inside the container | Scratch/temp during builds | 32 GiB | + +### When to use each type + +- **gcs-fuse** (default) — Good general-purpose option. Handles very large files well and persists + across builds. Has some latency on small file I/O and eventual consistency edge cases. + +- **gcs-copy** — Simpler than FUSE (no driver). Copies everything before the build starts and uploads + after it finishes. Best when you only need artifact upload/download, not live filesystem access + during the build. + +- **nfs** — True POSIX semantics with good random I/O performance. The best choice for caching the + Unity Library folder (thousands of small files). Requires a + [Filestore](https://cloud.google.com/filestore) instance and a VPC connector. + +- **in-memory** — Fastest option (RAM-backed). Data is lost when the job ends. Capped at 32 GiB. + Use for temporary build artifacts that don't need to persist. + +## Inputs + +| Input | Default | Description | +| ------------------ | ---------------- | ------------------------------------------------- | +| `gcpProject` | `$GOOGLE_CLOUD_PROJECT` | GCP project ID | +| `gcpRegion` | `us-central1` | Cloud Run region | +| `gcpStorageType` | `gcs-fuse` | Storage backend (see above) | +| `gcpBucket` | — | GCS bucket name (for `gcs-fuse`, `gcs-copy`) | +| `gcpFilestoreIp` | — | Filestore IP address (for `nfs`) | +| `gcpFilestoreShare`| `/share1` | Filestore share name (for `nfs`) | +| `gcpMachineType` | `e2-standard-4` | Machine type | +| `gcpDiskSizeGb` | `100` | In-memory volume size (for `in-memory`, max 32) | +| `gcpServiceAccount`| — | Service account email | +| `gcpVpcConnector` | — | VPC connector (required for `nfs`) | + +## Examples + +### GCS FUSE — mount bucket as filesystem + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: gcp-cloud-run + gcpProject: my-project + gcpBucket: my-unity-builds + targetPlatform: StandaloneLinux64 +``` + +### NFS — Filestore for fast Library caching + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: gcp-cloud-run + gcpProject: my-project + gcpStorageType: nfs + gcpFilestoreIp: 10.0.0.2 + gcpFilestoreShare: /share1 + gcpVpcConnector: my-connector + targetPlatform: StandaloneLinux64 +``` + +### Copy — simple artifact upload/download + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: gcp-cloud-run + gcpProject: my-project + gcpStorageType: gcs-copy + gcpBucket: my-unity-builds + targetPlatform: StandaloneLinux64 +``` + +## Related + +- [Azure ACI](azure-aci) — Azure Container Instances provider +- [Custom Providers](custom-providers) — TypeScript provider plugins +- [CLI Provider Protocol](cli-provider-protocol) — Write providers in any language diff --git a/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx new file mode 100644 index 00000000..dfd9904a --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx @@ -0,0 +1,117 @@ +# Azure ACI (Experimental) + +Run Unity builds as [Azure Container Instances](https://learn.microsoft.com/en-us/azure/container-instances/) — +serverless containers with configurable storage backends. + +:::caution Experimental +This provider is experimental. APIs and behavior may change between releases. +::: + +``` + GitHub Actions Runner + ┌──────────────────────────┐ + │ unity-builder │ + │ providerStrategy: │ Azure CLI + │ azure-aci │────────────────► Container Instances API + │ │ ┌─────────────────┐ + │ azureStorageType: │ │ Container: │ + │ azure-files / │ │ unity-build │ + │ blob-copy / │ │ │ + │ azure-files-nfs / │ │ Image: unityci │ + │ in-memory │ │ Storage: ... │ + └──────────────────────────┘ └─────────────────┘ +``` + +## Prerequisites + +- Azure CLI installed and authenticated (`az login` or service principal) +- A resource group (auto-created if it doesn't exist) +- **Contributor** role on the resource group + +## Storage Types + +Set `azureStorageType` to control how the build accesses large files. + +| Type | How it works | Best for | Size limit | +| ----------------- | --------------------------------------------------- | --------------------------------- | ----------------- | +| `azure-files` | Mounts an Azure File Share via SMB | General artifact storage | 100 TiB | +| `blob-copy` | Copies artifacts in/out via `az storage blob` | Simple upload/download | Unlimited | +| `azure-files-nfs` | Mounts an Azure File Share via NFS 4.1 | Unity Library (small random reads)| 100 TiB | +| `in-memory` | emptyDir volume (tmpfs) | Scratch/temp during builds | Container memory | + +### When to use each type + +- **azure-files** (default) — Simplest persistent option. Works out of the box — auto-creates the + storage account and file share if they don't exist. SMB has some overhead from opportunistic + locking but is reliable for most use cases. + +- **blob-copy** — Avoids mount overhead entirely. Copies everything before the build starts and + uploads after it finishes. Good when you only need artifact upload/download. + +- **azure-files-nfs** — Eliminates SMB lock overhead for better random I/O performance with Unity + Library files (thousands of small files). Requires **Premium FileStorage** (auto-created) and + **VNet integration** via `azureSubnetId`. + +- **in-memory** — Fastest option (RAM-backed). Data is lost when the container stops. Size is limited + by the container's memory allocation. Use for temporary build artifacts. + +## Inputs + +| Input | Default | Description | +| --------------------- | ----------------------- | ------------------------------------------------- | +| `azureResourceGroup` | `$AZURE_RESOURCE_GROUP` | Resource group name | +| `azureLocation` | `eastus` | Azure region | +| `azureStorageType` | `azure-files` | Storage backend (see above) | +| `azureStorageAccount` | `$AZURE_STORAGE_ACCOUNT`| Storage account name | +| `azureBlobContainer` | `unity-builds` | Blob container (for `blob-copy`) | +| `azureFileShareName` | `unity-builds` | File share name (for `azure-files`, `azure-files-nfs`) | +| `azureSubscriptionId` | `$AZURE_SUBSCRIPTION_ID`| Subscription ID | +| `azureCpu` | `4` | CPU cores (1–16) | +| `azureMemoryGb` | `16` | Memory in GB (1–16) | +| `azureDiskSizeGb` | `100` | File share quota in GB | +| `azureSubnetId` | — | Subnet ID for VNet (required for `azure-files-nfs`) | + +## Examples + +### Azure Files — SMB mount (default) + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: azure-aci + azureResourceGroup: my-rg + azureStorageAccount: myunitybuilds + targetPlatform: StandaloneLinux64 +``` + +### NFS — better POSIX performance + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: azure-aci + azureResourceGroup: my-rg + azureStorageType: azure-files-nfs + azureStorageAccount: myunitybuilds + azureSubnetId: /subscriptions/.../subnets/default + targetPlatform: StandaloneLinux64 +``` + +### Blob copy — simple artifact upload/download + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: azure-aci + azureResourceGroup: my-rg + azureStorageType: blob-copy + azureStorageAccount: myunitybuilds + azureBlobContainer: my-builds + targetPlatform: StandaloneLinux64 +``` + +## Related + +- [GCP Cloud Run](gcp-cloud-run) — Google Cloud Run Jobs provider +- [Custom Providers](custom-providers) — TypeScript provider plugins +- [CLI Provider Protocol](cli-provider-protocol) — Write providers in any language From 90917a2e43ebd6f6b473ca773b991cf0c7f2d350 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 07:28:07 +0000 Subject: [PATCH 22/60] docs(orchestrator): CLI provider protocol documentation Adds a new page documenting the CLI provider protocol that lets users write orchestrator providers in any language (Go, Python, Rust, shell). Covers: invocation model, JSON stdin/stdout protocol, streaming output, subcommands with timeouts, shell example, CLI vs TypeScript comparison. Related: game-ci/unity-builder#777 Co-Authored-By: Claude Opus 4.6 --- .../06b-cli-provider-protocol.mdx | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 docs/03-github-orchestrator/05-providers/06b-cli-provider-protocol.mdx diff --git a/docs/03-github-orchestrator/05-providers/06b-cli-provider-protocol.mdx b/docs/03-github-orchestrator/05-providers/06b-cli-provider-protocol.mdx new file mode 100644 index 00000000..45cbaa28 --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/06b-cli-provider-protocol.mdx @@ -0,0 +1,193 @@ +# CLI Provider Protocol + +Write orchestrator providers in **any language** — Go, Python, Rust, shell, or anything that can read +stdin and write stdout. The CLI provider protocol uses JSON messages over stdin/stdout with the +subcommand as the first argument. + +``` + providerExecutable Your executable + ┌──────────────────────┐ ┌──────────────────────┐ + │ ./my-provider │ argv[1] │ │ + │ │───────────────►│ setup-workflow │ + │ Orchestrator spawns │ JSON stdin │ run-task │ + │ your executable per │───────────────►│ cleanup-workflow │ + │ subcommand │ JSON stdout │ garbage-collect │ + │ │◄───────────────│ list-resources │ + └──────────────────────┘ stderr→logs │ list-workflow │ + │ watch-workflow │ + └──────────────────────┘ +``` + +## Quick Start + +Set `providerExecutable` to the path of your executable: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerExecutable: ./my-provider + targetPlatform: StandaloneLinux64 +``` + +The CLI provider takes precedence over `providerStrategy` when set. + +## Protocol + +### Invocation + +``` + +``` + +Orchestrator spawns your executable once per operation, passing the subcommand as `argv[1]`. + +### Input + +A single JSON object written to **stdin**, then stdin is closed: + +```json +{ + "command": "run-task", + "params": { + "buildGuid": "abc-123", + "image": "unityci/editor:2022.3.0f1-linux-il2cpp-3", + "commands": "/bin/sh -c 'unity-editor -batchmode ...'", + "mountdir": "/workspace", + "workingdir": "/workspace", + "environment": [{ "name": "UNITY_LICENSE", "value": "..." }], + "secrets": [] + } +} +``` + +### Output + +Write a single JSON object to **stdout** when the operation completes: + +```json +{ + "success": true, + "result": "Build completed successfully" +} +``` + +On failure: + +```json +{ + "success": false, + "error": "Container exited with code 1" +} +``` + +### Streaming Output + +During `run-task` and `watch-workflow`, **non-JSON lines on stdout are treated as real-time build +output** and forwarded to the orchestrator logs. Only the final JSON line is parsed as the response. + +This means your provider can freely print build logs: + +``` +Pulling image... +Starting build... +[Build] Compiling scripts... +[Build] Build succeeded +{"success": true, "result": "Build completed"} +``` + +### stderr + +Everything written to **stderr** is forwarded to the orchestrator logger. Use stderr for diagnostic +messages, warnings, and debug output. + +## Subcommands + +| Subcommand | Purpose | Timeout | +| -------------------- | -------------------------------------- | --------- | +| `setup-workflow` | Initialize infrastructure | 300s | +| `run-task` | Execute the build | No limit | +| `cleanup-workflow` | Tear down infrastructure | 300s | +| `garbage-collect` | Remove old resources | 300s | +| `list-resources` | List active resources | 300s | +| `list-workflow` | List active workflows | 300s | +| `watch-workflow` | Watch a workflow until completion | No limit | + +`run-task` and `watch-workflow` have no timeout because builds can run for hours. + +## Example: Shell Provider + +A minimal provider that runs builds via Docker: + +```bash +#!/bin/bash +case "$1" in + setup-workflow) + read request + echo '{"success": true, "result": "ready"}' + ;; + run-task) + read request + image=$(echo "$request" | jq -r '.params.image') + commands=$(echo "$request" | jq -r '.params.commands') + # Stream build output, then send JSON result + docker run --rm "$image" /bin/sh -c "$commands" 2>&1 + echo '{"success": true, "result": "done"}' + ;; + cleanup-workflow) + read request + echo '{"success": true, "result": "cleaned"}' + ;; + garbage-collect) + read request + docker system prune -f >&2 + echo '{"success": true, "result": "pruned"}' + ;; + list-resources) + read request + echo '{"success": true, "result": []}' + ;; + list-workflow) + read request + echo '{"success": true, "result": []}' + ;; + watch-workflow) + read request + echo '{"success": true, "result": ""}' + ;; + *) + echo '{"success": false, "error": "Unknown command: '"$1"'"}' >&2 + exit 1 + ;; +esac +``` + +Make it executable and point `providerExecutable` at it: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerExecutable: ./my-provider.sh + targetPlatform: StandaloneLinux64 +``` + +## CLI Provider vs TypeScript Provider + +| Feature | CLI Provider | TypeScript Provider | +| ---------------------- | ---------------------- | ------------------------- | +| Language | Any | TypeScript/JavaScript | +| Setup | `providerExecutable` | `providerStrategy` | +| Communication | JSON stdin/stdout | Direct function calls | +| Streaming | stdout lines | Native logging | +| Distribution | Any executable | GitHub, NPM, local path | +| Dependencies | None (self-contained) | Node.js runtime | + +Use CLI providers when you want to write in a non-TypeScript language, need to wrap an existing tool, +or want a self-contained executable with no Node.js dependency. + +Use [TypeScript custom providers](custom-providers) when you want direct access to the BuildParameters +object and orchestrator internals. + +## Related + +- [Custom Providers](custom-providers) — TypeScript provider plugin system +- [Build Services](/docs/github-orchestrator/advanced-topics/build-services) — Submodule profiles, caching, LFS agents, hooks From fe34ffd1c41f0dab4ac671934ba44f6f7c43d293 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 07:40:49 +0000 Subject: [PATCH 23/60] docs(load-balancing): add built-in automatic fallback API section Documents the new fallbackProviderStrategy, runnerCheckEnabled, runnerCheckLabels, and runnerCheckMinAvailable inputs. Adds comparison table for built-in vs manual fallback approaches. Co-Authored-By: Claude Opus 4.6 --- .../07-advanced-topics/07-load-balancing.mdx | 84 ++++++++++++++++++- 1 file changed, 80 insertions(+), 4 deletions(-) diff --git a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx index dcd45b12..6694d970 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx @@ -1,8 +1,8 @@ # Load Balancing -Orchestrator supports multiple providers, and you can use standard GitHub Actions scripting to route -builds across them. This lets you distribute builds based on platform, project size, runner -availability, or any custom logic. +Orchestrator supports multiple providers and includes built-in runner availability checking with +automatic fallback. You can also use standard GitHub Actions scripting for custom routing logic +based on platform, project size, branch, or any other criteria. ``` ┌─────────────────────┐ @@ -109,7 +109,83 @@ jobs: gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -## Fallback on Runner Availability +## Automatic Fallback (Built-in) + +The action can check GitHub runner availability before the build starts and automatically route to +a fallback provider. This replaces the two-job pattern with a single step. + +``` + unity-builder step + ┌─────────────────────────────────┐ + │ 1. Query GitHub Runners API │ + │ 2. Filter by labels │ + │ 3. Count idle runners │ + │ │ + │ idle >= min? │ + │ YES → use primary provider │ + │ NO → use fallback provider │ + └─────────────────────────────────┘ +``` + +### Inputs + +| Input | Default | Description | +| -------------------------- | ------- | --------------------------------------------------- | +| `fallbackProviderStrategy` | `''` | Provider to use when the primary is unavailable | +| `runnerCheckEnabled` | `false` | Check runner availability before building | +| `runnerCheckLabels` | `''` | Comma-separated labels to filter runners | +| `runnerCheckMinAvailable` | `1` | Minimum idle runners required for the primary | + +### Outputs + +| Output | Description | +| ----------------------- | -------------------------------------------------- | +| `providerFallbackUsed` | `true` if the fallback provider was selected | +| `providerFallbackReason`| Why fallback was triggered (for logging/debugging) | + +### Example + +```yaml +- uses: game-ci/unity-builder@v4 + id: build + with: + providerStrategy: local-docker + fallbackProviderStrategy: aws + runnerCheckEnabled: true + runnerCheckLabels: self-hosted,linux + runnerCheckMinAvailable: 1 + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + +- name: Log routing decision + if: always() + run: | + echo "Fallback used: ${{ steps.build.outputs.providerFallbackUsed }}" + echo "Reason: ${{ steps.build.outputs.providerFallbackReason }}" +``` + +If no self-hosted Linux runner is idle, the build automatically routes to AWS. The `providerFallbackUsed` +output lets downstream steps react to the routing decision. + +### Graceful degradation + +The runner check is designed to never block a build: + +- **No token** — Skips the check, uses the primary provider. +- **API error** (permissions, rate limit) — Logs a warning, uses the primary provider. +- **No fallback set** — The check runs for informational logging but never swaps providers. + +### When to use built-in vs manual fallback + +| Scenario | Approach | +| --------------------------------------------- | ------------- | +| Simple "runners busy → use cloud" failover | Built-in | +| Filter by specific runner labels | Built-in | +| Custom logic (branch, time of day, cost caps) | Manual script | +| Multi-provider weighted distribution | Manual script | +| Chained fallbacks (A → B → C) | Manual script | + +## Manual Fallback (Script-Based) If your self-hosted runner is offline or busy, fall back to a cloud provider. Use a short initial job to check runner health, then pick the provider accordingly. From ca51beb6aabec6c1a1d95df980bcb58a0c0d0afc Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 07:47:44 +0000 Subject: [PATCH 24/60] docs(load-balancing): rewrite as comprehensive load balancing guide Reframes page around intelligent provider routing with built-in API. Adds retry-on-alternate, provider init timeout, async mode integration, and decision table. Restructures manual scripting as secondary option. Co-Authored-By: Claude Opus 4.6 --- .../07-advanced-topics/07-load-balancing.mdx | 360 ++++++++++-------- 1 file changed, 198 insertions(+), 162 deletions(-) diff --git a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx index 6694d970..d560ba60 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx @@ -1,40 +1,156 @@ # Load Balancing -Orchestrator supports multiple providers and includes built-in runner availability checking with -automatic fallback. You can also use standard GitHub Actions scripting for custom routing logic -based on platform, project size, branch, or any other criteria. +Orchestrator can intelligently route builds across providers. Built-in load balancing checks +runner availability and routes to the best provider automatically — no custom scripting needed. +For advanced scenarios, standard GitHub Actions scripting gives you full control. ``` - ┌─────────────────────┐ - │ Incoming Build │ - │ Request │ - └─────────┬───────────┘ - │ - ┌─────────▼───────────┐ - │ Router Logic │ - │ (GitHub Actions / │ - │ script / matrix) │ - └──┬──────┬────────┬──┘ - │ │ │ - ┌───────────▼──┐ ┌─▼──────────┐ ┌▼─────────────┐ - │ aws │ │ k8s │ │ local-docker │ - │ │ │ │ │ │ - │ Fargate │ │ Cluster │ │ Self-hosted │ - │ (scalable) │ │ (flexible) │ │ (no cost) │ - └──────────────┘ └────────────┘ └──────────────┘ + unity-builder + ┌──────────────────────────────────┐ + │ 1. Check runner availability │ + │ 2. Route to best provider │ + │ 3. Build (sync or async) │ + │ 4. Retry on alternate if failed │ + └──┬──────────┬───────────────┬───┘ + │ │ │ + ▼ ▼ ▼ + local-docker aws k8s + (self-hosted) (scalable) (flexible) ``` -## Why Load Balance? +## Built-in Load Balancing -- **Cost control** — Route small or test builds to free self-hosted runners and reserve cloud - providers for production builds. -- **Availability** — Fall back to a cloud provider when your self-hosted runner is busy or offline. -- **Platform routing** — Send Linux builds to AWS and Windows builds to a local runner. -- **Parallel scaling** — Split a multi-platform matrix across providers to finish faster. +Set `fallbackProviderStrategy` to an alternate provider and the action handles routing +automatically. Three mechanisms work together: -## Basic Provider Routing +- **Runner availability check** — Queries the GitHub Runners API. If your self-hosted runners + are busy or offline, routes to the alternate provider. +- **Retry on alternate provider** — If the primary provider fails mid-build (transient cloud + error, quota limit), retries the entire build on the alternate provider. +- **Provider init timeout** — If the primary provider is slow to spin up, switches to the + alternate after a configurable timeout. -Use a GitHub Actions matrix or conditional logic to route builds to different providers. +### Inputs + +| Input | Default | Description | +| -------------------------- | ------- | ---------------------------------------------------- | +| `fallbackProviderStrategy` | `''` | Alternate provider for load balancing | +| `runnerCheckEnabled` | `false` | Check runner availability before routing | +| `runnerCheckLabels` | `''` | Filter runners by labels (e.g. `self-hosted,linux`) | +| `runnerCheckMinAvailable` | `1` | Minimum idle runners before routing to alternate | +| `retryOnFallback` | `false` | Retry failed builds on the alternate provider | +| `providerInitTimeout` | `0` | Max seconds for provider startup (0 = no limit) | + +### Outputs + +| Output | Description | +| ------------------------ | --------------------------------------------------- | +| `providerFallbackUsed` | `true` if the build was routed to the alternate | +| `providerFallbackReason` | Why the build was rerouted | + +### Route busy runners to cloud + +The most common pattern: prefer your self-hosted runner, but offload to the cloud when it's busy. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: local-docker + fallbackProviderStrategy: aws + runnerCheckEnabled: true + runnerCheckLabels: self-hosted,linux + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +Runner idle? Build runs locally. Runner busy? Routes to AWS automatically. + +### Non-blocking with async mode + +For long Unity builds, combine load balancing with `asyncOrchestrator: true`. The build dispatches +to the best available provider and returns immediately — the GitHub runner is freed in seconds +regardless of which provider handles the build. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: local-docker + fallbackProviderStrategy: aws + runnerCheckEnabled: true + runnerCheckLabels: self-hosted,linux + asyncOrchestrator: true # dispatch and return immediately + githubCheck: true # report progress via PR checks + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +Without async mode the routing still works correctly, but the build occupies the GitHub runner for +the full duration. Async mode is the key to truly non-blocking load balancing. + +### Retry failed builds on alternate provider + +Enable `retryOnFallback` to automatically retry on the alternate provider when the primary fails. +This is useful for long builds where transient cloud failures are common. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + fallbackProviderStrategy: local-docker + retryOnFallback: true + targetPlatform: StandaloneLinux64 +``` + +If AWS fails (transient error, ECS quota exceeded, network issue), the build retries on the local +Docker provider instead of failing the entire workflow. + +### Timeout slow provider startup + +Cloud providers sometimes take a long time to provision infrastructure. Set `providerInitTimeout` +to swap to the alternate provider if startup takes too long. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: k8s + fallbackProviderStrategy: aws + providerInitTimeout: 120 # 2 minutes max for K8s to spin up + retryOnFallback: true + targetPlatform: StandaloneLinux64 +``` + +### Graceful degradation + +The built-in load balancing is designed to never block a build: + +- **No token** — Skips the runner check, uses the primary provider. +- **API error** (permissions, rate limit) — Logs a warning, uses the primary provider. +- **No alternate set** — The runner check runs for informational logging but never swaps. + +### Log the routing decision + +Use the outputs to track which provider was selected and why: + +```yaml +- uses: game-ci/unity-builder@v4 + id: build + with: + providerStrategy: local-docker + fallbackProviderStrategy: aws + runnerCheckEnabled: true + targetPlatform: StandaloneLinux64 + +- name: Log routing + if: always() + run: | + echo "Routed to alternate: ${{ steps.build.outputs.providerFallbackUsed }}" + echo "Reason: ${{ steps.build.outputs.providerFallbackReason }}" +``` + +## Script-Based Routing + +For scenarios that the built-in inputs don't cover, use GitHub Actions scripting. This gives you +full control over routing logic. ### Route by Platform @@ -109,94 +225,12 @@ jobs: gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -## Automatic Fallback (Built-in) - -The action can check GitHub runner availability before the build starts and automatically route to -a fallback provider. This replaces the two-job pattern with a single step. - -``` - unity-builder step - ┌─────────────────────────────────┐ - │ 1. Query GitHub Runners API │ - │ 2. Filter by labels │ - │ 3. Count idle runners │ - │ │ - │ idle >= min? │ - │ YES → use primary provider │ - │ NO → use fallback provider │ - └─────────────────────────────────┘ -``` - -### Inputs - -| Input | Default | Description | -| -------------------------- | ------- | --------------------------------------------------- | -| `fallbackProviderStrategy` | `''` | Provider to use when the primary is unavailable | -| `runnerCheckEnabled` | `false` | Check runner availability before building | -| `runnerCheckLabels` | `''` | Comma-separated labels to filter runners | -| `runnerCheckMinAvailable` | `1` | Minimum idle runners required for the primary | - -### Outputs - -| Output | Description | -| ----------------------- | -------------------------------------------------- | -| `providerFallbackUsed` | `true` if the fallback provider was selected | -| `providerFallbackReason`| Why fallback was triggered (for logging/debugging) | - -### Example - -```yaml -- uses: game-ci/unity-builder@v4 - id: build - with: - providerStrategy: local-docker - fallbackProviderStrategy: aws - runnerCheckEnabled: true - runnerCheckLabels: self-hosted,linux - runnerCheckMinAvailable: 1 - targetPlatform: StandaloneLinux64 - gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} - -- name: Log routing decision - if: always() - run: | - echo "Fallback used: ${{ steps.build.outputs.providerFallbackUsed }}" - echo "Reason: ${{ steps.build.outputs.providerFallbackReason }}" -``` - -If no self-hosted Linux runner is idle, the build automatically routes to AWS. The `providerFallbackUsed` -output lets downstream steps react to the routing decision. - -### Graceful degradation - -The runner check is designed to never block a build: - -- **No token** — Skips the check, uses the primary provider. -- **API error** (permissions, rate limit) — Logs a warning, uses the primary provider. -- **No fallback set** — The check runs for informational logging but never swaps providers. - -### When to use built-in vs manual fallback - -| Scenario | Approach | -| --------------------------------------------- | ------------- | -| Simple "runners busy → use cloud" failover | Built-in | -| Filter by specific runner labels | Built-in | -| Custom logic (branch, time of day, cost caps) | Manual script | -| Multi-provider weighted distribution | Manual script | -| Chained fallbacks (A → B → C) | Manual script | +### Manual Runner Check -## Manual Fallback (Script-Based) - -If your self-hosted runner is offline or busy, fall back to a cloud provider. Use a short initial -job to check runner health, then pick the provider accordingly. +If you need custom runner check logic beyond what the built-in inputs support (e.g. checking +runner groups, org-level runners, or external capacity APIs): ```yaml -name: Fallback Routing - -on: - push: - branches: [main] - jobs: check-runner: name: Check self-hosted availability @@ -209,14 +243,11 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - # Query runner status via the GitHub API RUNNERS=$(gh api repos/${{ github.repository }}/actions/runners --jq '[.runners[] | select(.status == "online")] | length') if [[ "$RUNNERS" -gt 0 ]]; then echo "provider=local-docker" >> "$GITHUB_OUTPUT" - echo "Self-hosted runner available — using local-docker" else echo "provider=aws" >> "$GITHUB_OUTPUT" - echo "No runners online — falling back to AWS" fi build: @@ -235,21 +266,38 @@ jobs: gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -## Async Mode for Load Balancing +### Weighted Distribution + +Distribute builds based on a ratio. This example sends 70% of builds to AWS and 30% to a local +runner using a stable hash. + +```yaml +- name: Weighted provider selection + id: provider + run: | + HASH=$(echo "${{ github.run_id }}" | md5sum | cut -c1-8) + DECIMAL=$((16#$HASH % 100)) + if [[ $DECIMAL -lt 70 ]]; then + echo "strategy=aws" >> "$GITHUB_OUTPUT" + else + echo "strategy=local-docker" >> "$GITHUB_OUTPUT" + fi +``` + +## Async Mode and Load Balancing -The [`asyncOrchestrator`](../api-reference#github-integration) parameter works well with load -balancing. When enabled, the GitHub Action dispatches the build and returns immediately without -waiting for it to finish. This means your routing job completes in seconds regardless of which -provider handles the actual build. +The [`asyncOrchestrator`](../api-reference#github-integration) parameter is essential for +effective load balancing of long builds. When enabled, the action dispatches the build and returns +immediately — no runner minutes wasted waiting. ``` - Router Job (seconds) Provider A Provider B - ┌───────────────────┐ ┌──────────────┐ ┌──────────────┐ - │ 1. Check runners │ │ │ │ │ - │ 2. Pick provider │ │ │ │ │ - │ 3. Dispatch build ├──────►│ 3a. Building │ OR ─►│ 3b. Building │ - │ 4. Return (done) │ │ ... │ │ ... │ - └───────────────────┘ │ ... │ │ ... │ + Workflow Step (seconds) Provider A Provider B + ┌───────────────────────┐ ┌──────────────┐ ┌──────────────┐ + │ 1. Check runners │ │ │ │ │ + │ 2. Route to provider │ │ │ │ │ + │ 3. Dispatch build ├──►│ 3a. Building │ OR ──►│ 3b. Building │ + │ 4. Return (done) │ │ ... │ │ ... │ + └───────────────────────┘ │ ... │ │ ... │ Completes instantly │ 5. Complete │ │ 5. Complete │ └──────┬───────┘ └──────┬───────┘ │ │ @@ -259,14 +307,10 @@ provider handles the actual build. └─────────────────────────────────────┘ ``` -Benefits of combining async mode with load balancing: - -- **No wasted runner minutes** — The router job finishes in seconds. You don't pay for a - GitHub-hosted runner to sit idle while the build runs in the cloud. -- **Parallel dispatch** — Launch multiple builds to different providers simultaneously. Each - dispatches and returns immediately. -- **Monitor everything from one place** — Enable `githubCheck: true` and all builds report status - back to the pull request Checks tab, regardless of which provider ran them. +- **Without async** — The build occupies the runner. Routing still works, but you're paying for + runner time while the build runs remotely. +- **With async** — The step finishes in seconds. The build continues on the selected provider and + reports status via GitHub Checks. This is the recommended approach for long builds. ```yaml jobs: @@ -295,39 +339,31 @@ jobs: githubCheck: true ``` -Each matrix job dispatches its build and exits immediately. The builds continue running on their -respective providers and report progress via GitHub Checks. - -## Weighted Distribution +## When to Use What -For teams with both cloud and self-hosted capacity, distribute builds based on a ratio. This example -sends 70% of builds to AWS and 30% to a local runner using a simple hash. - -```yaml -- name: Weighted provider selection - id: provider - run: | - # Hash the run ID to get a stable pseudo-random number - HASH=$(echo "${{ github.run_id }}" | md5sum | cut -c1-8) - DECIMAL=$((16#$HASH % 100)) - if [[ $DECIMAL -lt 70 ]]; then - echo "strategy=aws" >> "$GITHUB_OUTPUT" - else - echo "strategy=local-docker" >> "$GITHUB_OUTPUT" - fi -``` +| Scenario | Approach | +| ---------------------------------------------- | ---------------------------------------------- | +| Runners busy → offload to cloud | Built-in (`runnerCheckEnabled` + async) | +| Retry transient cloud failures | Built-in (`retryOnFallback`) | +| Slow provider startup | Built-in (`providerInitTimeout`) | +| Filter runners by labels | Built-in (`runnerCheckLabels`) | +| Route by platform or branch | Matrix or script | +| Custom capacity logic (org runners, external) | Script-based runner check | +| Weighted distribution (70/30 split) | Script with hash | +| Chained routing (A → B → C) | Script | ## Tips -- **Start simple** — A platform-based matrix with different providers per entry is the easiest - starting point. Add dynamic routing only when you need it. -- **Use async for long builds** — Combining `asyncOrchestrator: true` with `githubCheck: true` keeps - your routing job fast and gives you build status on the PR page. +- **Start with built-in** — For most teams, `runnerCheckEnabled` + `fallbackProviderStrategy` + + `asyncOrchestrator` covers the common case. Add script-based routing only when you need custom + logic. +- **Always use async for long builds** — Combining `asyncOrchestrator: true` with + `githubCheck: true` keeps your routing step fast and gives you build status on the PR page. - **Cache keys are provider-independent** — The [`cacheKey`](../api-reference#caching) parameter works the same across all providers, so builds routed to different providers can still share caches if they use the same storage backend. -- **Test fallback logic** — Temporarily disable your self-hosted runner to verify that your fallback - routing works before you need it in production. +- **Test routing logic** — Temporarily disable your self-hosted runner to verify that routing + works before you need it in production. - **Custom providers** — The same routing patterns work with [custom providers](../providers/custom-providers). Set `providerStrategy` to a GitHub repo or NPM package and Orchestrator loads it dynamically. From 265a1945978d00afc2c579cf681cf6cc1d7f0dba Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 08:23:40 +0000 Subject: [PATCH 25/60] docs(load-balancing): add workflow dispatch and reusable workflow routing examples Add two new script-based routing patterns: dispatching to an alternate workflow when self-hosted runners are busy, and using reusable workflows for shared build config with dynamic provider routing. Updated the comparison table with the new patterns. Co-Authored-By: Claude Opus 4.6 --- .../07-advanced-topics/07-load-balancing.mdx | 177 ++++++++++++++++++ 1 file changed, 177 insertions(+) diff --git a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx index d560ba60..47684e2e 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx @@ -284,6 +284,181 @@ runner using a stable hash. fi ``` +### Route to alternate workflow when runners are busy + +Instead of switching providers within the same job, you can dispatch an entirely different workflow. +This is useful when the alternate provider needs different runner labels, secrets, or setup steps +that don't fit in the same job. + +The pattern uses two workflows: a primary workflow that checks runner availability and either builds +locally or dispatches a cloud workflow, and a cloud workflow that handles the remote build +independently. + +**Primary workflow** — checks runners and either builds or dispatches: + +```yaml +name: Build (Primary) + +on: + push: + branches: [main] + +jobs: + route-and-build: + runs-on: ubuntu-latest + steps: + - name: Check self-hosted runner availability + id: check + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + IDLE=$(gh api repos/${{ github.repository }}/actions/runners \ + --jq '[.runners[] | select(.status == "online" and .busy == false)] | length') + echo "idle=$IDLE" >> "$GITHUB_OUTPUT" + + # If no runners are idle, dispatch the cloud build workflow + - name: Dispatch cloud build + if: steps.check.outputs.idle == '0' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh workflow run cloud-build.yml \ + -f targetPlatform=StandaloneLinux64 \ + -f ref=${{ github.sha }} + echo "Self-hosted runners busy — dispatched to cloud-build workflow" + + # If runners are available, build locally + - uses: actions/checkout@v4 + if: steps.check.outputs.idle != '0' + with: + lfs: true + + - uses: game-ci/unity-builder@v4 + if: steps.check.outputs.idle != '0' + with: + providerStrategy: local-docker + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +**Cloud build workflow** — runs on `workflow_dispatch`, handles the remote build: + +```yaml +name: Build (Cloud) + +on: + workflow_dispatch: + inputs: + targetPlatform: + description: Platform to build + required: true + ref: + description: Git ref to build + required: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.ref }} + lfs: true + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: ${{ inputs.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +This pattern lets each workflow have completely different configurations — different runners, +secrets, environment variables, and setup steps. The trade-off is that the dispatched workflow runs +independently, so you need to check its status separately (via GitHub Actions UI or +[`gh run list`](https://cli.github.com/manual/gh_run_list)). + +For a simpler approach that keeps everything in one workflow, use the +[built-in load balancing](#built-in-load-balancing) or [reusable workflow](#reusable-workflow) +patterns instead. + +### Reusable Workflow + +Extract the build step into a reusable workflow and call it with different provider settings based +on runner availability. This keeps the routing decision and build execution in separate jobs while +maintaining a single workflow run for visibility. + +```yaml +# .github/workflows/unity-build-reusable.yml +name: Unity Build (Reusable) + +on: + workflow_call: + inputs: + providerStrategy: + required: true + type: string + targetPlatform: + required: true + type: string + secrets: + GH_TOKEN: + required: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: ${{ inputs.providerStrategy }} + targetPlatform: ${{ inputs.targetPlatform }} + gitPrivateToken: ${{ secrets.GH_TOKEN }} +``` + +```yaml +# .github/workflows/build-on-push.yml +name: Build on Push + +on: + push: + branches: [main] + +jobs: + route: + runs-on: ubuntu-latest + outputs: + provider: ${{ steps.check.outputs.provider }} + steps: + - name: Check runners and select provider + id: check + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + IDLE=$(gh api repos/${{ github.repository }}/actions/runners \ + --jq '[.runners[] | select(.status == "online" and .busy == false)] | length') + if [[ "$IDLE" -gt 0 ]]; then + echo "provider=local-docker" >> "$GITHUB_OUTPUT" + else + echo "provider=aws" >> "$GITHUB_OUTPUT" + fi + + build: + needs: route + uses: ./.github/workflows/unity-build-reusable.yml + with: + providerStrategy: ${{ needs.route.outputs.provider }} + targetPlatform: StandaloneLinux64 + secrets: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} +``` + +Unlike the workflow dispatch pattern, this keeps everything in a single workflow run — you can see +the routing decision and build result together in the GitHub Actions UI. + ## Async Mode and Load Balancing The [`asyncOrchestrator`](../api-reference#github-integration) parameter is essential for @@ -350,6 +525,8 @@ jobs: | Route by platform or branch | Matrix or script | | Custom capacity logic (org runners, external) | Script-based runner check | | Weighted distribution (70/30 split) | Script with hash | +| Dispatch entirely different workflow | `workflow_dispatch` routing | +| Shared build config, dynamic routing | Reusable workflow (`workflow_call`) | | Chained routing (A → B → C) | Script | ## Tips From 975faabe15cd127ed0db3afdc8ba075415a1424c Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 08:36:26 +0000 Subject: [PATCH 26/60] docs(secrets): comprehensive secret sources documentation Expand the Secrets page with premade source documentation (AWS Secrets Manager, AWS Parameter Store, GCP Secret Manager, Azure Key Vault, env), custom commands, YAML definitions, and migration from legacy inputPullCommand. Covers all five cloud providers and the env source. Co-Authored-By: Claude Opus 4.6 --- .../06-advanced-topics/06-secrets.mdx | 177 +++++++++++++++++- 1 file changed, 169 insertions(+), 8 deletions(-) diff --git a/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx b/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx index 17bae040..0462f7ad 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx @@ -1,14 +1,175 @@ # Secrets -Secrets are transferred to workload containers as secrets via the built-in secrets system the -provider being used supports. +Orchestrator supports multiple ways to pull secrets into your build environment. Secrets are +transferred to workload containers as environment variables via the provider's native secret +system. -## Kubernetes +## Secret Sources -Secrets are created as native Kubernetes secret objects and mounted to job containers as env -variables. +Set `secretSource` to use a premade integration or custom command. This is the recommended +approach — it replaces the older `inputPullCommand` mechanism with a cleaner API. -## AWS +### Premade Sources -Secrets are created as aws secret manager secrets and mounted to fargate tasks from secrets to env -variables. +| Source | Value | CLI Required | +|--------|-------|-------------| +| AWS Secrets Manager | `aws-secrets-manager` | `aws` CLI | +| AWS Parameter Store | `aws-parameter-store` | `aws` CLI | +| GCP Secret Manager | `gcp-secret-manager` | `gcloud` CLI | +| Azure Key Vault | `azure-key-vault` | `az` CLI + `AZURE_VAULT_NAME` env var | +| Environment Variables | `env` | None | + +### Usage + +Specify `secretSource` and `pullInputList` (comma-separated list of secret keys to fetch): + +```yaml +- uses: game-ci/unity-builder@v4 + env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL,UNITY_EMAIL,UNITY_PASSWORD + secretSource: aws-parameter-store + with: + targetPlatform: StandaloneLinux64 + providerStrategy: aws + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +The orchestrator fetches each key from the specified source before the build starts. The values +are injected as environment variables into the build container. + +### AWS Secrets Manager + +Fetches secrets using `aws secretsmanager get-secret-value`. Your build environment needs AWS +credentials configured (e.g., via `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`, or an IAM +role). + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: aws-secrets-manager + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-1 +``` + +### AWS Parameter Store + +Fetches parameters using `aws ssm get-parameter --with-decryption`. Supports SecureString +parameters. Often cheaper and simpler than Secrets Manager for key-value secrets. + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: aws-parameter-store +``` + +### GCP Secret Manager + +Fetches secrets using `gcloud secrets versions access latest`. Requires `gcloud` CLI +authenticated in the build environment. + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: gcp-secret-manager +``` + +### Azure Key Vault + +Fetches secrets using `az keyvault secret show`. Requires the `AZURE_VAULT_NAME` environment +variable to specify which vault to use. + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: azure-key-vault + AZURE_VAULT_NAME: my-game-ci-vault +``` + +### Environment Variables + +Reads secrets directly from the process environment. Useful when secrets are already injected +by the CI platform (e.g., GitHub Actions secrets). + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: env + UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} + UNITY_SERIAL: ${{ secrets.UNITY_SERIAL }} +``` + +## Custom Commands + +If the premade sources don't cover your setup, pass a shell command with `{0}` as a placeholder +for the secret key: + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: 'vault kv get -field=value secret/game-ci/{0}' +``` + +The orchestrator runs this command once per key in `pullInputList`, replacing `{0}` with each +key name. + +## Custom YAML Definitions + +For complex setups, define secret sources in a YAML file: + +```yaml +# .game-ci/secrets.yml +sources: + - name: my-vault + command: 'vault kv get -field=value secret/{0}' + - name: my-api + command: 'curl -s https://secrets.internal/api/{0}' + parseOutput: json-field + jsonField: value +``` + +Reference the file path as the `secretSource`: + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: .game-ci/secrets.yml +``` + +The `parseOutput` field controls how the command output is interpreted: +- `raw` (default) — Use the output as-is +- `json-field` — Parse the output as JSON and extract the field specified by `jsonField` + +## Legacy: inputPullCommand + +The older `inputPullCommand` mechanism is still supported for backward compatibility. If +`secretSource` is set, it takes precedence. + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + inputPullCommand: aws-secret-manager +``` + +The legacy mechanism supports two premade shortcuts: +- `aws-secret-manager` — Expands to `aws secretsmanager get-secret-value --secret-id {0}` +- `gcp-secret-manager` — Expands to `gcloud secrets versions access 1 --secret="{0}"` + +New projects should use `secretSource` instead, which provides more premade sources, better +output parsing, and YAML file support. + +## Provider-Specific Secret Handling + +### Kubernetes + +Secrets are created as native Kubernetes Secret objects and mounted to job containers as +environment variables. The orchestrator handles creation and cleanup automatically. + +### AWS (ECS/Fargate) + +Secrets are created as AWS Secrets Manager entries and mounted to Fargate tasks as environment +variables via the ECS task definition's `secrets` configuration. + +### Local Docker + +Secrets are passed as environment variables to the Docker container via `-e` flags. From c90b7b6094daec1b55222a1103100158f74dbbc4 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 08:42:13 +0000 Subject: [PATCH 27/60] docs(secrets): add HashiCorp Vault as premade secret source Documents hashicorp-vault (KV v2), hashicorp-vault-kv1 (KV v1), and vault (shorthand alias). Covers VAULT_ADDR, VAULT_TOKEN, and VAULT_MOUNT configuration with examples for both KV versions. Co-Authored-By: Claude Opus 4.6 --- .../06-advanced-topics/06-secrets.mdx | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx b/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx index 0462f7ad..c5b4445d 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/06-secrets.mdx @@ -17,6 +17,8 @@ approach — it replaces the older `inputPullCommand` mechanism with a cleaner A | AWS Parameter Store | `aws-parameter-store` | `aws` CLI | | GCP Secret Manager | `gcp-secret-manager` | `gcloud` CLI | | Azure Key Vault | `azure-key-vault` | `az` CLI + `AZURE_VAULT_NAME` env var | +| HashiCorp Vault (KV v2) | `hashicorp-vault` or `vault` | `vault` CLI + `VAULT_ADDR` env var | +| HashiCorp Vault (KV v1) | `hashicorp-vault-kv1` | `vault` CLI + `VAULT_ADDR` env var | | Environment Variables | `env` | None | ### Usage @@ -86,6 +88,43 @@ env: AZURE_VAULT_NAME: my-game-ci-vault ``` +### HashiCorp Vault + +Fetches secrets using the `vault` CLI. Requires `VAULT_ADDR` to be set. Authentication is +handled by standard Vault environment variables (`VAULT_TOKEN`, AppRole, Kubernetes auth, etc.). + +Use `hashicorp-vault` (or the `vault` shorthand) for **KV v2** secrets engines, or +`hashicorp-vault-kv1` for **KV v1**. + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: vault + VAULT_ADDR: ${{ secrets.VAULT_ADDR }} + VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }} +``` + +By default, secrets are read from the `secret` mount path. Override with `VAULT_MOUNT`: + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: hashicorp-vault + VAULT_ADDR: https://vault.example.com + VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }} + VAULT_MOUNT: game-ci +``` + +For **KV v1** engines: + +```yaml +env: + pullInputList: UNITY_LICENSE,UNITY_SERIAL + secretSource: hashicorp-vault-kv1 + VAULT_ADDR: https://vault.example.com + VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }} +``` + ### Environment Variables Reads secrets directly from the process environment. Useful when secrets are already injected From 93c86dac446bc0ee81dfd2c5a479836deb4e131e Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 08:48:27 +0000 Subject: [PATCH 28/60] docs: add Orchestrator Jobs page and Custom LFS Agents page New Jobs page explains the build lifecycle, job types (build, test, custom editor method, custom job, async), pre/post build phases, and execution by provider. Gives users a conceptual overview before diving into advanced topics. New LFS Agents page documents elastic-git-storage built-in support with auto-install, version pinning, multiple storage backends, and custom agent configuration. Renamed api-reference from 04 to 05 to accommodate the new Jobs page. Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/04-jobs.mdx | 189 ++++++++++++++++++ ...api-reference.mdx => 05-api-reference.mdx} | 0 .../07-advanced-topics/10-lfs-agents.mdx | 92 +++++++++ 3 files changed, 281 insertions(+) create mode 100644 docs/03-github-orchestrator/04-jobs.mdx rename docs/03-github-orchestrator/{04-api-reference.mdx => 05-api-reference.mdx} (100%) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx diff --git a/docs/03-github-orchestrator/04-jobs.mdx b/docs/03-github-orchestrator/04-jobs.mdx new file mode 100644 index 00000000..5318cbd0 --- /dev/null +++ b/docs/03-github-orchestrator/04-jobs.mdx @@ -0,0 +1,189 @@ +# Orchestrator Jobs + +Orchestrator executes work as **jobs** — containerized or local tasks that run on your chosen +provider. Understanding job types and their flow is key to customizing your build pipeline. + +## Job Flow + +Every Orchestrator run follows the same lifecycle, regardless of provider: + +``` + ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ + │ Setup │────►│ Pre-Build │────►│ Build │────►│ Post-Build │ + │ Provider │ │ Jobs │ │ Job │ │ Jobs │ + └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ + │ │ + │ ┌─────────────┐ │ + └───────────────────►│ Cleanup │◄────────────────────────┘ + └─────────────┘ +``` + +1. **Setup** — Provision cloud resources (stacks, volumes, secrets). Skipped for local providers. +2. **Pre-build jobs** — Clone the repository, pull LFS, restore caches, run pre-build hooks. +3. **Build job** — Execute the Unity build (or custom editor method). +4. **Post-build jobs** — Push caches, upload artifacts, run post-build hooks. +5. **Cleanup** — Release locks, tear down cloud resources, update GitHub Checks. + +## Job Types + +### Build Job + +The standard job — runs the Unity Editor to produce a build artifact. This is what most users +care about. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + targetPlatform: StandaloneLinux64 + providerStrategy: aws + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +The build job: +- Installs the toolchain (Node.js, git-lfs) inside the container +- Clones `game-ci/unity-builder` into the container +- Runs `remote-cli-pre-build` to set up the workspace +- Executes the Unity build via the Game CI entrypoint +- Runs `remote-cli-post-build` to push caches and artifacts + +### Test Jobs + +Run Unity tests without producing a build. Use a custom `buildMethod` that runs tests and exits: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + targetPlatform: StandaloneLinux64 + buildMethod: MyNamespace.TestRunner.RunEditModeTests + manualExit: true + providerStrategy: aws + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +With `manualExit: true`, Unity doesn't quit automatically — your build method should call +`EditorApplication.Exit(0)` after tests complete. This gives you full control over the test +lifecycle. + +### Custom Editor Method Jobs + +Run any static C# method in the Unity Editor. Useful for: +- Asset processing or validation +- Addressables builds +- Custom pipeline steps +- Code generation + +```yaml +- uses: game-ci/unity-builder@v4 + with: + targetPlatform: StandaloneLinux64 + buildMethod: MyNamespace.Pipeline.ProcessAssets + manualExit: true + providerStrategy: aws + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +The `buildMethod` must be a fully qualified static method: `Namespace.Class.Method`. + +### Custom Jobs + +Replace the entire build workflow with your own container steps. Useful for non-Unity workloads +or fully custom pipelines that still benefit from Orchestrator's cloud infrastructure. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + customJob: | + - name: my-custom-step + image: ubuntu:22.04 + commands: | + echo "Running custom workload" + ./my-script.sh + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +See [Custom Job](advanced-topics/custom-job) for the full reference. + +### Async Jobs + +For long-running builds, Orchestrator can dispatch the job and return immediately. The build +continues in the cloud. Progress is reported via GitHub Checks. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + targetPlatform: StandaloneLinux64 + providerStrategy: aws + asyncOrchestrator: true + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +This is useful when builds exceed GitHub Actions' job time limits, or when you want to +free up your CI runner immediately. + +## Pre-Build and Post-Build + +Orchestrator runs additional steps before and after the main build job. + +### Pre-Build Steps + +The `remote-cli-pre-build` phase handles: +- Git clone of the target repository +- Git LFS pull +- Cache restoration (Library folder, LFS objects) +- Retained workspace setup +- Submodule initialization (if using [submodule profiles](advanced-topics/submodule-profiles)) +- Custom LFS agent configuration (e.g., [elastic-git-storage](advanced-topics/lfs-agents)) + +You can inject additional pre-build steps: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + preBuildSteps: | + - name: install-dependencies + image: node:18 + commands: npm install +``` + +### Post-Build Steps + +The `remote-cli-post-build` phase handles: +- Library folder cache push +- Build artifact upload +- LFS cache push + +You can inject additional post-build steps: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + postBuildSteps: | + - name: upload-to-steam + image: steamcmd + commands: ./upload.sh +``` + +### Hooks + +For more granular control, use [container hooks](advanced-topics/hooks/container-hooks) or +[command hooks](advanced-topics/hooks/command-hooks) to inject steps at specific points in the +build lifecycle. + +## Job Execution by Provider + +Each provider runs jobs differently: + +| Provider | How jobs execute | +|----------|----------------| +| **AWS Fargate** | ECS Fargate task with CloudFormation stack. Logs streamed via Kinesis. | +| **Kubernetes** | Kubernetes Job with PVC for workspace. Logs streamed from pod. | +| **Local Docker** | Docker container with volume mounts. Logs piped to stdout. | +| **Local** | Direct shell execution on the host. No container isolation. | +| **CLI Provider** | Delegated to external executable via JSON protocol. | + +## Next Steps + +- [Custom Job](advanced-topics/custom-job) — Full reference for custom job definitions +- [Hooks](advanced-topics/hooks/container-hooks) — Inject steps at specific lifecycle points +- [Architecture](advanced-topics/architecture) — Deep dive into internal components diff --git a/docs/03-github-orchestrator/04-api-reference.mdx b/docs/03-github-orchestrator/05-api-reference.mdx similarity index 100% rename from docs/03-github-orchestrator/04-api-reference.mdx rename to docs/03-github-orchestrator/05-api-reference.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx new file mode 100644 index 00000000..c28adaa9 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx @@ -0,0 +1,92 @@ +# Custom LFS Agents + +Orchestrator supports custom Git LFS transfer agents — external executables that handle +LFS upload and download instead of the default HTTPS transport. + +## elastic-git-storage (Built-in) + +[elastic-git-storage](https://github.com/frostebite/elastic-git-storage) is a custom Git LFS +transfer agent with first-class support in Orchestrator. It supports multiple storage backends: +local filesystem, WebDAV, and rclone remotes. + +When you set `lfsTransferAgent: elastic-git-storage`, Orchestrator will: + +1. Search PATH and known locations for an existing installation +2. If not found, download the correct platform binary from GitHub releases +3. Configure it as the standalone LFS transfer agent via `git config` + +### Basic Usage + +```yaml +- uses: game-ci/unity-builder@v4 + with: + targetPlatform: StandaloneLinux64 + lfsTransferAgent: elastic-git-storage + lfsStoragePaths: '/mnt/lfs-cache' +``` + +### Version Pinning + +Append `@version` to pin a specific release: + +```yaml +lfsTransferAgent: elastic-git-storage@v1.0.0 +``` + +Without a version suffix, the latest release is downloaded. + +### Multiple Storage Backends + +`lfsStoragePaths` accepts semicolon-separated paths. The agent tries each in order: + +```yaml +lfsStoragePaths: '/mnt/fast-ssd;webdav://lfs.example.com/storage;rclone://remote:lfs-bucket' +``` + +### Agent Arguments + +Pass additional flags via `lfsTransferAgentArgs`: + +```yaml +lfsTransferAgent: elastic-git-storage +lfsTransferAgentArgs: '--verbose --concurrency 4' +lfsStoragePaths: '/mnt/lfs-cache' +``` + +## Custom Agents + +Any Git LFS custom transfer agent can be used. Provide the path to the executable: + +```yaml +lfsTransferAgent: /usr/local/bin/lfs-folderstore +lfsTransferAgentArgs: '-dir /mnt/lfs-store' +``` + +Orchestrator configures the agent via: + +``` +git config lfs.customtransfer..path +git config lfs.customtransfer..args +git config lfs.standalonetransferagent +``` + +The agent name is derived from the executable filename (without extension). + +## Storage Paths + +The `lfsStoragePaths` input sets the `LFS_STORAGE_PATHS` environment variable. How these paths +are interpreted depends on the agent: + +| Agent | Path format | +|-------|------------| +| elastic-git-storage | Local paths, `webdav://` URLs, `rclone://` remotes | +| lfs-folderstore | Local directory paths | +| Custom | Agent-specific | + +## Inputs Reference + +| Input | Description | +|-------|-------------| +| `lfsTransferAgent` | Agent name (e.g., `elastic-git-storage`) or path to executable. Append `@version` for release pinning. | +| `lfsTransferAgentArgs` | Additional arguments passed to the agent | +| `lfsStoragePaths` | Semicolon-separated storage paths (set as `LFS_STORAGE_PATHS` env var) | From 73f5dc4e9343907a2582350cba7ef69df27d0eec Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 09:05:30 +0000 Subject: [PATCH 29/60] docs: test workflow engine and hot runner protocol Add documentation for two new orchestrator features: - Test Workflow Engine: YAML-based test suite definitions, taxonomy filters, structured results - Hot Runner Protocol: extensible runner registration, persistent editor providers Co-Authored-By: Claude Opus 4.6 --- .../11-test-workflow-engine.mdx | 168 ++++++++++++++ .../12-hot-runner-protocol.mdx | 207 ++++++++++++++++++ 2 files changed, 375 insertions(+) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx create mode 100644 docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx new file mode 100644 index 00000000..264afc60 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx @@ -0,0 +1,168 @@ +# Test Workflow Engine + +Orchestrator includes a test workflow engine that supports YAML-based test suite definitions, +multi-dimensional taxonomy filtering, and structured test result reporting. + +## Overview + +Instead of running tests via a single `buildMethod`, the test workflow engine lets you define +test suites as YAML configurations — specifying exactly which tests run for each CI event, +filtered by taxonomy metadata, with sequential execution dependencies. + +## Test Suite Definitions + +Test suites are YAML files that define ordered runs with filters: + +```yaml +name: pull-request +description: Fast feedback for pull requests +runs: + - name: fast + editMode: true + filters: + Maturity: Trusted + FeedbackSpeed: Fast,Moderate + Scope: Unit,Integration + timeout: 300 + + - name: basic + needs: [fast] + editMode: true + playMode: true + filters: + Maturity: Trusted,Adolescent + Scope: Unit,Integration,System + timeout: 600 + + - name: extended + needs: [basic] + playMode: true + filters: + Rigor: Strict + Scope: End To End + timeout: 1200 +``` + +### Suite Fields + +| Field | Description | +|-------|-------------| +| `name` | Suite identifier, used for cache keys and reporting | +| `description` | Human-readable description | +| `runs` | Ordered list of test runs | + +### Run Fields + +| Field | Description | +|-------|-------------| +| `name` | Run identifier | +| `needs` | List of run names that must complete first | +| `editMode` | Run Unity EditMode tests (default: false) | +| `playMode` | Run Unity PlayMode tests (default: false) | +| `builtClient` | Run tests against a built client (default: false) | +| `filters` | Taxonomy filters to select tests | +| `timeout` | Maximum run duration in seconds | + +## Taxonomy Filters + +Tests are categorized by multi-dimensional taxonomy metadata. Filters select tests by matching +against these dimensions: + +### Built-in Dimensions + +| Dimension | Values | Description | +|-----------|--------|-------------| +| Scope | Unit, Integration, System, End To End | Test boundary | +| Maturity | Trusted, Adolescent, Experimental | Test reliability | +| FeedbackSpeed | Fast, Moderate, Slow | Expected execution time | +| Execution | Synchronous, Asynchronous, Coroutine | Execution model | +| Rigor | Strict, Normal, Relaxed | Assertion strictness | +| Determinism | Deterministic, NonDeterministic | Repeatability | +| IsolationLevel | Full, Partial, None | External dependency isolation | + +### Filter Syntax + +Filters accept comma-separated values, regex patterns, and hierarchical dot-notation: + +```yaml +filters: + Scope: Unit,Integration # Match any of these values + Maturity: /Trusted|Adolescent/ # Regex pattern + Domain: Combat.Melee # Hierarchical match +``` + +### Custom Dimensions + +Projects can define additional taxonomy dimensions via a taxonomy definition file: + +```yaml +# .game-ci/taxonomy.yml +extensible_groups: + - name: SubjectLevel + values: [Class, Feature, System, Product] + - name: DataScenario + values: [HappyPath, EdgeCase, BoundaryValue, ErrorPath] +``` + +## Test Execution + +### EditMode Tests + +Standard Unity Test Framework tests that run in the editor without entering play mode: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + testSuitePath: .game-ci/test-suites/pr-suite.yml + testSuiteEvent: pr + targetPlatform: StandaloneLinux64 +``` + +### PlayMode Tests + +Unity tests that require entering play mode: + +```yaml +runs: + - name: playmode-tests + playMode: true + filters: + Scope: Integration,System +``` + +### Built-Client Tests + +Run tests against a previously built game client. Requires a build step before the test step: + +```yaml +runs: + - name: client-tests + builtClient: true + builtClientPath: ./Builds/StandaloneLinux64 + filters: + Scope: End To End +``` + +## Structured Results + +Test results are output in machine-readable formats: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + testSuitePath: .game-ci/test-suites/pr-suite.yml + testResultFormat: junit # junit, json, or both + testResultPath: ./test-results/ +``` + +Results integrate with GitHub Checks for inline failure reporting on pull requests. + +## Inputs Reference + +| Input | Description | +|-------|-------------| +| `testSuitePath` | Path to YAML test suite definition file | +| `testSuiteEvent` | CI event name for suite selection (pr, push, release) | +| `testTaxonomyPath` | Path to custom taxonomy definition YAML | +| `testResultFormat` | Output format: `junit`, `json`, or `both` | +| `testResultPath` | Directory for structured result output | diff --git a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx new file mode 100644 index 00000000..28d9d09a --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx @@ -0,0 +1,207 @@ +# Hot Runner Protocol + +Orchestrator supports an extensible runner registration protocol that allows any machine to +become a labeled build/test runner, with first-class support for persistent Unity editors as +high-performance providers. + +## Overview + +Traditional CI providers follow a cold-start model: provision a container, clone the repo, +restore caches, run the build, tear down. The Hot Runner Protocol enables persistent Unity +editors to serve as ultra-fast providers with incremental workspace sync. + +``` + ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ + │ Orchestrator │────►│ Runner Coord │────►│ Hot Editor │ + │ (CI/CLI) │ │ (routes jobs)│ │ (persistent)│ + └─────────────┘ └──────────────┘ └─────────────┘ + │ + ┌─────▼─────┐ + │ Workspace │ + │ (synced) │ + └───────────┘ +``` + +## Runner Transports + +Runners connect via pluggable transport protocols: + +| Transport | Description | Use Case | +|-----------|-------------|----------| +| `github` | Self-hosted GitHub Actions runner | Standard CI infrastructure | +| `websocket` | WebSocket/SignalR real-time connection | Custom dashboards, game platforms | +| `file` | Shared directory watch for job files | Simple setups, NAS-based farms | +| `local-network` | mDNS/Bonjour discovery + HTTP API | LAN build farms, office setups | +| `custom` | User-implemented runner interface | Any transport | + +### GitHub Runner Transport + +Register a hot runner as a self-hosted GitHub Actions runner: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + runnerTransport: github + runnerLabels: unity-2022,linux,hot + editorMode: persistent +``` + +The runner appears in your repository's self-hosted runner list and receives jobs via the +standard GitHub Actions dispatch mechanism. + +### WebSocket Transport + +Connect to a coordinator via WebSocket or SignalR: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + runnerTransport: websocket + runnerEndpoint: wss://build.example.com/runners + runnerLabels: unity-2022,windows,gpu +``` + +### File-Based Transport + +Watch a shared directory for JSON job files: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + runnerTransport: file + runnerEndpoint: /mnt/shared/build-jobs/ + runnerLabels: unity-2022,linux +``` + +### Local Network Transport + +Discover runners on the local network via mDNS: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + runnerTransport: local-network + runnerLabels: unity-2022,macos,m1 +``` + +## Editor Modes + +### Ephemeral (Default) + +Editor launches for each job and exits when complete. This is the current behavior for all +providers: + +```yaml +editorMode: ephemeral +``` + +### Persistent + +Editor stays running between jobs. The workspace is incrementally synced before each job: + +```yaml +editorMode: persistent +syncStrategy: incremental +``` + +Benefits: +- No editor startup time (saves 30-120 seconds per build) +- Unity Library folder stays warm — only changed assets reimport +- Domain reload only when scripts change + +### Hybrid + +Maintain a pool of persistent editors, scale up ephemeral instances for burst load: + +```yaml +editorMode: hybrid +``` + +## Incremental Sync + +When using persistent editors, only changed files are synced to the runner: + +| Strategy | Description | +|----------|-------------| +| `full` | Full clone + cache restore (default, current behavior) | +| `incremental` | Git pull + selective reimport | +| `delta` | Stream only changed files (fastest, requires persistent workspace) | + +```yaml +syncStrategy: delta +``` + +## Output Types + +Hot runners can produce multiple output types: + +| Type | Description | +|------|-------------| +| `build` | Standard build artifact | +| `test-results` | Structured test results (JUnit, JSON) | +| `data-export` | Exported data files | +| `images` | Screenshots, renders, atlas previews | +| `server-build` | Dedicated server build | +| `logs` | Structured build/test logs | +| `metrics` | Performance metrics, asset statistics | + +```yaml +outputTypes: build,test-results,metrics +``` + +## Cache Profiles + +Named cache profiles control caching behavior per runner: + +```yaml +cacheProfile: fast-iteration +``` + +| Profile | Description | +|---------|-------------| +| `full-rebuild` | Complete cache (Library + LFS + build) | +| `fast-iteration` | Minimal cache, relies on persistent workspace | +| `test-only` | Cache test results, inherit Library from build | +| `custom` | Project-defined cache configuration | + +Cache keys incorporate: platform, Unity version, branch, profile name, and content hash. + +## Runner Registration Protocol + +Runners communicate using a simple JSON protocol, regardless of transport: + +**Register:** +```json +{ + "type": "register", + "labels": ["unity-2022", "linux", "gpu"], + "capabilities": { + "unityVersion": "2022.3.20f1", + "platform": "StandaloneLinux64", + "gpu": true + } +} +``` + +**Heartbeat:** +```json +{ + "type": "heartbeat", + "runnerId": "runner-abc-123", + "status": "idle" +} +``` + +**Job dispatch and results follow the same JSON protocol over the chosen transport.** + +## Inputs Reference + +| Input | Description | +|-------|-------------| +| `runnerTransport` | Transport protocol: `github`, `websocket`, `file`, `local-network`, `custom` | +| `runnerEndpoint` | Connection endpoint for the transport | +| `runnerLabels` | Comma-separated runner labels for job routing | +| `editorMode` | Editor lifecycle: `ephemeral`, `persistent`, `hybrid` | +| `syncStrategy` | Workspace sync: `full`, `incremental`, `delta` | +| `outputTypes` | Comma-separated output types to collect | +| `cacheProfile` | Named cache profile | From ccb4a27299cbf0eb1003fe14d233243ba2f20b58 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 09:09:57 +0000 Subject: [PATCH 30/60] docs: add structured build output system page Co-Authored-By: Claude Opus 4.6 --- .../13-build-output-system.mdx | 215 ++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx new file mode 100644 index 00000000..40a65dfb --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx @@ -0,0 +1,215 @@ +# Structured Build Output System + +Orchestrator supports multiple build output types with structured manifests, per-type +post-processing pipelines, and first-class GitHub integration. + +## Overview + +Production Unity workflows produce many output types beyond a single build artifact — test results, +screenshots, server builds, exported data, metrics, and logs. Each type needs different handling: +storage, processing, reporting, and retention. The output system provides a structured way to +declare, collect, process, and report on all of these. + +## Declaring Output Types + +Specify which output types a build produces: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + targetPlatform: StandaloneLinux64 + outputTypes: build,test-results,metrics,images +``` + +## Built-in Output Types + +| Type | Default Path | Description | +|------|-------------|-------------| +| `build` | `./Builds/{platform}/` | Standard game build artifact | +| `test-results` | `./TestResults/` | NUnit/JUnit XML test results | +| `server-build` | `./Builds/{platform}-server/` | Dedicated server build | +| `data-export` | `./Exports/` | Exported data files (CSV, JSON, binary) | +| `images` | `./Captures/` | Screenshots, render captures, atlas previews | +| `logs` | `./Logs/` | Structured build and test logs | +| `metrics` | `./Metrics/` | Build performance metrics, asset statistics | +| `coverage` | `./Coverage/` | Code coverage reports | + +## Output Manifest + +Every build produces a JSON manifest describing all outputs: + +```json +{ + "buildGuid": "abc-123", + "timestamp": "2024-01-15T10:30:00Z", + "outputs": [ + { + "type": "build", + "path": "./Builds/StandaloneLinux64/", + "size": 524288000, + "hash": "sha256:abc...", + "metadata": { + "platform": "StandaloneLinux64", + "scripting": "IL2CPP" + } + }, + { + "type": "test-results", + "path": "./TestResults/editmode-results.xml", + "format": "nunit3", + "summary": { + "total": 342, + "passed": 340, + "failed": 1, + "skipped": 1 + } + }, + { + "type": "images", + "path": "./Captures/", + "files": ["main-menu.png", "gameplay-01.png"] + }, + { + "type": "metrics", + "path": "./Metrics/build-metrics.json", + "metadata": { + "compileTime": 45.2, + "assetCount": 12500, + "buildSize": 524288000 + } + } + ] +} +``` + +Control manifest output with: + +```yaml +outputManifestPath: ./build-manifest.json +``` + +## Post-Processing Pipelines + +Each output type has a configurable processing pipeline that runs after the build: + +### Test Results + +Parse test result XML files and report to GitHub: + +```yaml +outputPipelines: + test-results: + - parse: nunit3 + - report: github-checks + - archive: s3 +``` + +Test results appear as inline annotations on pull request files, showing exactly where +failures occurred. + +### Image Captures + +Thumbnail, diff against baselines, and attach to PRs: + +```yaml +outputPipelines: + images: + - thumbnail: { maxWidth: 256 } + - diff: { baseline: ./Baselines/ } + - report: github-pr-comment +``` + +Provide a baseline directory for visual regression testing: + +```yaml +imageBaselinePath: ./Tests/Baselines/ +``` + +### Build Metrics + +Aggregate metrics and track trends across builds: + +```yaml +outputPipelines: + metrics: + - aggregate: { groupBy: platform } + - trend: { history: 30 } + - report: github-check-summary +``` + +Set the number of historical builds to retain for trend analysis: + +```yaml +metricsHistory: 30 +``` + +## Custom Output Types + +Register project-specific output types: + +```yaml +customOutputTypes: + - name: addressables-catalog + path: ./ServerData/ + postProcess: + - validate: json-schema + - upload: cdn + - name: localization-export + path: ./Exports/Localization/ + postProcess: + - validate: csv + - archive: s3 +``` + +Custom types can also be defined in a file at `.game-ci/output-types.yml`. + +## GitHub Integration + +Output types automatically integrate with GitHub CI surfaces: + +| Output Type | GitHub Surface | +|-------------|---------------| +| Test results | Check annotations — inline failure markers on PR diffs | +| Images | PR comment — image grid with baseline diffs | +| Metrics | Check summary — trend charts and delta tables | +| Coverage | PR comment — coverage percentage and delta | +| Build artifacts | Check run — download links | + +## Combining with Test Suites + +The output system works with the [Test Workflow Engine](test-workflow-engine) to provide +structured test results per suite run: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + testSuitePath: .game-ci/test-suites/pr-suite.yml + testResultFormat: both # junit + json + testResultPath: ./TestResults/ + outputTypes: test-results,metrics,coverage +``` + +Each test suite run produces its own output entries in the manifest. + +## Combining with Hot Runners + +[Hot runners](hot-runner-protocol) can produce multiple output types per job. The output +manifest is returned as part of the job result: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + editorMode: persistent + outputTypes: build,test-results,images,metrics +``` + +## Inputs Reference + +| Input | Description | +|-------|-------------| +| `outputTypes` | Comma-separated output types to collect | +| `outputManifestPath` | Path for the output manifest JSON file | +| `outputPipelines` | YAML defining per-type post-processing pipelines | +| `customOutputTypes` | YAML defining project-specific output types | +| `imageBaselinePath` | Path to baseline images for visual regression diffing | +| `metricsHistory` | Number of historical builds for trend tracking | From 591f549c0b67ff4333c69a966c8eedcd31723708 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 09:26:37 +0000 Subject: [PATCH 31/60] docs: separate incremental sync protocol, update hot runner focus Co-Authored-By: Claude Opus 4.6 --- .../12-hot-runner-protocol.mdx | 105 ++++----------- .../14-incremental-sync-protocol.mdx | 125 ++++++++++++++++++ 2 files changed, 154 insertions(+), 76 deletions(-) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx index 28d9d09a..dc703dc5 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx @@ -1,26 +1,18 @@ # Hot Runner Protocol -Orchestrator supports an extensible runner registration protocol that allows any machine to -become a labeled build/test runner, with first-class support for persistent Unity editors as -high-performance providers. +Orchestrator supports persistent, process-based build/test providers. Hot runners are long-lived +Unity editor processes that accept jobs immediately without cold-start overhead. ## Overview -Traditional CI providers follow a cold-start model: provision a container, clone the repo, -restore caches, run the build, tear down. The Hot Runner Protocol enables persistent Unity -editors to serve as ultra-fast providers with incremental workspace sync. +Traditional providers follow a cold-start model: provision → clone → cache restore → build → +tear down. Hot runners eliminate startup latency by keeping editors warm and ready. -``` - ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ - │ Orchestrator │────►│ Runner Coord │────►│ Hot Editor │ - │ (CI/CLI) │ │ (routes jobs)│ │ (persistent)│ - └─────────────┘ └──────────────┘ └─────────────┘ - │ - ┌─────▼─────┐ - │ Workspace │ - │ (synced) │ - └───────────┘ -``` +A hot runner is an **actively running process** that: +- Stays alive between jobs +- Accepts work via a transport protocol +- Returns structured results via the [artifact system](build-output-system) +- Can run on any machine (local, server, cloud, container) ## Runner Transports @@ -46,9 +38,6 @@ Register a hot runner as a self-hosted GitHub Actions runner: editorMode: persistent ``` -The runner appears in your repository's self-hosted runner list and receives jobs via the -standard GitHub Actions dispatch mechanism. - ### WebSocket Transport Connect to a coordinator via WebSocket or SignalR: @@ -63,7 +52,7 @@ Connect to a coordinator via WebSocket or SignalR: ### File-Based Transport -Watch a shared directory for JSON job files: +Watch a shared directory for JSON job files — the simplest transport: ```yaml - uses: game-ci/unity-builder@v4 @@ -88,8 +77,7 @@ Discover runners on the local network via mDNS: ### Ephemeral (Default) -Editor launches for each job and exits when complete. This is the current behavior for all -providers: +Editor launches for each job and exits. Current behavior for all providers: ```yaml editorMode: ephemeral @@ -97,78 +85,37 @@ editorMode: ephemeral ### Persistent -Editor stays running between jobs. The workspace is incrementally synced before each job: +Editor stays running between jobs. Combine with +[incremental sync](incremental-sync-protocol) for fastest iteration: ```yaml editorMode: persistent -syncStrategy: incremental ``` Benefits: -- No editor startup time (saves 30-120 seconds per build) +- No editor startup time (saves 30–120 seconds per build) - Unity Library folder stays warm — only changed assets reimport - Domain reload only when scripts change ### Hybrid -Maintain a pool of persistent editors, scale up ephemeral instances for burst load: +Pool of persistent editors, scale up ephemeral instances for burst load: ```yaml editorMode: hybrid ``` -## Incremental Sync - -When using persistent editors, only changed files are synced to the runner: - -| Strategy | Description | -|----------|-------------| -| `full` | Full clone + cache restore (default, current behavior) | -| `incremental` | Git pull + selective reimport | -| `delta` | Stream only changed files (fastest, requires persistent workspace) | - -```yaml -syncStrategy: delta -``` - -## Output Types - -Hot runners can produce multiple output types: - -| Type | Description | -|------|-------------| -| `build` | Standard build artifact | -| `test-results` | Structured test results (JUnit, JSON) | -| `data-export` | Exported data files | -| `images` | Screenshots, renders, atlas previews | -| `server-build` | Dedicated server build | -| `logs` | Structured build/test logs | -| `metrics` | Performance metrics, asset statistics | - -```yaml -outputTypes: build,test-results,metrics -``` - -## Cache Profiles +## Runner Labels -Named cache profiles control caching behavior per runner: +Runners self-describe with labels. Jobs are dispatched to runners matching required labels: ```yaml -cacheProfile: fast-iteration +runnerLabels: unity-2022,linux,gpu,hot ``` -| Profile | Description | -|---------|-------------| -| `full-rebuild` | Complete cache (Library + LFS + build) | -| `fast-iteration` | Minimal cache, relies on persistent workspace | -| `test-only` | Cache test results, inherit Library from build | -| `custom` | Project-defined cache configuration | - -Cache keys incorporate: platform, Unity version, branch, profile name, and content hash. - ## Runner Registration Protocol -Runners communicate using a simple JSON protocol, regardless of transport: +Runners communicate using a JSON protocol, regardless of transport: **Register:** ```json @@ -192,7 +139,16 @@ Runners communicate using a simple JSON protocol, regardless of transport: } ``` -**Job dispatch and results follow the same JSON protocol over the chosen transport.** +Job dispatch and results follow the same JSON protocol. + +## Composability + +Hot runners compose with other orchestrator features: + +- **[Incremental Sync](incremental-sync-protocol)** — Receive workspace updates without full + clone. Hot runners + incremental sync = fastest possible iteration. +- **[Artifact System](build-output-system)** — Return structured, typed results. +- **[Test Workflow Engine](test-workflow-engine)** — Execute test suites with taxonomy filtering. ## Inputs Reference @@ -202,6 +158,3 @@ Runners communicate using a simple JSON protocol, regardless of transport: | `runnerEndpoint` | Connection endpoint for the transport | | `runnerLabels` | Comma-separated runner labels for job routing | | `editorMode` | Editor lifecycle: `ephemeral`, `persistent`, `hybrid` | -| `syncStrategy` | Workspace sync: `full`, `incremental`, `delta` | -| `outputTypes` | Comma-separated output types to collect | -| `cacheProfile` | Named cache profile | diff --git a/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx new file mode 100644 index 00000000..e6e68852 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx @@ -0,0 +1,125 @@ +# Incremental Sync Protocol + +The incremental sync protocol delivers workspace changes to build/test environments without +traditional caching. Changes come from git deltas, direct input, or generic storage. + +## Overview + +Traditional caching archives the Library folder, pushes to storage, pulls on next build, and +extracts. Even with cache hits, this takes minutes. The incremental sync protocol eliminates +caching entirely for warm environments — instead of "restore the world," it says "here's what +changed." + +## Sync Strategies + +| Strategy | Source | Use Case | +|----------|--------|----------| +| `full` | Full clone + cache restore | Default, cold environments | +| `git-delta` | Git diff since last sync | Standard CI, PR builds | +| `direct-input` | File content passed as job input | No-push workflows, rapid iteration | +| `storage-pull` | Changed files from rclone remote | Large inputs, binary assets | + +## Git Delta Sync + +For git-based workflows: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + syncStrategy: git-delta +``` + +The protocol: +1. Runner tracks its last sync commit SHA +2. On job dispatch, receives target commit SHA +3. Fetches and diffs: `git diff --name-only ..` +4. Checks out target commit +5. Unity reimports only changed assets (Library stays warm) + +## Direct Input Sync + +Trigger jobs **without pushing to git**. Changes are passed as input: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + syncStrategy: direct-input + syncInputRef: storage://my-remote/inputs/changes.tar.lz4 +``` + +For small changes, content can be inline. For large inputs, content is pulled from generic +storage — backed by rclone, so **any storage provider works**: S3, GCS, Azure Blob, local +filesystem, WebDAV, SFTP, and dozens more. + +This enables powerful workflows: +- "Run tests on these changes before I commit" +- "Build with this asset override without touching the repo" +- "Apply this config and validate" +- "Test a hotfix without a PR" + +## Storage-Backed Input + +Large inputs are stored via rclone and referenced by URI: + +```yaml +syncInputRef: storage://my-remote/job-inputs/changes.tar.lz4 +``` + +The protocol: +1. Job includes a storage URI reference +2. Runner pulls the archive from the rclone remote +3. Extracts and overlays onto workspace +4. Executes the build/test +5. Optionally reverts the overlay after completion + +Users don't need git push access to trigger builds — just write access to the storage backend. + +### Why rclone? + +rclone supports 70+ storage backends out of the box. By using rclone as the storage +abstraction, any provider is supported without additional configuration: + +``` +storage://s3:my-bucket/inputs/ # AWS S3 +storage://gcs:my-bucket/inputs/ # Google Cloud Storage +storage://azure:container/inputs/ # Azure Blob +storage:///mnt/shared/inputs/ # Local filesystem +storage://webdav:server/inputs/ # WebDAV +storage://sftp:server/inputs/ # SFTP +``` + +## Composability + +The incremental sync protocol is **independent of hot runners**. It's a workspace update +strategy that works with any provider: + +| Provider | Sync Strategy | How It Works | +|----------|--------------|--------------| +| Hot runner (persistent) | `git-delta` | Fastest — warm editor, minimal changes | +| Hot runner (persistent) | `direct-input` | No-push iteration | +| Retained workspace | `git-delta` | Fast — workspace persists, no editor warmth | +| Cold container | `storage-pull` | Pull overlay, apply to fresh clone | + +Hot runners + incremental sync = fastest possible iteration cycle. + +## Sync State + +Runners maintain sync state for delta calculations: + +```json +{ + "lastSyncCommit": "abc123def", + "lastSyncTimestamp": "2024-01-15T10:30:00Z", + "workspaceHash": "sha256:...", + "pendingOverlays": [] +} +``` + +## Inputs Reference + +| Input | Description | +|-------|-------------| +| `syncStrategy` | Sync approach: `full`, `git-delta`, `direct-input`, `storage-pull` | +| `syncInputRef` | URI for direct-input or storage-pull content | +| `syncStorageRemote` | rclone remote for storage-backed inputs (defaults to `rcloneRemote`) | +| `syncRevertAfter` | Revert overlaid changes after job (default: `true`) | From 768106a60ecae2083166688db1dd556a5649fee0 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 10:42:24 +0000 Subject: [PATCH 32/60] docs: add massive projects and monorepo support advanced topics Add two new documentation pages to the orchestrator advanced topics: - 15-massive-projects.mdx: Two-level workspaces, move-centric caching, custom LFS agents, and performance tips for 100GB+ projects - 16-monorepo-support.mdx: Submodule profiles, variant overlays, multi-product CI matrix, and framework configuration patterns Closes game-ci/unity-builder#802 Closes game-ci/unity-builder#803 Co-Authored-By: Claude Opus 4.6 --- .../15-massive-projects.mdx | 237 ++++++++++++++++ .../16-monorepo-support.mdx | 254 ++++++++++++++++++ 2 files changed, 491 insertions(+) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx create mode 100644 docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx new file mode 100644 index 00000000..f36ae323 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx @@ -0,0 +1,237 @@ +# Massive Projects + +Orchestrator includes specific support for Unity projects at extreme scale — repositories +exceeding 100 GB, asset counts above 500,000 files, and Library folders that dwarf the source +tree itself. + +## Overview + +Standard CI assumptions break down at this scale: + +- **Clone times** — A 100 GB repository with Git LFS takes 15–45 minutes to clone cold, + consuming most of a build budget before Unity opens. +- **Library folder sizes** — Import caches for large projects routinely reach 30–80 GB. Tarring, + uploading, downloading, and extracting this on every build is impractical. +- **LFS bandwidth** — Pulling all LFS objects for every build exhausts quotas and slows + pipelines. Most builds need only a fraction of the asset set. +- **Cache inflation** — GitHub Actions cache and similar systems impose size limits + (typically 10 GB per entry) that Library folders quickly exceed. +- **CI timeouts** — Default job timeouts of 6 hours are insufficient for cold clones followed + by full imports on large projects. + +Orchestrator addresses each of these with a two-level workspace architecture, move-centric +caching, selective LFS hydration, and submodule profile filtering. + +## Two-Level Workspace Architecture + +Orchestrator manages workspaces at two levels: + +**Root workspace** — A lean, long-lived clone of the repository. It contains the full git +history and index, a minimal set of LFS objects (only those needed for compilation), and no +Unity Library folder. The root workspace is cached across builds and updated incrementally. + +**Child workspaces** — Per-build-target workspaces derived from the root. Each child is +LFS-hydrated for its specific asset paths, contains the Library folder for its platform target, +and is retained between builds of the same target. + +``` +root-workspace/ + .git/ ← full history, minimal LFS + Assets/ ← source files only + Packages/ + +child-workspaces/ + StandaloneLinux64/ + Assets/ ← LFS-hydrated for this target + Library/ ← warm, 40 GB, retained + StandaloneWindows64/ + Assets/ + Library/ ← warm, separate cache, retained + WebGL/ + Assets/ + Library/ +``` + +The orchestrator manages this layout automatically when `retainedWorkspaces: true` is set. +Child workspaces are created on first build and reused on subsequent builds of the same target. +Only changed files from git delta sync are applied to each child. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + retainedWorkspaces: true + workspaceRoot: /mnt/build-storage/my-game + targetPlatform: StandaloneLinux64 +``` + +## Move-Centric Caching + +Traditional caching copies files: archive → upload → download → extract. For a 50 GB Library +folder this is a substantial I/O operation even with a cache hit. + +Orchestrator uses atomic folder moves on local storage instead. On NTFS and ext4, moving a +directory is an O(1) metadata operation regardless of how many files it contains. A 50 GB +Library folder moves in milliseconds. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + localCacheRoot: /mnt/build-storage/cache + cacheStrategy: move +``` + +The cache lifecycle for a Library folder: + +1. Build starts — move Library from cache to workspace (instant) +2. Unity runs — Library is warm, only changed assets reimport +3. Build ends — move Library back to cache (instant) +4. Next build — Library is already warm at cache location + +This eliminates the archive/upload/download/extract cycle entirely for builds running on +retained storage. Remote cache fallback (S3, GCS, Azure Blob via rclone) is still available +for cold runners that do not have local cache access. + +| Cache Strategy | Library Move Time | Suitable For | +|---------------|-------------------|--------------| +| `move` | Milliseconds | Retained storage, build farms | +| `rclone` | Minutes (size-dependent) | Remote cache, ephemeral runners | +| `github-cache` | Minutes (10 GB limit) | Small projects only | + +## Custom LFS Transfer Agents + +Standard Git LFS transfers every object through a single HTTP endpoint. For large projects +this creates a bottleneck, especially when only a subset of assets is needed for a given build. + +Orchestrator supports alternative LFS transfer agents via the `lfsTransferAgent` input. A +transfer agent is a binary that Git invokes in place of the standard LFS client. Agents can +implement partial transfer, parallel streams, resumable downloads, and custom storage backends. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + lfsTransferAgent: elastic-git-storage + lfsTransferAgentArgs: '--verbose' + lfsStoragePaths: 'Assets/LargeAssets,Assets/Cinematics' +``` + +`lfsStoragePaths` limits LFS hydration to the specified asset directories. Files outside these +paths are not downloaded, reducing transfer volume to only what the build target needs. + +**elastic-git-storage** is the recommended agent for large projects. It supports: +- Parallel multi-stream transfers +- Resumable downloads after network interruption +- Content-addressed deduplication across workspaces +- Direct object storage access (S3, GCS, Azure Blob) without a relay server + +**rclone-based agents** are an alternative when the LFS server cannot be replaced. They proxy +transfers through any rclone-supported backend, enabling caching and bandwidth throttling. + +To use a custom agent, provide the agent binary path: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + lfsTransferAgent: /usr/local/bin/my-lfs-agent + lfsTransferAgentArgs: '--threads 8 --cache /mnt/lfs-cache' +``` + +## Submodule Profiles + +Monorepos with many submodules suffer initialization overhead proportional to the number of +active submodules. A project with 30 submodules where any given build target needs 8 wastes +time and bandwidth initializing the other 22. + +Submodule profiles define exactly which submodules to initialize for a given build context. +See the [Monorepo Support](monorepo-support) page for full profile format and configuration. + +For massive projects, the key practice is keeping each build target's profile minimal: + +```yaml +primary_submodule: CoreFramework +submodules: + - name: CoreFramework + branch: main + - name: RenderPipeline + branch: main + - name: OptionalCinematicTools + branch: empty # skipped for standard builds + - name: Plugins* + branch: main +``` + +Profile initialization is atomic — skipped submodules are never touched, so build time scales +with the active submodule set rather than the total repository size. + +## Incremental Sync + +For projects where even a targeted LFS pull is expensive, incremental sync avoids full +re-clones entirely. See the [Incremental Sync Protocol](incremental-sync-protocol) page for +the full protocol. + +The two strategies most relevant to massive projects: + +**git-delta** — The runner tracks its last sync commit SHA. On job dispatch it receives the +target SHA, diffs the two, and checks out only the changed files. Assets that have not changed +are not touched, and their Library import state remains valid. + +**storage-pull** — For assets that live outside git (too large for LFS, or managed by a +separate pipeline), the runner pulls only the changed files from a generic storage remote. This +combines with git-delta so that code changes and asset changes are both handled incrementally. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + syncStrategy: git-delta + retainedWorkspaces: true +``` + +Together, retained workspaces and git-delta sync deliver the minimal possible import work on +every build: Unity sees only the files that actually changed. + +## Build Performance Tips + +**Parallelise platform builds.** Use a GitHub Actions matrix across platform targets. Each +target maintains its own child workspace and Library folder, so builds do not interfere. + +```yaml +strategy: + matrix: + targetPlatform: + - StandaloneLinux64 + - StandaloneWindows64 + - WebGL +``` + +**Warm the cache before the sprint.** At the start of a sprint cycle, run a full import on +each target platform during off-hours. Retained workspaces mean subsequent PR builds start +with warm Library folders. + +**Use LFS partial clone patterns.** Structure the repository so assets are grouped by build +target under predictable paths (`Assets/Platforms/Linux/`, `Assets/Platforms/WebGL/`). This +makes `lfsStoragePaths` filtering straightforward and predictable. + +**Reserve timeouts generously.** Set `buildTimeout` to account for cold-start scenarios, even +when warm builds are expected. The first build after a runner restart will be cold. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + buildTimeout: 360 # minutes +``` + +**Monitor Library folder health.** Occasional full reimports are necessary when Unity upgrades +or large-scale asset reorganizations occur. Schedule these explicitly rather than discovering +them mid-sprint when a runner's Library becomes stale. + +## Inputs Reference + +| Input | Description | +|-------|-------------| +| `retainedWorkspaces` | Keep child workspaces between builds (`true` / `false`) | +| `workspaceRoot` | Base path for root and child workspace storage | +| `localCacheRoot` | Local filesystem path for move-centric Library cache | +| `cacheStrategy` | Cache approach: `move`, `rclone`, `github-cache` | +| `lfsTransferAgent` | Name or path of a custom LFS transfer agent binary | +| `lfsTransferAgentArgs` | Additional arguments passed to the LFS transfer agent | +| `lfsStoragePaths` | Comma-separated asset paths to limit LFS hydration | +| `buildTimeout` | Maximum build duration in minutes | diff --git a/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx new file mode 100644 index 00000000..db642db3 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx @@ -0,0 +1,254 @@ +# Monorepo Support + +Orchestrator provides first-class support for Unity monorepos — single repositories that +contain multiple products sharing engine code, submodules, and build configuration. + +## Overview + +A Unity monorepo typically contains: + +- A shared engine layer (`Assets/_Engine/`) used by all products +- Game-specific code separated into submodules (`Assets/_Game/Submodules/`) +- Per-product build configuration (build methods, target platforms, Steam IDs) +- Shared tooling, CI workflows, and automation scripts + +The challenge is that different products need different subsets of the repository. A build of +Product A should not initialize submodules that only Product B needs. A server build should +not pull in client-only assets. A CI run for a hotfix should not reimport assets belonging to +an unrelated product. + +Orchestrator addresses this through a profile system that controls submodule initialization +per product and build type, combined with per-product framework configuration. + +## Submodule Profile System + +Profiles are YAML files that declare which submodules to initialize for a given product and +context. Each submodule entry specifies either `branch: main` (initialize) or `branch: empty` +(skip). + +### Profile Format + +```yaml +primary_submodule: MyGameFramework +submodules: + - name: CoreFramework + branch: main + - name: OptionalModule + branch: empty + - name: Plugins* + branch: main +``` + +`primary_submodule` identifies the main game submodule — the orchestrator uses this as the +root of the build context. + +Each entry under `submodules` names a submodule (or a glob pattern matching multiple +submodules) and declares whether it should be initialized. Submodules marked `branch: empty` +are never touched during initialization, regardless of what other profiles or defaults specify. + +### Glob Pattern Support + +Glob patterns match multiple submodules with a single entry. This is useful for plugin groups +that always travel together: + +```yaml +submodules: + - name: Plugins* + branch: main # initializes PluginsCore, PluginsAudio, PluginsLocalization, etc. + - name: ThirdParty* + branch: empty # skips all ThirdParty submodules +``` + +Patterns are matched in order. The first matching entry wins, so more specific entries should +appear before broader patterns. + +### Variant Overlays + +Variants override specific submodule entries from a base profile. A common use case is a +`server.yml` variant that skips client-only assets and adds server-specific submodules: + +Base profile (`config/submodule-profiles/my-game/ci/profile.yml`): + +```yaml +primary_submodule: MyGameFramework +submodules: + - name: CoreFramework + branch: main + - name: ClientUI + branch: main + - name: ServerRuntime + branch: empty +``` + +Server variant (`config/submodule-profiles/my-game/ci/server.yml`): + +```yaml +overrides: + - name: ClientUI + branch: empty # not needed for server builds + - name: ServerRuntime + branch: main # required for server builds +``` + +The variant is merged on top of the base profile at initialization time. Only the listed +entries are overridden; all others inherit from the base. + +## Configuration + +Specify profiles and variants as action inputs: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + submoduleProfilePath: config/submodule-profiles/my-game/ci/profile.yml + submoduleVariantPath: config/submodule-profiles/my-game/ci/server.yml +``` + +When `submoduleProfilePath` is set, orchestrator reads the profile before any git operations +and initializes only the listed submodules. Skipped submodules are never cloned, fetched, or +touched. + +When `submoduleVariantPath` is also set, it is merged on top of the base profile before +initialization begins. + +If neither input is set, orchestrator falls back to standard git submodule initialization +(all submodules, no filtering). + +## Multi-Product CI Matrix + +A monorepo with multiple products can build all products in parallel using a GitHub Actions +matrix. Each matrix entry specifies a different profile, producing independent builds from +the same repository checkout. + +```yaml +jobs: + build: + strategy: + matrix: + include: + - product: my-game + profile: config/submodule-profiles/my-game/ci/profile.yml + buildMethod: MyGame.BuildScripts.BuildGame + targetPlatform: StandaloneLinux64 + - product: my-game-server + profile: config/submodule-profiles/my-game/ci/profile.yml + variant: config/submodule-profiles/my-game/ci/server.yml + buildMethod: MyGame.BuildScripts.BuildServer + targetPlatform: StandaloneLinux64 + - product: my-other-game + profile: config/submodule-profiles/my-other-game/ci/profile.yml + buildMethod: MyOtherGame.BuildScripts.BuildGame + targetPlatform: StandaloneWindows64 + steps: + - uses: game-ci/unity-builder@v4 + with: + submoduleProfilePath: ${{ matrix.profile }} + submoduleVariantPath: ${{ matrix.variant }} + buildMethod: ${{ matrix.buildMethod }} + targetPlatform: ${{ matrix.targetPlatform }} +``` + +Each matrix job initializes only the submodules its profile declares. Products do not +interfere with each other's initialization or build output. + +## Shared Code and Assembly Definitions + +Unity Assembly Definitions (`.asmdef` files) enforce code boundaries within the monorepo. +The recommended layout separates shared engine code from game-specific code: + +``` +Assets/_Engine/ ← shared engine systems + Physics/ + Engine.Physics.asmdef + Rendering/ + Engine.Rendering.asmdef + +Assets/_Game/ + Shared/Code/ ← shared game framework + Services/ + Game.Services.asmdef + UI/ + Game.UI.asmdef + Submodules/ + MyGameFramework/ ← product-specific, in its own submodule + Code/ + MyGame.asmdef +``` + +Assembly definitions in `Assets/_Engine/` reference only engine-level namespaces. Assembly +definitions in `Assets/_Game/Shared/Code/` may reference engine assemblies. Product-specific +assemblies reference both, but never each other across product boundaries. + +This structure means Unity can compile and test each product's assembly graph independently, +and compile errors in one product do not block builds of another. + +## Framework Configuration + +Per-product build configuration belongs in a central frameworks file. This is the single +source of truth for Steam App IDs, build methods, and supported platforms per product: + +```yaml +# config/frameworks.yml +frameworks: + my-game: + steamAppId: 123456 + buildMethod: MyGame.BuildScripts.BuildGame + platforms: + - StandaloneLinux64 + - StandaloneWindows64 + - StandaloneOSX + my-game-server: + steamAppId: 123457 + buildMethod: MyGame.BuildScripts.BuildServer + platforms: + - StandaloneLinux64 + my-other-game: + steamAppId: 789012 + buildMethod: MyOtherGame.BuildScripts.BuildGame + platforms: + - StandaloneWindows64 + - WebGL +``` + +CI workflows read from this file to populate matrix entries and avoid duplicating +product-specific values across workflow files. A single change to `frameworks.yml` propagates +to all workflows that reference it. + +## Best Practices + +**Keep profiles small.** A profile should list only what a build actually requires. Err toward +`branch: empty` for anything that is not clearly needed. Unnecessary submodule initialization +adds clone time and increases the chance of conflicts. + +**Use glob patterns for plugin groups.** Plugins that always travel together (a vendor SDK +split across three submodules, for example) should share a naming prefix so a single glob +entry controls them all. This reduces profile maintenance as new plugins are added. + +**Use variant overlays for build-type differences.** Do not create separate base profiles for +client and server builds. Start with a shared base profile and apply a server variant on top. +This keeps the diff between build types explicit and minimizes duplication. + +**Validate profiles in CI.** Add a profile validation step that checks every submodule named +in a profile actually exists in `.gitmodules`. This catches typos and stale entries before +they cause initialization failures on build agents. + +```yaml +- name: Validate submodule profiles + run: | + .\automation\ValidateSubmoduleProfiles.ps1 \ + -ProfileDir config/submodule-profiles \ + -GitmodulesPath .gitmodules + shell: powershell +``` + +**Document the profile per product.** Each product's profile directory should contain a brief +README explaining which submodules are in scope, which are intentionally excluded, and which +variant files exist. New contributors should not need to reverse-engineer profile intent from +the YAML alone. + +## Inputs Reference + +| Input | Description | +|-------|-------------| +| `submoduleProfilePath` | Path to the profile YAML file controlling submodule initialization | +| `submoduleVariantPath` | Path to a variant YAML file overlaid on top of the base profile | From 0f40a4a58b3f93fa1906085bfc23bc11b0da69fe Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 12:10:40 +0000 Subject: [PATCH 33/60] docs: add build reliability advanced topics page Co-Authored-By: Claude Opus 4.6 --- .../17-build-reliability.mdx | 210 ++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx b/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx new file mode 100644 index 00000000..3ad32a85 --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx @@ -0,0 +1,210 @@ +--- +sidebar_position: 17 +--- + +# Build Reliability + +Build reliability features harden CI builds against common failure modes: git corruption on +persistent runners, Windows filesystem issues with cross-platform repositories, and build +output management. All features are opt-in via action inputs and fail gracefully — a reliability +check that encounters an error logs a warning rather than failing the build. + +## Git Integrity Checking + +Self-hosted runners with persistent workspaces accumulate state between builds. Aborted jobs, +disk errors, and concurrent git operations can leave the repository in a corrupted state. When +this happens, the next build fails with cryptic git errors that are difficult to diagnose. + +Git integrity checking catches corruption before it causes build failures. + +### What It Checks + +The integrity check runs three validations in sequence: + +1. **`git fsck --no-dangling`** — Detects broken links, missing objects, and corrupt pack data + in the local repository. The `--no-dangling` flag suppresses harmless warnings about + unreachable objects that are normal in CI environments. + +2. **Stale lock files** — Scans the `.git/` directory recursively for any files ending in + `.lock` (`index.lock`, `shallow.lock`, `config.lock`, `HEAD.lock`, `refs/**/*.lock`). These + are left behind by git processes that were killed mid-operation and prevent subsequent git + commands from running. All lock files found are removed. + +3. **Submodule backing stores** — For each submodule declared in `.gitmodules`, validates that + the `.git` file inside the submodule directory points to an existing backing store under + `.git/modules/`. A broken backing store reference means the submodule's history is + inaccessible, and any git operation inside it will fail. + +### Configuration + +```yaml +- uses: game-ci/unity-builder@v4 + with: + gitIntegrityCheck: 'true' +``` + +### Automatic Recovery + +When `gitAutoRecover` is enabled (the default when `gitIntegrityCheck` is on) and corruption is +detected, the service attempts recovery: + +1. Remove the corrupted `.git` directory entirely +2. Re-initialize the repository with `git init` +3. The checkout action completes the clone on the next step + +This is a last-resort recovery. It works because the orchestrator's checkout step will +re-populate the repository from the remote after re-initialization. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + gitIntegrityCheck: 'true' + gitAutoRecover: 'true' # this is the default when gitIntegrityCheck is enabled +``` + +To run integrity checks without automatic recovery (report-only mode), disable it explicitly: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + gitIntegrityCheck: 'true' + gitAutoRecover: 'false' +``` + +In report-only mode, detected corruption is logged as a warning and the build continues. This +is useful for monitoring repository health without taking corrective action. + +## Reserved Filename Cleanup + +Windows has reserved device names (`CON`, `PRN`, `AUX`, `NUL`, `COM1`–`COM9`, `LPT1`–`LPT9`) +that cannot be used as filenames. When a git repository created on macOS or Linux contains files +with these names, checking them out on Windows causes problems. + +### The Problem + +Unity is particularly sensitive to reserved filenames. When the asset importer encounters a file +named `aux.meta`, `nul.png`, or similar, it can enter an infinite reimport loop — detecting the +file, failing to process it, detecting it again. This manifests as: + +- Unity hanging during asset import with no progress +- 100% CPU usage from the asset import worker +- Build jobs that run until they hit the timeout limit +- Explorer crashes when navigating to affected directories + +These files are valid on macOS and Linux, so they can easily enter a repository through +cross-platform contributions. + +### Solution + +```yaml +- uses: game-ci/unity-builder@v4 + with: + cleanReservedFilenames: 'true' +``` + +When enabled, the service scans the `Assets/` directory tree before Unity processes the project. +Any file or directory whose name (without extension) matches a reserved device name is removed. +Each removal is logged as a warning so the source of the problematic files can be traced. + +### Reserved Names + +The full list of reserved names checked (case-insensitive, with any file extension): + +`CON`, `PRN`, `AUX`, `NUL`, `COM1`, `COM2`, `COM3`, `COM4`, `COM5`, `COM6`, `COM7`, `COM8`, +`COM9`, `LPT1`, `LPT2`, `LPT3`, `LPT4`, `LPT5`, `LPT6`, `LPT7`, `LPT8`, `LPT9` + +Examples of files that would be removed: `aux.meta`, `nul.png`, `CON.txt`, `com1.asset`. + +## Build Output Archival + +Automatically archive build outputs after successful builds. Archives are organized per +platform and managed with a count-based retention policy. + +### Configuration + +```yaml +- uses: game-ci/unity-builder@v4 + with: + buildArchiveEnabled: 'true' + buildArchivePath: '/mnt/build-archives' + buildArchiveRetention: '5' +``` + +### How It Works + +1. After a successful build, the build output directory is moved (or copied, if a cross-device + move is not possible) to `{archivePath}/{platform}/build-{timestamp}`. +2. Archives are organized by platform — each target platform gets its own subdirectory. +3. The retention policy keeps the N most recent builds per platform. Older builds are + automatically removed. + +The archive path must be set when archival is enabled. This can be a local directory on the +runner or a mounted network volume. + +### Retention Strategy + +Retention is count-based: the `buildArchiveRetention` value specifies how many builds to keep +per platform. When a new build is archived and the total exceeds the retention count, the oldest +archives are removed. + +- Default retention: **3** builds per platform +- Set a higher value for release branches where rollback capability is important +- Archives are sorted by modification time, so the most recent builds are always retained + +### Archive Layout + +``` +/mnt/build-archives/ + StandaloneLinux64/ + build-2025-01-15T10-30-00-000Z/ + build-2025-01-16T14-22-00-000Z/ + build-2025-01-17T09-15-00-000Z/ + StandaloneWindows64/ + build-2025-01-15T10-45-00-000Z/ + build-2025-01-16T14-35-00-000Z/ +``` + +## Git Environment Configuration + +The reliability service configures a git environment variable automatically: + +- `GIT_CONFIG_NOSYSTEM=1` — Bypasses the system-level git configuration file. This prevents + corrupted or misconfigured system git configs on self-hosted runners from affecting builds. + +This is applied automatically and does not require any configuration. + +## Inputs Reference + +| Input | Description | Default | +|-------|-------------|---------| +| `gitIntegrityCheck` | Run git integrity checks before build | `'false'` | +| `gitAutoRecover` | Attempt automatic recovery if corruption detected (requires `gitIntegrityCheck`) | `'true'` | +| `cleanReservedFilenames` | Remove Windows reserved filenames from `Assets/` | `'false'` | +| `buildArchiveEnabled` | Archive build output after successful build | `'false'` | +| `buildArchivePath` | Path to store build archives (required when archival is enabled) | `''` | +| `buildArchiveRetention` | Number of builds to retain per platform | `'3'` | + +## Recommended Configuration + +For self-hosted runners with persistent workspaces: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + gitIntegrityCheck: 'true' + gitAutoRecover: 'true' + cleanReservedFilenames: 'true' + buildArchiveEnabled: 'true' + buildArchivePath: '/mnt/build-archives' + buildArchiveRetention: '5' +``` + +For ephemeral runners (GitHub-hosted or fresh containers), git integrity checking is less +valuable since the workspace is created fresh each time. Reserved filename cleanup is still +useful if the repository contains cross-platform contributions: + +```yaml +- uses: game-ci/unity-builder@v4 + with: + cleanReservedFilenames: 'true' +``` From 9fed5d548635375cf4f87a0661d1b066c281a508 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 12:11:46 +0000 Subject: [PATCH 34/60] docs: add CI dispatch and infrastructure automation provider pages Co-Authored-By: Claude Opus 4.6 --- .../04-github-actions-dispatch.mdx | 172 +++++++++++ .../05-providers/05-gitlab-ci-dispatch.mdx | 164 +++++++++++ .../05-providers/06-remote-powershell.mdx | 175 ++++++++++++ .../05-providers/07-ansible.mdx | 267 ++++++++++++++++++ .../05-providers/_category_.yaml | 4 + 5 files changed, 782 insertions(+) create mode 100644 docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx create mode 100644 docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx create mode 100644 docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx create mode 100644 docs/03-github-orchestrator/05-providers/07-ansible.mdx create mode 100644 docs/03-github-orchestrator/05-providers/_category_.yaml diff --git a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx new file mode 100644 index 00000000..df3ddb92 --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx @@ -0,0 +1,172 @@ +--- +sidebar_position: 4 +--- + +# GitHub Actions Dispatch Provider + +The **GitHub Actions Dispatch** provider triggers Unity builds as `workflow_dispatch` events on a +target GitHub Actions workflow. Instead of running the build on the orchestrating runner, the +orchestrator dispatches the work to another repository's workflow and monitors it to completion. + +## Use Cases + +- **Separate build infrastructure** from your game repository — keep build runners and Unity + licenses in a dedicated repo while orchestrating from your main project. +- **Distribute builds across organizations** — trigger workflows in repos owned by different GitHub + organizations or teams. +- **Specialized runner pools** — route builds to self-hosted runners registered against a different + repository with specific hardware (GPU, high memory, fast SSD). +- **License isolation** — keep Unity license activation in a controlled environment while allowing + multiple game repos to dispatch builds to it. + +## Prerequisites + +1. **GitHub CLI (`gh`)** must be available on the runner executing the orchestrator step. +2. A **Personal Access Token (PAT)** with `actions:write` scope on the target repository. +3. A **target workflow** in the destination repository with a `workflow_dispatch` trigger that + accepts the orchestrator's build inputs. + +### Target Workflow Template + +The target repository needs a workflow that accepts the orchestrator's dispatched inputs. A minimal +example: + +```yaml +# .github/workflows/unity-build.yml (in the target repo) +name: Unity Build +on: + workflow_dispatch: + inputs: + buildGuid: + description: 'Build GUID from orchestrator' + required: true + image: + description: 'Unity Docker image' + required: true + commands: + description: 'Base64-encoded build commands' + required: true + mountdir: + description: 'Mount directory' + required: false + workingdir: + description: 'Working directory' + required: false + environment: + description: 'JSON environment variables' + required: false + +jobs: + build: + runs-on: [self-hosted, unity] + steps: + - uses: actions/checkout@v4 + - name: Run build + run: | + echo "${{ inputs.commands }}" | base64 -d | bash +``` + +## Configuration + +Set `providerStrategy: github-actions` and supply the required inputs: + +```yaml +- uses: game-ci/unity-builder@main + with: + providerStrategy: github-actions + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + githubActionsRepo: my-org/unity-build-farm + githubActionsWorkflow: unity-build.yml + githubActionsToken: ${{ secrets.BUILD_FARM_PAT }} + githubActionsRef: main +``` + +## How It Works + +``` + Orchestrator (your repo) Target repo + ┌──────────────────────┐ ┌──────────────────────┐ + │ │ workflow_dispatch│ │ + │ 1. Validate target │──────────────────►│ 4. Run build job │ + │ workflow exists │ │ on target runner │ + │ │ │ │ + │ 2. Dispatch event │ │ 5. Execute commands │ + │ with build inputs│ │ │ + │ │ poll status │ │ + │ 3. Wait for run to │◄─────────────────►│ 6. Complete │ + │ appear │ │ │ + │ │ fetch logs │ │ + │ 7. Stream logs and │◄──────────────────│ │ + │ report result │ │ │ + └──────────────────────┘ └──────────────────────┘ +``` + +1. **Setup** — The orchestrator verifies the target workflow exists by querying the GitHub API. +2. **Dispatch** — A `workflow_dispatch` event is sent with build parameters (build GUID, image, + base64-encoded commands, environment variables) as workflow inputs. +3. **Poll for run** — The orchestrator polls the target repository's workflow runs (filtering by + creation time) until the dispatched run appears. This typically takes 10-30 seconds. +4. **Monitor** — Once the run is identified, the orchestrator polls its status every 15 seconds + until it reaches a terminal state (`completed`). +5. **Result** — On success, logs are fetched via `gh run view --log`. On failure, an error is raised + with the run's conclusion. +6. **Cleanup** — No cloud resources are created, so cleanup is a no-op. + +## Full Workflow Example + +```yaml +name: Build Game (Dispatched) +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + targetPlatform: + - StandaloneLinux64 + - StandaloneWindows64 + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@main + with: + providerStrategy: github-actions + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + githubActionsRepo: my-org/unity-build-farm + githubActionsWorkflow: unity-build.yml + githubActionsToken: ${{ secrets.BUILD_FARM_PAT }} + githubActionsRef: main +``` + +## Limitations and Considerations + +- **Run identification delay** — After dispatching, the orchestrator must wait for the run to appear + in the GitHub API. This adds 10-30 seconds of overhead per build. +- **API rate limits** — Each status poll is an API call. Long builds will accumulate many calls. The + 15-second poll interval keeps usage well within GitHub's rate limits for authenticated requests + (5,000/hour). +- **No artifact transfer** — Build artifacts remain in the target repository's workflow run. You must + configure artifact upload/download separately (e.g., via `actions/upload-artifact` in the target + workflow). +- **PAT scope** — The token needs `actions:write` on the target repo. Use a fine-grained PAT scoped + to only the build farm repository for least-privilege access. +- **Concurrent dispatch** — If multiple dispatches happen simultaneously, the orchestrator identifies + its run by filtering on creation time. Rapid concurrent dispatches to the same workflow could + theoretically cause misidentification. + +## Inputs Reference + +| Input | Required | Default | Description | +|-------|----------|---------|-------------| +| `providerStrategy` | Yes | — | Must be `github-actions` | +| `githubActionsRepo` | Yes | — | Target repository in `owner/repo` format | +| `githubActionsWorkflow` | Yes | — | Workflow filename (e.g., `unity-build.yml`) or workflow ID | +| `githubActionsToken` | Yes | — | Personal Access Token with `actions:write` scope on the target repo | +| `githubActionsRef` | No | `main` | Branch or ref to run the dispatched workflow on | diff --git a/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx new file mode 100644 index 00000000..c5f3bf6a --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx @@ -0,0 +1,164 @@ +--- +sidebar_position: 5 +--- + +# GitLab CI Dispatch Provider + +The **GitLab CI Dispatch** provider triggers Unity builds as GitLab CI pipelines via the GitLab +REST API. This enables teams using GitLab for CI infrastructure to benefit from Game CI's +orchestration while keeping their existing pipeline runners and configuration. + +## Use Cases + +- **Hybrid GitHub/GitLab setups** — Game source lives on GitHub, but CI runners and Unity licenses + are managed through GitLab. +- **GitLab Runner infrastructure** — Leverage existing GitLab Runners (including GPU-equipped or + macOS runners) for Unity builds. +- **Self-hosted GitLab** — Organizations running their own GitLab instance can route builds to their + internal infrastructure. +- **GitLab CI/CD catalog** — Integrate orchestrator-triggered builds with existing GitLab CI/CD + components and templates. + +## Prerequisites + +1. A **GitLab project** with CI/CD pipelines enabled. +2. A **pipeline trigger token** — created in the GitLab project under + **Settings > CI/CD > Pipeline trigger tokens**. +3. A **`.gitlab-ci.yml`** in the target project that accepts orchestrator variables. + +### Target Pipeline Template + +The GitLab project needs a CI configuration that consumes the orchestrator's pipeline variables: + +```yaml +# .gitlab-ci.yml (in the GitLab project) +stages: + - build + +unity-build: + stage: build + tags: + - unity + script: + - echo "$BUILD_COMMANDS" | base64 -d | bash + variables: + BUILD_GUID: '' + BUILD_IMAGE: '' + BUILD_COMMANDS: '' + MOUNT_DIR: '' + WORKING_DIR: '' +``` + +## Configuration + +Set `providerStrategy: gitlab-ci` and supply the required inputs: + +```yaml +- uses: game-ci/unity-builder@main + with: + providerStrategy: gitlab-ci + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + gitlabProjectId: my-group/unity-builds + gitlabTriggerToken: ${{ secrets.GITLAB_TRIGGER_TOKEN }} + gitlabApiUrl: https://gitlab.com + gitlabRef: main +``` + +### Self-Hosted GitLab + +For self-hosted GitLab instances, set `gitlabApiUrl` to your instance URL: + +```yaml +gitlabApiUrl: https://gitlab.internal.company.com +``` + +## How It Works + +``` + Orchestrator (GitHub) GitLab CI + ┌──────────────────────┐ ┌──────────────────────┐ + │ │ POST /trigger │ │ + │ 1. Verify project │────────────────►│ 3. Run pipeline │ + │ access │ │ jobs on GitLab │ + │ │ │ Runners │ + │ 2. Trigger pipeline │ │ │ + │ with variables │ poll status │ 4. Execute build │ + │ │◄───────────────►│ commands │ + │ 5. Monitor pipeline │ │ │ + │ status │ fetch job logs │ 5. Complete │ + │ │◄────────────────│ │ + │ 6. Collect per-job │ │ │ + │ logs and report │ │ │ + └──────────────────────┘ └──────────────────────┘ +``` + +1. **Setup** — The orchestrator verifies access to the GitLab project using the provided token. +2. **Trigger** — A pipeline is triggered via the GitLab + [Pipeline Triggers API](https://docs.gitlab.com/ee/ci/triggers/) with build parameters passed + as pipeline variables (`BUILD_GUID`, `BUILD_IMAGE`, `BUILD_COMMANDS`, etc.). +3. **Monitor** — The orchestrator polls the pipeline status every 15 seconds until it reaches a + terminal state (`success`, `failed`, `canceled`, or `skipped`). +4. **Logs** — On completion, the orchestrator fetches logs for each job in the pipeline individually + via the GitLab Jobs API, producing a combined log output. +5. **Result** — If the pipeline status is not `success`, an error is raised with the terminal + status. +6. **Cleanup** — No resources are created, so cleanup is a no-op. + +## Full Workflow Example + +```yaml +name: Build Game (GitLab CI) +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + targetPlatform: + - StandaloneLinux64 + - StandaloneWindows64 + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@main + with: + providerStrategy: gitlab-ci + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + gitlabProjectId: my-group/unity-builds + gitlabTriggerToken: ${{ secrets.GITLAB_TRIGGER_TOKEN }} + gitlabApiUrl: https://gitlab.com + gitlabRef: main +``` + +## Limitations and Considerations + +- **API rate limits** — GitLab.com enforces API rate limits (authenticated: 2,000 requests/minute + for most plans). The 15-second poll interval keeps usage low, but very long builds with many + parallel pipelines should account for this. +- **Token permissions** — The trigger token is scoped to the project. For fetching logs and pipeline + status, the token must also have `read_api` access. A project access token with `api` scope + covers both triggering and log retrieval. +- **No direct artifact transfer** — Artifacts stay in GitLab. Configure GitLab CI artifacts or + external storage (S3, GCS) in your `.gitlab-ci.yml` to export build outputs. +- **Variable size limits** — GitLab pipeline variables have a combined size limit. For large build + command payloads, the base64-encoded commands variable may approach this limit. Consider storing + build scripts in the GitLab repository instead of passing them inline. +- **Self-hosted TLS** — When using `gitlabApiUrl` with a self-hosted instance using self-signed + certificates, ensure the runner's certificate store trusts the GitLab instance's CA. + +## Inputs Reference + +| Input | Required | Default | Description | +|-------|----------|---------|-------------| +| `providerStrategy` | Yes | — | Must be `gitlab-ci` | +| `gitlabProjectId` | Yes | — | GitLab project ID (numeric) or URL-encoded path (e.g., `my-group%2Funity-builds`) | +| `gitlabTriggerToken` | Yes | — | Pipeline trigger token (created in GitLab project settings) | +| `gitlabApiUrl` | No | `https://gitlab.com` | GitLab API base URL (for self-hosted instances) | +| `gitlabRef` | No | `main` | Branch or ref to trigger the pipeline on | diff --git a/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx b/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx new file mode 100644 index 00000000..08abf412 --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx @@ -0,0 +1,175 @@ +--- +sidebar_position: 6 +--- + +# Remote PowerShell Provider + +The **Remote PowerShell** provider executes Unity builds on remote Windows machines via PowerShell +Remoting. Unlike CI dispatch providers that trigger pipelines on another CI system, this provider +connects directly to target machines and runs build commands over a remote session. + +**Category:** Infrastructure Automation — executes directly on target machines rather than +dispatching to a CI platform. + +## Use Cases + +- **Dedicated build machines** — On-premises Windows workstations or servers with Unity installed + that are not part of any CI system. +- **Windows build farms** — Multiple Windows machines available for parallel builds, managed without + a formal CI/CD platform. +- **Air-gapped environments** — Build machines on internal networks not reachable by cloud CI + services. +- **Quick prototyping** — Run builds on a colleague's powerful workstation without setting up a full + CI pipeline. + +## Prerequisites + +1. **PowerShell 5.1+** on both the orchestrator runner and target machine(s). +2. **PowerShell Remoting enabled** on the target machine via one of: + - **WinRM (WSMan)** — Windows default. Enable with `Enable-PSRemoting -Force` on the target. + - **SSH** — Cross-platform transport. Requires OpenSSH server on the target. +3. **Network connectivity** — The orchestrator runner must reach the target machine on port 5985 + (WinRM HTTP), 5986 (WinRM HTTPS), or 22 (SSH). +4. **Unity installed** on the target machine with the required build support modules. + +### Enabling WinRM on the Target + +```powershell +# Run as Administrator on the target machine +Enable-PSRemoting -Force +Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force # Or specific host +``` + +### Enabling SSH on the Target + +```powershell +# Install OpenSSH Server (Windows 10/11, Server 2019+) +Add-WindowsCapability -Online -Name OpenSSH.Server +Start-Service sshd +Set-Service -Name sshd -StartupType Automatic +``` + +## Configuration + +Set `providerStrategy: remote-powershell` and supply the connection details: + +### WinRM Transport (Default) + +```yaml +- uses: game-ci/unity-builder@main + with: + providerStrategy: remote-powershell + targetPlatform: StandaloneWindows64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + remotePowershellHost: build-server.internal.local + remotePowershellTransport: wsman + remotePowershellCredential: ${{ secrets.BUILD_SERVER_USER }}:${{ secrets.BUILD_SERVER_PASS }} +``` + +### SSH Transport + +```yaml +- uses: game-ci/unity-builder@main + with: + providerStrategy: remote-powershell + targetPlatform: StandaloneWindows64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + remotePowershellHost: build-server.internal.local + remotePowershellTransport: ssh +``` + +When using SSH transport, authentication uses the runner's SSH key configuration rather than +explicit credentials. + +## How It Works + +``` + Orchestrator (runner) Target Machine + ┌──────────────────────┐ ┌──────────────────────┐ + │ │ Test-WSMan │ │ + │ 1. Test connection │────────────────►│ │ + │ to remote host │ │ │ + │ │ Invoke-Command │ │ + │ 2. Send build │────────────────►│ 3. Set environment │ + │ commands via │ │ variables │ + │ remote session │ │ │ + │ │ │ 4. Execute Unity │ + │ │ output stream │ build commands │ + │ 5. Receive output │◄────────────────│ │ + │ and report │ │ 6. Complete │ + └──────────────────────┘ └──────────────────────┘ +``` + +1. **Setup** — The orchestrator tests connectivity to the remote host using `Test-WSMan`. +2. **Execution** — Build commands are wrapped in a PowerShell script block that sets environment + variables, changes to the working directory, and runs the build. The entire block is sent via + `Invoke-Command`. +3. **Transport** — For WinRM, credentials are constructed as a `PSCredential` object from the + `remotePowershellCredential` input. For SSH, `Invoke-Command -HostName` is used instead. +4. **Output** — Command output streams back to the orchestrator in real time through the remote + session. +5. **Cleanup** — Remote PowerShell sessions are stateless per invocation, so no cleanup is needed. + +## Security Considerations + +- **Credential handling** — The `remotePowershellCredential` input expects a `username:password` + format. Always store this as a GitHub secret, never in plain text. The provider constructs a + `PSCredential` object at runtime and does not persist credentials. +- **WinRM HTTPS** — For production use, configure WinRM over HTTPS (port 5986) with a valid TLS + certificate to encrypt traffic. The default HTTP transport (port 5985) sends credentials in + clear text over the network. +- **SSH key authentication** — Prefer SSH transport with key-based authentication over WinRM with + password credentials when possible. SSH keys avoid transmitting passwords entirely. +- **Network segmentation** — Restrict WinRM/SSH access to the build machines from only the + orchestrator runners' IP range. +- **Least privilege** — The remote user account should have only the permissions needed to run Unity + builds (read/write to the project directory, execute Unity). + +## Full Workflow Example + +```yaml +name: Build Game (Remote PowerShell) +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@main + with: + providerStrategy: remote-powershell + targetPlatform: StandaloneWindows64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + remotePowershellHost: ${{ secrets.BUILD_SERVER_HOST }} + remotePowershellTransport: wsman + remotePowershellCredential: ${{ secrets.BUILD_SERVER_USER }}:${{ secrets.BUILD_SERVER_PASS }} +``` + +## Limitations and Considerations + +- **Windows targets only** — PowerShell Remoting via WinRM is a Windows technology. For Linux/macOS + build machines, use SSH transport or consider the Ansible provider instead. +- **No container isolation** — Builds run directly on the target machine's environment. Conflicting + Unity versions or project dependencies between concurrent builds can cause issues. +- **No built-in queuing** — The provider does not queue builds. If multiple orchestrator runs + dispatch to the same machine simultaneously, they will execute concurrently (or fail if resources + conflict). +- **Garbage collection** — Not supported. Build artifacts and temporary files on the remote machine + must be managed separately. +- **Firewall configuration** — Ensure the required ports (5985/5986 for WinRM, 22 for SSH) are open + between the orchestrator runner and the target machine. + +## Inputs Reference + +| Input | Required | Default | Description | +|-------|----------|---------|-------------| +| `providerStrategy` | Yes | — | Must be `remote-powershell` | +| `remotePowershellHost` | Yes | — | Hostname or IP address of the target machine | +| `remotePowershellCredential` | No | — | Credentials in `username:password` format (required for WinRM) | +| `remotePowershellTransport` | No | `wsman` | Transport protocol: `wsman` (WinRM) or `ssh` | diff --git a/docs/03-github-orchestrator/05-providers/07-ansible.mdx b/docs/03-github-orchestrator/05-providers/07-ansible.mdx new file mode 100644 index 00000000..70642bfa --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/07-ansible.mdx @@ -0,0 +1,267 @@ +--- +sidebar_position: 7 +--- + +# Ansible Provider + +The **Ansible** provider orchestrates Unity builds by running Ansible playbooks against managed +infrastructure. This enables teams with existing Ansible-based infrastructure management to +integrate Unity builds into their configuration-as-code workflows. + +**Category:** Infrastructure Automation — runs playbooks against managed inventory rather than +dispatching to a CI platform. + +## Use Cases + +- **Large-scale build infrastructure** — Distribute builds across a fleet of machines managed by + Ansible, with automatic host selection and load distribution handled by your playbooks. +- **Configuration-as-code** — Define build machine setup, Unity installation, and build execution + as versioned Ansible playbooks alongside your game source. +- **Heterogeneous environments** — Target different machine types (Windows, Linux, macOS) from a + single inventory with platform-specific playbooks. +- **Existing Ansible infrastructure** — Teams already using Ansible for server management can extend + their playbooks to handle Unity builds without adopting a separate CI system. + +## Prerequisites + +1. **Ansible** installed on the orchestrator runner (`ansible-playbook` must be on `PATH`). +2. An **inventory file** or dynamic inventory script defining available build machines. +3. A **playbook** that accepts the orchestrator's build parameters as variables and executes the + Unity build. +4. SSH connectivity from the orchestrator runner to the target machines (Ansible's default + transport). + +### Installing Ansible on the Runner + +```yaml +# In your GitHub Actions workflow +- name: Install Ansible + run: pip install ansible +``` + +Or use a runner image that includes Ansible pre-installed. + +## Configuration + +Set `providerStrategy: ansible` and supply the required inputs: + +```yaml +- uses: game-ci/unity-builder@main + with: + providerStrategy: ansible + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + ansibleInventory: ./infrastructure/inventory.yml + ansiblePlaybook: ./infrastructure/unity-build.yml + ansibleExtraVars: '{"unity_version": "2022.3.0f1"}' + ansibleVaultPassword: ${{ secrets.ANSIBLE_VAULT_PASSWORD_FILE }} +``` + +## Playbook Requirements + +The orchestrator passes build parameters to the playbook as extra variables. Your playbook must +accept and use these variables: + +| Variable | Description | +|----------|-------------| +| `build_guid` | Unique identifier for the build | +| `build_image` | Unity Docker image (if applicable) | +| `build_commands` | Build commands to execute | +| `mount_dir` | Mount directory path | +| `working_dir` | Working directory path | + +Additionally, any environment variables from the orchestrator are passed as lowercase variable names. + +### Example Playbook + +```yaml +# infrastructure/unity-build.yml +--- +- name: Unity Build + hosts: build_machines + become: false + vars: + build_guid: '' + build_commands: '' + working_dir: '/builds' + + tasks: + - name: Ensure build directory exists + file: + path: "{{ working_dir }}/{{ build_guid }}" + state: directory + + - name: Clone repository + git: + repo: "{{ git_repo_url }}" + dest: "{{ working_dir }}/{{ build_guid }}/project" + version: "{{ git_ref | default('main') }}" + + - name: Execute build commands + shell: "{{ build_commands }}" + args: + chdir: "{{ working_dir }}/{{ build_guid }}/project" + register: build_result + + - name: Upload build artifacts + fetch: + src: "{{ working_dir }}/{{ build_guid }}/project/Builds/" + dest: "./artifacts/{{ build_guid }}/" + flat: true + when: build_result.rc == 0 + + - name: Cleanup build directory + file: + path: "{{ working_dir }}/{{ build_guid }}" + state: absent + when: cleanup | default(true) | bool +``` + +### Example Inventory + +```yaml +# infrastructure/inventory.yml +all: + children: + build_machines: + hosts: + build-01: + ansible_host: 192.168.1.10 + ansible_user: builder + build-02: + ansible_host: 192.168.1.11 + ansible_user: builder + vars: + ansible_python_interpreter: /usr/bin/python3 +``` + +## How It Works + +``` + Orchestrator (runner) Ansible → Target Machines + ┌──────────────────────┐ ┌──────────────────────┐ + │ │ verify ansible │ │ + │ 1. Check ansible │ verify inventory│ │ + │ is installed │ │ │ + │ │ │ │ + │ 2. Build extra-vars │ ansible-playbook│ 3. Connect to hosts │ + │ from build │────────────────►│ in inventory │ + │ parameters │ │ │ + │ │ │ 4. Execute playbook │ + │ │ stdout stream │ tasks │ + │ 5. Capture output │◄────────────────│ │ + │ and report │ │ 6. Complete │ + └──────────────────────┘ └──────────────────────┘ +``` + +1. **Setup** — The orchestrator verifies that `ansible` is available on `PATH` and that the + inventory file exists. +2. **Variable assembly** — Build parameters are assembled into a JSON extra-vars payload. User- + provided `ansibleExtraVars` are merged in. Orchestrator secrets are passed as environment + variables to the `ansible-playbook` process. +3. **Execution** — The orchestrator runs `ansible-playbook` with the inventory, playbook, extra + vars, and optional vault password file. Output streams to the orchestrator in real time. +4. **Result** — A zero exit code means success. Any non-zero exit code raises an error with the + playbook output. +5. **Cleanup** — No orchestrator-side resources to clean up. Playbook cleanup tasks should handle + remote machine cleanup. + +## Ansible Vault Integration + +For sensitive variables (license keys, credentials), use +[Ansible Vault](https://docs.ansible.com/ansible/latest/vault_guide/index.html): + +1. Create an encrypted variables file: + + ```bash + ansible-vault create infrastructure/secrets.yml + ``` + +2. Reference it in your playbook: + + ```yaml + - name: Unity Build + hosts: build_machines + vars_files: + - secrets.yml + ``` + +3. Pass the vault password file path to the orchestrator: + + ```yaml + ansibleVaultPassword: /path/to/vault-password-file + ``` + + In GitHub Actions, write the vault password to a temporary file from a secret: + + ```yaml + - name: Write vault password + run: echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault-pass + - uses: game-ci/unity-builder@main + with: + providerStrategy: ansible + ansibleVaultPassword: /tmp/vault-pass + # ... other inputs + ``` + +## Full Workflow Example + +```yaml +name: Build Game (Ansible) +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - name: Install Ansible + run: pip install ansible + + - name: Write vault password + run: echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault-pass + + - uses: game-ci/unity-builder@main + with: + providerStrategy: ansible + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + ansibleInventory: ./infrastructure/inventory.yml + ansiblePlaybook: ./infrastructure/unity-build.yml + ansibleExtraVars: '{"unity_version": "2022.3.0f1", "cleanup": true}' + ansibleVaultPassword: /tmp/vault-pass + + - name: Clean up vault password + if: always() + run: rm -f /tmp/vault-pass +``` + +## Limitations and Considerations + +- **Playbook required** — The Ansible provider does not ship with a default playbook. You must + provide a playbook that handles repository checkout, Unity build execution, and artifact + collection for your specific infrastructure. +- **Ansible installation** — Ansible must be installed on the runner. GitHub-hosted runners do not + include Ansible by default; add a `pip install ansible` step or use a custom runner image. +- **No garbage collection** — The provider does not manage remote machine state. Build cleanup + (temporary files, old builds) should be handled within playbook tasks. +- **Sequential execution** — The orchestrator runs a single `ansible-playbook` command and waits + for it to complete. Parallelism across hosts is managed by Ansible's built-in `forks` setting, + not by the orchestrator. +- **Extra-vars JSON parsing** — The `ansibleExtraVars` input is parsed as JSON. If parsing fails, + the raw string is passed through, which may cause unexpected behavior. Always provide valid JSON. + +## Inputs Reference + +| Input | Required | Default | Description | +|-------|----------|---------|-------------| +| `providerStrategy` | Yes | — | Must be `ansible` | +| `ansibleInventory` | Yes | — | Path to Ansible inventory file or dynamic inventory script | +| `ansiblePlaybook` | Yes | — | Path to Ansible playbook for Unity builds | +| `ansibleExtraVars` | No | — | Additional Ansible variables as a JSON string | +| `ansibleVaultPassword` | No | — | Path to Ansible Vault password file | diff --git a/docs/03-github-orchestrator/05-providers/_category_.yaml b/docs/03-github-orchestrator/05-providers/_category_.yaml new file mode 100644 index 00000000..fe824d32 --- /dev/null +++ b/docs/03-github-orchestrator/05-providers/_category_.yaml @@ -0,0 +1,4 @@ +position: 5.0 +label: Providers +collapsible: true +collapsed: true From 15d7e369adadd3722035d7d0fb870f4f756737ed Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 12:23:45 +0000 Subject: [PATCH 35/60] fix(docs): add missing sidebar_position frontmatter to advanced topics pages Co-Authored-By: Claude Opus 4.6 --- .../07-advanced-topics/11-test-workflow-engine.mdx | 4 ++++ .../07-advanced-topics/12-hot-runner-protocol.mdx | 4 ++++ .../07-advanced-topics/13-build-output-system.mdx | 4 ++++ .../07-advanced-topics/14-incremental-sync-protocol.mdx | 4 ++++ .../07-advanced-topics/15-massive-projects.mdx | 4 ++++ .../07-advanced-topics/16-monorepo-support.mdx | 4 ++++ 6 files changed, 24 insertions(+) diff --git a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx index 264afc60..a4d13266 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx @@ -1,3 +1,7 @@ +--- +sidebar_position: 11 +--- + # Test Workflow Engine Orchestrator includes a test workflow engine that supports YAML-based test suite definitions, diff --git a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx index dc703dc5..99b25deb 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx @@ -1,3 +1,7 @@ +--- +sidebar_position: 12 +--- + # Hot Runner Protocol Orchestrator supports persistent, process-based build/test providers. Hot runners are long-lived diff --git a/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx index 40a65dfb..0b6c2efe 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx @@ -1,3 +1,7 @@ +--- +sidebar_position: 13 +--- + # Structured Build Output System Orchestrator supports multiple build output types with structured manifests, per-type diff --git a/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx index e6e68852..1f204840 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx @@ -1,3 +1,7 @@ +--- +sidebar_position: 14 +--- + # Incremental Sync Protocol The incremental sync protocol delivers workspace changes to build/test environments without diff --git a/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx index f36ae323..b8fbede5 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx @@ -1,3 +1,7 @@ +--- +sidebar_position: 15 +--- + # Massive Projects Orchestrator includes specific support for Unity projects at extreme scale — repositories diff --git a/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx index db642db3..56996f8d 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx @@ -1,3 +1,7 @@ +--- +sidebar_position: 16 +--- + # Monorepo Support Orchestrator provides first-class support for Unity monorepos — single repositories that From ea1c6fbeda4b7765b636afeea5637ef36e678da1 Mon Sep 17 00:00:00 2001 From: Gabriel Le Breton Date: Thu, 5 Mar 2026 10:19:44 -0500 Subject: [PATCH 36/60] docs(orchestrator): Fix typos and formatting in documentation - Change "first class" to "first-class" for proper hyphenation - Update "cost saving" to "cost-saving" for consistency - Add period after "e.g" to "e.g." in multiple locations - Fix "effecient" to "efficient" spelling - Fix "syncronization" to "synchronization" spelling - Fix "signficantly" to "significantly" spelling - Change "typescript" to "TypeScript" for proper capitalization - Remove markdown code fence markers from status tables - Reformat long command line example with line breaks for readability - Fix "3Configuration" typo to "Configuration" - Add missing comma in sentence for proper grammar --- docs/03-github-orchestrator/01-introduction.mdx | 10 +++------- .../02-game-ci-vs-orchestrator.mdx | 2 +- .../03-examples/01-command-line.mdx | 6 +++--- .../03-examples/02-github-examples/03-kubernetes.mdx | 2 +- .../06-advanced-topics/04-configuration-override.mdx | 5 ++++- .../04-custom-hooks/05-premade-container-jobs.mdx | 12 ++++++------ 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 3ae13efb..bb9e9b57 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -9,7 +9,7 @@ from the command line, the "Workbench" GUI in the Unity Editor or from GitHub Ac It will then send the project to be built and/or tested depending on your workflow configuration.** **Orchestrator is especially useful for game development because it supports large projects. -Orchestrator provides first class support for the Unity game engine.** +Orchestrator provides first-class support for the Unity game engine.** Orchestrator uses git to track and syncronize your projects and uses native cloud services such as AWS Fargate and Kubernetes to run your jobs. Other version control systems are not actively @@ -18,11 +18,11 @@ supported. ## Why Orchestrator? 1. **Orchestrator is flexible and elastic** - 1. _You can balance your use of high-performance and cost saving modes._ Configurable cost/speed + 1. _You can balance your use of high-performance and cost-saving modes._ Configurable cost/speed effeciency 2. _Works great for projects of almost any size, from AAA projects and assets to micro projects_ 3. _Extended configuration options._ More control over disk size, memory and CPU - 4. _Easily scale all job resources as your project grows_ e.g storage, CPU and memory + 4. _Easily scale all job resources as your project grows_ e.g. storage, CPU and memory 2. **Scale fully on demand from zero (not in use) to many concurrent jobs.** Benefits from "pay-for-what-you-use" cloud billing models. We have made an effort to make sure that it costs you nothing (aside from artifact and cache storage) while there are no builds running (no @@ -57,21 +57,18 @@ indicates the stability and support for orchestrator features and workflows. ### Supported Orchestrator Platforms -```md | Cloud Provider Platform | Release Status | | ----------------------- | ------------------ | | Kubernetes | ✔️ preview release | | AWS | ✔️ full release | | GCP | ⚠ Considered | | Azure | ⚠ Considered | -``` _Note for Kubernetes support:_ _Usually the cluster needs to be up and running at all times, as starting up a cluster is slow._ _Use Google Cloud's Kubernetes Autopilot you can scale down to the free tier automatically while not in use._ _Kubernetes support currently requires cloud storage, only S3 support is built-in._ -```md | Git Platform | Release Status | | --------------------- | ------------------ | | GitHub | ✔️ full release | @@ -79,7 +76,6 @@ only S3 support is built-in._ | Command Line | ✔️ preview release | | Any Git repository | ✔️ preview release | | Any Git automation/Ci | ✔️ preview release | -``` ## External Links diff --git a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx index 369bc10e..15939fcc 100644 --- a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx +++ b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx @@ -18,7 +18,7 @@ You may want to take advantage of cloud resources for lots of reasons (scale, sp flexibility) or may want to start remote builds from the command line without slowing down your development machine. Orchestrator can help you do this. -This may be a preference, more effecient or you may want to use systems that struggle to handle +This may be a preference, more efficient, or you may want to use systems that struggle to handle large game development projects (GitHub being a good example). ### Large GitHub Projects diff --git a/docs/03-github-orchestrator/03-examples/01-command-line.mdx b/docs/03-github-orchestrator/03-examples/01-command-line.mdx index 636144e9..5ada128f 100644 --- a/docs/03-github-orchestrator/03-examples/01-command-line.mdx +++ b/docs/03-github-orchestrator/03-examples/01-command-line.mdx @@ -18,7 +18,7 @@ yarn run cli -m {mode parameter} --projectPath {Your project path} {... other co # Planned (does not work currently) -We plan to offer support for Game CI via Deno. This will enable fast, typescript native runtime and +We plan to offer support for Game CI via Deno. This will enable fast, TypeScript native runtime, and you will be able to access this via the following: ```bash @@ -39,9 +39,9 @@ descriptions_ You can avoid specifying long command line input for credentials by using environment variables or [the input override feature](../advanced-topics/configuration-override#example) to shorten commands -signficantly. +significantly. -This enables you to provide a command to pull input, e.g you can pull from a file or from a secret +This enables you to provide a command to pull input, e.g. you can pull from a file or from a secret manager. ```bash diff --git a/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx b/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx index a71f41a8..ff66cad4 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx +++ b/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx @@ -13,7 +13,7 @@ Setup the following as `env` variables for the GitHub build step: ## Configuration For Kubernetes Orchestrator Jobs -Refer to [Configuration page](../../api-reference) or the [example below](#example). +Refer to [3Configuration page](../../api-reference) or the [example below](#example). ### Allowed CPU/Memory Combinations diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx b/docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx index 94134fc1..ab9ae1cf 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/04-configuration-override.mdx @@ -8,7 +8,10 @@ this approach you can create a file to store credentials or pull from a secret m ## Example ```bash -game-ci -m cli --populateOverride true --readInputFromOverrideList UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD --readInputOverrideCommand="gcloud secrets versions access 1 --secret=\"{0}\"" +game-ci -m cli \ + --populateOverride true \ + --readInputFromOverrideList UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD \ + --readInputOverrideCommand="gcloud secrets versions access 1 --secret=\"{0}\"" ``` ## Required Parameters diff --git a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx index a87c9586..b859d23d 100644 --- a/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx +++ b/docs/03-github-orchestrator/06-advanced-topics/04-custom-hooks/05-premade-container-jobs.mdx @@ -1,6 +1,6 @@ # Premade Container Jobs -## Cache syncronization +## Cache synchronization ### Upload Cache entry to AWS S3 @@ -20,19 +20,19 @@ Downloads library and git LFS cache from AWS S3. `aws-s3-upload-build` -Upload build artifact to AWS S3. (Currently only supports lz4 enabled which is default.) +Upload build artifact to AWS S3. (Currently only supports lz4 enabled, which is default.) ## Upload Project Artifact To AWS S3 (To Do) -Upload project artifact to AWS S3. (Currently only supports lz4 enabled which is default.) +Upload project artifact to AWS S3. (Currently only supports lz4 enabled, which is default.) ## Artifact entire project folder (To Do) -archive to tar format, compress with lz4 if enabled and store in persistent cache folder. (Can then -upload.) +archive to tar format, compress with lz4 if enabled and store in a persistent cache folder. (Can +then upload.) ## Deploy ## Upload to Steam (To Do) -upload build folder to given steam branch +upload a build folder to a given steam branch From a70b8311fef6f245ce0bb6152f9405e24866ed9c Mon Sep 17 00:00:00 2001 From: Gabriel Le Breton Date: Thu, 5 Mar 2026 10:21:31 -0500 Subject: [PATCH 37/60] Apply suggestion from @GabLeRoux --- .../03-examples/02-github-examples/03-kubernetes.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx b/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx index ff66cad4..a71f41a8 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx +++ b/docs/03-github-orchestrator/03-examples/02-github-examples/03-kubernetes.mdx @@ -13,7 +13,7 @@ Setup the following as `env` variables for the GitHub build step: ## Configuration For Kubernetes Orchestrator Jobs -Refer to [3Configuration page](../../api-reference) or the [example below](#example). +Refer to [Configuration page](../../api-reference) or the [example below](#example). ### Allowed CPU/Memory Combinations From caa81b84deb42a96a98cbc277b49acf642bdd9a7 Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 16:54:29 +0000 Subject: [PATCH 38/60] docs(cli): add game-ci CLI documentation Co-Authored-By: Claude Opus 4.6 --- .../08-cli/01-getting-started.mdx | 108 ++++++++++ .../08-cli/02-build-command.mdx | 136 +++++++++++++ .../08-cli/03-orchestrate-command.mdx | 188 ++++++++++++++++++ .../08-cli/04-other-commands.mdx | 176 ++++++++++++++++ .../08-cli/_category_.yaml | 4 + 5 files changed, 612 insertions(+) create mode 100644 docs/03-github-orchestrator/08-cli/01-getting-started.mdx create mode 100644 docs/03-github-orchestrator/08-cli/02-build-command.mdx create mode 100644 docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx create mode 100644 docs/03-github-orchestrator/08-cli/04-other-commands.mdx create mode 100644 docs/03-github-orchestrator/08-cli/_category_.yaml diff --git a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx new file mode 100644 index 00000000..9732d673 --- /dev/null +++ b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx @@ -0,0 +1,108 @@ +--- +sidebar_position: 1 +--- + +# Getting Started with the CLI + +The `game-ci` CLI lets you run Unity builds, activate licenses, and manage caches directly from your +terminal — no GitHub Actions or CI platform required. + +## Installation + +Install the CLI globally via npm: + +```bash +npm install -g game-ci +``` + +Or run it without installing using npx: + +```bash +npx game-ci --help +``` + +## Unity License Activation + +Before building, you need an activated Unity license. The CLI provides an interactive activation +command: + +```bash +game-ci activate +``` + +This walks you through license activation and stores the result for future builds. + +### Environment Variables + +You can also provide license credentials via environment variables: + +| Variable | Description | +| --- | --- | +| `UNITY_LICENSE` | Contents of a Unity `.ulf` license file (base64 or raw XML) | +| `UNITY_EMAIL` | Unity account email address | +| `UNITY_PASSWORD` | Unity account password | +| `UNITY_SERIAL` | Unity serial key (for Professional/Plus licenses) | + +Set these in your shell profile or pass them inline: + +```bash +export UNITY_EMAIL="you@example.com" +export UNITY_PASSWORD="your-password" +export UNITY_LICENSE="$(cat ~/Unity_v2022.x.ulf)" +``` + +## Your First Build + +Run a build by specifying your Unity version and target platform: + +```bash +game-ci build \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 +``` + +The CLI will: + +1. Pull the matching Unity Docker image +2. Mount your project into a container +3. Run the Unity build +4. Output build artifacts to the `./builds/` directory + +### Specifying a Project Path + +If your Unity project is not in the current directory, use `--project-path`: + +```bash +game-ci build \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneWindows64 \ + --project-path ./my-unity-project +``` + +### Common Target Platforms + +| Platform | Value | +| --- | --- | +| Linux (64-bit) | `StandaloneLinux64` | +| Windows (64-bit) | `StandaloneWindows64` | +| macOS | `StandaloneOSX` | +| WebGL | `WebGL` | +| Android | `Android` | +| iOS | `iOS` | + +## Checking Your Setup + +Use the `status` command to verify your environment: + +```bash +game-ci status +``` + +This reports your installed CLI version, detected Unity license, Docker availability, and current +project info. + +## Next Steps + +- [Build Command Reference](build-command) — full list of build flags and options +- [Orchestrate Command](orchestrate-command) — run builds on cloud infrastructure +- [Other Commands](other-commands) — license activation, cache management, and more diff --git a/docs/03-github-orchestrator/08-cli/02-build-command.mdx b/docs/03-github-orchestrator/08-cli/02-build-command.mdx new file mode 100644 index 00000000..8c820067 --- /dev/null +++ b/docs/03-github-orchestrator/08-cli/02-build-command.mdx @@ -0,0 +1,136 @@ +--- +sidebar_position: 2 +--- + +# Build Command + +The `build` command runs a Unity build inside a Docker container. It accepts the same parameters as +the `game-ci/unity-builder` GitHub Action, translated to CLI flags. + +```bash +game-ci build [options] +``` + +## Required Options + +| Flag | Description | +| --- | --- | +| `--unity-version` | Unity Editor version to use (e.g. `2022.3.56f1`) | +| `--target-platform` | Build target platform (e.g. `StandaloneLinux64`) | + +## Project Options + +| Flag | Default | Description | +| --- | --- | --- | +| `--project-path` | `.` | Path to the Unity project directory | +| `--build-name` | Target platform name | Name of the build output file | +| `--builds-path` | `./builds` | Output directory for build artifacts | +| `--build-method` | _(none)_ | Custom static C# build method to invoke (e.g. `MyBuild.PerformBuild`) | + +## Versioning Options + +| Flag | Default | Description | +| --- | --- | --- | +| `--versioning` | `None` | Versioning strategy: `None`, `Semantic`, `Tag`, `Custom` | +| `--version` | _(none)_ | Explicit version string (used with `--versioning Custom`) | +| `--android-version-code` | _(auto)_ | Android `versionCode` override | + +## Custom Build Parameters + +Pass arbitrary parameters to the Unity build process: + +```bash +game-ci build \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 \ + --custom-parameters "-myFlag -myKey myValue" +``` + +The `--custom-parameters` string is appended to the Unity command line arguments. + +## Android Options + +| Flag | Description | +| --- | --- | +| `--android-keystore-name` | Filename of the keystore | +| `--android-keystore-base64` | Base64-encoded keystore file contents | +| `--android-keystore-pass` | Keystore password | +| `--android-keyalias-name` | Key alias name within the keystore | +| `--android-keyalias-pass` | Key alias password | +| `--android-target-sdk` | Target Android SDK version (e.g. `AndroidApiLevel31`) | +| `--android-export-type` | Export type: `androidPackage` (APK) or `androidAppBundle` (AAB) | + +### Android Build Example + +```bash +game-ci build \ + --unity-version 2022.3.56f1 \ + --target-platform Android \ + --android-keystore-base64 "$(base64 -w 0 release.keystore)" \ + --android-keystore-pass "$KEYSTORE_PASS" \ + --android-keyalias-name "release" \ + --android-keyalias-pass "$KEY_PASS" \ + --android-target-sdk AndroidApiLevel31 \ + --android-export-type androidAppBundle +``` + +## Docker Options + +Control the Docker container used for the build: + +| Flag | Default | Description | +| --- | --- | --- | +| `--docker-image` | _(auto)_ | Override the Docker image (defaults to `unityci/editor` with the specified version and platform) | +| `--docker-cpu-limit` | _(unlimited)_ | CPU limit for the container (e.g. `4` for 4 cores) | +| `--docker-memory-limit` | _(unlimited)_ | Memory limit for the container (e.g. `8g` for 8 GB) | + +### Custom Docker Image Example + +```bash +game-ci build \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 \ + --docker-image my-registry.com/unity-editor:2022.3.56f1-linux +``` + +## IL2CPP Options + +| Flag | Default | Description | +| --- | --- | --- | +| `--allow-dirty-build` | `false` | Allow building without a clean working tree | + +When building with the IL2CPP scripting backend, the CLI automatically configures the Docker +container with the required build tools. No additional flags are needed beyond selecting the correct +target platform. + +## Output + +Build artifacts are written to the path specified by `--builds-path` (default `./builds/`). The +directory structure is: + +``` +builds/ + / + +``` + +## Full Example + +```bash +game-ci build \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 \ + --project-path ./my-project \ + --build-name MyGame \ + --builds-path ./dist \ + --versioning Semantic \ + --custom-parameters "-enableAnalytics" \ + --docker-cpu-limit 4 \ + --docker-memory-limit 8g +``` + +## See Also + +- [Getting Started](getting-started) — installation and first build +- [Orchestrate Command](orchestrate-command) — run builds on cloud infrastructure +- [API Reference](../api-reference) — full parameter reference for the GitHub Action diff --git a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx new file mode 100644 index 00000000..64baa3cb --- /dev/null +++ b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx @@ -0,0 +1,188 @@ +--- +sidebar_position: 3 +--- + +# Orchestrate Command + +The `orchestrate` command runs Unity builds on cloud infrastructure instead of the local machine. +It provisions a remote environment, syncs your project, runs the build, and retrieves artifacts. + +```bash +game-ci orchestrate [options] +``` + +This is the CLI equivalent of using `game-ci/unity-builder` with a `providerStrategy` in GitHub +Actions. All [Orchestrator API parameters](../api-reference) are available as CLI flags. + +## Provider Selection + +Choose where your build runs with the `--provider` flag: + +| Provider | Value | Description | +| --- | --- | --- | +| AWS Fargate | `aws` | Serverless containers on AWS (full release) | +| Kubernetes | `k8s` | Run on any Kubernetes cluster (preview) | +| Local Docker | `local-docker` | Run in a local Docker container (useful for testing) | + +```bash +game-ci orchestrate \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 \ + --provider aws +``` + +## AWS Options + +| Flag | Default | Description | +| --- | --- | --- | +| `--aws-stack-name` | `game-ci` | CloudFormation stack name for shared resources | +| `--container-cpu` | `1024` | CPU units for the Fargate task (1024 = 1 vCPU) | +| `--container-memory` | `4096` | Memory in MB for the Fargate task | + +AWS credentials are read from the standard AWS environment variables or credential files: + +```bash +export AWS_ACCESS_KEY_ID="your-key" +export AWS_SECRET_ACCESS_KEY="your-secret" +export AWS_DEFAULT_REGION="us-east-1" + +game-ci orchestrate \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 \ + --provider aws \ + --container-cpu 2048 \ + --container-memory 8192 +``` + +### AWS Endpoint Overrides + +For testing with LocalStack or other AWS-compatible services: + +| Flag | Description | +| --- | --- | +| `--aws-endpoint` | Base endpoint override for all AWS services | +| `--aws-cloudformation-endpoint` | CloudFormation endpoint override | +| `--aws-ecs-endpoint` | ECS endpoint override | +| `--aws-s3-endpoint` | S3 endpoint override | +| `--aws-cloudwatch-logs-endpoint` | CloudWatch Logs endpoint override | +| `--aws-kinesis-endpoint` | Kinesis endpoint override | + +## Kubernetes Options + +| Flag | Description | +| --- | --- | +| `--kube-config` | Base64-encoded kubeconfig file contents | +| `--kube-volume` | Name of the persistent volume to use | +| `--kube-volume-size` | Size of the persistent volume (default: `5Gi`) | +| `--kube-storage-class` | Kubernetes storage class for the volume | + +```bash +game-ci orchestrate \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 \ + --provider k8s \ + --kube-config "$(base64 -w 0 ~/.kube/config)" \ + --kube-volume-size 25Gi +``` + +## Cache and Storage Options + +| Flag | Default | Description | +| --- | --- | --- | +| `--cache-key` | Branch name | Key used to scope cache entries | +| `--storage-provider` | `s3` | Storage backend: `s3` or `rclone` | +| `--rclone-remote` | _(none)_ | Rclone remote endpoint (required when using `rclone` storage) | +| `--use-compression` | `true` | Use LZ4 compression for cache and artifacts | +| `--max-retained-workspaces` | `0` | Number of full project snapshots to retain | + +## Workspace Options + +| Flag | Default | Description | +| --- | --- | --- | +| `--clone-depth` | `50` | Git clone depth (use `0` for full clone) | +| `--use-large-packages` | `false` | Redirect large packages to a shared folder | +| `--use-shared-builder` | `false` | Share a single Game CI clone across builds | + +## Execution Options + +| Flag | Default | Description | +| --- | --- | --- | +| `--watch-to-end` | `true` | Follow build logs until completion | +| `--async` | `false` | Return immediately without waiting for the build | +| `--orchestrator-branch` | `main` | Orchestrator release branch (`main` or `orchestrator-develop`) | +| `--orchestrator-debug` | `false` | Enable verbose debug logging | +| `--resource-tracking` | `false` | Log disk usage summaries during the build | + +## Git Authentication + +The remote environment needs access to your repository. Provide a token with repo access: + +```bash +game-ci orchestrate \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 \ + --provider aws \ + --git-private-token "$GITHUB_TOKEN" +``` + +| Flag | Description | +| --- | --- | +| `--git-private-token` | GitHub access token with repository read permission | + +If not provided, the CLI attempts to read the token from the `GITHUB_TOKEN` environment variable. + +## Configuration Override + +Pull sensitive parameters from a secret manager instead of passing them on the command line: + +```bash +game-ci orchestrate \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 \ + --provider aws \ + --read-input-override-command 'gcloud secrets versions access 1 --secret="{0}"' \ + --read-input-from-override-list "UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD" +``` + +See [Configuration Override](../advanced-topics/configuration-override) for details. + +## Resource Management + +List active cloud resources: + +```bash +game-ci orchestrate --mode list-resources +``` + +Run garbage collection to clean up old resources: + +```bash +game-ci orchestrate --mode garbage-collect --garbage-max-age 24 +``` + +## Full Example + +```bash +export AWS_ACCESS_KEY_ID="AKIA..." +export AWS_SECRET_ACCESS_KEY="..." +export AWS_DEFAULT_REGION="us-east-1" + +game-ci orchestrate \ + --unity-version 2022.3.56f1 \ + --target-platform StandaloneLinux64 \ + --provider aws \ + --git-private-token "$GITHUB_TOKEN" \ + --container-cpu 2048 \ + --container-memory 8192 \ + --cache-key "main" \ + --use-compression true \ + --builds-path ./dist +``` + +## See Also + +- [Getting Started](getting-started) — installation and first build +- [Build Command](build-command) — local Docker builds +- [API Reference](../api-reference) — full parameter reference +- [Providers](../providers) — provider-specific setup guides +- [Advanced Topics](../advanced-topics/caching) — caching, workspaces, and hooks diff --git a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx new file mode 100644 index 00000000..2abc2f2d --- /dev/null +++ b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx @@ -0,0 +1,176 @@ +--- +sidebar_position: 4 +--- + +# Other Commands + +Beyond `build` and `orchestrate`, the CLI provides commands for license management, cache +operations, environment diagnostics, and version information. + +## activate + +Manage Unity license activation. Required before running builds. + +```bash +game-ci activate +``` + +### Interactive Activation + +Running `activate` without flags starts an interactive flow that walks you through license +activation: + +1. Choose license type (Personal, Plus, or Pro) +2. Enter credentials or provide a license file +3. The CLI stores the activated license for future builds + +### Environment Variable Activation + +You can skip the interactive flow by setting environment variables before running builds: + +| Variable | Description | +| --- | --- | +| `UNITY_LICENSE` | Contents of a `.ulf` license file (base64 or raw XML) | +| `UNITY_EMAIL` | Unity account email | +| `UNITY_PASSWORD` | Unity account password | +| `UNITY_SERIAL` | Serial key (Professional/Plus licenses only) | + +### Activation Flags + +| Flag | Description | +| --- | --- | +| `--license-file` | Path to a `.ulf` license file | +| `--serial` | Unity serial key | +| `--email` | Unity account email | +| `--password` | Unity account password | + +```bash +# Activate with a license file +game-ci activate --license-file ~/Unity_v2022.x.ulf + +# Activate with serial key +game-ci activate \ + --serial "XX-XXXX-XXXX-XXXX-XXXX-XXXX" \ + --email "you@example.com" \ + --password "your-password" +``` + +## cache + +Manage build caches. Caches store the Unity Library folder and other intermediate artifacts to speed +up subsequent builds. + +```bash +game-ci cache [options] +``` + +### cache list + +List cached entries: + +```bash +game-ci cache list +``` + +Output includes cache keys, sizes, and last-modified timestamps. + +### cache restore + +Restore a cache entry by key: + +```bash +game-ci cache restore --key main +``` + +| Flag | Default | Description | +| --- | --- | --- | +| `--key` | Current branch name | Cache key to restore | +| `--path` | `./Library` | Local path to restore into | + +### cache clear + +Remove cached entries: + +```bash +# Clear a specific cache key +game-ci cache clear --key main + +# Clear all caches +game-ci cache clear --all +``` + +| Flag | Description | +| --- | --- | +| `--key` | Specific cache key to remove | +| `--all` | Remove all cached entries | + +## status + +Display information about the current environment, useful for debugging setup issues: + +```bash +game-ci status +``` + +Reports: + +- **CLI version** — installed `game-ci` package version +- **Docker** — whether Docker is available and its version +- **Unity license** — whether a valid license is detected +- **Project** — detected Unity project path, Unity version from `ProjectSettings/ProjectVersion.txt` +- **Git** — repository URL, branch, and commit SHA +- **Environment** — relevant environment variables that are set (`UNITY_LICENSE`, `UNITY_EMAIL`, + AWS credentials, etc. — values are masked) + +### Flags + +| Flag | Description | +| --- | --- | +| `--json` | Output status as JSON for scripting | + +```bash +# JSON output for scripting +game-ci status --json | jq '.unityVersion' +``` + +## version + +Print the installed CLI version: + +```bash +game-ci version +``` + +``` +game-ci v1.0.0 +``` + +Also available via the standard `--version` flag: + +```bash +game-ci --version +``` + +## Global Flags + +These flags are available on all commands: + +| Flag | Description | +| --- | --- | +| `--help`, `-h` | Show help for any command | +| `--version`, `-v` | Print the CLI version | +| `--verbose` | Enable verbose output | +| `--quiet` | Suppress non-essential output | + +```bash +# Get help for any command +game-ci build --help +game-ci orchestrate --help +game-ci cache --help +``` + +## See Also + +- [Getting Started](getting-started) — installation and first build +- [Build Command](build-command) — full build reference +- [Orchestrate Command](orchestrate-command) — cloud builds diff --git a/docs/03-github-orchestrator/08-cli/_category_.yaml b/docs/03-github-orchestrator/08-cli/_category_.yaml new file mode 100644 index 00000000..4939b69d --- /dev/null +++ b/docs/03-github-orchestrator/08-cli/_category_.yaml @@ -0,0 +1,4 @@ +position: 8.0 +label: CLI +collapsible: true +collapsed: true From 641fadec063b031f8c9d820775a9628da991cc4f Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 17:11:24 +0000 Subject: [PATCH 39/60] fix(cli): correct flag names, defaults, and coverage to match implementation Co-Authored-By: Claude Opus 4.6 --- .../08-cli/01-getting-started.mdx | 70 +++++--- .../08-cli/02-build-command.mdx | 89 +++++++---- .../08-cli/03-orchestrate-command.mdx | 123 +++++--------- .../08-cli/04-other-commands.mdx | 150 +++++++++--------- 4 files changed, 225 insertions(+), 207 deletions(-) diff --git a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx index 9732d673..a90bcfcd 100644 --- a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx +++ b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx @@ -9,51 +9,80 @@ terminal — no GitHub Actions or CI platform required. ## Installation -Install the CLI globally via npm: +### Standalone Binary (Recommended) + +Download a pre-built binary from the +[GitHub Releases page](https://github.com/game-ci/unity-builder/releases). Binaries are available +for Linux (x64, arm64), macOS (x64, arm64), and Windows (x64). + +On Linux or macOS, you can use the install script: + +```bash +curl -fsSL https://raw.githubusercontent.com/game-ci/unity-builder/main/install.sh | sh +``` + +### npm + +You can also install via npm. The package name is `unity-builder`, but the binary is called +`game-ci`: ```bash -npm install -g game-ci +npm install -g unity-builder ``` Or run it without installing using npx: ```bash -npx game-ci --help +npx unity-builder --help ``` ## Unity License Activation -Before building, you need an activated Unity license. The CLI provides an interactive activation -command: +Before building, you need a Unity license. Set one of the following environment variables: + +| Variable | Description | +| --- | --- | +| `UNITY_SERIAL` | Unity serial key (Professional/Plus licenses) | +| `UNITY_LICENSE` | Contents of a Unity `.ulf` license file (base64 or raw XML) | + +You can verify your license is detected by running: ```bash game-ci activate ``` -This walks you through license activation and stores the result for future builds. +This checks for valid license credentials and reports whether activation will succeed. If using a +floating license server, pass the `--unity-licensing-server` flag instead: + +```bash +game-ci activate --unity-licensing-server http://license-server:8080 +``` ### Environment Variables -You can also provide license credentials via environment variables: +Set these in your shell profile or pass them inline: -| Variable | Description | -| --- | --- | -| `UNITY_LICENSE` | Contents of a Unity `.ulf` license file (base64 or raw XML) | -| `UNITY_EMAIL` | Unity account email address | -| `UNITY_PASSWORD` | Unity account password | -| `UNITY_SERIAL` | Unity serial key (for Professional/Plus licenses) | +```bash +export UNITY_SERIAL="XX-XXXX-XXXX-XXXX-XXXX-XXXX" +``` -Set these in your shell profile or pass them inline: +Or for personal licenses: ```bash -export UNITY_EMAIL="you@example.com" -export UNITY_PASSWORD="your-password" export UNITY_LICENSE="$(cat ~/Unity_v2022.x.ulf)" ``` ## Your First Build -Run a build by specifying your Unity version and target platform: +Run a build by specifying your target platform. The Unity version is auto-detected from your +project's `ProjectSettings/ProjectVersion.txt` by default: + +```bash +game-ci build \ + --target-platform StandaloneLinux64 +``` + +You can also specify the Unity version explicitly: ```bash game-ci build \ @@ -66,7 +95,7 @@ The CLI will: 1. Pull the matching Unity Docker image 2. Mount your project into a container 3. Run the Unity build -4. Output build artifacts to the `./builds/` directory +4. Output build artifacts to the `build/` directory ### Specifying a Project Path @@ -74,7 +103,6 @@ If your Unity project is not in the current directory, use `--project-path`: ```bash game-ci build \ - --unity-version 2022.3.56f1 \ --target-platform StandaloneWindows64 \ --project-path ./my-unity-project ``` @@ -98,8 +126,8 @@ Use the `status` command to verify your environment: game-ci status ``` -This reports your installed CLI version, detected Unity license, Docker availability, and current -project info. +This reports whether a Unity project is detected, the Unity version, Library cache status, Docker +availability, and which license environment variables are set. ## Next Steps diff --git a/docs/03-github-orchestrator/08-cli/02-build-command.mdx b/docs/03-github-orchestrator/08-cli/02-build-command.mdx index 8c820067..9fa9a9db 100644 --- a/docs/03-github-orchestrator/08-cli/02-build-command.mdx +++ b/docs/03-github-orchestrator/08-cli/02-build-command.mdx @@ -4,8 +4,8 @@ sidebar_position: 2 # Build Command -The `build` command runs a Unity build inside a Docker container. It accepts the same parameters as -the `game-ci/unity-builder` GitHub Action, translated to CLI flags. +The `build` command runs a Unity build inside a Docker container (or natively on macOS). It accepts +the same parameters as the `game-ci/unity-builder` GitHub Action, translated to CLI flags. ```bash game-ci build [options] @@ -15,25 +15,35 @@ game-ci build [options] | Flag | Description | | --- | --- | -| `--unity-version` | Unity Editor version to use (e.g. `2022.3.56f1`) | | `--target-platform` | Build target platform (e.g. `StandaloneLinux64`) | ## Project Options | Flag | Default | Description | | --- | --- | --- | +| `--unity-version` | `auto` | Unity Editor version to use. Set to `auto` to detect from `ProjectSettings/ProjectVersion.txt`. | | `--project-path` | `.` | Path to the Unity project directory | -| `--build-name` | Target platform name | Name of the build output file | -| `--builds-path` | `./builds` | Output directory for build artifacts | -| `--build-method` | _(none)_ | Custom static C# build method to invoke (e.g. `MyBuild.PerformBuild`) | +| `--build-name` | _(empty)_ | Name of the build output file (no file extension) | +| `--builds-path` | `build` | Output directory for build artifacts | +| `--build-method` | _(empty)_ | Custom static C# build method to invoke (e.g. `MyBuild.PerformBuild`) | +| `--build-profile` | _(empty)_ | Path to the build profile to activate, relative to the project root | +| `--custom-parameters` | _(empty)_ | Additional parameters appended to the Unity command line | ## Versioning Options | Flag | Default | Description | | --- | --- | --- | -| `--versioning` | `None` | Versioning strategy: `None`, `Semantic`, `Tag`, `Custom` | -| `--version` | _(none)_ | Explicit version string (used with `--versioning Custom`) | -| `--android-version-code` | _(auto)_ | Android `versionCode` override | +| `--versioning` | `Semantic` | Versioning strategy: `Semantic`, `Tag`, `Custom`, `None` | +| `--version` | _(empty)_ | Explicit version string (used with `--versioning Custom`) | + +## Unity Options + +| Flag | Default | Description | +| --- | --- | --- | +| `--manual-exit` | `false` | Suppresses the `-quit` flag. Use when your build method calls `EditorApplication.Exit(0)` manually. | +| `--enable-gpu` | `false` | Launches Unity without specifying `-nographics` | +| `--skip-activation` | `false` | Skip Unity license activation/deactivation | +| `--unity-licensing-server` | _(empty)_ | Unity floating license server address | ## Custom Build Parameters @@ -41,7 +51,6 @@ Pass arbitrary parameters to the Unity build process: ```bash game-ci build \ - --unity-version 2022.3.56f1 \ --target-platform StandaloneLinux64 \ --custom-parameters "-myFlag -myKey myValue" ``` @@ -50,27 +59,28 @@ The `--custom-parameters` string is appended to the Unity command line arguments ## Android Options -| Flag | Description | -| --- | --- | -| `--android-keystore-name` | Filename of the keystore | -| `--android-keystore-base64` | Base64-encoded keystore file contents | -| `--android-keystore-pass` | Keystore password | -| `--android-keyalias-name` | Key alias name within the keystore | -| `--android-keyalias-pass` | Key alias password | -| `--android-target-sdk` | Target Android SDK version (e.g. `AndroidApiLevel31`) | -| `--android-export-type` | Export type: `androidPackage` (APK) or `androidAppBundle` (AAB) | +| Flag | Default | Description | +| --- | --- | --- | +| `--android-version-code` | _(empty)_ | Android `versionCode` override | +| `--android-export-type` | `androidPackage` | Export type: `androidPackage` (APK), `androidAppBundle` (AAB), or `androidStudioProject` | +| `--android-keystore-name` | _(empty)_ | Filename of the keystore | +| `--android-keystore-base64` | _(empty)_ | Base64-encoded keystore file contents | +| `--android-keystore-pass` | _(empty)_ | Keystore password | +| `--android-keyalias-name` | _(empty)_ | Key alias name within the keystore | +| `--android-keyalias-pass` | _(empty)_ | Key alias password | +| `--android-target-sdk-version` | _(empty)_ | Target Android SDK version (e.g. `AndroidApiLevel31`) | +| `--android-symbol-type` | `none` | Android symbol type to export: `none`, `public`, or `debugging` | ### Android Build Example ```bash game-ci build \ - --unity-version 2022.3.56f1 \ --target-platform Android \ --android-keystore-base64 "$(base64 -w 0 release.keystore)" \ --android-keystore-pass "$KEYSTORE_PASS" \ --android-keyalias-name "release" \ --android-keyalias-pass "$KEY_PASS" \ - --android-target-sdk AndroidApiLevel31 \ + --android-target-sdk-version AndroidApiLevel31 \ --android-export-type androidAppBundle ``` @@ -80,36 +90,47 @@ Control the Docker container used for the build: | Flag | Default | Description | | --- | --- | --- | -| `--docker-image` | _(auto)_ | Override the Docker image (defaults to `unityci/editor` with the specified version and platform) | -| `--docker-cpu-limit` | _(unlimited)_ | CPU limit for the container (e.g. `4` for 4 cores) | -| `--docker-memory-limit` | _(unlimited)_ | Memory limit for the container (e.g. `8g` for 8 GB) | +| `--custom-image` | _(empty)_ | Override the Docker image (defaults to `unityci/editor` with the detected version and platform) | +| `--docker-cpu-limit` | _(empty)_ | CPU limit for the container (e.g. `4` for 4 cores) | +| `--docker-memory-limit` | _(empty)_ | Memory limit for the container (e.g. `8g` for 8 GB) | +| `--docker-workspace-path` | `/github/workspace` | Path where the workspace is mounted inside the container | +| `--run-as-host-user` | `false` | Run as a user that matches the host system | +| `--chown-files-to` | _(empty)_ | User and optionally group to give ownership of build artifacts (e.g. `1000:1000`) | ### Custom Docker Image Example ```bash game-ci build \ - --unity-version 2022.3.56f1 \ --target-platform StandaloneLinux64 \ - --docker-image my-registry.com/unity-editor:2022.3.56f1-linux + --custom-image my-registry.com/unity-editor:2022.3.56f1-linux ``` -## IL2CPP Options +## Authentication Options | Flag | Default | Description | | --- | --- | --- | -| `--allow-dirty-build` | `false` | Allow building without a clean working tree | +| `--ssh-agent` | _(empty)_ | SSH Agent path to forward to the container | +| `--git-private-token` | _(empty)_ | GitHub private token for pulling from private repositories | + +## Provider Strategy -When building with the IL2CPP scripting backend, the CLI automatically configures the Docker -container with the required build tools. No additional flags are needed beyond selecting the correct -target platform. +By default, the `build` command runs locally. You can redirect execution to a remote orchestrator +provider: + +| Flag | Default | Description | +| --- | --- | --- | +| `--provider-strategy` | `local` | Execution strategy: `local`, `k8s`, or `aws` | + +When set to anything other than `local`, the build is handed off to the orchestrator. See +[Orchestrate Command](orchestrate-command) for cloud-specific options. ## Output -Build artifacts are written to the path specified by `--builds-path` (default `./builds/`). The +Build artifacts are written to the path specified by `--builds-path` (default `build/`). The directory structure is: ``` -builds/ +build/ / ``` @@ -118,8 +139,8 @@ builds/ ```bash game-ci build \ - --unity-version 2022.3.56f1 \ --target-platform StandaloneLinux64 \ + --unity-version 2022.3.56f1 \ --project-path ./my-project \ --build-name MyGame \ --builds-path ./dist \ diff --git a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx index 64baa3cb..479f5a1d 100644 --- a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx +++ b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx @@ -12,32 +12,50 @@ game-ci orchestrate [options] ``` This is the CLI equivalent of using `game-ci/unity-builder` with a `providerStrategy` in GitHub -Actions. All [Orchestrator API parameters](../api-reference) are available as CLI flags. +Actions. + +## Required Options + +| Flag | Description | +| --- | --- | +| `--target-platform` | Build target platform (e.g. `StandaloneLinux64`) | ## Provider Selection -Choose where your build runs with the `--provider` flag: +Choose where your build runs with the `--provider-strategy` flag: | Provider | Value | Description | | --- | --- | --- | -| AWS Fargate | `aws` | Serverless containers on AWS (full release) | -| Kubernetes | `k8s` | Run on any Kubernetes cluster (preview) | -| Local Docker | `local-docker` | Run in a local Docker container (useful for testing) | +| AWS Fargate | `aws` | Serverless containers on AWS (default) | +| Kubernetes | `k8s` | Run on any Kubernetes cluster | +| Local Docker | `local-docker` | Run in a local Docker container | +| Local System | `local-system` | Run directly on the local system | ```bash game-ci orchestrate \ - --unity-version 2022.3.56f1 \ --target-platform StandaloneLinux64 \ - --provider aws + --provider-strategy aws ``` +## Build Options + +| Flag | Default | Description | +| --- | --- | --- | +| `--unity-version` | `auto` | Unity Editor version to use. Set to `auto` to detect from project. | +| `--project-path` | `.` | Path to the Unity project directory | +| `--build-name` | _(empty)_ | Name of the build | +| `--builds-path` | `build` | Path where build artifacts are stored | +| `--build-method` | _(empty)_ | Custom static C# build method to invoke | +| `--custom-parameters` | _(empty)_ | Additional parameters for the Unity build | +| `--versioning` | `None` | Versioning strategy: `None`, `Semantic`, `Tag`, `Custom` | + ## AWS Options | Flag | Default | Description | | --- | --- | --- | | `--aws-stack-name` | `game-ci` | CloudFormation stack name for shared resources | | `--container-cpu` | `1024` | CPU units for the Fargate task (1024 = 1 vCPU) | -| `--container-memory` | `4096` | Memory in MB for the Fargate task | +| `--container-memory` | `3072` | Memory in MB for the Fargate task | AWS credentials are read from the standard AWS environment variables or credential files: @@ -47,71 +65,47 @@ export AWS_SECRET_ACCESS_KEY="your-secret" export AWS_DEFAULT_REGION="us-east-1" game-ci orchestrate \ - --unity-version 2022.3.56f1 \ --target-platform StandaloneLinux64 \ - --provider aws \ + --provider-strategy aws \ --container-cpu 2048 \ --container-memory 8192 ``` -### AWS Endpoint Overrides - -For testing with LocalStack or other AWS-compatible services: - -| Flag | Description | -| --- | --- | -| `--aws-endpoint` | Base endpoint override for all AWS services | -| `--aws-cloudformation-endpoint` | CloudFormation endpoint override | -| `--aws-ecs-endpoint` | ECS endpoint override | -| `--aws-s3-endpoint` | S3 endpoint override | -| `--aws-cloudwatch-logs-endpoint` | CloudWatch Logs endpoint override | -| `--aws-kinesis-endpoint` | Kinesis endpoint override | - ## Kubernetes Options -| Flag | Description | -| --- | --- | -| `--kube-config` | Base64-encoded kubeconfig file contents | -| `--kube-volume` | Name of the persistent volume to use | -| `--kube-volume-size` | Size of the persistent volume (default: `5Gi`) | -| `--kube-storage-class` | Kubernetes storage class for the volume | +| Flag | Default | Description | +| --- | --- | --- | +| `--kube-config` | _(empty)_ | Base64-encoded kubeconfig file contents | +| `--kube-volume` | _(empty)_ | Name of the persistent volume to use | +| `--kube-volume-size` | `5Gi` | Size of the persistent volume | ```bash game-ci orchestrate \ - --unity-version 2022.3.56f1 \ --target-platform StandaloneLinux64 \ - --provider k8s \ + --provider-strategy k8s \ --kube-config "$(base64 -w 0 ~/.kube/config)" \ --kube-volume-size 25Gi ``` -## Cache and Storage Options +## Cache Options | Flag | Default | Description | | --- | --- | --- | -| `--cache-key` | Branch name | Key used to scope cache entries | -| `--storage-provider` | `s3` | Storage backend: `s3` or `rclone` | -| `--rclone-remote` | _(none)_ | Rclone remote endpoint (required when using `rclone` storage) | -| `--use-compression` | `true` | Use LZ4 compression for cache and artifacts | -| `--max-retained-workspaces` | `0` | Number of full project snapshots to retain | +| `--cache-key` | _(empty)_ | Key used to scope cache entries | ## Workspace Options | Flag | Default | Description | | --- | --- | --- | | `--clone-depth` | `50` | Git clone depth (use `0` for full clone) | -| `--use-large-packages` | `false` | Redirect large packages to a shared folder | -| `--use-shared-builder` | `false` | Share a single Game CI clone across builds | ## Execution Options | Flag | Default | Description | | --- | --- | --- | | `--watch-to-end` | `true` | Follow build logs until completion | -| `--async` | `false` | Return immediately without waiting for the build | -| `--orchestrator-branch` | `main` | Orchestrator release branch (`main` or `orchestrator-develop`) | -| `--orchestrator-debug` | `false` | Enable verbose debug logging | -| `--resource-tracking` | `false` | Log disk usage summaries during the build | +| `--allow-dirty-build` | `false` | Allow builds from dirty (uncommitted changes) branches | +| `--skip-activation` | `false` | Skip Unity license activation/deactivation | ## Git Authentication @@ -119,47 +113,17 @@ The remote environment needs access to your repository. Provide a token with rep ```bash game-ci orchestrate \ - --unity-version 2022.3.56f1 \ --target-platform StandaloneLinux64 \ - --provider aws \ + --provider-strategy aws \ --git-private-token "$GITHUB_TOKEN" ``` -| Flag | Description | -| --- | --- | -| `--git-private-token` | GitHub access token with repository read permission | +| Flag | Default | Description | +| --- | --- | --- | +| `--git-private-token` | _(empty)_ | GitHub access token with repository read permission | If not provided, the CLI attempts to read the token from the `GITHUB_TOKEN` environment variable. -## Configuration Override - -Pull sensitive parameters from a secret manager instead of passing them on the command line: - -```bash -game-ci orchestrate \ - --unity-version 2022.3.56f1 \ - --target-platform StandaloneLinux64 \ - --provider aws \ - --read-input-override-command 'gcloud secrets versions access 1 --secret="{0}"' \ - --read-input-from-override-list "UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD" -``` - -See [Configuration Override](../advanced-topics/configuration-override) for details. - -## Resource Management - -List active cloud resources: - -```bash -game-ci orchestrate --mode list-resources -``` - -Run garbage collection to clean up old resources: - -```bash -game-ci orchestrate --mode garbage-collect --garbage-max-age 24 -``` - ## Full Example ```bash @@ -168,14 +132,12 @@ export AWS_SECRET_ACCESS_KEY="..." export AWS_DEFAULT_REGION="us-east-1" game-ci orchestrate \ - --unity-version 2022.3.56f1 \ --target-platform StandaloneLinux64 \ - --provider aws \ + --provider-strategy aws \ --git-private-token "$GITHUB_TOKEN" \ --container-cpu 2048 \ --container-memory 8192 \ --cache-key "main" \ - --use-compression true \ --builds-path ./dist ``` @@ -185,4 +147,3 @@ game-ci orchestrate \ - [Build Command](build-command) — local Docker builds - [API Reference](../api-reference) — full parameter reference - [Providers](../providers) — provider-specific setup guides -- [Advanced Topics](../advanced-topics/caching) — caching, workspaces, and hooks diff --git a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx index 2abc2f2d..153cbdc1 100644 --- a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx +++ b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx @@ -5,54 +5,48 @@ sidebar_position: 4 # Other Commands Beyond `build` and `orchestrate`, the CLI provides commands for license management, cache -operations, environment diagnostics, and version information. +operations, environment diagnostics, version information, and self-updating. ## activate -Manage Unity license activation. Required before running builds. +Verify and prepare Unity license activation. Checks that valid license credentials are available +before running builds. ```bash game-ci activate ``` -### Interactive Activation +The `activate` command checks for license credentials from environment variables and reports whether +activation will succeed. License activation itself is handled automatically when a build runs. -Running `activate` without flags starts an interactive flow that walks you through license -activation: +### License Methods -1. Choose license type (Personal, Plus, or Pro) -2. Enter credentials or provide a license file -3. The CLI stores the activated license for future builds - -### Environment Variable Activation - -You can skip the interactive flow by setting environment variables before running builds: +Provide credentials via environment variables: | Variable | Description | | --- | --- | +| `UNITY_SERIAL` | Serial key (Professional/Plus licenses) | | `UNITY_LICENSE` | Contents of a `.ulf` license file (base64 or raw XML) | -| `UNITY_EMAIL` | Unity account email | -| `UNITY_PASSWORD` | Unity account password | -| `UNITY_SERIAL` | Serial key (Professional/Plus licenses only) | -### Activation Flags +```bash +# Using a serial key +UNITY_SERIAL=XX-XXXX-XXXX-XXXX-XXXX-XXXX game-ci activate -| Flag | Description | -| --- | --- | -| `--license-file` | Path to a `.ulf` license file | -| `--serial` | Unity serial key | -| `--email` | Unity account email | -| `--password` | Unity account password | +# Using a license file +export UNITY_LICENSE="$(cat ~/Unity_v2022.x.ulf)" +game-ci activate +``` + +### Flags + +| Flag | Default | Description | +| --- | --- | --- | +| `--unity-version` | `auto` | Version of Unity to activate | +| `--unity-licensing-server` | _(empty)_ | Unity floating license server address | ```bash -# Activate with a license file -game-ci activate --license-file ~/Unity_v2022.x.ulf - -# Activate with serial key -game-ci activate \ - --serial "XX-XXXX-XXXX-XXXX-XXXX-XXXX" \ - --email "you@example.com" \ - --password "your-password" +# Using a floating license server +game-ci activate --unity-licensing-server http://license-server:8080 ``` ## cache @@ -61,48 +55,44 @@ Manage build caches. Caches store the Unity Library folder and other intermediat up subsequent builds. ```bash -game-ci cache [options] +game-ci cache [options] ``` +The `` positional argument is required and must be one of: `list`, `restore`, or `clear`. + ### cache list -List cached entries: +List cache status, including Library folder presence and any cache archives: ```bash game-ci cache list ``` -Output includes cache keys, sizes, and last-modified timestamps. +Output includes Library folder path, entry count, last-modified timestamp, and key subdirectory +status (PackageCache, ScriptAssemblies, ShaderCache, Bee). ### cache restore -Restore a cache entry by key: +Check for available cache archives to restore: ```bash -game-ci cache restore --key main +game-ci cache restore --cache-dir ./my-cache ``` -| Flag | Default | Description | -| --- | --- | --- | -| `--key` | Current branch name | Cache key to restore | -| `--path` | `./Library` | Local path to restore into | - ### cache clear -Remove cached entries: +Remove cache archive files: ```bash -# Clear a specific cache key -game-ci cache clear --key main - -# Clear all caches -game-ci cache clear --all +game-ci cache clear ``` -| Flag | Description | -| --- | --- | -| `--key` | Specific cache key to remove | -| `--all` | Remove all cached entries | +### Cache Flags + +| Flag | Default | Description | +| --- | --- | --- | +| `--cache-dir` | _(empty)_ | Path to the cache directory (defaults to `/Library`) | +| `--project-path` | `.` | Path to the Unity project | ## status @@ -114,43 +104,64 @@ game-ci status Reports: -- **CLI version** — installed `game-ci` package version +- **Project** — detected Unity project path and whether a project was found +- **Unity Version** — version detected from `ProjectSettings/ProjectVersion.txt` +- **Library Cache** — whether the Library folder is present and when it was last modified +- **Build Outputs** — any existing build output directories +- **Environment** — platform, Node.js version, and which license environment variables are set + (`UNITY_SERIAL`, `UNITY_LICENSE`, `UNITY_EMAIL`, `UNITY_PASSWORD` — shown as Set/Not set) - **Docker** — whether Docker is available and its version -- **Unity license** — whether a valid license is detected -- **Project** — detected Unity project path, Unity version from `ProjectSettings/ProjectVersion.txt` -- **Git** — repository URL, branch, and commit SHA -- **Environment** — relevant environment variables that are set (`UNITY_LICENSE`, `UNITY_EMAIL`, - AWS credentials, etc. — values are masked) ### Flags -| Flag | Description | -| --- | --- | -| `--json` | Output status as JSON for scripting | - -```bash -# JSON output for scripting -game-ci status --json | jq '.unityVersion' -``` +| Flag | Default | Description | +| --- | --- | --- | +| `--project-path` | `.` | Path to the Unity project | ## version -Print the installed CLI version: +Print the installed CLI version, Node.js version, and platform: ```bash game-ci version ``` ``` -game-ci v1.0.0 +game-ci (unity-builder) v3.0.0 +Node.js v20.5.1 +Platform: win32 x64 +``` + +## update + +Update the `game-ci` CLI to the latest version. Downloads the appropriate binary from GitHub +Releases for your platform and architecture. + +```bash +game-ci update ``` -Also available via the standard `--version` flag: +### Flags + +| Flag | Default | Description | +| --- | --- | --- | +| `--force`, `-f` | `false` | Force update even if already on the latest version | +| `--version` | _(empty)_ | Update to a specific version (e.g. `v2.1.0`) | ```bash -game-ci --version +# Update to the latest version +game-ci update + +# Update to a specific version +game-ci update --version v2.1.0 + +# Force reinstall of the current version +game-ci update --force ``` +If running via Node.js (not as a standalone binary), the command will print instructions for +updating via npm instead. + ## Global Flags These flags are available on all commands: @@ -158,9 +169,6 @@ These flags are available on all commands: | Flag | Description | | --- | --- | | `--help`, `-h` | Show help for any command | -| `--version`, `-v` | Print the CLI version | -| `--verbose` | Enable verbose output | -| `--quiet` | Suppress non-essential output | ```bash # Get help for any command From 9671491bdf77667a3176ba859fa57c85e999f41a Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 5 Mar 2026 23:21:56 +0000 Subject: [PATCH 40/60] chore: add integration branch update scripts Co-Authored-By: Claude Opus 4.6 --- delete-me-update-all-integration-branches.ps1 | 113 ++++++++++++++++++ delete-me-update-this-integration-branch.ps1 | 69 +++++++++++ 2 files changed, 182 insertions(+) create mode 100644 delete-me-update-all-integration-branches.ps1 create mode 100644 delete-me-update-this-integration-branch.ps1 diff --git a/delete-me-update-all-integration-branches.ps1 b/delete-me-update-all-integration-branches.ps1 new file mode 100644 index 00000000..4b4615aa --- /dev/null +++ b/delete-me-update-all-integration-branches.ps1 @@ -0,0 +1,113 @@ +# delete-me-update-all-integration-branches.ps1 +# Updates ALL integration branches from their component branches. +# Run from any branch -- it will stash changes, update each integration branch, then return. + +$ErrorActionPreference = 'Stop' + +$originalBranch = git rev-parse --abbrev-ref HEAD +$stashed = $false + +# Stash any uncommitted changes +$status = git status --porcelain +if ($status) { + Write-Host "Stashing uncommitted changes..." -ForegroundColor Cyan + git stash push -m "auto-stash before integration branch update" + $stashed = $true +} + +Write-Host "Fetching all branches from origin..." -ForegroundColor Cyan +git fetch origin + +$integrationBranches = @( + @{ + Name = 'release/next-gen' + Branches = @( + 'docs/test-workflow-hot-runners' # #538 - next-gen features and advanced topics + 'docs/cli-support' # #540 - game-ci CLI documentation + ) + } + @{ + Name = 'release/lts-2.0.0' + Branches = @( + # LTS Infrastructure docs + 'document-provider-plugins' # #532 - comprehensive LTS documentation update + 'docs/cloud-providers' # #533 - GCP Cloud Run and Azure ACI + 'docs/build-services' # #535 - CLI providers, caching, LFS, hooks + 'docs/load-balancing-api' # #536 - built-in load balancing + 'docs/secret-sources' # #537 - premade secret sources + 'docs/improve-orchestrator-docs' # #539 - typos and formatting fixes + # Next-gen docs (LTS includes all) + 'docs/test-workflow-hot-runners' # #538 - next-gen features and advanced topics + 'docs/cli-support' # #540 - game-ci CLI documentation + ) + } +) + +foreach ($integration in $integrationBranches) { + $name = $integration.Name + Write-Host "`n========================================" -ForegroundColor Cyan + Write-Host "Updating $name" -ForegroundColor Cyan + Write-Host "========================================" -ForegroundColor Cyan + + # Check if branch exists locally + $exists = git branch --list $name + if (-not $exists) { + Write-Host "Creating local branch from origin/$name..." -ForegroundColor Yellow + git checkout -b $name "origin/$name" + } else { + git checkout $name + git pull origin $name --ff-only 2>$null + if ($LASTEXITCODE -ne 0) { + git pull origin $name --no-edit + } + } + + $failed = @() + foreach ($branch in $integration.Branches) { + $remoteBranch = "origin/$branch" + # Check if remote branch exists + $refExists = git rev-parse --verify $remoteBranch 2>$null + if ($LASTEXITCODE -ne 0) { + Write-Host " Skipping $branch (not found on remote)" -ForegroundColor DarkGray + continue + } + + # Check if already merged + $mergeBase = git merge-base HEAD $remoteBranch 2>$null + $remoteHead = git rev-parse $remoteBranch 2>$null + if ($mergeBase -eq $remoteHead) { + Write-Host " $branch - already up to date" -ForegroundColor DarkGray + continue + } + + Write-Host " Merging $branch..." -ForegroundColor Yellow + $result = git merge $remoteBranch --no-edit 2>&1 + if ($LASTEXITCODE -ne 0) { + Write-Host " CONFLICT - skipped (resolve manually)" -ForegroundColor Red + $failed += $branch + git merge --abort + } else { + Write-Host " OK" -ForegroundColor Green + } + } + + if ($failed.Count -gt 0) { + Write-Host "`n Conflicts in:" -ForegroundColor Red + $failed | ForEach-Object { Write-Host " - $_" -ForegroundColor Red } + } + + # Push + Write-Host " Pushing $name to origin..." -ForegroundColor Cyan + git push origin $name +} + +# Return to original branch +Write-Host "`nReturning to $originalBranch..." -ForegroundColor Cyan +git checkout $originalBranch + +if ($stashed) { + Write-Host "Restoring stashed changes..." -ForegroundColor Cyan + git stash pop +} + +Write-Host "`nDone!" -ForegroundColor Green diff --git a/delete-me-update-this-integration-branch.ps1 b/delete-me-update-this-integration-branch.ps1 new file mode 100644 index 00000000..51b17a93 --- /dev/null +++ b/delete-me-update-this-integration-branch.ps1 @@ -0,0 +1,69 @@ +# delete-me-update-this-integration-branch.ps1 +# Run this script from the repo root while on the release/lts-2.0.0 branch. +# It merges the latest from each component branch to keep this integration branch current. +# After running, review any conflicts, then commit and push. + +$ErrorActionPreference = 'Stop' + +$branchName = git rev-parse --abbrev-ref HEAD +if ($branchName -ne 'release/lts-2.0.0') { + Write-Error "Must be on release/lts-2.0.0 branch. Currently on: $branchName" + exit 1 +} + +# Component branches for this integration branch (all documentation PRs) +$branches = @( + # LTS Infrastructure docs + 'document-provider-plugins' # #532 - comprehensive LTS documentation update + 'docs/cloud-providers' # #533 - GCP Cloud Run and Azure ACI + 'docs/build-services' # #535 - CLI providers, caching, LFS, hooks + 'docs/load-balancing-api' # #536 - built-in load balancing + 'docs/secret-sources' # #537 - premade secret sources + 'docs/improve-orchestrator-docs' # #539 - typos and formatting fixes + # Next-gen docs + 'docs/test-workflow-hot-runners' # #538 - next-gen features and advanced topics + 'docs/cli-support' # #540 - game-ci CLI documentation +) + +Write-Host "Fetching latest from origin..." -ForegroundColor Cyan +git fetch origin + +$failed = @() +foreach ($branch in $branches) { + $remoteBranch = "origin/$branch" + # Check if remote branch exists + $refExists = git rev-parse --verify $remoteBranch 2>$null + if ($LASTEXITCODE -ne 0) { + Write-Host " Skipping $branch (not found on remote)" -ForegroundColor DarkGray + continue + } + + # Check if already merged + $mergeBase = git merge-base HEAD $remoteBranch 2>$null + $remoteHead = git rev-parse $remoteBranch 2>$null + if ($mergeBase -eq $remoteHead) { + Write-Host " $branch - already up to date" -ForegroundColor DarkGray + continue + } + + Write-Host "`nMerging origin/$branch..." -ForegroundColor Yellow + $result = git merge "origin/$branch" --no-edit 2>&1 + if ($LASTEXITCODE -ne 0) { + Write-Host " CONFLICT merging $branch - resolve manually" -ForegroundColor Red + $failed += $branch + # Abort this merge so we can continue with others + git merge --abort + } else { + Write-Host " Merged successfully" -ForegroundColor Green + } +} + +if ($failed.Count -gt 0) { + Write-Host "`nThe following branches had conflicts and were skipped:" -ForegroundColor Red + $failed | ForEach-Object { Write-Host " - $_" -ForegroundColor Red } + Write-Host "`nRe-run after resolving, or merge them manually:" -ForegroundColor Yellow + $failed | ForEach-Object { Write-Host " git merge origin/$_" -ForegroundColor Yellow } +} else { + Write-Host "`nAll branches merged successfully!" -ForegroundColor Green + Write-Host "Run 'git push origin release/lts-2.0.0' to update the remote." -ForegroundColor Cyan +} From dcebd3d11dc336c175edb809ce4bbc90d3f36a1d Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 06:55:45 +0000 Subject: [PATCH 41/60] docs: update for standalone @game-ci/orchestrator package - Add standalone package callout to introduction - Update external links to point to orchestrator repo - Add standalone package note to getting started - Update CLI docs to reference orchestrator package for installation - Update version output and update command references - Remove temporary delete-me scripts Co-Authored-By: Claude Opus 4.6 --- delete-me-update-all-integration-branches.ps1 | 113 ------------------ delete-me-update-this-integration-branch.ps1 | 69 ----------- .../01-introduction.mdx | 16 ++- .../02-getting-started.mdx | 4 + .../08-cli/01-getting-started.mdx | 10 +- .../08-cli/02-build-command.mdx | 3 +- .../08-cli/04-other-commands.mdx | 7 +- 7 files changed, 26 insertions(+), 196 deletions(-) delete mode 100644 delete-me-update-all-integration-branches.ps1 delete mode 100644 delete-me-update-this-integration-branch.ps1 diff --git a/delete-me-update-all-integration-branches.ps1 b/delete-me-update-all-integration-branches.ps1 deleted file mode 100644 index 4b4615aa..00000000 --- a/delete-me-update-all-integration-branches.ps1 +++ /dev/null @@ -1,113 +0,0 @@ -# delete-me-update-all-integration-branches.ps1 -# Updates ALL integration branches from their component branches. -# Run from any branch -- it will stash changes, update each integration branch, then return. - -$ErrorActionPreference = 'Stop' - -$originalBranch = git rev-parse --abbrev-ref HEAD -$stashed = $false - -# Stash any uncommitted changes -$status = git status --porcelain -if ($status) { - Write-Host "Stashing uncommitted changes..." -ForegroundColor Cyan - git stash push -m "auto-stash before integration branch update" - $stashed = $true -} - -Write-Host "Fetching all branches from origin..." -ForegroundColor Cyan -git fetch origin - -$integrationBranches = @( - @{ - Name = 'release/next-gen' - Branches = @( - 'docs/test-workflow-hot-runners' # #538 - next-gen features and advanced topics - 'docs/cli-support' # #540 - game-ci CLI documentation - ) - } - @{ - Name = 'release/lts-2.0.0' - Branches = @( - # LTS Infrastructure docs - 'document-provider-plugins' # #532 - comprehensive LTS documentation update - 'docs/cloud-providers' # #533 - GCP Cloud Run and Azure ACI - 'docs/build-services' # #535 - CLI providers, caching, LFS, hooks - 'docs/load-balancing-api' # #536 - built-in load balancing - 'docs/secret-sources' # #537 - premade secret sources - 'docs/improve-orchestrator-docs' # #539 - typos and formatting fixes - # Next-gen docs (LTS includes all) - 'docs/test-workflow-hot-runners' # #538 - next-gen features and advanced topics - 'docs/cli-support' # #540 - game-ci CLI documentation - ) - } -) - -foreach ($integration in $integrationBranches) { - $name = $integration.Name - Write-Host "`n========================================" -ForegroundColor Cyan - Write-Host "Updating $name" -ForegroundColor Cyan - Write-Host "========================================" -ForegroundColor Cyan - - # Check if branch exists locally - $exists = git branch --list $name - if (-not $exists) { - Write-Host "Creating local branch from origin/$name..." -ForegroundColor Yellow - git checkout -b $name "origin/$name" - } else { - git checkout $name - git pull origin $name --ff-only 2>$null - if ($LASTEXITCODE -ne 0) { - git pull origin $name --no-edit - } - } - - $failed = @() - foreach ($branch in $integration.Branches) { - $remoteBranch = "origin/$branch" - # Check if remote branch exists - $refExists = git rev-parse --verify $remoteBranch 2>$null - if ($LASTEXITCODE -ne 0) { - Write-Host " Skipping $branch (not found on remote)" -ForegroundColor DarkGray - continue - } - - # Check if already merged - $mergeBase = git merge-base HEAD $remoteBranch 2>$null - $remoteHead = git rev-parse $remoteBranch 2>$null - if ($mergeBase -eq $remoteHead) { - Write-Host " $branch - already up to date" -ForegroundColor DarkGray - continue - } - - Write-Host " Merging $branch..." -ForegroundColor Yellow - $result = git merge $remoteBranch --no-edit 2>&1 - if ($LASTEXITCODE -ne 0) { - Write-Host " CONFLICT - skipped (resolve manually)" -ForegroundColor Red - $failed += $branch - git merge --abort - } else { - Write-Host " OK" -ForegroundColor Green - } - } - - if ($failed.Count -gt 0) { - Write-Host "`n Conflicts in:" -ForegroundColor Red - $failed | ForEach-Object { Write-Host " - $_" -ForegroundColor Red } - } - - # Push - Write-Host " Pushing $name to origin..." -ForegroundColor Cyan - git push origin $name -} - -# Return to original branch -Write-Host "`nReturning to $originalBranch..." -ForegroundColor Cyan -git checkout $originalBranch - -if ($stashed) { - Write-Host "Restoring stashed changes..." -ForegroundColor Cyan - git stash pop -} - -Write-Host "`nDone!" -ForegroundColor Green diff --git a/delete-me-update-this-integration-branch.ps1 b/delete-me-update-this-integration-branch.ps1 deleted file mode 100644 index 51b17a93..00000000 --- a/delete-me-update-this-integration-branch.ps1 +++ /dev/null @@ -1,69 +0,0 @@ -# delete-me-update-this-integration-branch.ps1 -# Run this script from the repo root while on the release/lts-2.0.0 branch. -# It merges the latest from each component branch to keep this integration branch current. -# After running, review any conflicts, then commit and push. - -$ErrorActionPreference = 'Stop' - -$branchName = git rev-parse --abbrev-ref HEAD -if ($branchName -ne 'release/lts-2.0.0') { - Write-Error "Must be on release/lts-2.0.0 branch. Currently on: $branchName" - exit 1 -} - -# Component branches for this integration branch (all documentation PRs) -$branches = @( - # LTS Infrastructure docs - 'document-provider-plugins' # #532 - comprehensive LTS documentation update - 'docs/cloud-providers' # #533 - GCP Cloud Run and Azure ACI - 'docs/build-services' # #535 - CLI providers, caching, LFS, hooks - 'docs/load-balancing-api' # #536 - built-in load balancing - 'docs/secret-sources' # #537 - premade secret sources - 'docs/improve-orchestrator-docs' # #539 - typos and formatting fixes - # Next-gen docs - 'docs/test-workflow-hot-runners' # #538 - next-gen features and advanced topics - 'docs/cli-support' # #540 - game-ci CLI documentation -) - -Write-Host "Fetching latest from origin..." -ForegroundColor Cyan -git fetch origin - -$failed = @() -foreach ($branch in $branches) { - $remoteBranch = "origin/$branch" - # Check if remote branch exists - $refExists = git rev-parse --verify $remoteBranch 2>$null - if ($LASTEXITCODE -ne 0) { - Write-Host " Skipping $branch (not found on remote)" -ForegroundColor DarkGray - continue - } - - # Check if already merged - $mergeBase = git merge-base HEAD $remoteBranch 2>$null - $remoteHead = git rev-parse $remoteBranch 2>$null - if ($mergeBase -eq $remoteHead) { - Write-Host " $branch - already up to date" -ForegroundColor DarkGray - continue - } - - Write-Host "`nMerging origin/$branch..." -ForegroundColor Yellow - $result = git merge "origin/$branch" --no-edit 2>&1 - if ($LASTEXITCODE -ne 0) { - Write-Host " CONFLICT merging $branch - resolve manually" -ForegroundColor Red - $failed += $branch - # Abort this merge so we can continue with others - git merge --abort - } else { - Write-Host " Merged successfully" -ForegroundColor Green - } -} - -if ($failed.Count -gt 0) { - Write-Host "`nThe following branches had conflicts and were skipped:" -ForegroundColor Red - $failed | ForEach-Object { Write-Host " - $_" -ForegroundColor Red } - Write-Host "`nRe-run after resolving, or merge them manually:" -ForegroundColor Yellow - $failed | ForEach-Object { Write-Host " git merge origin/$_" -ForegroundColor Yellow } -} else { - Write-Host "`nAll branches merged successfully!" -ForegroundColor Green - Write-Host "Run 'git push origin release/lts-2.0.0' to update the remote." -ForegroundColor Cyan -} diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 0f222435..73f509e5 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -26,6 +26,12 @@ be built, and streams results back. Orchestrator supports large projects with first-class Unity support and native cloud services like AWS Fargate and Kubernetes. +:::info Standalone Package +The orchestrator is available as a standalone package +[`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator). When installed, unity-builder +automatically detects and loads it via the plugin interface. +::: + ## ✅ Why Orchestrator? 1. **Flexible and elastic** — balance speed and cost, configure CPU, memory, and disk per build @@ -62,10 +68,10 @@ and [community](providers/community-providers) providers. ## 🔗 External Links -- [Releases](https://github.com/game-ci/unity-builder/releases) — packaged with - game-ci/unity-builder -- [Pull Requests](https://github.com/game-ci/unity-builder/pulls?q=is%3Apr+orchestrator) — open - orchestrator PRs -- [Issues](https://github.com/game-ci/unity-builder/labels/orchestrator) — bugs and feature requests +- [Orchestrator Repository](https://github.com/game-ci/orchestrator) — standalone orchestrator + package +- [Releases](https://github.com/game-ci/orchestrator/releases) — orchestrator releases +- [Pull Requests](https://github.com/game-ci/orchestrator/pulls) — open orchestrator PRs +- [Issues](https://github.com/game-ci/orchestrator/issues) — bugs and feature requests - [Discord](https://discord.com/channels/710946343828455455/789631903157583923) — community chat - [Feedback Form](https://forms.gle/3Wg1gGf9FnZ72RiJ9) — share your experience diff --git a/docs/03-github-orchestrator/02-getting-started.mdx b/docs/03-github-orchestrator/02-getting-started.mdx index def9b8ce..21945a9b 100644 --- a/docs/03-github-orchestrator/02-getting-started.mdx +++ b/docs/03-github-orchestrator/02-getting-started.mdx @@ -3,6 +3,10 @@ Orchestrator lets you run Unity builds on remote cloud infrastructure instead of GitHub-hosted runners. This is useful for large projects that exceed GitHub's disk or resource limits. +The orchestrator is distributed as a standalone npm package +([`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator)). When installed alongside +unity-builder, it is automatically detected and loaded via the plugin interface. + ## Prerequisites - A Unity project in a GitHub repository diff --git a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx index a90bcfcd..534cf585 100644 --- a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx +++ b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx @@ -12,28 +12,28 @@ terminal — no GitHub Actions or CI platform required. ### Standalone Binary (Recommended) Download a pre-built binary from the -[GitHub Releases page](https://github.com/game-ci/unity-builder/releases). Binaries are available +[GitHub Releases page](https://github.com/game-ci/orchestrator/releases). Binaries are available for Linux (x64, arm64), macOS (x64, arm64), and Windows (x64). On Linux or macOS, you can use the install script: ```bash -curl -fsSL https://raw.githubusercontent.com/game-ci/unity-builder/main/install.sh | sh +curl -fsSL https://raw.githubusercontent.com/game-ci/orchestrator/main/install.sh | sh ``` ### npm -You can also install via npm. The package name is `unity-builder`, but the binary is called +You can also install via npm. The package name is `@game-ci/orchestrator`, and the binary is called `game-ci`: ```bash -npm install -g unity-builder +npm install -g @game-ci/orchestrator ``` Or run it without installing using npx: ```bash -npx unity-builder --help +npx @game-ci/orchestrator --help ``` ## Unity License Activation diff --git a/docs/03-github-orchestrator/08-cli/02-build-command.mdx b/docs/03-github-orchestrator/08-cli/02-build-command.mdx index 9fa9a9db..1bde55c4 100644 --- a/docs/03-github-orchestrator/08-cli/02-build-command.mdx +++ b/docs/03-github-orchestrator/08-cli/02-build-command.mdx @@ -5,7 +5,8 @@ sidebar_position: 2 # Build Command The `build` command runs a Unity build inside a Docker container (or natively on macOS). It accepts -the same parameters as the `game-ci/unity-builder` GitHub Action, translated to CLI flags. +the same parameters as the `game-ci/unity-builder` GitHub Action, translated to CLI flags. The CLI +is provided by the [`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator) package. ```bash game-ci build [options] diff --git a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx index 153cbdc1..ff357c86 100644 --- a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx +++ b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx @@ -127,15 +127,16 @@ game-ci version ``` ``` -game-ci (unity-builder) v3.0.0 +game-ci (@game-ci/orchestrator) v3.0.0 Node.js v20.5.1 Platform: win32 x64 ``` ## update -Update the `game-ci` CLI to the latest version. Downloads the appropriate binary from GitHub -Releases for your platform and architecture. +Update the `game-ci` CLI to the latest version. Downloads the appropriate binary from the +[orchestrator GitHub Releases](https://github.com/game-ci/orchestrator/releases) for your platform +and architecture. ```bash game-ci update From 776342dc9e7e58ed54607a9a176a2b9bc1999698 Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 07:12:26 +0000 Subject: [PATCH 42/60] docs: add dedicated AWS and Kubernetes example pages Restores dedicated example pages for AWS and Kubernetes that were removed during the docs restructure. These complement the provider reference pages with copy-paste workflow examples. Related: game-ci/unity-builder#819, game-ci/documentation#541 Co-Authored-By: Claude Opus 4.6 --- .../03-examples/03-aws.mdx | 231 ++++++++++++++++++ .../03-examples/04-kubernetes.mdx | 194 +++++++++++++++ 2 files changed, 425 insertions(+) create mode 100644 docs/03-github-orchestrator/03-examples/03-aws.mdx create mode 100644 docs/03-github-orchestrator/03-examples/04-kubernetes.mdx diff --git a/docs/03-github-orchestrator/03-examples/03-aws.mdx b/docs/03-github-orchestrator/03-examples/03-aws.mdx new file mode 100644 index 00000000..65b02889 --- /dev/null +++ b/docs/03-github-orchestrator/03-examples/03-aws.mdx @@ -0,0 +1,231 @@ +# AWS Examples + +Complete workflow examples for running Unity builds on AWS Fargate via Orchestrator. + +## Minimal AWS Build + +The simplest AWS workflow. Uses default CPU and memory. + +```yaml +name: Build with Orchestrator (AWS) + +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-west-2 + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +## Multi-Platform Matrix Build + +Build for multiple platforms in parallel. Each platform runs as a separate Fargate task. + +```yaml +name: Orchestrator — AWS Multi-Platform + +on: + push: + branches: [main, develop] + pull_request: + branches: [main] + +jobs: + build: + name: Build (${{ matrix.targetPlatform }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + targetPlatform: + - StandaloneLinux64 + - StandaloneWindows64 + - StandaloneOSX + - iOS + - Android + - WebGL + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-west-2 + + - uses: game-ci/unity-builder@v4 + id: build + with: + providerStrategy: aws + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + unityVersion: 2022.3.0f1 + containerCpu: 2048 + containerMemory: 8192 + containerHookFiles: aws-s3-upload-build + githubCheck: true +``` + +## Custom Resources and S3 Artifacts + +Specify CPU/memory and export build artifacts to S3. + +```yaml +- uses: game-ci/unity-builder@v4 + id: aws-build + with: + providerStrategy: aws + versioning: None + projectPath: path/to/your/project + unityVersion: 2022.3.0f1 + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + containerCpu: 2048 + containerMemory: 8192 + # Export builds to S3: + containerHookFiles: aws-s3-upload-build +``` + +### Valid CPU/Memory Combinations + +AWS Fargate only accepts specific combinations (`1024 = 1 vCPU`, memory in MB): + +| CPU (`containerCpu`) | Memory (`containerMemory`) | +| -------------------- | ---------------------------- | +| `256` (0.25 vCPU) | `512`, `1024`, `2048` | +| `512` (0.5 vCPU) | `1024` – `4096` | +| `1024` (1 vCPU) | `2048` – `8192` | +| `2048` (2 vCPU) | `4096` – `16384` | +| `4096` (4 vCPU) | `8192` – `30720` | + +## Async Mode + +For long builds, use async mode so the GitHub Action returns immediately. Monitor via GitHub Checks. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + asyncOrchestrator: true + githubCheck: true +``` + +## Retained Workspaces + +Keep the entire project cached between builds for dramatically faster rebuilds. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + maxRetainedWorkspaces: 3 + containerCpu: 2048 + containerMemory: 8192 +``` + +## S3 Upload + Steam Deploy + +Chain container hooks to export to S3 and deploy to Steam in one step. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + containerHookFiles: aws-s3-upload-build,steam-deploy-client + env: + STEAM_USERNAME: ${{ secrets.STEAM_USERNAME }} + STEAM_PASSWORD: ${{ secrets.STEAM_PASSWORD }} + STEAM_APPID: ${{ secrets.STEAM_APPID }} +``` + +## Scheduled Garbage Collection + +Clean up stale CloudFormation stacks and Fargate tasks. + +```yaml +name: Orchestrator — Garbage Collect + +on: + schedule: + - cron: '0 4 * * *' # Daily at 4 AM UTC + +jobs: + cleanup: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-west-2 + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: aws + mode: garbage-collect + garbageMaxAge: 24 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +## CLI Usage + +Run AWS builds from the command line: + +```bash +game-ci build \ + --providerStrategy aws \ + --projectPath /path/to/unity/project \ + --targetPlatform StandaloneLinux64 \ + --containerCpu 2048 \ + --containerMemory 8192 +``` + +List active AWS resources: + +```bash +game-ci status --providerStrategy aws +``` + +## Required Secrets + +| Secret | Description | +| ----------------------- | ---------------------------------------------------------------- | +| `AWS_ACCESS_KEY_ID` | IAM access key with ECS, CloudFormation, S3, Kinesis, CloudWatch | +| `AWS_SECRET_ACCESS_KEY` | IAM secret key | + +## Next Steps + +- [AWS Provider Reference](../providers/aws) — architecture, parameters, and setup +- [Container Hooks](../advanced-topics/hooks/built-in-hooks) — S3, rclone, Steam hooks +- [Garbage Collection](../advanced-topics/garbage-collection) — automated cleanup +- [API Reference](../api-reference) — full parameter list diff --git a/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx b/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx new file mode 100644 index 00000000..ab5f4d65 --- /dev/null +++ b/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx @@ -0,0 +1,194 @@ +# Kubernetes Examples + +Complete workflow examples for running Unity builds on Kubernetes via Orchestrator. + +## Minimal Kubernetes Build + +The simplest K8s workflow. Requires a running cluster and a base64-encoded kubeconfig. + +```yaml +name: Build with Orchestrator (Kubernetes) + +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + env: + kubeConfig: ${{ secrets.KUBE_CONFIG }} + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@v4 + with: + providerStrategy: k8s + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + kubeVolumeSize: 10Gi +``` + +## Multi-Platform Matrix Build + +Build for multiple platforms in parallel. Each platform runs as a separate Kubernetes Job. + +```yaml +name: Orchestrator — Kubernetes Multi-Platform + +on: + push: + branches: [main, develop] + pull_request: + branches: [main] + +jobs: + build: + name: Build (${{ matrix.targetPlatform }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + targetPlatform: + - StandaloneLinux64 + - StandaloneWindows64 + env: + kubeConfig: ${{ secrets.KUBE_CONFIG }} + steps: + - uses: actions/checkout@v4 + with: + lfs: true + + - uses: game-ci/unity-builder@v4 + id: build + with: + providerStrategy: k8s + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + unityVersion: 2022.3.0f1 + kubeVolumeSize: 10Gi + containerCpu: 1024 + containerMemory: 4096 + containerHookFiles: aws-s3-upload-build + githubCheck: true +``` + +## Custom Resources and Storage + +Specify CPU/memory and persistent volume size for the build workspace. + +```yaml +- uses: game-ci/unity-builder@v4 + id: k8s-build + with: + providerStrategy: k8s + versioning: None + projectPath: path/to/your/project + unityVersion: 2022.3.0f1 + targetPlatform: ${{ matrix.targetPlatform }} + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + kubeVolumeSize: 25Gi + kubeStorageClass: gp3 + containerCpu: 2048 + containerMemory: 8192 + containerHookFiles: aws-s3-upload-build +``` + +### CPU and Memory + +Kubernetes uses the same unit format as AWS (`1024 = 1 vCPU`, memory in MB): + +| CPU (`containerCpu`) | Memory (`containerMemory`) | +| -------------------- | ---------------------------- | +| `256` (0.25 vCPU) | `512`, `1024`, `2048` | +| `512` (0.5 vCPU) | `1024` – `4096` | +| `1024` (1 vCPU) | `2048` – `8192` | +| `2048` (2 vCPU) | `4096` – `16384` | +| `4096` (4 vCPU) | `8192` – `30720` | + +## Kubernetes with S3 Caching + +Use S3-backed caching for the Library folder to speed up rebuilds. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: k8s + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + kubeVolumeSize: 15Gi + containerCpu: 2048 + containerMemory: 8192 + # Cache Library folder to S3: + containerHookFiles: aws-s3-pull-cache,aws-s3-upload-cache,aws-s3-upload-build +``` + +Hook execution order matters — `aws-s3-pull-cache` restores the cache before the build, +`aws-s3-upload-cache` saves it after, and `aws-s3-upload-build` uploads the final artifact. + +## Retained Workspaces + +Keep the build workspace persistent between builds for large projects. + +```yaml +- uses: game-ci/unity-builder@v4 + with: + providerStrategy: k8s + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} + kubeVolumeSize: 50Gi + maxRetainedWorkspaces: 3 + containerCpu: 2048 + containerMemory: 8192 +``` + +## CLI Usage + +Run Kubernetes builds from the command line: + +```bash +game-ci build \ + --providerStrategy k8s \ + --projectPath /path/to/unity/project \ + --targetPlatform StandaloneLinux64 \ + --kubeVolumeSize 10Gi \ + --containerCpu 1024 \ + --containerMemory 4096 +``` + +Make sure `KUBECONFIG` or `kubeConfig` is set in your environment. + +## Generating the kubeConfig Secret + +Base64-encode your kubeconfig file: + +```bash +cat ~/.kube/config | base64 -w 0 +``` + +Store the output as a GitHub Actions secret named `KUBE_CONFIG`. + +## Required Secrets + +| Secret | Description | +| ------------- | ---------------------------------------------------- | +| `KUBE_CONFIG` | Base64-encoded kubeconfig for your Kubernetes cluster | + +## Cluster Tips + +- **Keep the cluster running.** Cold-starting a Kubernetes cluster is slow. If you need auto-scaling + to zero, consider Google Cloud Kubernetes Autopilot. +- **Cloud storage required.** Kubernetes requires cloud storage for + [caching](../advanced-topics/caching). S3 is built-in, or use rclone for other backends. +- **Volume size matters.** Unity projects can be large. Start with `10Gi` and increase if builds + fail with disk space errors. + +## Next Steps + +- [Kubernetes Provider Reference](../providers/kubernetes) — full setup and parameters +- [Caching](../advanced-topics/caching) — S3 and rclone caching strategies +- [Retained Workspaces](../advanced-topics/retained-workspace) — persistent build environments +- [Container Hooks](../advanced-topics/hooks/built-in-hooks) — S3, rclone, Steam hooks +- [API Reference](../api-reference) — full parameter list From 6d818daf7d08db379ff6578b1e6a04861e03b5ea Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 07:20:17 +0000 Subject: [PATCH 43/60] fix: restore versioned_docs that were accidentally deleted These frozen versioned docs (version-2, version-3) should not be modified by the orchestrator documentation update. Co-Authored-By: Claude Opus 4.6 --- .../06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx | 3 +++ .../06-advanced-topics/09-gitlab/_category_.yaml | 5 +++++ .../06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx | 3 +++ .../06-advanced-topics/09-gitlab/_category_.yaml | 5 +++++ 4 files changed, 16 insertions(+) create mode 100644 versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx create mode 100644 versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml create mode 100644 versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx create mode 100644 versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml diff --git a/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx b/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx new file mode 100644 index 00000000..70e5079e --- /dev/null +++ b/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx @@ -0,0 +1,3 @@ +# GitLab Introduction + +You can use GitLab with Orchestrator via the Command Line mode. diff --git a/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml b/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml new file mode 100644 index 00000000..0407bcd5 --- /dev/null +++ b/versioned_docs/version-2/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml @@ -0,0 +1,5 @@ +--- +position: 9.0 +label: GitLab Integration +collapsible: true +collapsed: true diff --git a/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx b/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx new file mode 100644 index 00000000..70e5079e --- /dev/null +++ b/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/01-introduction-gitlab.mdx @@ -0,0 +1,3 @@ +# GitLab Introduction + +You can use GitLab with Orchestrator via the Command Line mode. diff --git a/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml b/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml new file mode 100644 index 00000000..0407bcd5 --- /dev/null +++ b/versioned_docs/version-3/03-github-orchestrator/06-advanced-topics/09-gitlab/_category_.yaml @@ -0,0 +1,5 @@ +--- +position: 9.0 +label: GitLab Integration +collapsible: true +collapsed: true From 16b850b7d8f70c9ebe1ab06f2bace218eb3caad0 Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 07:21:59 +0000 Subject: [PATCH 44/60] fix: resolve broken Docusaurus links MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename 06b-cli-provider-protocol.mdx to 12-cli-provider-protocol.mdx (Docusaurus didn't recognize '06b' as a valid numeric prefix) - Fix orchestrate-command link: ../providers → ../providers/overview - Fix jobs link: advanced-topics/submodule-profiles → advanced-topics/build-services - Fix build-services link: use relative path for cli-provider-protocol Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/04-jobs.mdx | 2 +- ...b-cli-provider-protocol.mdx => 12-cli-provider-protocol.mdx} | 0 .../07-advanced-topics/10-build-services.mdx | 2 +- docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename docs/03-github-orchestrator/05-providers/{06b-cli-provider-protocol.mdx => 12-cli-provider-protocol.mdx} (100%) diff --git a/docs/03-github-orchestrator/04-jobs.mdx b/docs/03-github-orchestrator/04-jobs.mdx index 5318cbd0..80802602 100644 --- a/docs/03-github-orchestrator/04-jobs.mdx +++ b/docs/03-github-orchestrator/04-jobs.mdx @@ -132,7 +132,7 @@ The `remote-cli-pre-build` phase handles: - Git LFS pull - Cache restoration (Library folder, LFS objects) - Retained workspace setup -- Submodule initialization (if using [submodule profiles](advanced-topics/submodule-profiles)) +- Submodule initialization (if using [submodule profiles](advanced-topics/build-services)) - Custom LFS agent configuration (e.g., [elastic-git-storage](advanced-topics/lfs-agents)) You can inject additional pre-build steps: diff --git a/docs/03-github-orchestrator/05-providers/06b-cli-provider-protocol.mdx b/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx similarity index 100% rename from docs/03-github-orchestrator/05-providers/06b-cli-provider-protocol.mdx rename to docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx index bcbcc384..ac960f7f 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx @@ -192,6 +192,6 @@ enable when your build pipeline depends on hooks running. ## Related -- [CLI Provider Protocol](/docs/github-orchestrator/providers/cli-provider-protocol) — Write providers in any language +- [CLI Provider Protocol](../providers/cli-provider-protocol) — Write providers in any language - [Cloud Providers](/docs/github-orchestrator/providers/gcp-cloud-run) — GCP Cloud Run and Azure ACI - [Caching](caching) — Orchestrator caching strategies diff --git a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx index 479f5a1d..f43a1352 100644 --- a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx +++ b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx @@ -146,4 +146,4 @@ game-ci orchestrate \ - [Getting Started](getting-started) — installation and first build - [Build Command](build-command) — local Docker builds - [API Reference](../api-reference) — full parameter reference -- [Providers](../providers) — provider-specific setup guides +- [Providers](../providers/overview) — provider-specific setup guides From a113d553637d54d1c3944bd3ac87734dde7e1855 Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 07:41:42 +0000 Subject: [PATCH 45/60] docs: replace npm install with GitHub Releases install scripts Remove npm/npx installation references. Add PowerShell install script for Windows. Fix install.sh URL to point to unity-builder repo where the scripts live. Add environment variable options and manual download section. Co-Authored-By: Claude Opus 4.6 --- .../08-cli/01-getting-started.mdx | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx index 534cf585..d310c087 100644 --- a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx +++ b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx @@ -9,32 +9,35 @@ terminal — no GitHub Actions or CI platform required. ## Installation -### Standalone Binary (Recommended) +### Linux / macOS -Download a pre-built binary from the -[GitHub Releases page](https://github.com/game-ci/orchestrator/releases). Binaries are available -for Linux (x64, arm64), macOS (x64, arm64), and Windows (x64). +```bash +curl -fsSL https://raw.githubusercontent.com/game-ci/unity-builder/main/install.sh | sh +``` -On Linux or macOS, you can use the install script: +### Windows (PowerShell) -```bash -curl -fsSL https://raw.githubusercontent.com/game-ci/orchestrator/main/install.sh | sh +```powershell +irm https://raw.githubusercontent.com/game-ci/unity-builder/main/install.ps1 | iex ``` -### npm +### Options -You can also install via npm. The package name is `@game-ci/orchestrator`, and the binary is called -`game-ci`: +| Environment variable | Description | +| --- | --- | +| `GAME_CI_VERSION` | Pin a specific release (e.g. `v2.0.0`). Defaults to latest. | +| `GAME_CI_INSTALL` | Override install directory. Defaults to `~/.game-ci/bin`. | ```bash -npm install -g @game-ci/orchestrator +# Example: install a specific version +GAME_CI_VERSION=v2.0.0 curl -fsSL https://raw.githubusercontent.com/game-ci/unity-builder/main/install.sh | sh ``` -Or run it without installing using npx: +### Manual Download -```bash -npx @game-ci/orchestrator --help -``` +Pre-built binaries for every platform (Linux x64/arm64, macOS x64/arm64, Windows x64) are available +on the [GitHub Releases](https://github.com/game-ci/unity-builder/releases) page. Download the +binary for your OS and architecture, make it executable, and place it on your `PATH`. ## Unity License Activation From 0854736a7a8dca9e004dcf1535a4b4ec308bb41c Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 07:46:48 +0000 Subject: [PATCH 46/60] docs: update install URLs to point to orchestrator repo Install scripts and releases live in game-ci/orchestrator, not unity-builder. Updated all install URLs accordingly. Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/08-cli/01-getting-started.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx index d310c087..8aa2013c 100644 --- a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx +++ b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx @@ -12,13 +12,13 @@ terminal — no GitHub Actions or CI platform required. ### Linux / macOS ```bash -curl -fsSL https://raw.githubusercontent.com/game-ci/unity-builder/main/install.sh | sh +curl -fsSL https://raw.githubusercontent.com/game-ci/orchestrator/main/install.sh | sh ``` ### Windows (PowerShell) ```powershell -irm https://raw.githubusercontent.com/game-ci/unity-builder/main/install.ps1 | iex +irm https://raw.githubusercontent.com/game-ci/orchestrator/main/install.ps1 | iex ``` ### Options @@ -30,13 +30,13 @@ irm https://raw.githubusercontent.com/game-ci/unity-builder/main/install.ps1 | i ```bash # Example: install a specific version -GAME_CI_VERSION=v2.0.0 curl -fsSL https://raw.githubusercontent.com/game-ci/unity-builder/main/install.sh | sh +GAME_CI_VERSION=v2.0.0 curl -fsSL https://raw.githubusercontent.com/game-ci/orchestrator/main/install.sh | sh ``` ### Manual Download Pre-built binaries for every platform (Linux x64/arm64, macOS x64/arm64, Windows x64) are available -on the [GitHub Releases](https://github.com/game-ci/unity-builder/releases) page. Download the +on the [GitHub Releases](https://github.com/game-ci/orchestrator/releases) page. Download the binary for your OS and architecture, make it executable, and place it on your `PATH`. ## Unity License Activation From 32d6d0f0ee02fd12ce6d7ee0da9b8d7a3ba7b7c1 Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 07:59:21 +0000 Subject: [PATCH 47/60] style: format orchestrator docs with prettier Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 6 +- .../03-examples/03-aws.mdx | 14 +- .../03-examples/04-kubernetes.mdx | 18 +- docs/03-github-orchestrator/04-jobs.mdx | 34 ++-- .../04-github-actions-dispatch.mdx | 26 +-- .../05-providers/05-gitlab-ci-dispatch.mdx | 32 ++-- .../05-providers/06-remote-powershell.mdx | 19 +- .../05-providers/07-ansible.mdx | 57 +++--- .../05-providers/10-gcp-cloud-run.mdx | 54 +++--- .../05-providers/11-azure-aci.mdx | 50 +++--- .../05-providers/12-cli-provider-protocol.mdx | 49 ++--- docs/03-github-orchestrator/06-secrets.mdx | 62 +++---- .../07-advanced-topics/07-load-balancing.mdx | 90 +++++----- .../07-advanced-topics/10-build-services.mdx | 56 +++--- .../07-advanced-topics/10-lfs-agents.mdx | 26 +-- .../11-test-workflow-engine.mdx | 72 ++++---- .../12-hot-runner-protocol.mdx | 40 +++-- .../13-build-output-system.mdx | 64 +++---- .../14-incremental-sync-protocol.mdx | 54 +++--- .../15-massive-projects.mdx | 169 +++++++++--------- .../16-monorepo-support.mdx | 121 ++++++------- .../17-build-reliability.mdx | 102 +++++------ .../08-cli/01-getting-started.mdx | 32 ++-- .../08-cli/02-build-command.mdx | 90 +++++----- .../08-cli/03-orchestrate-command.mdx | 80 ++++----- .../08-cli/04-other-commands.mdx | 38 ++-- 26 files changed, 731 insertions(+), 724 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 73f509e5..247f6138 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -26,11 +26,9 @@ be built, and streams results back. Orchestrator supports large projects with first-class Unity support and native cloud services like AWS Fargate and Kubernetes. -:::info Standalone Package -The orchestrator is available as a standalone package +:::info Standalone Package The orchestrator is available as a standalone package [`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator). When installed, unity-builder -automatically detects and loads it via the plugin interface. -::: +automatically detects and loads it via the plugin interface. ::: ## ✅ Why Orchestrator? diff --git a/docs/03-github-orchestrator/03-examples/03-aws.mdx b/docs/03-github-orchestrator/03-examples/03-aws.mdx index 65b02889..1c11145a 100644 --- a/docs/03-github-orchestrator/03-examples/03-aws.mdx +++ b/docs/03-github-orchestrator/03-examples/03-aws.mdx @@ -111,13 +111,13 @@ Specify CPU/memory and export build artifacts to S3. AWS Fargate only accepts specific combinations (`1024 = 1 vCPU`, memory in MB): -| CPU (`containerCpu`) | Memory (`containerMemory`) | -| -------------------- | ---------------------------- | -| `256` (0.25 vCPU) | `512`, `1024`, `2048` | -| `512` (0.5 vCPU) | `1024` – `4096` | -| `1024` (1 vCPU) | `2048` – `8192` | -| `2048` (2 vCPU) | `4096` – `16384` | -| `4096` (4 vCPU) | `8192` – `30720` | +| CPU (`containerCpu`) | Memory (`containerMemory`) | +| -------------------- | -------------------------- | +| `256` (0.25 vCPU) | `512`, `1024`, `2048` | +| `512` (0.5 vCPU) | `1024` – `4096` | +| `1024` (1 vCPU) | `2048` – `8192` | +| `2048` (2 vCPU) | `4096` – `16384` | +| `4096` (4 vCPU) | `8192` – `30720` | ## Async Mode diff --git a/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx b/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx index ab5f4d65..5ffdbd39 100644 --- a/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx +++ b/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx @@ -100,13 +100,13 @@ Specify CPU/memory and persistent volume size for the build workspace. Kubernetes uses the same unit format as AWS (`1024 = 1 vCPU`, memory in MB): -| CPU (`containerCpu`) | Memory (`containerMemory`) | -| -------------------- | ---------------------------- | -| `256` (0.25 vCPU) | `512`, `1024`, `2048` | -| `512` (0.5 vCPU) | `1024` – `4096` | -| `1024` (1 vCPU) | `2048` – `8192` | -| `2048` (2 vCPU) | `4096` – `16384` | -| `4096` (4 vCPU) | `8192` – `30720` | +| CPU (`containerCpu`) | Memory (`containerMemory`) | +| -------------------- | -------------------------- | +| `256` (0.25 vCPU) | `512`, `1024`, `2048` | +| `512` (0.5 vCPU) | `1024` – `4096` | +| `1024` (1 vCPU) | `2048` – `8192` | +| `2048` (2 vCPU) | `4096` – `16384` | +| `4096` (4 vCPU) | `8192` – `30720` | ## Kubernetes with S3 Caching @@ -172,8 +172,8 @@ Store the output as a GitHub Actions secret named `KUBE_CONFIG`. ## Required Secrets -| Secret | Description | -| ------------- | ---------------------------------------------------- | +| Secret | Description | +| ------------- | ----------------------------------------------------- | | `KUBE_CONFIG` | Base64-encoded kubeconfig for your Kubernetes cluster | ## Cluster Tips diff --git a/docs/03-github-orchestrator/04-jobs.mdx b/docs/03-github-orchestrator/04-jobs.mdx index 80802602..64df5a95 100644 --- a/docs/03-github-orchestrator/04-jobs.mdx +++ b/docs/03-github-orchestrator/04-jobs.mdx @@ -28,8 +28,8 @@ Every Orchestrator run follows the same lifecycle, regardless of provider: ### Build Job -The standard job — runs the Unity Editor to produce a build artifact. This is what most users -care about. +The standard job — runs the Unity Editor to produce a build artifact. This is what most users care +about. ```yaml - uses: game-ci/unity-builder@v4 @@ -40,6 +40,7 @@ care about. ``` The build job: + - Installs the toolchain (Node.js, git-lfs) inside the container - Clones `game-ci/unity-builder` into the container - Runs `remote-cli-pre-build` to set up the workspace @@ -67,6 +68,7 @@ lifecycle. ### Custom Editor Method Jobs Run any static C# method in the Unity Editor. Useful for: + - Asset processing or validation - Addressables builds - Custom pipeline steps @@ -86,8 +88,8 @@ The `buildMethod` must be a fully qualified static method: `Namespace.Class.Meth ### Custom Jobs -Replace the entire build workflow with your own container steps. Useful for non-Unity workloads -or fully custom pipelines that still benefit from Orchestrator's cloud infrastructure. +Replace the entire build workflow with your own container steps. Useful for non-Unity workloads or +fully custom pipelines that still benefit from Orchestrator's cloud infrastructure. ```yaml - uses: game-ci/unity-builder@v4 @@ -118,8 +120,8 @@ continues in the cloud. Progress is reported via GitHub Checks. gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -This is useful when builds exceed GitHub Actions' job time limits, or when you want to -free up your CI runner immediately. +This is useful when builds exceed GitHub Actions' job time limits, or when you want to free up your +CI runner immediately. ## Pre-Build and Post-Build @@ -128,6 +130,7 @@ Orchestrator runs additional steps before and after the main build job. ### Pre-Build Steps The `remote-cli-pre-build` phase handles: + - Git clone of the target repository - Git LFS pull - Cache restoration (Library folder, LFS objects) @@ -149,6 +152,7 @@ You can inject additional pre-build steps: ### Post-Build Steps The `remote-cli-post-build` phase handles: + - Library folder cache push - Build artifact upload - LFS cache push @@ -167,20 +171,20 @@ You can inject additional post-build steps: ### Hooks For more granular control, use [container hooks](advanced-topics/hooks/container-hooks) or -[command hooks](advanced-topics/hooks/command-hooks) to inject steps at specific points in the -build lifecycle. +[command hooks](advanced-topics/hooks/command-hooks) to inject steps at specific points in the build +lifecycle. ## Job Execution by Provider Each provider runs jobs differently: -| Provider | How jobs execute | -|----------|----------------| -| **AWS Fargate** | ECS Fargate task with CloudFormation stack. Logs streamed via Kinesis. | -| **Kubernetes** | Kubernetes Job with PVC for workspace. Logs streamed from pod. | -| **Local Docker** | Docker container with volume mounts. Logs piped to stdout. | -| **Local** | Direct shell execution on the host. No container isolation. | -| **CLI Provider** | Delegated to external executable via JSON protocol. | +| Provider | How jobs execute | +| ---------------- | ---------------------------------------------------------------------- | +| **AWS Fargate** | ECS Fargate task with CloudFormation stack. Logs streamed via Kinesis. | +| **Kubernetes** | Kubernetes Job with PVC for workspace. Logs streamed from pod. | +| **Local Docker** | Docker container with volume mounts. Logs piped to stdout. | +| **Local** | Direct shell execution on the host. No container isolation. | +| **CLI Provider** | Delegated to external executable via JSON protocol. | ## Next Steps diff --git a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx index df3ddb92..43e85189 100644 --- a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx +++ b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx @@ -152,21 +152,21 @@ jobs: - **API rate limits** — Each status poll is an API call. Long builds will accumulate many calls. The 15-second poll interval keeps usage well within GitHub's rate limits for authenticated requests (5,000/hour). -- **No artifact transfer** — Build artifacts remain in the target repository's workflow run. You must - configure artifact upload/download separately (e.g., via `actions/upload-artifact` in the target - workflow). +- **No artifact transfer** — Build artifacts remain in the target repository's workflow run. You + must configure artifact upload/download separately (e.g., via `actions/upload-artifact` in the + target workflow). - **PAT scope** — The token needs `actions:write` on the target repo. Use a fine-grained PAT scoped to only the build farm repository for least-privilege access. -- **Concurrent dispatch** — If multiple dispatches happen simultaneously, the orchestrator identifies - its run by filtering on creation time. Rapid concurrent dispatches to the same workflow could - theoretically cause misidentification. +- **Concurrent dispatch** — If multiple dispatches happen simultaneously, the orchestrator + identifies its run by filtering on creation time. Rapid concurrent dispatches to the same workflow + could theoretically cause misidentification. ## Inputs Reference -| Input | Required | Default | Description | -|-------|----------|---------|-------------| -| `providerStrategy` | Yes | — | Must be `github-actions` | -| `githubActionsRepo` | Yes | — | Target repository in `owner/repo` format | -| `githubActionsWorkflow` | Yes | — | Workflow filename (e.g., `unity-build.yml`) or workflow ID | -| `githubActionsToken` | Yes | — | Personal Access Token with `actions:write` scope on the target repo | -| `githubActionsRef` | No | `main` | Branch or ref to run the dispatched workflow on | +| Input | Required | Default | Description | +| ----------------------- | -------- | ------- | ------------------------------------------------------------------- | +| `providerStrategy` | Yes | — | Must be `github-actions` | +| `githubActionsRepo` | Yes | — | Target repository in `owner/repo` format | +| `githubActionsWorkflow` | Yes | — | Workflow filename (e.g., `unity-build.yml`) or workflow ID | +| `githubActionsToken` | Yes | — | Personal Access Token with `actions:write` scope on the target repo | +| `githubActionsRef` | No | `main` | Branch or ref to run the dispatched workflow on | diff --git a/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx index c5f3bf6a..9d9768bc 100644 --- a/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx +++ b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx @@ -4,9 +4,9 @@ sidebar_position: 5 # GitLab CI Dispatch Provider -The **GitLab CI Dispatch** provider triggers Unity builds as GitLab CI pipelines via the GitLab -REST API. This enables teams using GitLab for CI infrastructure to benefit from Game CI's -orchestration while keeping their existing pipeline runners and configuration. +The **GitLab CI Dispatch** provider triggers Unity builds as GitLab CI pipelines via the GitLab REST +API. This enables teams using GitLab for CI infrastructure to benefit from Game CI's orchestration +while keeping their existing pipeline runners and configuration. ## Use Cases @@ -22,8 +22,8 @@ orchestration while keeping their existing pipeline runners and configuration. ## Prerequisites 1. A **GitLab project** with CI/CD pipelines enabled. -2. A **pipeline trigger token** — created in the GitLab project under - **Settings > CI/CD > Pipeline trigger tokens**. +2. A **pipeline trigger token** — created in the GitLab project under **Settings > CI/CD > Pipeline + trigger tokens**. 3. A **`.gitlab-ci.yml`** in the target project that accepts orchestrator variables. ### Target Pipeline Template @@ -95,8 +95,8 @@ gitlabApiUrl: https://gitlab.internal.company.com 1. **Setup** — The orchestrator verifies access to the GitLab project using the provided token. 2. **Trigger** — A pipeline is triggered via the GitLab - [Pipeline Triggers API](https://docs.gitlab.com/ee/ci/triggers/) with build parameters passed - as pipeline variables (`BUILD_GUID`, `BUILD_IMAGE`, `BUILD_COMMANDS`, etc.). + [Pipeline Triggers API](https://docs.gitlab.com/ee/ci/triggers/) with build parameters passed as + pipeline variables (`BUILD_GUID`, `BUILD_IMAGE`, `BUILD_COMMANDS`, etc.). 3. **Monitor** — The orchestrator polls the pipeline status every 15 seconds until it reaches a terminal state (`success`, `failed`, `canceled`, or `skipped`). 4. **Logs** — On completion, the orchestrator fetches logs for each job in the pipeline individually @@ -143,8 +143,8 @@ jobs: for most plans). The 15-second poll interval keeps usage low, but very long builds with many parallel pipelines should account for this. - **Token permissions** — The trigger token is scoped to the project. For fetching logs and pipeline - status, the token must also have `read_api` access. A project access token with `api` scope - covers both triggering and log retrieval. + status, the token must also have `read_api` access. A project access token with `api` scope covers + both triggering and log retrieval. - **No direct artifact transfer** — Artifacts stay in GitLab. Configure GitLab CI artifacts or external storage (S3, GCS) in your `.gitlab-ci.yml` to export build outputs. - **Variable size limits** — GitLab pipeline variables have a combined size limit. For large build @@ -155,10 +155,10 @@ jobs: ## Inputs Reference -| Input | Required | Default | Description | -|-------|----------|---------|-------------| -| `providerStrategy` | Yes | — | Must be `gitlab-ci` | -| `gitlabProjectId` | Yes | — | GitLab project ID (numeric) or URL-encoded path (e.g., `my-group%2Funity-builds`) | -| `gitlabTriggerToken` | Yes | — | Pipeline trigger token (created in GitLab project settings) | -| `gitlabApiUrl` | No | `https://gitlab.com` | GitLab API base URL (for self-hosted instances) | -| `gitlabRef` | No | `main` | Branch or ref to trigger the pipeline on | +| Input | Required | Default | Description | +| -------------------- | -------- | -------------------- | --------------------------------------------------------------------------------- | +| `providerStrategy` | Yes | — | Must be `gitlab-ci` | +| `gitlabProjectId` | Yes | — | GitLab project ID (numeric) or URL-encoded path (e.g., `my-group%2Funity-builds`) | +| `gitlabTriggerToken` | Yes | — | Pipeline trigger token (created in GitLab project settings) | +| `gitlabApiUrl` | No | `https://gitlab.com` | GitLab API base URL (for self-hosted instances) | +| `gitlabRef` | No | `main` | Branch or ref to trigger the pipeline on | diff --git a/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx b/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx index 08abf412..a2852379 100644 --- a/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx +++ b/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx @@ -116,8 +116,8 @@ explicit credentials. format. Always store this as a GitHub secret, never in plain text. The provider constructs a `PSCredential` object at runtime and does not persist credentials. - **WinRM HTTPS** — For production use, configure WinRM over HTTPS (port 5986) with a valid TLS - certificate to encrypt traffic. The default HTTP transport (port 5985) sends credentials in - clear text over the network. + certificate to encrypt traffic. The default HTTP transport (port 5985) sends credentials in clear + text over the network. - **SSH key authentication** — Prefer SSH transport with key-based authentication over WinRM with password credentials when possible. SSH keys avoid transmitting passwords entirely. - **Network segmentation** — Restrict WinRM/SSH access to the build machines from only the @@ -148,7 +148,8 @@ jobs: gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} remotePowershellHost: ${{ secrets.BUILD_SERVER_HOST }} remotePowershellTransport: wsman - remotePowershellCredential: ${{ secrets.BUILD_SERVER_USER }}:${{ secrets.BUILD_SERVER_PASS }} + remotePowershellCredential: + ${{ secrets.BUILD_SERVER_USER }}:${{ secrets.BUILD_SERVER_PASS }} ``` ## Limitations and Considerations @@ -167,9 +168,9 @@ jobs: ## Inputs Reference -| Input | Required | Default | Description | -|-------|----------|---------|-------------| -| `providerStrategy` | Yes | — | Must be `remote-powershell` | -| `remotePowershellHost` | Yes | — | Hostname or IP address of the target machine | -| `remotePowershellCredential` | No | — | Credentials in `username:password` format (required for WinRM) | -| `remotePowershellTransport` | No | `wsman` | Transport protocol: `wsman` (WinRM) or `ssh` | +| Input | Required | Default | Description | +| ---------------------------- | -------- | ------- | -------------------------------------------------------------- | +| `providerStrategy` | Yes | — | Must be `remote-powershell` | +| `remotePowershellHost` | Yes | — | Hostname or IP address of the target machine | +| `remotePowershellCredential` | No | — | Credentials in `username:password` format (required for WinRM) | +| `remotePowershellTransport` | No | `wsman` | Transport protocol: `wsman` (WinRM) or `ssh` | diff --git a/docs/03-github-orchestrator/05-providers/07-ansible.mdx b/docs/03-github-orchestrator/05-providers/07-ansible.mdx index 70642bfa..86e92776 100644 --- a/docs/03-github-orchestrator/05-providers/07-ansible.mdx +++ b/docs/03-github-orchestrator/05-providers/07-ansible.mdx @@ -15,8 +15,8 @@ dispatching to a CI platform. - **Large-scale build infrastructure** — Distribute builds across a fleet of machines managed by Ansible, with automatic host selection and load distribution handled by your playbooks. -- **Configuration-as-code** — Define build machine setup, Unity installation, and build execution - as versioned Ansible playbooks alongside your game source. +- **Configuration-as-code** — Define build machine setup, Unity installation, and build execution as + versioned Ansible playbooks alongside your game source. - **Heterogeneous environments** — Target different machine types (Windows, Linux, macOS) from a single inventory with platform-specific playbooks. - **Existing Ansible infrastructure** — Teams already using Ansible for server management can extend @@ -62,15 +62,16 @@ Set `providerStrategy: ansible` and supply the required inputs: The orchestrator passes build parameters to the playbook as extra variables. Your playbook must accept and use these variables: -| Variable | Description | -|----------|-------------| -| `build_guid` | Unique identifier for the build | -| `build_image` | Unity Docker image (if applicable) | -| `build_commands` | Build commands to execute | -| `mount_dir` | Mount directory path | -| `working_dir` | Working directory path | +| Variable | Description | +| ---------------- | ---------------------------------- | +| `build_guid` | Unique identifier for the build | +| `build_image` | Unity Docker image (if applicable) | +| `build_commands` | Build commands to execute | +| `mount_dir` | Mount directory path | +| `working_dir` | Working directory path | -Additionally, any environment variables from the orchestrator are passed as lowercase variable names. +Additionally, any environment variables from the orchestrator are passed as lowercase variable +names. ### Example Playbook @@ -88,31 +89,31 @@ Additionally, any environment variables from the orchestrator are passed as lowe tasks: - name: Ensure build directory exists file: - path: "{{ working_dir }}/{{ build_guid }}" + path: '{{ working_dir }}/{{ build_guid }}' state: directory - name: Clone repository git: - repo: "{{ git_repo_url }}" - dest: "{{ working_dir }}/{{ build_guid }}/project" + repo: '{{ git_repo_url }}' + dest: '{{ working_dir }}/{{ build_guid }}/project' version: "{{ git_ref | default('main') }}" - name: Execute build commands - shell: "{{ build_commands }}" + shell: '{{ build_commands }}' args: - chdir: "{{ working_dir }}/{{ build_guid }}/project" + chdir: '{{ working_dir }}/{{ build_guid }}/project' register: build_result - name: Upload build artifacts fetch: - src: "{{ working_dir }}/{{ build_guid }}/project/Builds/" - dest: "./artifacts/{{ build_guid }}/" + src: '{{ working_dir }}/{{ build_guid }}/project/Builds/' + dest: './artifacts/{{ build_guid }}/' flat: true when: build_result.rc == 0 - name: Cleanup build directory file: - path: "{{ working_dir }}/{{ build_guid }}" + path: '{{ working_dir }}/{{ build_guid }}' state: absent when: cleanup | default(true) | bool ``` @@ -250,18 +251,18 @@ jobs: include Ansible by default; add a `pip install ansible` step or use a custom runner image. - **No garbage collection** — The provider does not manage remote machine state. Build cleanup (temporary files, old builds) should be handled within playbook tasks. -- **Sequential execution** — The orchestrator runs a single `ansible-playbook` command and waits - for it to complete. Parallelism across hosts is managed by Ansible's built-in `forks` setting, - not by the orchestrator. +- **Sequential execution** — The orchestrator runs a single `ansible-playbook` command and waits for + it to complete. Parallelism across hosts is managed by Ansible's built-in `forks` setting, not by + the orchestrator. - **Extra-vars JSON parsing** — The `ansibleExtraVars` input is parsed as JSON. If parsing fails, the raw string is passed through, which may cause unexpected behavior. Always provide valid JSON. ## Inputs Reference -| Input | Required | Default | Description | -|-------|----------|---------|-------------| -| `providerStrategy` | Yes | — | Must be `ansible` | -| `ansibleInventory` | Yes | — | Path to Ansible inventory file or dynamic inventory script | -| `ansiblePlaybook` | Yes | — | Path to Ansible playbook for Unity builds | -| `ansibleExtraVars` | No | — | Additional Ansible variables as a JSON string | -| `ansibleVaultPassword` | No | — | Path to Ansible Vault password file | +| Input | Required | Default | Description | +| ---------------------- | -------- | ------- | ---------------------------------------------------------- | +| `providerStrategy` | Yes | — | Must be `ansible` | +| `ansibleInventory` | Yes | — | Path to Ansible inventory file or dynamic inventory script | +| `ansiblePlaybook` | Yes | — | Path to Ansible playbook for Unity builds | +| `ansibleExtraVars` | No | — | Additional Ansible variables as a JSON string | +| `ansibleVaultPassword` | No | — | Path to Ansible Vault password file | diff --git a/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx index 682bd416..497ac64c 100644 --- a/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx +++ b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx @@ -3,9 +3,8 @@ Run Unity builds as [Cloud Run Jobs](https://cloud.google.com/run/docs/create-jobs) — one-off serverless container executions with configurable storage backends. -:::caution Experimental -This provider is experimental. APIs and behavior may change between releases. -::: +:::caution Experimental This provider is experimental. APIs and behavior may change between +releases. ::: ``` GitHub Actions Runner @@ -23,7 +22,8 @@ This provider is experimental. APIs and behavior may change between releases. ## Prerequisites -- Google Cloud SDK installed and authenticated (`gcloud auth login` or `GOOGLE_APPLICATION_CREDENTIALS`) +- Google Cloud SDK installed and authenticated (`gcloud auth login` or + `GOOGLE_APPLICATION_CREDENTIALS`) - Cloud Run Jobs API enabled: `gcloud services enable run.googleapis.com` - Service account with roles: **Cloud Run Admin**, **Storage Admin**, **Logs Viewer** @@ -32,43 +32,43 @@ This provider is experimental. APIs and behavior may change between releases. Set `gcpStorageType` to control how the build accesses large files. Each type has different trade-offs for performance, persistence, and complexity. -| Type | How it works | Best for | Size limit | -| ----------- | ------------------------------------------------- | ----------------------------------- | ---------- | -| `gcs-fuse` | Mounts a GCS bucket as a POSIX filesystem via FUSE | Large sequential I/O, artifacts | Unlimited | -| `gcs-copy` | Copies artifacts in/out via `gsutil` | Simple upload/download | Unlimited | -| `nfs` | Mounts a Filestore instance as NFS share | Unity Library (small random reads) | 100 TiB | -| `in-memory` | tmpfs volume inside the container | Scratch/temp during builds | 32 GiB | +| Type | How it works | Best for | Size limit | +| ----------- | -------------------------------------------------- | ---------------------------------- | ---------- | +| `gcs-fuse` | Mounts a GCS bucket as a POSIX filesystem via FUSE | Large sequential I/O, artifacts | Unlimited | +| `gcs-copy` | Copies artifacts in/out via `gsutil` | Simple upload/download | Unlimited | +| `nfs` | Mounts a Filestore instance as NFS share | Unity Library (small random reads) | 100 TiB | +| `in-memory` | tmpfs volume inside the container | Scratch/temp during builds | 32 GiB | ### When to use each type - **gcs-fuse** (default) — Good general-purpose option. Handles very large files well and persists across builds. Has some latency on small file I/O and eventual consistency edge cases. -- **gcs-copy** — Simpler than FUSE (no driver). Copies everything before the build starts and uploads - after it finishes. Best when you only need artifact upload/download, not live filesystem access - during the build. +- **gcs-copy** — Simpler than FUSE (no driver). Copies everything before the build starts and + uploads after it finishes. Best when you only need artifact upload/download, not live filesystem + access during the build. - **nfs** — True POSIX semantics with good random I/O performance. The best choice for caching the Unity Library folder (thousands of small files). Requires a [Filestore](https://cloud.google.com/filestore) instance and a VPC connector. -- **in-memory** — Fastest option (RAM-backed). Data is lost when the job ends. Capped at 32 GiB. - Use for temporary build artifacts that don't need to persist. +- **in-memory** — Fastest option (RAM-backed). Data is lost when the job ends. Capped at 32 GiB. Use + for temporary build artifacts that don't need to persist. ## Inputs -| Input | Default | Description | -| ------------------ | ---------------- | ------------------------------------------------- | -| `gcpProject` | `$GOOGLE_CLOUD_PROJECT` | GCP project ID | -| `gcpRegion` | `us-central1` | Cloud Run region | -| `gcpStorageType` | `gcs-fuse` | Storage backend (see above) | -| `gcpBucket` | — | GCS bucket name (for `gcs-fuse`, `gcs-copy`) | -| `gcpFilestoreIp` | — | Filestore IP address (for `nfs`) | -| `gcpFilestoreShare`| `/share1` | Filestore share name (for `nfs`) | -| `gcpMachineType` | `e2-standard-4` | Machine type | -| `gcpDiskSizeGb` | `100` | In-memory volume size (for `in-memory`, max 32) | -| `gcpServiceAccount`| — | Service account email | -| `gcpVpcConnector` | — | VPC connector (required for `nfs`) | +| Input | Default | Description | +| ------------------- | ----------------------- | ----------------------------------------------- | +| `gcpProject` | `$GOOGLE_CLOUD_PROJECT` | GCP project ID | +| `gcpRegion` | `us-central1` | Cloud Run region | +| `gcpStorageType` | `gcs-fuse` | Storage backend (see above) | +| `gcpBucket` | — | GCS bucket name (for `gcs-fuse`, `gcs-copy`) | +| `gcpFilestoreIp` | — | Filestore IP address (for `nfs`) | +| `gcpFilestoreShare` | `/share1` | Filestore share name (for `nfs`) | +| `gcpMachineType` | `e2-standard-4` | Machine type | +| `gcpDiskSizeGb` | `100` | In-memory volume size (for `in-memory`, max 32) | +| `gcpServiceAccount` | — | Service account email | +| `gcpVpcConnector` | — | VPC connector (required for `nfs`) | ## Examples diff --git a/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx index dfd9904a..715a9b79 100644 --- a/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx +++ b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx @@ -1,11 +1,11 @@ # Azure ACI (Experimental) -Run Unity builds as [Azure Container Instances](https://learn.microsoft.com/en-us/azure/container-instances/) — +Run Unity builds as +[Azure Container Instances](https://learn.microsoft.com/en-us/azure/container-instances/) — serverless containers with configurable storage backends. -:::caution Experimental -This provider is experimental. APIs and behavior may change between releases. -::: +:::caution Experimental This provider is experimental. APIs and behavior may change between +releases. ::: ``` GitHub Actions Runner @@ -32,12 +32,12 @@ This provider is experimental. APIs and behavior may change between releases. Set `azureStorageType` to control how the build accesses large files. -| Type | How it works | Best for | Size limit | -| ----------------- | --------------------------------------------------- | --------------------------------- | ----------------- | -| `azure-files` | Mounts an Azure File Share via SMB | General artifact storage | 100 TiB | -| `blob-copy` | Copies artifacts in/out via `az storage blob` | Simple upload/download | Unlimited | -| `azure-files-nfs` | Mounts an Azure File Share via NFS 4.1 | Unity Library (small random reads)| 100 TiB | -| `in-memory` | emptyDir volume (tmpfs) | Scratch/temp during builds | Container memory | +| Type | How it works | Best for | Size limit | +| ----------------- | --------------------------------------------- | ---------------------------------- | ---------------- | +| `azure-files` | Mounts an Azure File Share via SMB | General artifact storage | 100 TiB | +| `blob-copy` | Copies artifacts in/out via `az storage blob` | Simple upload/download | Unlimited | +| `azure-files-nfs` | Mounts an Azure File Share via NFS 4.1 | Unity Library (small random reads) | 100 TiB | +| `in-memory` | emptyDir volume (tmpfs) | Scratch/temp during builds | Container memory | ### When to use each type @@ -52,24 +52,24 @@ Set `azureStorageType` to control how the build accesses large files. Library files (thousands of small files). Requires **Premium FileStorage** (auto-created) and **VNet integration** via `azureSubnetId`. -- **in-memory** — Fastest option (RAM-backed). Data is lost when the container stops. Size is limited - by the container's memory allocation. Use for temporary build artifacts. +- **in-memory** — Fastest option (RAM-backed). Data is lost when the container stops. Size is + limited by the container's memory allocation. Use for temporary build artifacts. ## Inputs -| Input | Default | Description | -| --------------------- | ----------------------- | ------------------------------------------------- | -| `azureResourceGroup` | `$AZURE_RESOURCE_GROUP` | Resource group name | -| `azureLocation` | `eastus` | Azure region | -| `azureStorageType` | `azure-files` | Storage backend (see above) | -| `azureStorageAccount` | `$AZURE_STORAGE_ACCOUNT`| Storage account name | -| `azureBlobContainer` | `unity-builds` | Blob container (for `blob-copy`) | -| `azureFileShareName` | `unity-builds` | File share name (for `azure-files`, `azure-files-nfs`) | -| `azureSubscriptionId` | `$AZURE_SUBSCRIPTION_ID`| Subscription ID | -| `azureCpu` | `4` | CPU cores (1–16) | -| `azureMemoryGb` | `16` | Memory in GB (1–16) | -| `azureDiskSizeGb` | `100` | File share quota in GB | -| `azureSubnetId` | — | Subnet ID for VNet (required for `azure-files-nfs`) | +| Input | Default | Description | +| --------------------- | ------------------------ | ------------------------------------------------------ | +| `azureResourceGroup` | `$AZURE_RESOURCE_GROUP` | Resource group name | +| `azureLocation` | `eastus` | Azure region | +| `azureStorageType` | `azure-files` | Storage backend (see above) | +| `azureStorageAccount` | `$AZURE_STORAGE_ACCOUNT` | Storage account name | +| `azureBlobContainer` | `unity-builds` | Blob container (for `blob-copy`) | +| `azureFileShareName` | `unity-builds` | File share name (for `azure-files`, `azure-files-nfs`) | +| `azureSubscriptionId` | `$AZURE_SUBSCRIPTION_ID` | Subscription ID | +| `azureCpu` | `4` | CPU cores (1–16) | +| `azureMemoryGb` | `16` | Memory in GB (1–16) | +| `azureDiskSizeGb` | `100` | File share quota in GB | +| `azureSubnetId` | — | Subnet ID for VNet (required for `azure-files-nfs`) | ## Examples diff --git a/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx b/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx index 45cbaa28..9f182188 100644 --- a/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx +++ b/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx @@ -1,7 +1,7 @@ # CLI Provider Protocol -Write orchestrator providers in **any language** — Go, Python, Rust, shell, or anything that can read -stdin and write stdout. The CLI provider protocol uses JSON messages over stdin/stdout with the +Write orchestrator providers in **any language** — Go, Python, Rust, shell, or anything that can +read stdin and write stdout. The CLI provider protocol uses JSON messages over stdin/stdout with the subcommand as the first argument. ``` @@ -102,15 +102,15 @@ messages, warnings, and debug output. ## Subcommands -| Subcommand | Purpose | Timeout | -| -------------------- | -------------------------------------- | --------- | -| `setup-workflow` | Initialize infrastructure | 300s | -| `run-task` | Execute the build | No limit | -| `cleanup-workflow` | Tear down infrastructure | 300s | -| `garbage-collect` | Remove old resources | 300s | -| `list-resources` | List active resources | 300s | -| `list-workflow` | List active workflows | 300s | -| `watch-workflow` | Watch a workflow until completion | No limit | +| Subcommand | Purpose | Timeout | +| ------------------ | --------------------------------- | -------- | +| `setup-workflow` | Initialize infrastructure | 300s | +| `run-task` | Execute the build | No limit | +| `cleanup-workflow` | Tear down infrastructure | 300s | +| `garbage-collect` | Remove old resources | 300s | +| `list-resources` | List active resources | 300s | +| `list-workflow` | List active workflows | 300s | +| `watch-workflow` | Watch a workflow until completion | No limit | `run-task` and `watch-workflow` have no timeout because builds can run for hours. @@ -172,22 +172,23 @@ Make it executable and point `providerExecutable` at it: ## CLI Provider vs TypeScript Provider -| Feature | CLI Provider | TypeScript Provider | -| ---------------------- | ---------------------- | ------------------------- | -| Language | Any | TypeScript/JavaScript | -| Setup | `providerExecutable` | `providerStrategy` | -| Communication | JSON stdin/stdout | Direct function calls | -| Streaming | stdout lines | Native logging | -| Distribution | Any executable | GitHub, NPM, local path | -| Dependencies | None (self-contained) | Node.js runtime | +| Feature | CLI Provider | TypeScript Provider | +| ------------- | --------------------- | ----------------------- | +| Language | Any | TypeScript/JavaScript | +| Setup | `providerExecutable` | `providerStrategy` | +| Communication | JSON stdin/stdout | Direct function calls | +| Streaming | stdout lines | Native logging | +| Distribution | Any executable | GitHub, NPM, local path | +| Dependencies | None (self-contained) | Node.js runtime | -Use CLI providers when you want to write in a non-TypeScript language, need to wrap an existing tool, -or want a self-contained executable with no Node.js dependency. +Use CLI providers when you want to write in a non-TypeScript language, need to wrap an existing +tool, or want a self-contained executable with no Node.js dependency. -Use [TypeScript custom providers](custom-providers) when you want direct access to the BuildParameters -object and orchestrator internals. +Use [TypeScript custom providers](custom-providers) when you want direct access to the +BuildParameters object and orchestrator internals. ## Related - [Custom Providers](custom-providers) — TypeScript provider plugin system -- [Build Services](/docs/github-orchestrator/advanced-topics/build-services) — Submodule profiles, caching, LFS agents, hooks +- [Build Services](/docs/github-orchestrator/advanced-topics/build-services) — Submodule profiles, + caching, LFS agents, hooks diff --git a/docs/03-github-orchestrator/06-secrets.mdx b/docs/03-github-orchestrator/06-secrets.mdx index c5b4445d..362bb8a0 100644 --- a/docs/03-github-orchestrator/06-secrets.mdx +++ b/docs/03-github-orchestrator/06-secrets.mdx @@ -1,25 +1,24 @@ # Secrets Orchestrator supports multiple ways to pull secrets into your build environment. Secrets are -transferred to workload containers as environment variables via the provider's native secret -system. +transferred to workload containers as environment variables via the provider's native secret system. ## Secret Sources -Set `secretSource` to use a premade integration or custom command. This is the recommended -approach — it replaces the older `inputPullCommand` mechanism with a cleaner API. +Set `secretSource` to use a premade integration or custom command. This is the recommended approach +— it replaces the older `inputPullCommand` mechanism with a cleaner API. ### Premade Sources -| Source | Value | CLI Required | -|--------|-------|-------------| -| AWS Secrets Manager | `aws-secrets-manager` | `aws` CLI | -| AWS Parameter Store | `aws-parameter-store` | `aws` CLI | -| GCP Secret Manager | `gcp-secret-manager` | `gcloud` CLI | -| Azure Key Vault | `azure-key-vault` | `az` CLI + `AZURE_VAULT_NAME` env var | -| HashiCorp Vault (KV v2) | `hashicorp-vault` or `vault` | `vault` CLI + `VAULT_ADDR` env var | -| HashiCorp Vault (KV v1) | `hashicorp-vault-kv1` | `vault` CLI + `VAULT_ADDR` env var | -| Environment Variables | `env` | None | +| Source | Value | CLI Required | +| ----------------------- | ---------------------------- | ------------------------------------- | +| AWS Secrets Manager | `aws-secrets-manager` | `aws` CLI | +| AWS Parameter Store | `aws-parameter-store` | `aws` CLI | +| GCP Secret Manager | `gcp-secret-manager` | `gcloud` CLI | +| Azure Key Vault | `azure-key-vault` | `az` CLI + `AZURE_VAULT_NAME` env var | +| HashiCorp Vault (KV v2) | `hashicorp-vault` or `vault` | `vault` CLI + `VAULT_ADDR` env var | +| HashiCorp Vault (KV v1) | `hashicorp-vault-kv1` | `vault` CLI + `VAULT_ADDR` env var | +| Environment Variables | `env` | None | ### Usage @@ -36,14 +35,13 @@ Specify `secretSource` and `pullInputList` (comma-separated list of secret keys gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -The orchestrator fetches each key from the specified source before the build starts. The values -are injected as environment variables into the build container. +The orchestrator fetches each key from the specified source before the build starts. The values are +injected as environment variables into the build container. ### AWS Secrets Manager Fetches secrets using `aws secretsmanager get-secret-value`. Your build environment needs AWS -credentials configured (e.g., via `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`, or an IAM -role). +credentials configured (e.g., via `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`, or an IAM role). ```yaml env: @@ -67,8 +65,8 @@ env: ### GCP Secret Manager -Fetches secrets using `gcloud secrets versions access latest`. Requires `gcloud` CLI -authenticated in the build environment. +Fetches secrets using `gcloud secrets versions access latest`. Requires `gcloud` CLI authenticated +in the build environment. ```yaml env: @@ -90,8 +88,8 @@ env: ### HashiCorp Vault -Fetches secrets using the `vault` CLI. Requires `VAULT_ADDR` to be set. Authentication is -handled by standard Vault environment variables (`VAULT_TOKEN`, AppRole, Kubernetes auth, etc.). +Fetches secrets using the `vault` CLI. Requires `VAULT_ADDR` to be set. Authentication is handled by +standard Vault environment variables (`VAULT_TOKEN`, AppRole, Kubernetes auth, etc.). Use `hashicorp-vault` (or the `vault` shorthand) for **KV v2** secrets engines, or `hashicorp-vault-kv1` for **KV v1**. @@ -127,8 +125,8 @@ env: ### Environment Variables -Reads secrets directly from the process environment. Useful when secrets are already injected -by the CI platform (e.g., GitHub Actions secrets). +Reads secrets directly from the process environment. Useful when secrets are already injected by the +CI platform (e.g., GitHub Actions secrets). ```yaml env: @@ -140,8 +138,8 @@ env: ## Custom Commands -If the premade sources don't cover your setup, pass a shell command with `{0}` as a placeholder -for the secret key: +If the premade sources don't cover your setup, pass a shell command with `{0}` as a placeholder for +the secret key: ```yaml env: @@ -149,8 +147,8 @@ env: secretSource: 'vault kv get -field=value secret/game-ci/{0}' ``` -The orchestrator runs this command once per key in `pullInputList`, replacing `{0}` with each -key name. +The orchestrator runs this command once per key in `pullInputList`, replacing `{0}` with each key +name. ## Custom YAML Definitions @@ -176,6 +174,7 @@ env: ``` The `parseOutput` field controls how the command output is interpreted: + - `raw` (default) — Use the output as-is - `json-field` — Parse the output as JSON and extract the field specified by `jsonField` @@ -191,18 +190,19 @@ env: ``` The legacy mechanism supports two premade shortcuts: + - `aws-secret-manager` — Expands to `aws secretsmanager get-secret-value --secret-id {0}` - `gcp-secret-manager` — Expands to `gcloud secrets versions access 1 --secret="{0}"` -New projects should use `secretSource` instead, which provides more premade sources, better -output parsing, and YAML file support. +New projects should use `secretSource` instead, which provides more premade sources, better output +parsing, and YAML file support. ## Provider-Specific Secret Handling ### Kubernetes -Secrets are created as native Kubernetes Secret objects and mounted to job containers as -environment variables. The orchestrator handles creation and cleanup automatically. +Secrets are created as native Kubernetes Secret objects and mounted to job containers as environment +variables. The orchestrator handles creation and cleanup automatically. ### AWS (ECS/Fargate) diff --git a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx index 47684e2e..4a66b125 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx @@ -1,8 +1,8 @@ # Load Balancing -Orchestrator can intelligently route builds across providers. Built-in load balancing checks -runner availability and routes to the best provider automatically — no custom scripting needed. -For advanced scenarios, standard GitHub Actions scripting gives you full control. +Orchestrator can intelligently route builds across providers. Built-in load balancing checks runner +availability and routes to the best provider automatically — no custom scripting needed. For +advanced scenarios, standard GitHub Actions scripting gives you full control. ``` unity-builder @@ -23,30 +23,30 @@ For advanced scenarios, standard GitHub Actions scripting gives you full control Set `fallbackProviderStrategy` to an alternate provider and the action handles routing automatically. Three mechanisms work together: -- **Runner availability check** — Queries the GitHub Runners API. If your self-hosted runners - are busy or offline, routes to the alternate provider. -- **Retry on alternate provider** — If the primary provider fails mid-build (transient cloud - error, quota limit), retries the entire build on the alternate provider. -- **Provider init timeout** — If the primary provider is slow to spin up, switches to the - alternate after a configurable timeout. +- **Runner availability check** — Queries the GitHub Runners API. If your self-hosted runners are + busy or offline, routes to the alternate provider. +- **Retry on alternate provider** — If the primary provider fails mid-build (transient cloud error, + quota limit), retries the entire build on the alternate provider. +- **Provider init timeout** — If the primary provider is slow to spin up, switches to the alternate + after a configurable timeout. ### Inputs -| Input | Default | Description | -| -------------------------- | ------- | ---------------------------------------------------- | -| `fallbackProviderStrategy` | `''` | Alternate provider for load balancing | -| `runnerCheckEnabled` | `false` | Check runner availability before routing | -| `runnerCheckLabels` | `''` | Filter runners by labels (e.g. `self-hosted,linux`) | -| `runnerCheckMinAvailable` | `1` | Minimum idle runners before routing to alternate | -| `retryOnFallback` | `false` | Retry failed builds on the alternate provider | -| `providerInitTimeout` | `0` | Max seconds for provider startup (0 = no limit) | +| Input | Default | Description | +| -------------------------- | ------- | --------------------------------------------------- | +| `fallbackProviderStrategy` | `''` | Alternate provider for load balancing | +| `runnerCheckEnabled` | `false` | Check runner availability before routing | +| `runnerCheckLabels` | `''` | Filter runners by labels (e.g. `self-hosted,linux`) | +| `runnerCheckMinAvailable` | `1` | Minimum idle runners before routing to alternate | +| `retryOnFallback` | `false` | Retry failed builds on the alternate provider | +| `providerInitTimeout` | `0` | Max seconds for provider startup (0 = no limit) | ### Outputs -| Output | Description | -| ------------------------ | --------------------------------------------------- | -| `providerFallbackUsed` | `true` if the build was routed to the alternate | -| `providerFallbackReason` | Why the build was rerouted | +| Output | Description | +| ------------------------ | ----------------------------------------------- | +| `providerFallbackUsed` | `true` if the build was routed to the alternate | +| `providerFallbackReason` | Why the build was rerouted | ### Route busy runners to cloud @@ -78,8 +78,8 @@ regardless of which provider handles the build. fallbackProviderStrategy: aws runnerCheckEnabled: true runnerCheckLabels: self-hosted,linux - asyncOrchestrator: true # dispatch and return immediately - githubCheck: true # report progress via PR checks + asyncOrchestrator: true # dispatch and return immediately + githubCheck: true # report progress via PR checks targetPlatform: StandaloneLinux64 gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` @@ -106,15 +106,15 @@ Docker provider instead of failing the entire workflow. ### Timeout slow provider startup -Cloud providers sometimes take a long time to provision infrastructure. Set `providerInitTimeout` -to swap to the alternate provider if startup takes too long. +Cloud providers sometimes take a long time to provision infrastructure. Set `providerInitTimeout` to +swap to the alternate provider if startup takes too long. ```yaml - uses: game-ci/unity-builder@v4 with: providerStrategy: k8s fallbackProviderStrategy: aws - providerInitTimeout: 120 # 2 minutes max for K8s to spin up + providerInitTimeout: 120 # 2 minutes max for K8s to spin up retryOnFallback: true targetPlatform: StandaloneLinux64 ``` @@ -227,8 +227,8 @@ jobs: ### Manual Runner Check -If you need custom runner check logic beyond what the built-in inputs support (e.g. checking -runner groups, org-level runners, or external capacity APIs): +If you need custom runner check logic beyond what the built-in inputs support (e.g. checking runner +groups, org-level runners, or external capacity APIs): ```yaml jobs: @@ -461,9 +461,9 @@ the routing decision and build result together in the GitHub Actions UI. ## Async Mode and Load Balancing -The [`asyncOrchestrator`](../api-reference#github-integration) parameter is essential for -effective load balancing of long builds. When enabled, the action dispatches the build and returns -immediately — no runner minutes wasted waiting. +The [`asyncOrchestrator`](../api-reference#github-integration) parameter is essential for effective +load balancing of long builds. When enabled, the action dispatches the build and returns immediately +— no runner minutes wasted waiting. ``` Workflow Step (seconds) Provider A Provider B @@ -516,18 +516,18 @@ jobs: ## When to Use What -| Scenario | Approach | -| ---------------------------------------------- | ---------------------------------------------- | -| Runners busy → offload to cloud | Built-in (`runnerCheckEnabled` + async) | -| Retry transient cloud failures | Built-in (`retryOnFallback`) | -| Slow provider startup | Built-in (`providerInitTimeout`) | -| Filter runners by labels | Built-in (`runnerCheckLabels`) | -| Route by platform or branch | Matrix or script | -| Custom capacity logic (org runners, external) | Script-based runner check | -| Weighted distribution (70/30 split) | Script with hash | -| Dispatch entirely different workflow | `workflow_dispatch` routing | -| Shared build config, dynamic routing | Reusable workflow (`workflow_call`) | -| Chained routing (A → B → C) | Script | +| Scenario | Approach | +| --------------------------------------------- | --------------------------------------- | +| Runners busy → offload to cloud | Built-in (`runnerCheckEnabled` + async) | +| Retry transient cloud failures | Built-in (`retryOnFallback`) | +| Slow provider startup | Built-in (`providerInitTimeout`) | +| Filter runners by labels | Built-in (`runnerCheckLabels`) | +| Route by platform or branch | Matrix or script | +| Custom capacity logic (org runners, external) | Script-based runner check | +| Weighted distribution (70/30 split) | Script with hash | +| Dispatch entirely different workflow | `workflow_dispatch` routing | +| Shared build config, dynamic routing | Reusable workflow (`workflow_call`) | +| Chained routing (A → B → C) | Script | ## Tips @@ -539,8 +539,8 @@ jobs: - **Cache keys are provider-independent** — The [`cacheKey`](../api-reference#caching) parameter works the same across all providers, so builds routed to different providers can still share caches if they use the same storage backend. -- **Test routing logic** — Temporarily disable your self-hosted runner to verify that routing - works before you need it in production. +- **Test routing logic** — Temporarily disable your self-hosted runner to verify that routing works + before you need it in production. - **Custom providers** — The same routing patterns work with [custom providers](../providers/custom-providers). Set `providerStrategy` to a GitHub repo or NPM package and Orchestrator loads it dynamically. diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx index ac960f7f..6a521bc1 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx @@ -27,10 +27,10 @@ monorepos where builds only need a subset of submodules. primary_submodule: MyGameFramework submodules: - name: CoreFramework - branch: main # initialize this submodule + branch: main # initialize this submodule - name: OptionalModule - branch: empty # skip this submodule (empty branch) - - name: Plugins* # glob pattern — matches PluginsCore, PluginsAudio, etc. + branch: empty # skip this submodule (empty branch) + - name: Plugins* # glob pattern — matches PluginsCore, PluginsAudio, etc. branch: main ``` @@ -46,18 +46,18 @@ A variant file merges on top of the base profile for build-type or platform-spec # server-variant.yml submodules: - name: ClientOnlyAssets - branch: empty # skip client assets for server builds + branch: empty # skip client assets for server builds - name: ServerTools - branch: main # add server-only tools + branch: main # add server-only tools ``` ### Inputs -| Input | Default | Description | -| ---------------------- | ------- | ------------------------------------------------ | -| `submoduleProfilePath` | — | Path to YAML submodule profile | -| `submoduleVariantPath` | — | Path to variant overlay (merged on top) | -| `submoduleToken` | — | Auth token for private submodule clones | +| Input | Default | Description | +| ---------------------- | ------- | --------------------------------------- | +| `submoduleProfilePath` | — | Path to YAML submodule profile | +| `submoduleVariantPath` | — | Path to variant overlay (merged on top) | +| `submoduleToken` | — | Auth token for private submodule clones | ### How It Works @@ -96,12 +96,12 @@ Filesystem-based — works on self-hosted runners with persistent storage. ### Inputs -| Input | Default | Description | -| ------------------- | ------- | ------------------------------------- | -| `localCacheEnabled` | `false` | Enable filesystem caching | -| `localCacheRoot` | — | Cache directory override | -| `localCacheLibrary` | `true` | Cache Unity Library folder | -| `localCacheLfs` | `true` | Cache LFS objects | +| Input | Default | Description | +| ------------------- | ------- | -------------------------- | +| `localCacheEnabled` | `false` | Enable filesystem caching | +| `localCacheRoot` | — | Cache directory override | +| `localCacheLibrary` | `true` | Cache Unity Library folder | +| `localCacheLfs` | `true` | Cache LFS objects | ### Example @@ -110,7 +110,7 @@ Filesystem-based — works on self-hosted runners with persistent storage. with: providerStrategy: local localCacheEnabled: true - localCacheRoot: /mnt/cache # persistent disk on self-hosted runner + localCacheRoot: /mnt/cache # persistent disk on self-hosted runner targetPlatform: StandaloneLinux64 ``` @@ -119,8 +119,8 @@ Filesystem-based — works on self-hosted runners with persistent storage. ## Custom LFS Transfer Agents Register external Git LFS transfer agents that handle LFS object storage via custom backends like -[elastic-git-storage](https://github.com/frostebite/elastic-git-storage), S3-backed agents, or -any custom transfer protocol. +[elastic-git-storage](https://github.com/frostebite/elastic-git-storage), S3-backed agents, or any +custom transfer protocol. ### How It Works @@ -137,11 +137,11 @@ The agent name is derived from the executable filename (e.g. `elastic-git-storag ### Inputs -| Input | Default | Description | -| ------------------- | ------- | -------------------------------------------- | -| `lfsTransferAgent` | — | Path to custom LFS agent executable | -| `lfsTransferAgentArgs` | — | Arguments passed to the agent | -| `lfsStoragePaths` | — | Sets `LFS_STORAGE_PATHS` environment variable| +| Input | Default | Description | +| ---------------------- | ------- | --------------------------------------------- | +| `lfsTransferAgent` | — | Path to custom LFS agent executable | +| `lfsTransferAgentArgs` | — | Arguments passed to the agent | +| `lfsStoragePaths` | — | Sets `LFS_STORAGE_PATHS` environment variable | ### Example @@ -173,10 +173,10 @@ enable when your build pipeline depends on hooks running. ### Inputs -| Input | Default | Description | -| ------------------ | ------- | ------------------------------------------- | -| `gitHooksEnabled` | `false` | Install and run git hooks during build | -| `gitHooksSkipList` | — | Comma-separated hooks to skip | +| Input | Default | Description | +| ------------------ | ------- | -------------------------------------- | +| `gitHooksEnabled` | `false` | Install and run git hooks during build | +| `gitHooksSkipList` | — | Comma-separated hooks to skip | ### Example diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx index c28adaa9..6eafa14e 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx @@ -1,7 +1,7 @@ # Custom LFS Agents -Orchestrator supports custom Git LFS transfer agents — external executables that handle -LFS upload and download instead of the default HTTPS transport. +Orchestrator supports custom Git LFS transfer agents — external executables that handle LFS upload +and download instead of the default HTTPS transport. ## elastic-git-storage (Built-in) @@ -74,19 +74,19 @@ The agent name is derived from the executable filename (without extension). ## Storage Paths -The `lfsStoragePaths` input sets the `LFS_STORAGE_PATHS` environment variable. How these paths -are interpreted depends on the agent: +The `lfsStoragePaths` input sets the `LFS_STORAGE_PATHS` environment variable. How these paths are +interpreted depends on the agent: -| Agent | Path format | -|-------|------------| +| Agent | Path format | +| ------------------- | -------------------------------------------------- | | elastic-git-storage | Local paths, `webdav://` URLs, `rclone://` remotes | -| lfs-folderstore | Local directory paths | -| Custom | Agent-specific | +| lfs-folderstore | Local directory paths | +| Custom | Agent-specific | ## Inputs Reference -| Input | Description | -|-------|-------------| -| `lfsTransferAgent` | Agent name (e.g., `elastic-git-storage`) or path to executable. Append `@version` for release pinning. | -| `lfsTransferAgentArgs` | Additional arguments passed to the agent | -| `lfsStoragePaths` | Semicolon-separated storage paths (set as `LFS_STORAGE_PATHS` env var) | +| Input | Description | +| ---------------------- | ------------------------------------------------------------------------------------------------------ | +| `lfsTransferAgent` | Agent name (e.g., `elastic-git-storage`) or path to executable. Append `@version` for release pinning. | +| `lfsTransferAgentArgs` | Additional arguments passed to the agent | +| `lfsStoragePaths` | Semicolon-separated storage paths (set as `LFS_STORAGE_PATHS` env var) | diff --git a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx index a4d13266..cfcf017d 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx @@ -9,9 +9,9 @@ multi-dimensional taxonomy filtering, and structured test result reporting. ## Overview -Instead of running tests via a single `buildMethod`, the test workflow engine lets you define -test suites as YAML configurations — specifying exactly which tests run for each CI event, -filtered by taxonomy metadata, with sequential execution dependencies. +Instead of running tests via a single `buildMethod`, the test workflow engine lets you define test +suites as YAML configurations — specifying exactly which tests run for each CI event, filtered by +taxonomy metadata, with sequential execution dependencies. ## Test Suite Definitions @@ -49,23 +49,23 @@ runs: ### Suite Fields -| Field | Description | -|-------|-------------| -| `name` | Suite identifier, used for cache keys and reporting | -| `description` | Human-readable description | -| `runs` | Ordered list of test runs | +| Field | Description | +| ------------- | --------------------------------------------------- | +| `name` | Suite identifier, used for cache keys and reporting | +| `description` | Human-readable description | +| `runs` | Ordered list of test runs | ### Run Fields -| Field | Description | -|-------|-------------| -| `name` | Run identifier | -| `needs` | List of run names that must complete first | -| `editMode` | Run Unity EditMode tests (default: false) | -| `playMode` | Run Unity PlayMode tests (default: false) | +| Field | Description | +| ------------- | ------------------------------------------------- | +| `name` | Run identifier | +| `needs` | List of run names that must complete first | +| `editMode` | Run Unity EditMode tests (default: false) | +| `playMode` | Run Unity PlayMode tests (default: false) | | `builtClient` | Run tests against a built client (default: false) | -| `filters` | Taxonomy filters to select tests | -| `timeout` | Maximum run duration in seconds | +| `filters` | Taxonomy filters to select tests | +| `timeout` | Maximum run duration in seconds | ## Taxonomy Filters @@ -74,15 +74,15 @@ against these dimensions: ### Built-in Dimensions -| Dimension | Values | Description | -|-----------|--------|-------------| -| Scope | Unit, Integration, System, End To End | Test boundary | -| Maturity | Trusted, Adolescent, Experimental | Test reliability | -| FeedbackSpeed | Fast, Moderate, Slow | Expected execution time | -| Execution | Synchronous, Asynchronous, Coroutine | Execution model | -| Rigor | Strict, Normal, Relaxed | Assertion strictness | -| Determinism | Deterministic, NonDeterministic | Repeatability | -| IsolationLevel | Full, Partial, None | External dependency isolation | +| Dimension | Values | Description | +| -------------- | ------------------------------------- | ----------------------------- | +| Scope | Unit, Integration, System, End To End | Test boundary | +| Maturity | Trusted, Adolescent, Experimental | Test reliability | +| FeedbackSpeed | Fast, Moderate, Slow | Expected execution time | +| Execution | Synchronous, Asynchronous, Coroutine | Execution model | +| Rigor | Strict, Normal, Relaxed | Assertion strictness | +| Determinism | Deterministic, NonDeterministic | Repeatability | +| IsolationLevel | Full, Partial, None | External dependency isolation | ### Filter Syntax @@ -90,9 +90,9 @@ Filters accept comma-separated values, regex patterns, and hierarchical dot-nota ```yaml filters: - Scope: Unit,Integration # Match any of these values - Maturity: /Trusted|Adolescent/ # Regex pattern - Domain: Combat.Melee # Hierarchical match + Scope: Unit,Integration # Match any of these values + Maturity: /Trusted|Adolescent/ # Regex pattern + Domain: Combat.Melee # Hierarchical match ``` ### Custom Dimensions @@ -155,7 +155,7 @@ Test results are output in machine-readable formats: - uses: game-ci/unity-builder@v4 with: testSuitePath: .game-ci/test-suites/pr-suite.yml - testResultFormat: junit # junit, json, or both + testResultFormat: junit # junit, json, or both testResultPath: ./test-results/ ``` @@ -163,10 +163,10 @@ Results integrate with GitHub Checks for inline failure reporting on pull reques ## Inputs Reference -| Input | Description | -|-------|-------------| -| `testSuitePath` | Path to YAML test suite definition file | -| `testSuiteEvent` | CI event name for suite selection (pr, push, release) | -| `testTaxonomyPath` | Path to custom taxonomy definition YAML | -| `testResultFormat` | Output format: `junit`, `json`, or `both` | -| `testResultPath` | Directory for structured result output | +| Input | Description | +| ------------------ | ----------------------------------------------------- | +| `testSuitePath` | Path to YAML test suite definition file | +| `testSuiteEvent` | CI event name for suite selection (pr, push, release) | +| `testTaxonomyPath` | Path to custom taxonomy definition YAML | +| `testResultFormat` | Output format: `junit`, `json`, or `both` | +| `testResultPath` | Directory for structured result output | diff --git a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx index 99b25deb..f237f4b9 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx @@ -9,10 +9,11 @@ Unity editor processes that accept jobs immediately without cold-start overhead. ## Overview -Traditional providers follow a cold-start model: provision → clone → cache restore → build → -tear down. Hot runners eliminate startup latency by keeping editors warm and ready. +Traditional providers follow a cold-start model: provision → clone → cache restore → build → tear +down. Hot runners eliminate startup latency by keeping editors warm and ready. A hot runner is an **actively running process** that: + - Stays alive between jobs - Accepts work via a transport protocol - Returns structured results via the [artifact system](build-output-system) @@ -22,13 +23,13 @@ A hot runner is an **actively running process** that: Runners connect via pluggable transport protocols: -| Transport | Description | Use Case | -|-----------|-------------|----------| -| `github` | Self-hosted GitHub Actions runner | Standard CI infrastructure | -| `websocket` | WebSocket/SignalR real-time connection | Custom dashboards, game platforms | -| `file` | Shared directory watch for job files | Simple setups, NAS-based farms | -| `local-network` | mDNS/Bonjour discovery + HTTP API | LAN build farms, office setups | -| `custom` | User-implemented runner interface | Any transport | +| Transport | Description | Use Case | +| --------------- | -------------------------------------- | --------------------------------- | +| `github` | Self-hosted GitHub Actions runner | Standard CI infrastructure | +| `websocket` | WebSocket/SignalR real-time connection | Custom dashboards, game platforms | +| `file` | Shared directory watch for job files | Simple setups, NAS-based farms | +| `local-network` | mDNS/Bonjour discovery + HTTP API | LAN build farms, office setups | +| `custom` | User-implemented runner interface | Any transport | ### GitHub Runner Transport @@ -89,14 +90,15 @@ editorMode: ephemeral ### Persistent -Editor stays running between jobs. Combine with -[incremental sync](incremental-sync-protocol) for fastest iteration: +Editor stays running between jobs. Combine with [incremental sync](incremental-sync-protocol) for +fastest iteration: ```yaml editorMode: persistent ``` Benefits: + - No editor startup time (saves 30–120 seconds per build) - Unity Library folder stays warm — only changed assets reimport - Domain reload only when scripts change @@ -122,6 +124,7 @@ runnerLabels: unity-2022,linux,gpu,hot Runners communicate using a JSON protocol, regardless of transport: **Register:** + ```json { "type": "register", @@ -135,6 +138,7 @@ Runners communicate using a JSON protocol, regardless of transport: ``` **Heartbeat:** + ```json { "type": "heartbeat", @@ -149,16 +153,16 @@ Job dispatch and results follow the same JSON protocol. Hot runners compose with other orchestrator features: -- **[Incremental Sync](incremental-sync-protocol)** — Receive workspace updates without full - clone. Hot runners + incremental sync = fastest possible iteration. +- **[Incremental Sync](incremental-sync-protocol)** — Receive workspace updates without full clone. + Hot runners + incremental sync = fastest possible iteration. - **[Artifact System](build-output-system)** — Return structured, typed results. - **[Test Workflow Engine](test-workflow-engine)** — Execute test suites with taxonomy filtering. ## Inputs Reference -| Input | Description | -|-------|-------------| +| Input | Description | +| ----------------- | ---------------------------------------------------------------------------- | | `runnerTransport` | Transport protocol: `github`, `websocket`, `file`, `local-network`, `custom` | -| `runnerEndpoint` | Connection endpoint for the transport | -| `runnerLabels` | Comma-separated runner labels for job routing | -| `editorMode` | Editor lifecycle: `ephemeral`, `persistent`, `hybrid` | +| `runnerEndpoint` | Connection endpoint for the transport | +| `runnerLabels` | Comma-separated runner labels for job routing | +| `editorMode` | Editor lifecycle: `ephemeral`, `persistent`, `hybrid` | diff --git a/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx index 0b6c2efe..4eeaf19b 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx @@ -27,16 +27,16 @@ Specify which output types a build produces: ## Built-in Output Types -| Type | Default Path | Description | -|------|-------------|-------------| -| `build` | `./Builds/{platform}/` | Standard game build artifact | -| `test-results` | `./TestResults/` | NUnit/JUnit XML test results | -| `server-build` | `./Builds/{platform}-server/` | Dedicated server build | -| `data-export` | `./Exports/` | Exported data files (CSV, JSON, binary) | -| `images` | `./Captures/` | Screenshots, render captures, atlas previews | -| `logs` | `./Logs/` | Structured build and test logs | -| `metrics` | `./Metrics/` | Build performance metrics, asset statistics | -| `coverage` | `./Coverage/` | Code coverage reports | +| Type | Default Path | Description | +| -------------- | ----------------------------- | -------------------------------------------- | +| `build` | `./Builds/{platform}/` | Standard game build artifact | +| `test-results` | `./TestResults/` | NUnit/JUnit XML test results | +| `server-build` | `./Builds/{platform}-server/` | Dedicated server build | +| `data-export` | `./Exports/` | Exported data files (CSV, JSON, binary) | +| `images` | `./Captures/` | Screenshots, render captures, atlas previews | +| `logs` | `./Logs/` | Structured build and test logs | +| `metrics` | `./Metrics/` | Build performance metrics, asset statistics | +| `coverage` | `./Coverage/` | Code coverage reports | ## Output Manifest @@ -108,8 +108,8 @@ outputPipelines: - archive: s3 ``` -Test results appear as inline annotations on pull request files, showing exactly where -failures occurred. +Test results appear as inline annotations on pull request files, showing exactly where failures +occurred. ### Image Captures @@ -171,24 +171,24 @@ Custom types can also be defined in a file at `.game-ci/output-types.yml`. Output types automatically integrate with GitHub CI surfaces: -| Output Type | GitHub Surface | -|-------------|---------------| -| Test results | Check annotations — inline failure markers on PR diffs | -| Images | PR comment — image grid with baseline diffs | -| Metrics | Check summary — trend charts and delta tables | -| Coverage | PR comment — coverage percentage and delta | -| Build artifacts | Check run — download links | +| Output Type | GitHub Surface | +| --------------- | ------------------------------------------------------ | +| Test results | Check annotations — inline failure markers on PR diffs | +| Images | PR comment — image grid with baseline diffs | +| Metrics | Check summary — trend charts and delta tables | +| Coverage | PR comment — coverage percentage and delta | +| Build artifacts | Check run — download links | ## Combining with Test Suites -The output system works with the [Test Workflow Engine](test-workflow-engine) to provide -structured test results per suite run: +The output system works with the [Test Workflow Engine](test-workflow-engine) to provide structured +test results per suite run: ```yaml - uses: game-ci/unity-builder@v4 with: testSuitePath: .game-ci/test-suites/pr-suite.yml - testResultFormat: both # junit + json + testResultFormat: both # junit + json testResultPath: ./TestResults/ outputTypes: test-results,metrics,coverage ``` @@ -197,8 +197,8 @@ Each test suite run produces its own output entries in the manifest. ## Combining with Hot Runners -[Hot runners](hot-runner-protocol) can produce multiple output types per job. The output -manifest is returned as part of the job result: +[Hot runners](hot-runner-protocol) can produce multiple output types per job. The output manifest is +returned as part of the job result: ```yaml - uses: game-ci/unity-builder@v4 @@ -209,11 +209,11 @@ manifest is returned as part of the job result: ## Inputs Reference -| Input | Description | -|-------|-------------| -| `outputTypes` | Comma-separated output types to collect | -| `outputManifestPath` | Path for the output manifest JSON file | -| `outputPipelines` | YAML defining per-type post-processing pipelines | -| `customOutputTypes` | YAML defining project-specific output types | -| `imageBaselinePath` | Path to baseline images for visual regression diffing | -| `metricsHistory` | Number of historical builds for trend tracking | +| Input | Description | +| -------------------- | ----------------------------------------------------- | +| `outputTypes` | Comma-separated output types to collect | +| `outputManifestPath` | Path for the output manifest JSON file | +| `outputPipelines` | YAML defining per-type post-processing pipelines | +| `customOutputTypes` | YAML defining project-specific output types | +| `imageBaselinePath` | Path to baseline images for visual regression diffing | +| `metricsHistory` | Number of historical builds for trend tracking | diff --git a/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx index 1f204840..99ec34d4 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx @@ -10,18 +10,17 @@ traditional caching. Changes come from git deltas, direct input, or generic stor ## Overview Traditional caching archives the Library folder, pushes to storage, pulls on next build, and -extracts. Even with cache hits, this takes minutes. The incremental sync protocol eliminates -caching entirely for warm environments — instead of "restore the world," it says "here's what -changed." +extracts. Even with cache hits, this takes minutes. The incremental sync protocol eliminates caching +entirely for warm environments — instead of "restore the world," it says "here's what changed." ## Sync Strategies -| Strategy | Source | Use Case | -|----------|--------|----------| -| `full` | Full clone + cache restore | Default, cold environments | -| `git-delta` | Git diff since last sync | Standard CI, PR builds | +| Strategy | Source | Use Case | +| -------------- | -------------------------------- | ---------------------------------- | +| `full` | Full clone + cache restore | Default, cold environments | +| `git-delta` | Git diff since last sync | Standard CI, PR builds | | `direct-input` | File content passed as job input | No-push workflows, rapid iteration | -| `storage-pull` | Changed files from rclone remote | Large inputs, binary assets | +| `storage-pull` | Changed files from rclone remote | Large inputs, binary assets | ## Git Delta Sync @@ -34,6 +33,7 @@ For git-based workflows: ``` The protocol: + 1. Runner tracks its last sync commit SHA 2. On job dispatch, receives target commit SHA 3. Fetches and diffs: `git diff --name-only ..` @@ -51,11 +51,12 @@ Trigger jobs **without pushing to git**. Changes are passed as input: syncInputRef: storage://my-remote/inputs/changes.tar.lz4 ``` -For small changes, content can be inline. For large inputs, content is pulled from generic -storage — backed by rclone, so **any storage provider works**: S3, GCS, Azure Blob, local -filesystem, WebDAV, SFTP, and dozens more. +For small changes, content can be inline. For large inputs, content is pulled from generic storage — +backed by rclone, so **any storage provider works**: S3, GCS, Azure Blob, local filesystem, WebDAV, +SFTP, and dozens more. This enables powerful workflows: + - "Run tests on these changes before I commit" - "Build with this asset override without touching the repo" - "Apply this config and validate" @@ -70,6 +71,7 @@ syncInputRef: storage://my-remote/job-inputs/changes.tar.lz4 ``` The protocol: + 1. Job includes a storage URI reference 2. Runner pulls the archive from the rclone remote 3. Extracts and overlays onto workspace @@ -80,8 +82,8 @@ Users don't need git push access to trigger builds — just write access to the ### Why rclone? -rclone supports 70+ storage backends out of the box. By using rclone as the storage -abstraction, any provider is supported without additional configuration: +rclone supports 70+ storage backends out of the box. By using rclone as the storage abstraction, any +provider is supported without additional configuration: ``` storage://s3:my-bucket/inputs/ # AWS S3 @@ -94,15 +96,15 @@ storage://sftp:server/inputs/ # SFTP ## Composability -The incremental sync protocol is **independent of hot runners**. It's a workspace update -strategy that works with any provider: +The incremental sync protocol is **independent of hot runners**. It's a workspace update strategy +that works with any provider: -| Provider | Sync Strategy | How It Works | -|----------|--------------|--------------| -| Hot runner (persistent) | `git-delta` | Fastest — warm editor, minimal changes | -| Hot runner (persistent) | `direct-input` | No-push iteration | -| Retained workspace | `git-delta` | Fast — workspace persists, no editor warmth | -| Cold container | `storage-pull` | Pull overlay, apply to fresh clone | +| Provider | Sync Strategy | How It Works | +| ----------------------- | -------------- | ------------------------------------------- | +| Hot runner (persistent) | `git-delta` | Fastest — warm editor, minimal changes | +| Hot runner (persistent) | `direct-input` | No-push iteration | +| Retained workspace | `git-delta` | Fast — workspace persists, no editor warmth | +| Cold container | `storage-pull` | Pull overlay, apply to fresh clone | Hot runners + incremental sync = fastest possible iteration cycle. @@ -121,9 +123,9 @@ Runners maintain sync state for delta calculations: ## Inputs Reference -| Input | Description | -|-------|-------------| -| `syncStrategy` | Sync approach: `full`, `git-delta`, `direct-input`, `storage-pull` | -| `syncInputRef` | URI for direct-input or storage-pull content | +| Input | Description | +| ------------------- | -------------------------------------------------------------------- | +| `syncStrategy` | Sync approach: `full`, `git-delta`, `direct-input`, `storage-pull` | +| `syncInputRef` | URI for direct-input or storage-pull content | | `syncStorageRemote` | rclone remote for storage-backed inputs (defaults to `rcloneRemote`) | -| `syncRevertAfter` | Revert overlaid changes after job (default: `true`) | +| `syncRevertAfter` | Revert overlaid changes after job (default: `true`) | diff --git a/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx index b8fbede5..d998bbe9 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx @@ -4,39 +4,38 @@ sidebar_position: 15 # Massive Projects -Orchestrator includes specific support for Unity projects at extreme scale — repositories -exceeding 100 GB, asset counts above 500,000 files, and Library folders that dwarf the source -tree itself. +Orchestrator includes specific support for Unity projects at extreme scale — repositories exceeding +100 GB, asset counts above 500,000 files, and Library folders that dwarf the source tree itself. ## Overview Standard CI assumptions break down at this scale: -- **Clone times** — A 100 GB repository with Git LFS takes 15–45 minutes to clone cold, - consuming most of a build budget before Unity opens. +- **Clone times** — A 100 GB repository with Git LFS takes 15–45 minutes to clone cold, consuming + most of a build budget before Unity opens. - **Library folder sizes** — Import caches for large projects routinely reach 30–80 GB. Tarring, uploading, downloading, and extracting this on every build is impractical. -- **LFS bandwidth** — Pulling all LFS objects for every build exhausts quotas and slows - pipelines. Most builds need only a fraction of the asset set. -- **Cache inflation** — GitHub Actions cache and similar systems impose size limits - (typically 10 GB per entry) that Library folders quickly exceed. -- **CI timeouts** — Default job timeouts of 6 hours are insufficient for cold clones followed - by full imports on large projects. +- **LFS bandwidth** — Pulling all LFS objects for every build exhausts quotas and slows pipelines. + Most builds need only a fraction of the asset set. +- **Cache inflation** — GitHub Actions cache and similar systems impose size limits (typically 10 GB + per entry) that Library folders quickly exceed. +- **CI timeouts** — Default job timeouts of 6 hours are insufficient for cold clones followed by + full imports on large projects. -Orchestrator addresses each of these with a two-level workspace architecture, move-centric -caching, selective LFS hydration, and submodule profile filtering. +Orchestrator addresses each of these with a two-level workspace architecture, move-centric caching, +selective LFS hydration, and submodule profile filtering. ## Two-Level Workspace Architecture Orchestrator manages workspaces at two levels: -**Root workspace** — A lean, long-lived clone of the repository. It contains the full git -history and index, a minimal set of LFS objects (only those needed for compilation), and no -Unity Library folder. The root workspace is cached across builds and updated incrementally. +**Root workspace** — A lean, long-lived clone of the repository. It contains the full git history +and index, a minimal set of LFS objects (only those needed for compilation), and no Unity Library +folder. The root workspace is cached across builds and updated incrementally. -**Child workspaces** — Per-build-target workspaces derived from the root. Each child is -LFS-hydrated for its specific asset paths, contains the Library folder for its platform target, -and is retained between builds of the same target. +**Child workspaces** — Per-build-target workspaces derived from the root. Each child is LFS-hydrated +for its specific asset paths, contains the Library folder for its platform target, and is retained +between builds of the same target. ``` root-workspace/ @@ -56,9 +55,9 @@ child-workspaces/ Library/ ``` -The orchestrator manages this layout automatically when `retainedWorkspaces: true` is set. -Child workspaces are created on first build and reused on subsequent builds of the same target. -Only changed files from git delta sync are applied to each child. +The orchestrator manages this layout automatically when `retainedWorkspaces: true` is set. Child +workspaces are created on first build and reused on subsequent builds of the same target. Only +changed files from git delta sync are applied to each child. ```yaml - uses: game-ci/unity-builder@v4 @@ -70,12 +69,12 @@ Only changed files from git delta sync are applied to each child. ## Move-Centric Caching -Traditional caching copies files: archive → upload → download → extract. For a 50 GB Library -folder this is a substantial I/O operation even with a cache hit. +Traditional caching copies files: archive → upload → download → extract. For a 50 GB Library folder +this is a substantial I/O operation even with a cache hit. -Orchestrator uses atomic folder moves on local storage instead. On NTFS and ext4, moving a -directory is an O(1) metadata operation regardless of how many files it contains. A 50 GB -Library folder moves in milliseconds. +Orchestrator uses atomic folder moves on local storage instead. On NTFS and ext4, moving a directory +is an O(1) metadata operation regardless of how many files it contains. A 50 GB Library folder moves +in milliseconds. ```yaml - uses: game-ci/unity-builder@v4 @@ -91,24 +90,24 @@ The cache lifecycle for a Library folder: 3. Build ends — move Library back to cache (instant) 4. Next build — Library is already warm at cache location -This eliminates the archive/upload/download/extract cycle entirely for builds running on -retained storage. Remote cache fallback (S3, GCS, Azure Blob via rclone) is still available -for cold runners that do not have local cache access. +This eliminates the archive/upload/download/extract cycle entirely for builds running on retained +storage. Remote cache fallback (S3, GCS, Azure Blob via rclone) is still available for cold runners +that do not have local cache access. -| Cache Strategy | Library Move Time | Suitable For | -|---------------|-------------------|--------------| -| `move` | Milliseconds | Retained storage, build farms | -| `rclone` | Minutes (size-dependent) | Remote cache, ephemeral runners | -| `github-cache` | Minutes (10 GB limit) | Small projects only | +| Cache Strategy | Library Move Time | Suitable For | +| -------------- | ------------------------ | ------------------------------- | +| `move` | Milliseconds | Retained storage, build farms | +| `rclone` | Minutes (size-dependent) | Remote cache, ephemeral runners | +| `github-cache` | Minutes (10 GB limit) | Small projects only | ## Custom LFS Transfer Agents -Standard Git LFS transfers every object through a single HTTP endpoint. For large projects -this creates a bottleneck, especially when only a subset of assets is needed for a given build. +Standard Git LFS transfers every object through a single HTTP endpoint. For large projects this +creates a bottleneck, especially when only a subset of assets is needed for a given build. -Orchestrator supports alternative LFS transfer agents via the `lfsTransferAgent` input. A -transfer agent is a binary that Git invokes in place of the standard LFS client. Agents can -implement partial transfer, parallel streams, resumable downloads, and custom storage backends. +Orchestrator supports alternative LFS transfer agents via the `lfsTransferAgent` input. A transfer +agent is a binary that Git invokes in place of the standard LFS client. Agents can implement partial +transfer, parallel streams, resumable downloads, and custom storage backends. ```yaml - uses: game-ci/unity-builder@v4 @@ -118,10 +117,11 @@ implement partial transfer, parallel streams, resumable downloads, and custom st lfsStoragePaths: 'Assets/LargeAssets,Assets/Cinematics' ``` -`lfsStoragePaths` limits LFS hydration to the specified asset directories. Files outside these -paths are not downloaded, reducing transfer volume to only what the build target needs. +`lfsStoragePaths` limits LFS hydration to the specified asset directories. Files outside these paths +are not downloaded, reducing transfer volume to only what the build target needs. **elastic-git-storage** is the recommended agent for large projects. It supports: + - Parallel multi-stream transfers - Resumable downloads after network interruption - Content-addressed deduplication across workspaces @@ -141,12 +141,12 @@ To use a custom agent, provide the agent binary path: ## Submodule Profiles -Monorepos with many submodules suffer initialization overhead proportional to the number of -active submodules. A project with 30 submodules where any given build target needs 8 wastes -time and bandwidth initializing the other 22. +Monorepos with many submodules suffer initialization overhead proportional to the number of active +submodules. A project with 30 submodules where any given build target needs 8 wastes time and +bandwidth initializing the other 22. -Submodule profiles define exactly which submodules to initialize for a given build context. -See the [Monorepo Support](monorepo-support) page for full profile format and configuration. +Submodule profiles define exactly which submodules to initialize for a given build context. See the +[Monorepo Support](monorepo-support) page for full profile format and configuration. For massive projects, the key practice is keeping each build target's profile minimal: @@ -158,29 +158,28 @@ submodules: - name: RenderPipeline branch: main - name: OptionalCinematicTools - branch: empty # skipped for standard builds + branch: empty # skipped for standard builds - name: Plugins* branch: main ``` -Profile initialization is atomic — skipped submodules are never touched, so build time scales -with the active submodule set rather than the total repository size. +Profile initialization is atomic — skipped submodules are never touched, so build time scales with +the active submodule set rather than the total repository size. ## Incremental Sync -For projects where even a targeted LFS pull is expensive, incremental sync avoids full -re-clones entirely. See the [Incremental Sync Protocol](incremental-sync-protocol) page for -the full protocol. +For projects where even a targeted LFS pull is expensive, incremental sync avoids full re-clones +entirely. See the [Incremental Sync Protocol](incremental-sync-protocol) page for the full protocol. The two strategies most relevant to massive projects: -**git-delta** — The runner tracks its last sync commit SHA. On job dispatch it receives the -target SHA, diffs the two, and checks out only the changed files. Assets that have not changed -are not touched, and their Library import state remains valid. +**git-delta** — The runner tracks its last sync commit SHA. On job dispatch it receives the target +SHA, diffs the two, and checks out only the changed files. Assets that have not changed are not +touched, and their Library import state remains valid. -**storage-pull** — For assets that live outside git (too large for LFS, or managed by a -separate pipeline), the runner pulls only the changed files from a generic storage remote. This -combines with git-delta so that code changes and asset changes are both handled incrementally. +**storage-pull** — For assets that live outside git (too large for LFS, or managed by a separate +pipeline), the runner pulls only the changed files from a generic storage remote. This combines with +git-delta so that code changes and asset changes are both handled incrementally. ```yaml - uses: game-ci/unity-builder@v4 @@ -189,13 +188,13 @@ combines with git-delta so that code changes and asset changes are both handled retainedWorkspaces: true ``` -Together, retained workspaces and git-delta sync deliver the minimal possible import work on -every build: Unity sees only the files that actually changed. +Together, retained workspaces and git-delta sync deliver the minimal possible import work on every +build: Unity sees only the files that actually changed. ## Build Performance Tips -**Parallelise platform builds.** Use a GitHub Actions matrix across platform targets. Each -target maintains its own child workspace and Library folder, so builds do not interfere. +**Parallelise platform builds.** Use a GitHub Actions matrix across platform targets. Each target +maintains its own child workspace and Library folder, so builds do not interfere. ```yaml strategy: @@ -206,36 +205,36 @@ strategy: - WebGL ``` -**Warm the cache before the sprint.** At the start of a sprint cycle, run a full import on -each target platform during off-hours. Retained workspaces mean subsequent PR builds start -with warm Library folders. +**Warm the cache before the sprint.** At the start of a sprint cycle, run a full import on each +target platform during off-hours. Retained workspaces mean subsequent PR builds start with warm +Library folders. -**Use LFS partial clone patterns.** Structure the repository so assets are grouped by build -target under predictable paths (`Assets/Platforms/Linux/`, `Assets/Platforms/WebGL/`). This -makes `lfsStoragePaths` filtering straightforward and predictable. +**Use LFS partial clone patterns.** Structure the repository so assets are grouped by build target +under predictable paths (`Assets/Platforms/Linux/`, `Assets/Platforms/WebGL/`). This makes +`lfsStoragePaths` filtering straightforward and predictable. -**Reserve timeouts generously.** Set `buildTimeout` to account for cold-start scenarios, even -when warm builds are expected. The first build after a runner restart will be cold. +**Reserve timeouts generously.** Set `buildTimeout` to account for cold-start scenarios, even when +warm builds are expected. The first build after a runner restart will be cold. ```yaml - uses: game-ci/unity-builder@v4 with: - buildTimeout: 360 # minutes + buildTimeout: 360 # minutes ``` -**Monitor Library folder health.** Occasional full reimports are necessary when Unity upgrades -or large-scale asset reorganizations occur. Schedule these explicitly rather than discovering -them mid-sprint when a runner's Library becomes stale. +**Monitor Library folder health.** Occasional full reimports are necessary when Unity upgrades or +large-scale asset reorganizations occur. Schedule these explicitly rather than discovering them +mid-sprint when a runner's Library becomes stale. ## Inputs Reference -| Input | Description | -|-------|-------------| -| `retainedWorkspaces` | Keep child workspaces between builds (`true` / `false`) | -| `workspaceRoot` | Base path for root and child workspace storage | -| `localCacheRoot` | Local filesystem path for move-centric Library cache | -| `cacheStrategy` | Cache approach: `move`, `rclone`, `github-cache` | -| `lfsTransferAgent` | Name or path of a custom LFS transfer agent binary | -| `lfsTransferAgentArgs` | Additional arguments passed to the LFS transfer agent | -| `lfsStoragePaths` | Comma-separated asset paths to limit LFS hydration | -| `buildTimeout` | Maximum build duration in minutes | +| Input | Description | +| ---------------------- | ------------------------------------------------------- | +| `retainedWorkspaces` | Keep child workspaces between builds (`true` / `false`) | +| `workspaceRoot` | Base path for root and child workspace storage | +| `localCacheRoot` | Local filesystem path for move-centric Library cache | +| `cacheStrategy` | Cache approach: `move`, `rclone`, `github-cache` | +| `lfsTransferAgent` | Name or path of a custom LFS transfer agent binary | +| `lfsTransferAgentArgs` | Additional arguments passed to the LFS transfer agent | +| `lfsStoragePaths` | Comma-separated asset paths to limit LFS hydration | +| `buildTimeout` | Maximum build duration in minutes | diff --git a/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx index 56996f8d..6b144502 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx @@ -4,8 +4,8 @@ sidebar_position: 16 # Monorepo Support -Orchestrator provides first-class support for Unity monorepos — single repositories that -contain multiple products sharing engine code, submodules, and build configuration. +Orchestrator provides first-class support for Unity monorepos — single repositories that contain +multiple products sharing engine code, submodules, and build configuration. ## Overview @@ -17,18 +17,17 @@ A Unity monorepo typically contains: - Shared tooling, CI workflows, and automation scripts The challenge is that different products need different subsets of the repository. A build of -Product A should not initialize submodules that only Product B needs. A server build should -not pull in client-only assets. A CI run for a hotfix should not reimport assets belonging to -an unrelated product. +Product A should not initialize submodules that only Product B needs. A server build should not pull +in client-only assets. A CI run for a hotfix should not reimport assets belonging to an unrelated +product. -Orchestrator addresses this through a profile system that controls submodule initialization -per product and build type, combined with per-product framework configuration. +Orchestrator addresses this through a profile system that controls submodule initialization per +product and build type, combined with per-product framework configuration. ## Submodule Profile System -Profiles are YAML files that declare which submodules to initialize for a given product and -context. Each submodule entry specifies either `branch: main` (initialize) or `branch: empty` -(skip). +Profiles are YAML files that declare which submodules to initialize for a given product and context. +Each submodule entry specifies either `branch: main` (initialize) or `branch: empty` (skip). ### Profile Format @@ -43,28 +42,28 @@ submodules: branch: main ``` -`primary_submodule` identifies the main game submodule — the orchestrator uses this as the -root of the build context. +`primary_submodule` identifies the main game submodule — the orchestrator uses this as the root of +the build context. -Each entry under `submodules` names a submodule (or a glob pattern matching multiple -submodules) and declares whether it should be initialized. Submodules marked `branch: empty` -are never touched during initialization, regardless of what other profiles or defaults specify. +Each entry under `submodules` names a submodule (or a glob pattern matching multiple submodules) and +declares whether it should be initialized. Submodules marked `branch: empty` are never touched +during initialization, regardless of what other profiles or defaults specify. ### Glob Pattern Support -Glob patterns match multiple submodules with a single entry. This is useful for plugin groups -that always travel together: +Glob patterns match multiple submodules with a single entry. This is useful for plugin groups that +always travel together: ```yaml submodules: - name: Plugins* - branch: main # initializes PluginsCore, PluginsAudio, PluginsLocalization, etc. + branch: main # initializes PluginsCore, PluginsAudio, PluginsLocalization, etc. - name: ThirdParty* - branch: empty # skips all ThirdParty submodules + branch: empty # skips all ThirdParty submodules ``` -Patterns are matched in order. The first matching entry wins, so more specific entries should -appear before broader patterns. +Patterns are matched in order. The first matching entry wins, so more specific entries should appear +before broader patterns. ### Variant Overlays @@ -89,13 +88,13 @@ Server variant (`config/submodule-profiles/my-game/ci/server.yml`): ```yaml overrides: - name: ClientUI - branch: empty # not needed for server builds + branch: empty # not needed for server builds - name: ServerRuntime - branch: main # required for server builds + branch: main # required for server builds ``` -The variant is merged on top of the base profile at initialization time. Only the listed -entries are overridden; all others inherit from the base. +The variant is merged on top of the base profile at initialization time. Only the listed entries are +overridden; all others inherit from the base. ## Configuration @@ -108,21 +107,20 @@ Specify profiles and variants as action inputs: submoduleVariantPath: config/submodule-profiles/my-game/ci/server.yml ``` -When `submoduleProfilePath` is set, orchestrator reads the profile before any git operations -and initializes only the listed submodules. Skipped submodules are never cloned, fetched, or -touched. +When `submoduleProfilePath` is set, orchestrator reads the profile before any git operations and +initializes only the listed submodules. Skipped submodules are never cloned, fetched, or touched. When `submoduleVariantPath` is also set, it is merged on top of the base profile before initialization begins. -If neither input is set, orchestrator falls back to standard git submodule initialization -(all submodules, no filtering). +If neither input is set, orchestrator falls back to standard git submodule initialization (all +submodules, no filtering). ## Multi-Product CI Matrix -A monorepo with multiple products can build all products in parallel using a GitHub Actions -matrix. Each matrix entry specifies a different profile, producing independent builds from -the same repository checkout. +A monorepo with multiple products can build all products in parallel using a GitHub Actions matrix. +Each matrix entry specifies a different profile, producing independent builds from the same +repository checkout. ```yaml jobs: @@ -152,13 +150,13 @@ jobs: targetPlatform: ${{ matrix.targetPlatform }} ``` -Each matrix job initializes only the submodules its profile declares. Products do not -interfere with each other's initialization or build output. +Each matrix job initializes only the submodules its profile declares. Products do not interfere with +each other's initialization or build output. ## Shared Code and Assembly Definitions -Unity Assembly Definitions (`.asmdef` files) enforce code boundaries within the monorepo. -The recommended layout separates shared engine code from game-specific code: +Unity Assembly Definitions (`.asmdef` files) enforce code boundaries within the monorepo. The +recommended layout separates shared engine code from game-specific code: ``` Assets/_Engine/ ← shared engine systems @@ -183,13 +181,13 @@ Assembly definitions in `Assets/_Engine/` reference only engine-level namespaces definitions in `Assets/_Game/Shared/Code/` may reference engine assemblies. Product-specific assemblies reference both, but never each other across product boundaries. -This structure means Unity can compile and test each product's assembly graph independently, -and compile errors in one product do not block builds of another. +This structure means Unity can compile and test each product's assembly graph independently, and +compile errors in one product do not block builds of another. ## Framework Configuration -Per-product build configuration belongs in a central frameworks file. This is the single -source of truth for Steam App IDs, build methods, and supported platforms per product: +Per-product build configuration belongs in a central frameworks file. This is the single source of +truth for Steam App IDs, build methods, and supported platforms per product: ```yaml # config/frameworks.yml @@ -214,27 +212,27 @@ frameworks: - WebGL ``` -CI workflows read from this file to populate matrix entries and avoid duplicating -product-specific values across workflow files. A single change to `frameworks.yml` propagates -to all workflows that reference it. +CI workflows read from this file to populate matrix entries and avoid duplicating product-specific +values across workflow files. A single change to `frameworks.yml` propagates to all workflows that +reference it. ## Best Practices **Keep profiles small.** A profile should list only what a build actually requires. Err toward -`branch: empty` for anything that is not clearly needed. Unnecessary submodule initialization -adds clone time and increases the chance of conflicts. +`branch: empty` for anything that is not clearly needed. Unnecessary submodule initialization adds +clone time and increases the chance of conflicts. -**Use glob patterns for plugin groups.** Plugins that always travel together (a vendor SDK -split across three submodules, for example) should share a naming prefix so a single glob -entry controls them all. This reduces profile maintenance as new plugins are added. +**Use glob patterns for plugin groups.** Plugins that always travel together (a vendor SDK split +across three submodules, for example) should share a naming prefix so a single glob entry controls +them all. This reduces profile maintenance as new plugins are added. -**Use variant overlays for build-type differences.** Do not create separate base profiles for -client and server builds. Start with a shared base profile and apply a server variant on top. -This keeps the diff between build types explicit and minimizes duplication. +**Use variant overlays for build-type differences.** Do not create separate base profiles for client +and server builds. Start with a shared base profile and apply a server variant on top. This keeps +the diff between build types explicit and minimizes duplication. -**Validate profiles in CI.** Add a profile validation step that checks every submodule named -in a profile actually exists in `.gitmodules`. This catches typos and stale entries before -they cause initialization failures on build agents. +**Validate profiles in CI.** Add a profile validation step that checks every submodule named in a +profile actually exists in `.gitmodules`. This catches typos and stale entries before they cause +initialization failures on build agents. ```yaml - name: Validate submodule profiles @@ -245,14 +243,13 @@ they cause initialization failures on build agents. shell: powershell ``` -**Document the profile per product.** Each product's profile directory should contain a brief -README explaining which submodules are in scope, which are intentionally excluded, and which -variant files exist. New contributors should not need to reverse-engineer profile intent from -the YAML alone. +**Document the profile per product.** Each product's profile directory should contain a brief README +explaining which submodules are in scope, which are intentionally excluded, and which variant files +exist. New contributors should not need to reverse-engineer profile intent from the YAML alone. ## Inputs Reference -| Input | Description | -|-------|-------------| +| Input | Description | +| ---------------------- | ------------------------------------------------------------------ | | `submoduleProfilePath` | Path to the profile YAML file controlling submodule initialization | -| `submoduleVariantPath` | Path to a variant YAML file overlaid on top of the base profile | +| `submoduleVariantPath` | Path to a variant YAML file overlaid on top of the base profile | diff --git a/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx b/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx index 3ad32a85..1539117e 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx @@ -5,15 +5,15 @@ sidebar_position: 17 # Build Reliability Build reliability features harden CI builds against common failure modes: git corruption on -persistent runners, Windows filesystem issues with cross-platform repositories, and build -output management. All features are opt-in via action inputs and fail gracefully — a reliability -check that encounters an error logs a warning rather than failing the build. +persistent runners, Windows filesystem issues with cross-platform repositories, and build output +management. All features are opt-in via action inputs and fail gracefully — a reliability check that +encounters an error logs a warning rather than failing the build. ## Git Integrity Checking -Self-hosted runners with persistent workspaces accumulate state between builds. Aborted jobs, -disk errors, and concurrent git operations can leave the repository in a corrupted state. When -this happens, the next build fails with cryptic git errors that are difficult to diagnose. +Self-hosted runners with persistent workspaces accumulate state between builds. Aborted jobs, disk +errors, and concurrent git operations can leave the repository in a corrupted state. When this +happens, the next build fails with cryptic git errors that are difficult to diagnose. Git integrity checking catches corruption before it causes build failures. @@ -21,19 +21,19 @@ Git integrity checking catches corruption before it causes build failures. The integrity check runs three validations in sequence: -1. **`git fsck --no-dangling`** — Detects broken links, missing objects, and corrupt pack data - in the local repository. The `--no-dangling` flag suppresses harmless warnings about - unreachable objects that are normal in CI environments. +1. **`git fsck --no-dangling`** — Detects broken links, missing objects, and corrupt pack data in + the local repository. The `--no-dangling` flag suppresses harmless warnings about unreachable + objects that are normal in CI environments. -2. **Stale lock files** — Scans the `.git/` directory recursively for any files ending in - `.lock` (`index.lock`, `shallow.lock`, `config.lock`, `HEAD.lock`, `refs/**/*.lock`). These - are left behind by git processes that were killed mid-operation and prevent subsequent git - commands from running. All lock files found are removed. +2. **Stale lock files** — Scans the `.git/` directory recursively for any files ending in `.lock` + (`index.lock`, `shallow.lock`, `config.lock`, `HEAD.lock`, `refs/**/*.lock`). These are left + behind by git processes that were killed mid-operation and prevent subsequent git commands from + running. All lock files found are removed. -3. **Submodule backing stores** — For each submodule declared in `.gitmodules`, validates that - the `.git` file inside the submodule directory points to an existing backing store under - `.git/modules/`. A broken backing store reference means the submodule's history is - inaccessible, and any git operation inside it will fail. +3. **Submodule backing stores** — For each submodule declared in `.gitmodules`, validates that the + `.git` file inside the submodule directory points to an existing backing store under + `.git/modules/`. A broken backing store reference means the submodule's history is inaccessible, + and any git operation inside it will fail. ### Configuration @@ -52,14 +52,14 @@ detected, the service attempts recovery: 2. Re-initialize the repository with `git init` 3. The checkout action completes the clone on the next step -This is a last-resort recovery. It works because the orchestrator's checkout step will -re-populate the repository from the remote after re-initialization. +This is a last-resort recovery. It works because the orchestrator's checkout step will re-populate +the repository from the remote after re-initialization. ```yaml - uses: game-ci/unity-builder@v4 with: gitIntegrityCheck: 'true' - gitAutoRecover: 'true' # this is the default when gitIntegrityCheck is enabled + gitAutoRecover: 'true' # this is the default when gitIntegrityCheck is enabled ``` To run integrity checks without automatic recovery (report-only mode), disable it explicitly: @@ -71,14 +71,14 @@ To run integrity checks without automatic recovery (report-only mode), disable i gitAutoRecover: 'false' ``` -In report-only mode, detected corruption is logged as a warning and the build continues. This -is useful for monitoring repository health without taking corrective action. +In report-only mode, detected corruption is logged as a warning and the build continues. This is +useful for monitoring repository health without taking corrective action. ## Reserved Filename Cleanup -Windows has reserved device names (`CON`, `PRN`, `AUX`, `NUL`, `COM1`–`COM9`, `LPT1`–`LPT9`) -that cannot be used as filenames. When a git repository created on macOS or Linux contains files -with these names, checking them out on Windows causes problems. +Windows has reserved device names (`CON`, `PRN`, `AUX`, `NUL`, `COM1`–`COM9`, `LPT1`–`LPT9`) that +cannot be used as filenames. When a git repository created on macOS or Linux contains files with +these names, checking them out on Windows causes problems. ### The Problem @@ -102,23 +102,23 @@ cross-platform contributions. cleanReservedFilenames: 'true' ``` -When enabled, the service scans the `Assets/` directory tree before Unity processes the project. -Any file or directory whose name (without extension) matches a reserved device name is removed. -Each removal is logged as a warning so the source of the problematic files can be traced. +When enabled, the service scans the `Assets/` directory tree before Unity processes the project. Any +file or directory whose name (without extension) matches a reserved device name is removed. Each +removal is logged as a warning so the source of the problematic files can be traced. ### Reserved Names The full list of reserved names checked (case-insensitive, with any file extension): -`CON`, `PRN`, `AUX`, `NUL`, `COM1`, `COM2`, `COM3`, `COM4`, `COM5`, `COM6`, `COM7`, `COM8`, -`COM9`, `LPT1`, `LPT2`, `LPT3`, `LPT4`, `LPT5`, `LPT6`, `LPT7`, `LPT8`, `LPT9` +`CON`, `PRN`, `AUX`, `NUL`, `COM1`, `COM2`, `COM3`, `COM4`, `COM5`, `COM6`, `COM7`, `COM8`, `COM9`, +`LPT1`, `LPT2`, `LPT3`, `LPT4`, `LPT5`, `LPT6`, `LPT7`, `LPT8`, `LPT9` Examples of files that would be removed: `aux.meta`, `nul.png`, `CON.txt`, `com1.asset`. ## Build Output Archival -Automatically archive build outputs after successful builds. Archives are organized per -platform and managed with a count-based retention policy. +Automatically archive build outputs after successful builds. Archives are organized per platform and +managed with a count-based retention policy. ### Configuration @@ -132,19 +132,19 @@ platform and managed with a count-based retention policy. ### How It Works -1. After a successful build, the build output directory is moved (or copied, if a cross-device - move is not possible) to `{archivePath}/{platform}/build-{timestamp}`. +1. After a successful build, the build output directory is moved (or copied, if a cross-device move + is not possible) to `{archivePath}/{platform}/build-{timestamp}`. 2. Archives are organized by platform — each target platform gets its own subdirectory. -3. The retention policy keeps the N most recent builds per platform. Older builds are - automatically removed. +3. The retention policy keeps the N most recent builds per platform. Older builds are automatically + removed. -The archive path must be set when archival is enabled. This can be a local directory on the -runner or a mounted network volume. +The archive path must be set when archival is enabled. This can be a local directory on the runner +or a mounted network volume. ### Retention Strategy -Retention is count-based: the `buildArchiveRetention` value specifies how many builds to keep -per platform. When a new build is archived and the total exceeds the retention count, the oldest +Retention is count-based: the `buildArchiveRetention` value specifies how many builds to keep per +platform. When a new build is archived and the total exceeds the retention count, the oldest archives are removed. - Default retention: **3** builds per platform @@ -175,14 +175,14 @@ This is applied automatically and does not require any configuration. ## Inputs Reference -| Input | Description | Default | -|-------|-------------|---------| -| `gitIntegrityCheck` | Run git integrity checks before build | `'false'` | -| `gitAutoRecover` | Attempt automatic recovery if corruption detected (requires `gitIntegrityCheck`) | `'true'` | -| `cleanReservedFilenames` | Remove Windows reserved filenames from `Assets/` | `'false'` | -| `buildArchiveEnabled` | Archive build output after successful build | `'false'` | -| `buildArchivePath` | Path to store build archives (required when archival is enabled) | `''` | -| `buildArchiveRetention` | Number of builds to retain per platform | `'3'` | +| Input | Description | Default | +| ------------------------ | -------------------------------------------------------------------------------- | --------- | +| `gitIntegrityCheck` | Run git integrity checks before build | `'false'` | +| `gitAutoRecover` | Attempt automatic recovery if corruption detected (requires `gitIntegrityCheck`) | `'true'` | +| `cleanReservedFilenames` | Remove Windows reserved filenames from `Assets/` | `'false'` | +| `buildArchiveEnabled` | Archive build output after successful build | `'false'` | +| `buildArchivePath` | Path to store build archives (required when archival is enabled) | `''` | +| `buildArchiveRetention` | Number of builds to retain per platform | `'3'` | ## Recommended Configuration @@ -199,9 +199,9 @@ For self-hosted runners with persistent workspaces: buildArchiveRetention: '5' ``` -For ephemeral runners (GitHub-hosted or fresh containers), git integrity checking is less -valuable since the workspace is created fresh each time. Reserved filename cleanup is still -useful if the repository contains cross-platform contributions: +For ephemeral runners (GitHub-hosted or fresh containers), git integrity checking is less valuable +since the workspace is created fresh each time. Reserved filename cleanup is still useful if the +repository contains cross-platform contributions: ```yaml - uses: game-ci/unity-builder@v4 diff --git a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx index 8aa2013c..2e7c81ce 100644 --- a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx +++ b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx @@ -23,10 +23,10 @@ irm https://raw.githubusercontent.com/game-ci/orchestrator/main/install.ps1 | ie ### Options -| Environment variable | Description | -| --- | --- | -| `GAME_CI_VERSION` | Pin a specific release (e.g. `v2.0.0`). Defaults to latest. | -| `GAME_CI_INSTALL` | Override install directory. Defaults to `~/.game-ci/bin`. | +| Environment variable | Description | +| -------------------- | ----------------------------------------------------------- | +| `GAME_CI_VERSION` | Pin a specific release (e.g. `v2.0.0`). Defaults to latest. | +| `GAME_CI_INSTALL` | Override install directory. Defaults to `~/.game-ci/bin`. | ```bash # Example: install a specific version @@ -36,16 +36,16 @@ GAME_CI_VERSION=v2.0.0 curl -fsSL https://raw.githubusercontent.com/game-ci/orch ### Manual Download Pre-built binaries for every platform (Linux x64/arm64, macOS x64/arm64, Windows x64) are available -on the [GitHub Releases](https://github.com/game-ci/orchestrator/releases) page. Download the -binary for your OS and architecture, make it executable, and place it on your `PATH`. +on the [GitHub Releases](https://github.com/game-ci/orchestrator/releases) page. Download the binary +for your OS and architecture, make it executable, and place it on your `PATH`. ## Unity License Activation Before building, you need a Unity license. Set one of the following environment variables: -| Variable | Description | -| --- | --- | -| `UNITY_SERIAL` | Unity serial key (Professional/Plus licenses) | +| Variable | Description | +| --------------- | ----------------------------------------------------------- | +| `UNITY_SERIAL` | Unity serial key (Professional/Plus licenses) | | `UNITY_LICENSE` | Contents of a Unity `.ulf` license file (base64 or raw XML) | You can verify your license is detected by running: @@ -112,14 +112,14 @@ game-ci build \ ### Common Target Platforms -| Platform | Value | -| --- | --- | -| Linux (64-bit) | `StandaloneLinux64` | +| Platform | Value | +| ---------------- | --------------------- | +| Linux (64-bit) | `StandaloneLinux64` | | Windows (64-bit) | `StandaloneWindows64` | -| macOS | `StandaloneOSX` | -| WebGL | `WebGL` | -| Android | `Android` | -| iOS | `iOS` | +| macOS | `StandaloneOSX` | +| WebGL | `WebGL` | +| Android | `Android` | +| iOS | `iOS` | ## Checking Your Setup diff --git a/docs/03-github-orchestrator/08-cli/02-build-command.mdx b/docs/03-github-orchestrator/08-cli/02-build-command.mdx index 1bde55c4..66321b99 100644 --- a/docs/03-github-orchestrator/08-cli/02-build-command.mdx +++ b/docs/03-github-orchestrator/08-cli/02-build-command.mdx @@ -14,37 +14,37 @@ game-ci build [options] ## Required Options -| Flag | Description | -| --- | --- | +| Flag | Description | +| ------------------- | ------------------------------------------------ | | `--target-platform` | Build target platform (e.g. `StandaloneLinux64`) | ## Project Options -| Flag | Default | Description | -| --- | --- | --- | -| `--unity-version` | `auto` | Unity Editor version to use. Set to `auto` to detect from `ProjectSettings/ProjectVersion.txt`. | -| `--project-path` | `.` | Path to the Unity project directory | -| `--build-name` | _(empty)_ | Name of the build output file (no file extension) | -| `--builds-path` | `build` | Output directory for build artifacts | -| `--build-method` | _(empty)_ | Custom static C# build method to invoke (e.g. `MyBuild.PerformBuild`) | -| `--build-profile` | _(empty)_ | Path to the build profile to activate, relative to the project root | -| `--custom-parameters` | _(empty)_ | Additional parameters appended to the Unity command line | +| Flag | Default | Description | +| --------------------- | --------- | ----------------------------------------------------------------------------------------------- | +| `--unity-version` | `auto` | Unity Editor version to use. Set to `auto` to detect from `ProjectSettings/ProjectVersion.txt`. | +| `--project-path` | `.` | Path to the Unity project directory | +| `--build-name` | _(empty)_ | Name of the build output file (no file extension) | +| `--builds-path` | `build` | Output directory for build artifacts | +| `--build-method` | _(empty)_ | Custom static C# build method to invoke (e.g. `MyBuild.PerformBuild`) | +| `--build-profile` | _(empty)_ | Path to the build profile to activate, relative to the project root | +| `--custom-parameters` | _(empty)_ | Additional parameters appended to the Unity command line | ## Versioning Options -| Flag | Default | Description | -| --- | --- | --- | -| `--versioning` | `Semantic` | Versioning strategy: `Semantic`, `Tag`, `Custom`, `None` | -| `--version` | _(empty)_ | Explicit version string (used with `--versioning Custom`) | +| Flag | Default | Description | +| -------------- | ---------- | --------------------------------------------------------- | +| `--versioning` | `Semantic` | Versioning strategy: `Semantic`, `Tag`, `Custom`, `None` | +| `--version` | _(empty)_ | Explicit version string (used with `--versioning Custom`) | ## Unity Options -| Flag | Default | Description | -| --- | --- | --- | -| `--manual-exit` | `false` | Suppresses the `-quit` flag. Use when your build method calls `EditorApplication.Exit(0)` manually. | -| `--enable-gpu` | `false` | Launches Unity without specifying `-nographics` | -| `--skip-activation` | `false` | Skip Unity license activation/deactivation | -| `--unity-licensing-server` | _(empty)_ | Unity floating license server address | +| Flag | Default | Description | +| -------------------------- | --------- | --------------------------------------------------------------------------------------------------- | +| `--manual-exit` | `false` | Suppresses the `-quit` flag. Use when your build method calls `EditorApplication.Exit(0)` manually. | +| `--enable-gpu` | `false` | Launches Unity without specifying `-nographics` | +| `--skip-activation` | `false` | Skip Unity license activation/deactivation | +| `--unity-licensing-server` | _(empty)_ | Unity floating license server address | ## Custom Build Parameters @@ -60,17 +60,17 @@ The `--custom-parameters` string is appended to the Unity command line arguments ## Android Options -| Flag | Default | Description | -| --- | --- | --- | -| `--android-version-code` | _(empty)_ | Android `versionCode` override | -| `--android-export-type` | `androidPackage` | Export type: `androidPackage` (APK), `androidAppBundle` (AAB), or `androidStudioProject` | -| `--android-keystore-name` | _(empty)_ | Filename of the keystore | -| `--android-keystore-base64` | _(empty)_ | Base64-encoded keystore file contents | -| `--android-keystore-pass` | _(empty)_ | Keystore password | -| `--android-keyalias-name` | _(empty)_ | Key alias name within the keystore | -| `--android-keyalias-pass` | _(empty)_ | Key alias password | -| `--android-target-sdk-version` | _(empty)_ | Target Android SDK version (e.g. `AndroidApiLevel31`) | -| `--android-symbol-type` | `none` | Android symbol type to export: `none`, `public`, or `debugging` | +| Flag | Default | Description | +| ------------------------------ | ---------------- | ---------------------------------------------------------------------------------------- | +| `--android-version-code` | _(empty)_ | Android `versionCode` override | +| `--android-export-type` | `androidPackage` | Export type: `androidPackage` (APK), `androidAppBundle` (AAB), or `androidStudioProject` | +| `--android-keystore-name` | _(empty)_ | Filename of the keystore | +| `--android-keystore-base64` | _(empty)_ | Base64-encoded keystore file contents | +| `--android-keystore-pass` | _(empty)_ | Keystore password | +| `--android-keyalias-name` | _(empty)_ | Key alias name within the keystore | +| `--android-keyalias-pass` | _(empty)_ | Key alias password | +| `--android-target-sdk-version` | _(empty)_ | Target Android SDK version (e.g. `AndroidApiLevel31`) | +| `--android-symbol-type` | `none` | Android symbol type to export: `none`, `public`, or `debugging` | ### Android Build Example @@ -89,14 +89,14 @@ game-ci build \ Control the Docker container used for the build: -| Flag | Default | Description | -| --- | --- | --- | -| `--custom-image` | _(empty)_ | Override the Docker image (defaults to `unityci/editor` with the detected version and platform) | -| `--docker-cpu-limit` | _(empty)_ | CPU limit for the container (e.g. `4` for 4 cores) | -| `--docker-memory-limit` | _(empty)_ | Memory limit for the container (e.g. `8g` for 8 GB) | -| `--docker-workspace-path` | `/github/workspace` | Path where the workspace is mounted inside the container | -| `--run-as-host-user` | `false` | Run as a user that matches the host system | -| `--chown-files-to` | _(empty)_ | User and optionally group to give ownership of build artifacts (e.g. `1000:1000`) | +| Flag | Default | Description | +| ------------------------- | ------------------- | ----------------------------------------------------------------------------------------------- | +| `--custom-image` | _(empty)_ | Override the Docker image (defaults to `unityci/editor` with the detected version and platform) | +| `--docker-cpu-limit` | _(empty)_ | CPU limit for the container (e.g. `4` for 4 cores) | +| `--docker-memory-limit` | _(empty)_ | Memory limit for the container (e.g. `8g` for 8 GB) | +| `--docker-workspace-path` | `/github/workspace` | Path where the workspace is mounted inside the container | +| `--run-as-host-user` | `false` | Run as a user that matches the host system | +| `--chown-files-to` | _(empty)_ | User and optionally group to give ownership of build artifacts (e.g. `1000:1000`) | ### Custom Docker Image Example @@ -108,9 +108,9 @@ game-ci build \ ## Authentication Options -| Flag | Default | Description | -| --- | --- | --- | -| `--ssh-agent` | _(empty)_ | SSH Agent path to forward to the container | +| Flag | Default | Description | +| --------------------- | --------- | ---------------------------------------------------------- | +| `--ssh-agent` | _(empty)_ | SSH Agent path to forward to the container | | `--git-private-token` | _(empty)_ | GitHub private token for pulling from private repositories | ## Provider Strategy @@ -118,8 +118,8 @@ game-ci build \ By default, the `build` command runs locally. You can redirect execution to a remote orchestrator provider: -| Flag | Default | Description | -| --- | --- | --- | +| Flag | Default | Description | +| --------------------- | ------- | -------------------------------------------- | | `--provider-strategy` | `local` | Execution strategy: `local`, `k8s`, or `aws` | When set to anything other than `local`, the build is handed off to the orchestrator. See diff --git a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx index f43a1352..5f123c36 100644 --- a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx +++ b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx @@ -4,8 +4,8 @@ sidebar_position: 3 # Orchestrate Command -The `orchestrate` command runs Unity builds on cloud infrastructure instead of the local machine. -It provisions a remote environment, syncs your project, runs the build, and retrieves artifacts. +The `orchestrate` command runs Unity builds on cloud infrastructure instead of the local machine. It +provisions a remote environment, syncs your project, runs the build, and retrieves artifacts. ```bash game-ci orchestrate [options] @@ -16,20 +16,20 @@ Actions. ## Required Options -| Flag | Description | -| --- | --- | +| Flag | Description | +| ------------------- | ------------------------------------------------ | | `--target-platform` | Build target platform (e.g. `StandaloneLinux64`) | ## Provider Selection Choose where your build runs with the `--provider-strategy` flag: -| Provider | Value | Description | -| --- | --- | --- | -| AWS Fargate | `aws` | Serverless containers on AWS (default) | -| Kubernetes | `k8s` | Run on any Kubernetes cluster | -| Local Docker | `local-docker` | Run in a local Docker container | -| Local System | `local-system` | Run directly on the local system | +| Provider | Value | Description | +| ------------ | -------------- | -------------------------------------- | +| AWS Fargate | `aws` | Serverless containers on AWS (default) | +| Kubernetes | `k8s` | Run on any Kubernetes cluster | +| Local Docker | `local-docker` | Run in a local Docker container | +| Local System | `local-system` | Run directly on the local system | ```bash game-ci orchestrate \ @@ -39,23 +39,23 @@ game-ci orchestrate \ ## Build Options -| Flag | Default | Description | -| --- | --- | --- | -| `--unity-version` | `auto` | Unity Editor version to use. Set to `auto` to detect from project. | -| `--project-path` | `.` | Path to the Unity project directory | -| `--build-name` | _(empty)_ | Name of the build | -| `--builds-path` | `build` | Path where build artifacts are stored | -| `--build-method` | _(empty)_ | Custom static C# build method to invoke | -| `--custom-parameters` | _(empty)_ | Additional parameters for the Unity build | -| `--versioning` | `None` | Versioning strategy: `None`, `Semantic`, `Tag`, `Custom` | +| Flag | Default | Description | +| --------------------- | --------- | ------------------------------------------------------------------ | +| `--unity-version` | `auto` | Unity Editor version to use. Set to `auto` to detect from project. | +| `--project-path` | `.` | Path to the Unity project directory | +| `--build-name` | _(empty)_ | Name of the build | +| `--builds-path` | `build` | Path where build artifacts are stored | +| `--build-method` | _(empty)_ | Custom static C# build method to invoke | +| `--custom-parameters` | _(empty)_ | Additional parameters for the Unity build | +| `--versioning` | `None` | Versioning strategy: `None`, `Semantic`, `Tag`, `Custom` | ## AWS Options -| Flag | Default | Description | -| --- | --- | --- | -| `--aws-stack-name` | `game-ci` | CloudFormation stack name for shared resources | -| `--container-cpu` | `1024` | CPU units for the Fargate task (1024 = 1 vCPU) | -| `--container-memory` | `3072` | Memory in MB for the Fargate task | +| Flag | Default | Description | +| -------------------- | --------- | ---------------------------------------------- | +| `--aws-stack-name` | `game-ci` | CloudFormation stack name for shared resources | +| `--container-cpu` | `1024` | CPU units for the Fargate task (1024 = 1 vCPU) | +| `--container-memory` | `3072` | Memory in MB for the Fargate task | AWS credentials are read from the standard AWS environment variables or credential files: @@ -73,11 +73,11 @@ game-ci orchestrate \ ## Kubernetes Options -| Flag | Default | Description | -| --- | --- | --- | -| `--kube-config` | _(empty)_ | Base64-encoded kubeconfig file contents | -| `--kube-volume` | _(empty)_ | Name of the persistent volume to use | -| `--kube-volume-size` | `5Gi` | Size of the persistent volume | +| Flag | Default | Description | +| -------------------- | --------- | --------------------------------------- | +| `--kube-config` | _(empty)_ | Base64-encoded kubeconfig file contents | +| `--kube-volume` | _(empty)_ | Name of the persistent volume to use | +| `--kube-volume-size` | `5Gi` | Size of the persistent volume | ```bash game-ci orchestrate \ @@ -89,23 +89,23 @@ game-ci orchestrate \ ## Cache Options -| Flag | Default | Description | -| --- | --- | --- | +| Flag | Default | Description | +| ------------- | --------- | ------------------------------- | | `--cache-key` | _(empty)_ | Key used to scope cache entries | ## Workspace Options -| Flag | Default | Description | -| --- | --- | --- | -| `--clone-depth` | `50` | Git clone depth (use `0` for full clone) | +| Flag | Default | Description | +| --------------- | ------- | ---------------------------------------- | +| `--clone-depth` | `50` | Git clone depth (use `0` for full clone) | ## Execution Options -| Flag | Default | Description | -| --- | --- | --- | -| `--watch-to-end` | `true` | Follow build logs until completion | +| Flag | Default | Description | +| --------------------- | ------- | ------------------------------------------------------ | +| `--watch-to-end` | `true` | Follow build logs until completion | | `--allow-dirty-build` | `false` | Allow builds from dirty (uncommitted changes) branches | -| `--skip-activation` | `false` | Skip Unity license activation/deactivation | +| `--skip-activation` | `false` | Skip Unity license activation/deactivation | ## Git Authentication @@ -118,8 +118,8 @@ game-ci orchestrate \ --git-private-token "$GITHUB_TOKEN" ``` -| Flag | Default | Description | -| --- | --- | --- | +| Flag | Default | Description | +| --------------------- | --------- | --------------------------------------------------- | | `--git-private-token` | _(empty)_ | GitHub access token with repository read permission | If not provided, the CLI attempts to read the token from the `GITHUB_TOKEN` environment variable. diff --git a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx index ff357c86..35710a10 100644 --- a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx +++ b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx @@ -23,9 +23,9 @@ activation will succeed. License activation itself is handled automatically when Provide credentials via environment variables: -| Variable | Description | -| --- | --- | -| `UNITY_SERIAL` | Serial key (Professional/Plus licenses) | +| Variable | Description | +| --------------- | ----------------------------------------------------- | +| `UNITY_SERIAL` | Serial key (Professional/Plus licenses) | | `UNITY_LICENSE` | Contents of a `.ulf` license file (base64 or raw XML) | ```bash @@ -39,9 +39,9 @@ game-ci activate ### Flags -| Flag | Default | Description | -| --- | --- | --- | -| `--unity-version` | `auto` | Version of Unity to activate | +| Flag | Default | Description | +| -------------------------- | --------- | ------------------------------------- | +| `--unity-version` | `auto` | Version of Unity to activate | | `--unity-licensing-server` | _(empty)_ | Unity floating license server address | ```bash @@ -89,10 +89,10 @@ game-ci cache clear ### Cache Flags -| Flag | Default | Description | -| --- | --- | --- | -| `--cache-dir` | _(empty)_ | Path to the cache directory (defaults to `/Library`) | -| `--project-path` | `.` | Path to the Unity project | +| Flag | Default | Description | +| ---------------- | --------- | ------------------------------------------------------------------ | +| `--cache-dir` | _(empty)_ | Path to the cache directory (defaults to `/Library`) | +| `--project-path` | `.` | Path to the Unity project | ## status @@ -114,9 +114,9 @@ Reports: ### Flags -| Flag | Default | Description | -| --- | --- | --- | -| `--project-path` | `.` | Path to the Unity project | +| Flag | Default | Description | +| ---------------- | ------- | ------------------------- | +| `--project-path` | `.` | Path to the Unity project | ## version @@ -144,10 +144,10 @@ game-ci update ### Flags -| Flag | Default | Description | -| --- | --- | --- | -| `--force`, `-f` | `false` | Force update even if already on the latest version | -| `--version` | _(empty)_ | Update to a specific version (e.g. `v2.1.0`) | +| Flag | Default | Description | +| --------------- | --------- | -------------------------------------------------- | +| `--force`, `-f` | `false` | Force update even if already on the latest version | +| `--version` | _(empty)_ | Update to a specific version (e.g. `v2.1.0`) | ```bash # Update to the latest version @@ -167,8 +167,8 @@ updating via npm instead. These flags are available on all commands: -| Flag | Description | -| --- | --- | +| Flag | Description | +| -------------- | ------------------------- | | `--help`, `-h` | Show help for any command | ```bash From 229a7397e04864d69c4b3c3c7f828a0ab8b81b66 Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 19:48:48 +0000 Subject: [PATCH 48/60] docs: remove em-dashes and convert ASCII diagram to mermaid Replace all 336 em-dash characters with regular dashes across 37 docs files. Convert remote-powershell ASCII box diagram to mermaid sequence diagram. Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 22 +++--- .../03-examples/02-github-actions.mdx | 20 ++--- .../03-examples/03-aws.mdx | 12 +-- .../03-examples/04-kubernetes.mdx | 14 ++-- docs/03-github-orchestrator/04-jobs.mdx | 22 +++--- .../05-api-reference.mdx | 46 +++++------ .../05-providers/02-aws.mdx | 2 +- .../05-providers/03-kubernetes.mdx | 4 +- .../04-github-actions-dispatch.mdx | 38 ++++----- .../05-providers/05-gitlab-ci-dispatch.mdx | 38 ++++----- .../05-providers/05-local.mdx | 4 +- .../05-providers/06-custom-providers.mdx | 18 ++--- .../05-providers/06-remote-powershell.mdx | 78 +++++++++---------- .../05-providers/07-ansible.mdx | 40 +++++----- .../05-providers/09-gitlab-integration.mdx | 2 +- .../05-providers/10-gcp-cloud-run.mdx | 30 +++---- .../05-providers/11-azure-aci.mdx | 24 +++--- .../05-providers/12-cli-provider-protocol.mdx | 6 +- docs/03-github-orchestrator/06-secrets.mdx | 10 +-- .../07-advanced-topics/01-caching.mdx | 6 +- .../02-retained-workspace.mdx | 2 +- .../07-advanced-topics/07-load-balancing.mdx | 42 +++++----- .../07-advanced-topics/08-storage.mdx | 16 ++-- .../07-advanced-topics/09-architecture.mdx | 40 +++++----- .../07-advanced-topics/10-build-services.mdx | 34 ++++---- .../07-advanced-topics/10-lfs-agents.mdx | 2 +- .../11-test-workflow-engine.mdx | 2 +- .../12-hot-runner-protocol.mdx | 10 +-- .../13-build-output-system.mdx | 12 +-- .../14-incremental-sync-protocol.mdx | 10 +-- .../15-massive-projects.mdx | 30 +++---- .../16-monorepo-support.mdx | 4 +- .../17-build-reliability.mdx | 14 ++-- .../08-cli/01-getting-started.mdx | 8 +- .../08-cli/02-build-command.mdx | 6 +- .../08-cli/03-orchestrate-command.mdx | 8 +- .../08-cli/04-other-commands.mdx | 20 ++--- 37 files changed, 346 insertions(+), 350 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 247f6138..0f1855ea 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -32,15 +32,15 @@ automatically detects and loads it via the plugin interface. ::: ## ✅ Why Orchestrator? -1. **Flexible and elastic** — balance speed and cost, configure CPU, memory, and disk per build -2. **Scale from zero** — no idle servers, pay only while builds run -3. **Easy setup** — minimal configuration to [get started](getting-started) -4. **Extensible** — run [custom hooks](advanced-topics/hooks/container-hooks), or bring your own +1. **Flexible and elastic** - balance speed and cost, configure CPU, memory, and disk per build +2. **Scale from zero** - no idle servers, pay only while builds run +3. **Easy setup** - minimal configuration to [get started](getting-started) +4. **Extensible** - run [custom hooks](advanced-topics/hooks/container-hooks), or bring your own [provider plugin](providers/custom-providers) ## ❌ When You Don't Need It -- Your project is under 5 GB — standard GitHub runners should work fine +- Your project is under 5 GB - standard GitHub runners should work fine - You have dedicated build servers already running ## 📦 Supported Providers @@ -66,10 +66,10 @@ and [community](providers/community-providers) providers. ## 🔗 External Links -- [Orchestrator Repository](https://github.com/game-ci/orchestrator) — standalone orchestrator +- [Orchestrator Repository](https://github.com/game-ci/orchestrator) - standalone orchestrator package -- [Releases](https://github.com/game-ci/orchestrator/releases) — orchestrator releases -- [Pull Requests](https://github.com/game-ci/orchestrator/pulls) — open orchestrator PRs -- [Issues](https://github.com/game-ci/orchestrator/issues) — bugs and feature requests -- [Discord](https://discord.com/channels/710946343828455455/789631903157583923) — community chat -- [Feedback Form](https://forms.gle/3Wg1gGf9FnZ72RiJ9) — share your experience +- [Releases](https://github.com/game-ci/orchestrator/releases) - orchestrator releases +- [Pull Requests](https://github.com/game-ci/orchestrator/pulls) - open orchestrator PRs +- [Issues](https://github.com/game-ci/orchestrator/issues) - bugs and feature requests +- [Discord](https://discord.com/channels/710946343828455455/789631903157583923) - community chat +- [Feedback Form](https://forms.gle/3Wg1gGf9FnZ72RiJ9) - share your experience diff --git a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx index e069d311..a88350c2 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx +++ b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx @@ -49,7 +49,7 @@ jobs: Full workflow with custom CPU/memory, S3 artifact export, and GitHub Checks. ```yaml -name: Orchestrator — AWS Fargate +name: Orchestrator - AWS Fargate on: push: @@ -109,7 +109,7 @@ See the [AWS provider page](../providers/aws) for allowed CPU/memory combination Full workflow targeting a Kubernetes cluster. ```yaml -name: Orchestrator — Kubernetes +name: Orchestrator - Kubernetes on: push: @@ -165,7 +165,7 @@ See the [Kubernetes provider page](../providers/kubernetes) for cluster tips and Run builds in Docker on your own machine. No cloud account needed. ```yaml -name: Orchestrator — Local Docker +name: Orchestrator - Local Docker on: push: @@ -213,7 +213,7 @@ Add a scheduled workflow to clean up stale cloud resources. Useful as a safety n automatic cleanup cron. ```yaml -name: Orchestrator — Garbage Collect +name: Orchestrator - Garbage Collect on: schedule: @@ -247,7 +247,7 @@ See [Garbage Collection](../advanced-topics/garbage-collection) for details. Build for multiple platforms in parallel. Each platform runs as a separate Orchestrator job. ```yaml -name: Orchestrator — Multi-Platform +name: Orchestrator - Multi-Platform on: push: @@ -309,7 +309,7 @@ rebuilds at the cost of more storage. See [Retained Workspaces](../advanced-topics/retained-workspace) and [Caching](../advanced-topics/caching) for details on storage strategies. -## 🪝 Container Hooks — S3 Upload + Steam Deploy +## 🪝 Container Hooks - S3 Upload + Steam Deploy Chain multiple container hooks to export builds to S3 and deploy to Steam in a single workflow. @@ -331,8 +331,8 @@ Steam). ## 🔗 Reference -- [API Reference](../api-reference) — full list of all parameters -- [Providers](../providers/overview) — setup guides for each provider -- [Secrets](../secrets) — how credentials are transferred to build containers +- [API Reference](../api-reference) - full list of all parameters +- [Providers](../providers/overview) - setup guides for each provider +- [Secrets](../secrets) - how credentials are transferred to build containers - [Real-world pipeline](https://github.com/game-ci/unity-builder/blob/main/.github/workflows/orchestrator-integrity.yml) - — Game CI's own Orchestrator test pipeline + - Game CI's own Orchestrator test pipeline diff --git a/docs/03-github-orchestrator/03-examples/03-aws.mdx b/docs/03-github-orchestrator/03-examples/03-aws.mdx index 1c11145a..4b1b1a8d 100644 --- a/docs/03-github-orchestrator/03-examples/03-aws.mdx +++ b/docs/03-github-orchestrator/03-examples/03-aws.mdx @@ -40,7 +40,7 @@ jobs: Build for multiple platforms in parallel. Each platform runs as a separate Fargate task. ```yaml -name: Orchestrator — AWS Multi-Platform +name: Orchestrator - AWS Multi-Platform on: push: @@ -170,7 +170,7 @@ Chain container hooks to export to S3 and deploy to Steam in one step. Clean up stale CloudFormation stacks and Fargate tasks. ```yaml -name: Orchestrator — Garbage Collect +name: Orchestrator - Garbage Collect on: schedule: @@ -225,7 +225,7 @@ game-ci status --providerStrategy aws ## Next Steps -- [AWS Provider Reference](../providers/aws) — architecture, parameters, and setup -- [Container Hooks](../advanced-topics/hooks/built-in-hooks) — S3, rclone, Steam hooks -- [Garbage Collection](../advanced-topics/garbage-collection) — automated cleanup -- [API Reference](../api-reference) — full parameter list +- [AWS Provider Reference](../providers/aws) - architecture, parameters, and setup +- [Container Hooks](../advanced-topics/hooks/built-in-hooks) - S3, rclone, Steam hooks +- [Garbage Collection](../advanced-topics/garbage-collection) - automated cleanup +- [API Reference](../api-reference) - full parameter list diff --git a/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx b/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx index 5ffdbd39..8ee28d2f 100644 --- a/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx +++ b/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx @@ -36,7 +36,7 @@ jobs: Build for multiple platforms in parallel. Each platform runs as a separate Kubernetes Job. ```yaml -name: Orchestrator — Kubernetes Multi-Platform +name: Orchestrator - Kubernetes Multi-Platform on: push: @@ -125,7 +125,7 @@ Use S3-backed caching for the Library folder to speed up rebuilds. containerHookFiles: aws-s3-pull-cache,aws-s3-upload-cache,aws-s3-upload-build ``` -Hook execution order matters — `aws-s3-pull-cache` restores the cache before the build, +Hook execution order matters - `aws-s3-pull-cache` restores the cache before the build, `aws-s3-upload-cache` saves it after, and `aws-s3-upload-build` uploads the final artifact. ## Retained Workspaces @@ -187,8 +187,8 @@ Store the output as a GitHub Actions secret named `KUBE_CONFIG`. ## Next Steps -- [Kubernetes Provider Reference](../providers/kubernetes) — full setup and parameters -- [Caching](../advanced-topics/caching) — S3 and rclone caching strategies -- [Retained Workspaces](../advanced-topics/retained-workspace) — persistent build environments -- [Container Hooks](../advanced-topics/hooks/built-in-hooks) — S3, rclone, Steam hooks -- [API Reference](../api-reference) — full parameter list +- [Kubernetes Provider Reference](../providers/kubernetes) - full setup and parameters +- [Caching](../advanced-topics/caching) - S3 and rclone caching strategies +- [Retained Workspaces](../advanced-topics/retained-workspace) - persistent build environments +- [Container Hooks](../advanced-topics/hooks/built-in-hooks) - S3, rclone, Steam hooks +- [API Reference](../api-reference) - full parameter list diff --git a/docs/03-github-orchestrator/04-jobs.mdx b/docs/03-github-orchestrator/04-jobs.mdx index 64df5a95..b9d1f574 100644 --- a/docs/03-github-orchestrator/04-jobs.mdx +++ b/docs/03-github-orchestrator/04-jobs.mdx @@ -1,6 +1,6 @@ # Orchestrator Jobs -Orchestrator executes work as **jobs** — containerized or local tasks that run on your chosen +Orchestrator executes work as **jobs** - containerized or local tasks that run on your chosen provider. Understanding job types and their flow is key to customizing your build pipeline. ## Job Flow @@ -18,17 +18,17 @@ Every Orchestrator run follows the same lifecycle, regardless of provider: └─────────────┘ ``` -1. **Setup** — Provision cloud resources (stacks, volumes, secrets). Skipped for local providers. -2. **Pre-build jobs** — Clone the repository, pull LFS, restore caches, run pre-build hooks. -3. **Build job** — Execute the Unity build (or custom editor method). -4. **Post-build jobs** — Push caches, upload artifacts, run post-build hooks. -5. **Cleanup** — Release locks, tear down cloud resources, update GitHub Checks. +1. **Setup** - Provision cloud resources (stacks, volumes, secrets). Skipped for local providers. +2. **Pre-build jobs** - Clone the repository, pull LFS, restore caches, run pre-build hooks. +3. **Build job** - Execute the Unity build (or custom editor method). +4. **Post-build jobs** - Push caches, upload artifacts, run post-build hooks. +5. **Cleanup** - Release locks, tear down cloud resources, update GitHub Checks. ## Job Types ### Build Job -The standard job — runs the Unity Editor to produce a build artifact. This is what most users care +The standard job - runs the Unity Editor to produce a build artifact. This is what most users care about. ```yaml @@ -61,7 +61,7 @@ Run Unity tests without producing a build. Use a custom `buildMethod` that runs gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -With `manualExit: true`, Unity doesn't quit automatically — your build method should call +With `manualExit: true`, Unity doesn't quit automatically - your build method should call `EditorApplication.Exit(0)` after tests complete. This gives you full control over the test lifecycle. @@ -188,6 +188,6 @@ Each provider runs jobs differently: ## Next Steps -- [Custom Job](advanced-topics/custom-job) — Full reference for custom job definitions -- [Hooks](advanced-topics/hooks/container-hooks) — Inject steps at specific lifecycle points -- [Architecture](advanced-topics/architecture) — Deep dive into internal components +- [Custom Job](advanced-topics/custom-job) - Full reference for custom job definitions +- [Hooks](advanced-topics/hooks/container-hooks) - Inject steps at specific lifecycle points +- [Architecture](advanced-topics/architecture) - Deep dive into internal components diff --git a/docs/03-github-orchestrator/05-api-reference.mdx b/docs/03-github-orchestrator/05-api-reference.mdx index 4048dd84..7ab1b2b1 100644 --- a/docs/03-github-orchestrator/05-api-reference.mdx +++ b/docs/03-github-orchestrator/05-api-reference.mdx @@ -43,8 +43,8 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. | Parameter | Default | Description | | ------------------- | -------- | ------------------------------------------------------------------- | -| `gitPrivateToken` | — | GitHub access token with repo access. Used for git clone and LFS. | -| `githubOwner` | — | GitHub owner or organization name. | +| `gitPrivateToken` | - | GitHub access token with repo access. Used for git clone and LFS. | +| `githubOwner` | - | GitHub owner or organization name. | | `GITHUB_REPOSITORY` | _(auto)_ | Repository in `owner/repo` format. Auto-detected in GitHub Actions. | | `GITHUB_REF` | _(auto)_ | Git ref to build. Falls back to `branch` or `GitSHA` parameters. | | `cloneDepth` | `50` | Depth of the git clone. Use `0` for a full clone. | @@ -54,49 +54,49 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. | Parameter | Default | Description | | ------------------------- | ------- | -------------------------------------------------------------------------------------------------------- | -| `containerHookFiles` | — | Names of [container hook](advanced-topics/hooks/container-hooks) files from `.game-ci/container-hooks/`. | -| `customHookFiles` | — | Names of custom hook files from `.game-ci/hooks/`. | -| `customCommandHooks` | — | Inline [command hooks](advanced-topics/hooks/command-hooks) as YAML. | -| `postBuildSteps` | — | Post-build job in YAML format with keys: `image`, `secrets`, `command`. | -| `preBuildSteps` | — | Pre-build job (after repo setup, before build) in YAML format. | -| `postBuildContainerHooks` | — | Container hook files to run after the build step. | -| `preBuildContainerHooks` | — | Container hook files to run before the build step. | -| `customJob` | — | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/custom-job). | +| `containerHookFiles` | - | Names of [container hook](advanced-topics/hooks/container-hooks) files from `.game-ci/container-hooks/`. | +| `customHookFiles` | - | Names of custom hook files from `.game-ci/hooks/`. | +| `customCommandHooks` | - | Inline [command hooks](advanced-topics/hooks/command-hooks) as YAML. | +| `postBuildSteps` | - | Post-build job in YAML format with keys: `image`, `secrets`, `command`. | +| `preBuildSteps` | - | Pre-build job (after repo setup, before build) in YAML format. | +| `postBuildContainerHooks` | - | Container hook files to run after the build step. | +| `preBuildContainerHooks` | - | Container hook files to run before the build step. | +| `customJob` | - | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/custom-job). | ### Pull Secrets | Parameter | Default | Description | | --------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `readInputOverrideCommand` | — | Command to read a parameter value from an external source. Use `{0}` as the parameter name placeholder. Built-in presets: `gcp-secret-manager`, `aws-secret-manager`. See [Secrets](secrets). | -| `readInputFromOverrideList` | — | Comma-separated list of parameter names to pull via `readInputOverrideCommand`. | +| `readInputOverrideCommand` | - | Command to read a parameter value from an external source. Use `{0}` as the parameter name placeholder. Built-in presets: `gcp-secret-manager`, `aws-secret-manager`. See [Secrets](secrets). | +| `readInputFromOverrideList` | - | Comma-separated list of parameter names to pull via `readInputOverrideCommand`. | ### Storage | Parameter | Default | Description | | ----------------- | ------- | ------------------------------------------------------------------------------------------------------ | | `storageProvider` | `s3` | Storage backend for [caching](advanced-topics/caching) and artifacts. Accepted values: `s3`, `rclone`. | -| `rcloneRemote` | — | Rclone remote endpoint. Required when `storageProvider` is `rclone`. | +| `rcloneRemote` | - | Rclone remote endpoint. Required when `storageProvider` is `rclone`. | ### AWS | Parameter | Default | Description | | --------------------------- | --------- | -------------------------------------------------------------- | | `awsStackName` | `game-ci` | Name of the persistent shared CloudFormation base stack. | -| `awsEndpoint` | — | Base endpoint override for all AWS services (e.g. LocalStack). | -| `awsCloudFormationEndpoint` | — | CloudFormation service endpoint override. | -| `awsEcsEndpoint` | — | ECS service endpoint override. | -| `awsKinesisEndpoint` | — | Kinesis service endpoint override. | -| `awsCloudWatchLogsEndpoint` | — | CloudWatch Logs service endpoint override. | -| `awsS3Endpoint` | — | S3 service endpoint override. | +| `awsEndpoint` | - | Base endpoint override for all AWS services (e.g. LocalStack). | +| `awsCloudFormationEndpoint` | - | CloudFormation service endpoint override. | +| `awsEcsEndpoint` | - | ECS service endpoint override. | +| `awsKinesisEndpoint` | - | Kinesis service endpoint override. | +| `awsCloudWatchLogsEndpoint` | - | CloudWatch Logs service endpoint override. | +| `awsS3Endpoint` | - | S3 service endpoint override. | ### Kubernetes | Parameter | Default | Description | | ------------------ | ------- | ----------------------------------------------------------------------- | -| `kubeConfig` | — | Base64-encoded Kubernetes config file. | -| `kubeVolume` | — | Name of the persistent volume claim to use. | +| `kubeConfig` | - | Base64-encoded Kubernetes config file. | +| `kubeVolume` | - | Name of the persistent volume claim to use. | | `kubeVolumeSize` | `5Gi` | Size of the persistent volume. | -| `kubeStorageClass` | — | Storage class for the persistent volume. Empty = auto-install via rook. | +| `kubeStorageClass` | - | Storage class for the persistent volume. Empty = auto-install via rook. | ### Caching @@ -110,7 +110,7 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. | Parameter | Default | Description | | ------------------- | ------- | --------------------------------------------------------------------------------------------------------- | | `githubCheck` | `false` | Create a GitHub Check for each orchestrator step. See [GitHub Integration](providers/github-integration). | -| `asyncOrchestrator` | `false` | Run in async mode — returns immediately without waiting for the build to complete. | +| `asyncOrchestrator` | `false` | Run in async mode - returns immediately without waiting for the build to complete. | | `watchToEnd` | `true` | Whether to follow the build logs until completion. | ### Build Options diff --git a/docs/03-github-orchestrator/05-providers/02-aws.mdx b/docs/03-github-orchestrator/05-providers/02-aws.mdx index 3beabbe1..bf1e4d61 100644 --- a/docs/03-github-orchestrator/05-providers/02-aws.mdx +++ b/docs/03-github-orchestrator/05-providers/02-aws.mdx @@ -93,4 +93,4 @@ A full workflow example is available in the builder source: ## AWS Parameters For the full list of AWS-specific parameters (`awsStackName`, endpoint overrides, etc.), see the -[API Reference — AWS section](../api-reference#aws). +[API Reference - AWS section](../api-reference#aws). diff --git a/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx b/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx index 5453a8e2..849f23b2 100644 --- a/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx +++ b/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx @@ -16,7 +16,7 @@ env: ## CPU and Memory -Kubernetes accepts the same unit format as AWS — `1024 = 1 vCPU`, memory in MB. Do not include the +Kubernetes accepts the same unit format as AWS - `1024 = 1 vCPU`, memory in MB. Do not include the vCPU or GB suffix. | CPU (`containerCpu`) | Memory (`containerMemory`) | @@ -61,4 +61,4 @@ A full workflow example is available in the builder source: ## K8s Parameters For the full list of Kubernetes parameters (`kubeConfig`, `kubeVolume`, `kubeStorageClass`, etc.), -see the [API Reference — Kubernetes section](../api-reference#kubernetes). +see the [API Reference - Kubernetes section](../api-reference#kubernetes). diff --git a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx index 43e85189..c49ddbdb 100644 --- a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx +++ b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx @@ -10,13 +10,13 @@ orchestrator dispatches the work to another repository's workflow and monitors i ## Use Cases -- **Separate build infrastructure** from your game repository — keep build runners and Unity +- **Separate build infrastructure** from your game repository - keep build runners and Unity licenses in a dedicated repo while orchestrating from your main project. -- **Distribute builds across organizations** — trigger workflows in repos owned by different GitHub +- **Distribute builds across organizations** - trigger workflows in repos owned by different GitHub organizations or teams. -- **Specialized runner pools** — route builds to self-hosted runners registered against a different +- **Specialized runner pools** - route builds to self-hosted runners registered against a different repository with specific hardware (GPU, high memory, fast SSD). -- **License isolation** — keep Unity license activation in a controlled environment while allowing +- **License isolation** - keep Unity license activation in a controlled environment while allowing multiple game repos to dispatch builds to it. ## Prerequisites @@ -102,16 +102,16 @@ Set `providerStrategy: github-actions` and supply the required inputs: └──────────────────────┘ └──────────────────────┘ ``` -1. **Setup** — The orchestrator verifies the target workflow exists by querying the GitHub API. -2. **Dispatch** — A `workflow_dispatch` event is sent with build parameters (build GUID, image, +1. **Setup** - The orchestrator verifies the target workflow exists by querying the GitHub API. +2. **Dispatch** - A `workflow_dispatch` event is sent with build parameters (build GUID, image, base64-encoded commands, environment variables) as workflow inputs. -3. **Poll for run** — The orchestrator polls the target repository's workflow runs (filtering by +3. **Poll for run** - The orchestrator polls the target repository's workflow runs (filtering by creation time) until the dispatched run appears. This typically takes 10-30 seconds. -4. **Monitor** — Once the run is identified, the orchestrator polls its status every 15 seconds +4. **Monitor** - Once the run is identified, the orchestrator polls its status every 15 seconds until it reaches a terminal state (`completed`). -5. **Result** — On success, logs are fetched via `gh run view --log`. On failure, an error is raised +5. **Result** - On success, logs are fetched via `gh run view --log`. On failure, an error is raised with the run's conclusion. -6. **Cleanup** — No cloud resources are created, so cleanup is a no-op. +6. **Cleanup** - No cloud resources are created, so cleanup is a no-op. ## Full Workflow Example @@ -147,17 +147,17 @@ jobs: ## Limitations and Considerations -- **Run identification delay** — After dispatching, the orchestrator must wait for the run to appear +- **Run identification delay** - After dispatching, the orchestrator must wait for the run to appear in the GitHub API. This adds 10-30 seconds of overhead per build. -- **API rate limits** — Each status poll is an API call. Long builds will accumulate many calls. The +- **API rate limits** - Each status poll is an API call. Long builds will accumulate many calls. The 15-second poll interval keeps usage well within GitHub's rate limits for authenticated requests (5,000/hour). -- **No artifact transfer** — Build artifacts remain in the target repository's workflow run. You +- **No artifact transfer** - Build artifacts remain in the target repository's workflow run. You must configure artifact upload/download separately (e.g., via `actions/upload-artifact` in the target workflow). -- **PAT scope** — The token needs `actions:write` on the target repo. Use a fine-grained PAT scoped +- **PAT scope** - The token needs `actions:write` on the target repo. Use a fine-grained PAT scoped to only the build farm repository for least-privilege access. -- **Concurrent dispatch** — If multiple dispatches happen simultaneously, the orchestrator +- **Concurrent dispatch** - If multiple dispatches happen simultaneously, the orchestrator identifies its run by filtering on creation time. Rapid concurrent dispatches to the same workflow could theoretically cause misidentification. @@ -165,8 +165,8 @@ jobs: | Input | Required | Default | Description | | ----------------------- | -------- | ------- | ------------------------------------------------------------------- | -| `providerStrategy` | Yes | — | Must be `github-actions` | -| `githubActionsRepo` | Yes | — | Target repository in `owner/repo` format | -| `githubActionsWorkflow` | Yes | — | Workflow filename (e.g., `unity-build.yml`) or workflow ID | -| `githubActionsToken` | Yes | — | Personal Access Token with `actions:write` scope on the target repo | +| `providerStrategy` | Yes | - | Must be `github-actions` | +| `githubActionsRepo` | Yes | - | Target repository in `owner/repo` format | +| `githubActionsWorkflow` | Yes | - | Workflow filename (e.g., `unity-build.yml`) or workflow ID | +| `githubActionsToken` | Yes | - | Personal Access Token with `actions:write` scope on the target repo | | `githubActionsRef` | No | `main` | Branch or ref to run the dispatched workflow on | diff --git a/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx index 9d9768bc..033b7977 100644 --- a/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx +++ b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx @@ -10,19 +10,19 @@ while keeping their existing pipeline runners and configuration. ## Use Cases -- **Hybrid GitHub/GitLab setups** — Game source lives on GitHub, but CI runners and Unity licenses +- **Hybrid GitHub/GitLab setups** - Game source lives on GitHub, but CI runners and Unity licenses are managed through GitLab. -- **GitLab Runner infrastructure** — Leverage existing GitLab Runners (including GPU-equipped or +- **GitLab Runner infrastructure** - Leverage existing GitLab Runners (including GPU-equipped or macOS runners) for Unity builds. -- **Self-hosted GitLab** — Organizations running their own GitLab instance can route builds to their +- **Self-hosted GitLab** - Organizations running their own GitLab instance can route builds to their internal infrastructure. -- **GitLab CI/CD catalog** — Integrate orchestrator-triggered builds with existing GitLab CI/CD +- **GitLab CI/CD catalog** - Integrate orchestrator-triggered builds with existing GitLab CI/CD components and templates. ## Prerequisites 1. A **GitLab project** with CI/CD pipelines enabled. -2. A **pipeline trigger token** — created in the GitLab project under **Settings > CI/CD > Pipeline +2. A **pipeline trigger token** - created in the GitLab project under **Settings > CI/CD > Pipeline trigger tokens**. 3. A **`.gitlab-ci.yml`** in the target project that accepts orchestrator variables. @@ -93,17 +93,17 @@ gitlabApiUrl: https://gitlab.internal.company.com └──────────────────────┘ └──────────────────────┘ ``` -1. **Setup** — The orchestrator verifies access to the GitLab project using the provided token. -2. **Trigger** — A pipeline is triggered via the GitLab +1. **Setup** - The orchestrator verifies access to the GitLab project using the provided token. +2. **Trigger** - A pipeline is triggered via the GitLab [Pipeline Triggers API](https://docs.gitlab.com/ee/ci/triggers/) with build parameters passed as pipeline variables (`BUILD_GUID`, `BUILD_IMAGE`, `BUILD_COMMANDS`, etc.). -3. **Monitor** — The orchestrator polls the pipeline status every 15 seconds until it reaches a +3. **Monitor** - The orchestrator polls the pipeline status every 15 seconds until it reaches a terminal state (`success`, `failed`, `canceled`, or `skipped`). -4. **Logs** — On completion, the orchestrator fetches logs for each job in the pipeline individually +4. **Logs** - On completion, the orchestrator fetches logs for each job in the pipeline individually via the GitLab Jobs API, producing a combined log output. -5. **Result** — If the pipeline status is not `success`, an error is raised with the terminal +5. **Result** - If the pipeline status is not `success`, an error is raised with the terminal status. -6. **Cleanup** — No resources are created, so cleanup is a no-op. +6. **Cleanup** - No resources are created, so cleanup is a no-op. ## Full Workflow Example @@ -139,26 +139,26 @@ jobs: ## Limitations and Considerations -- **API rate limits** — GitLab.com enforces API rate limits (authenticated: 2,000 requests/minute +- **API rate limits** - GitLab.com enforces API rate limits (authenticated: 2,000 requests/minute for most plans). The 15-second poll interval keeps usage low, but very long builds with many parallel pipelines should account for this. -- **Token permissions** — The trigger token is scoped to the project. For fetching logs and pipeline +- **Token permissions** - The trigger token is scoped to the project. For fetching logs and pipeline status, the token must also have `read_api` access. A project access token with `api` scope covers both triggering and log retrieval. -- **No direct artifact transfer** — Artifacts stay in GitLab. Configure GitLab CI artifacts or +- **No direct artifact transfer** - Artifacts stay in GitLab. Configure GitLab CI artifacts or external storage (S3, GCS) in your `.gitlab-ci.yml` to export build outputs. -- **Variable size limits** — GitLab pipeline variables have a combined size limit. For large build +- **Variable size limits** - GitLab pipeline variables have a combined size limit. For large build command payloads, the base64-encoded commands variable may approach this limit. Consider storing build scripts in the GitLab repository instead of passing them inline. -- **Self-hosted TLS** — When using `gitlabApiUrl` with a self-hosted instance using self-signed +- **Self-hosted TLS** - When using `gitlabApiUrl` with a self-hosted instance using self-signed certificates, ensure the runner's certificate store trusts the GitLab instance's CA. ## Inputs Reference | Input | Required | Default | Description | | -------------------- | -------- | -------------------- | --------------------------------------------------------------------------------- | -| `providerStrategy` | Yes | — | Must be `gitlab-ci` | -| `gitlabProjectId` | Yes | — | GitLab project ID (numeric) or URL-encoded path (e.g., `my-group%2Funity-builds`) | -| `gitlabTriggerToken` | Yes | — | Pipeline trigger token (created in GitLab project settings) | +| `providerStrategy` | Yes | - | Must be `gitlab-ci` | +| `gitlabProjectId` | Yes | - | GitLab project ID (numeric) or URL-encoded path (e.g., `my-group%2Funity-builds`) | +| `gitlabTriggerToken` | Yes | - | Pipeline trigger token (created in GitLab project settings) | | `gitlabApiUrl` | No | `https://gitlab.com` | GitLab API base URL (for self-hosted instances) | | `gitlabRef` | No | `main` | Branch or ref to trigger the pipeline on | diff --git a/docs/03-github-orchestrator/05-providers/05-local.mdx b/docs/03-github-orchestrator/05-providers/05-local.mdx index 14287da2..28df24d0 100644 --- a/docs/03-github-orchestrator/05-providers/05-local.mdx +++ b/docs/03-github-orchestrator/05-providers/05-local.mdx @@ -1,6 +1,6 @@ # Local -Runs builds directly on the host machine with no container isolation. The simplest provider — useful +Runs builds directly on the host machine with no container isolation. The simplest provider - useful for development and testing. ## Requirements @@ -39,5 +39,5 @@ yarn run cli -m cli-build \ - Builds run directly on the host with no isolation. Ensure the machine has the required Unity version and dependencies installed. -- This is the fallback provider — if a custom provider fails to load, Orchestrator falls back to +- This is the fallback provider - if a custom provider fails to load, Orchestrator falls back to `local`. diff --git a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx index 93688b1b..7f65a5a5 100644 --- a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx +++ b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx @@ -164,13 +164,13 @@ export default class MyProvider { When `providerStrategy` is set to a value that doesn't match a built-in provider name, Orchestrator will: -1. **Detect the source type** — GitHub URL, NPM package, or local path. -2. **Fetch the provider** — For GitHub repos, the repository is cloned (shallow, depth 1) into a +1. **Detect the source type** - GitHub URL, NPM package, or local path. +2. **Fetch the provider** - For GitHub repos, the repository is cloned (shallow, depth 1) into a `.provider-cache/` directory. Cached repos are automatically updated on subsequent runs. -3. **Load the module** — The entry point is imported and the default export is used. -4. **Validate the interface** — All 7 required methods are checked. If any are missing, loading +3. **Load the module** - The entry point is imported and the default export is used. +4. **Validate the interface** - All 7 required methods are checked. If any are missing, loading fails. -5. **Fallback** — If loading fails for any reason, Orchestrator logs the error and falls back to the +5. **Fallback** - If loading fails for any reason, Orchestrator logs the error and falls back to the local provider so your pipeline doesn't break. ## Caching @@ -187,9 +187,9 @@ branch. On subsequent runs the loader checks for updates and pulls them automati ## Best Practices -- **Pin a branch or tag** — Use `user/repo@v1.0` or a specific branch to avoid unexpected changes. -- **Test locally first** — Use a local path during development before publishing. -- **Handle errors gracefully** — Your provider methods should throw clear errors so Orchestrator can +- **Pin a branch or tag** - Use `user/repo@v1.0` or a specific branch to avoid unexpected changes. +- **Test locally first** - Use a local path during development before publishing. +- **Handle errors gracefully** - Your provider methods should throw clear errors so Orchestrator can log them and fall back if needed. -- **Keep it lightweight** — The provider module is loaded at runtime. Minimize dependencies to keep +- **Keep it lightweight** - The provider module is loaded at runtime. Minimize dependencies to keep startup fast. diff --git a/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx b/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx index a2852379..d70271d3 100644 --- a/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx +++ b/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx @@ -8,27 +8,27 @@ The **Remote PowerShell** provider executes Unity builds on remote Windows machi Remoting. Unlike CI dispatch providers that trigger pipelines on another CI system, this provider connects directly to target machines and runs build commands over a remote session. -**Category:** Infrastructure Automation — executes directly on target machines rather than +**Category:** Infrastructure Automation - executes directly on target machines rather than dispatching to a CI platform. ## Use Cases -- **Dedicated build machines** — On-premises Windows workstations or servers with Unity installed +- **Dedicated build machines** - On-premises Windows workstations or servers with Unity installed that are not part of any CI system. -- **Windows build farms** — Multiple Windows machines available for parallel builds, managed without +- **Windows build farms** - Multiple Windows machines available for parallel builds, managed without a formal CI/CD platform. -- **Air-gapped environments** — Build machines on internal networks not reachable by cloud CI +- **Air-gapped environments** - Build machines on internal networks not reachable by cloud CI services. -- **Quick prototyping** — Run builds on a colleague's powerful workstation without setting up a full +- **Quick prototyping** - Run builds on a colleague's powerful workstation without setting up a full CI pipeline. ## Prerequisites 1. **PowerShell 5.1+** on both the orchestrator runner and target machine(s). 2. **PowerShell Remoting enabled** on the target machine via one of: - - **WinRM (WSMan)** — Windows default. Enable with `Enable-PSRemoting -Force` on the target. - - **SSH** — Cross-platform transport. Requires OpenSSH server on the target. -3. **Network connectivity** — The orchestrator runner must reach the target machine on port 5985 + - **WinRM (WSMan)** - Windows default. Enable with `Enable-PSRemoting -Force` on the target. + - **SSH** - Cross-platform transport. Requires OpenSSH server on the target. +3. **Network connectivity** - The orchestrator runner must reach the target machine on port 5985 (WinRM HTTP), 5986 (WinRM HTTPS), or 22 (SSH). 4. **Unity installed** on the target machine with the required build support modules. @@ -83,46 +83,42 @@ explicit credentials. ## How It Works -``` - Orchestrator (runner) Target Machine - ┌──────────────────────┐ ┌──────────────────────┐ - │ │ Test-WSMan │ │ - │ 1. Test connection │────────────────►│ │ - │ to remote host │ │ │ - │ │ Invoke-Command │ │ - │ 2. Send build │────────────────►│ 3. Set environment │ - │ commands via │ │ variables │ - │ remote session │ │ │ - │ │ │ 4. Execute Unity │ - │ │ output stream │ build commands │ - │ 5. Receive output │◄────────────────│ │ - │ and report │ │ 6. Complete │ - └──────────────────────┘ └──────────────────────┘ +```mermaid +sequenceDiagram + participant O as Orchestrator (runner) + participant T as Target Machine + + O->>T: 1. Test connection (Test-WSMan) + O->>T: 2. Send build commands (Invoke-Command) + T->>T: 3. Set environment variables + T->>T: 4. Execute Unity build commands + T->>O: 5. Stream output back + T->>T: 6. Complete ``` -1. **Setup** — The orchestrator tests connectivity to the remote host using `Test-WSMan`. -2. **Execution** — Build commands are wrapped in a PowerShell script block that sets environment +1. **Setup** - The orchestrator tests connectivity to the remote host using `Test-WSMan`. +2. **Execution** - Build commands are wrapped in a PowerShell script block that sets environment variables, changes to the working directory, and runs the build. The entire block is sent via `Invoke-Command`. -3. **Transport** — For WinRM, credentials are constructed as a `PSCredential` object from the +3. **Transport** - For WinRM, credentials are constructed as a `PSCredential` object from the `remotePowershellCredential` input. For SSH, `Invoke-Command -HostName` is used instead. -4. **Output** — Command output streams back to the orchestrator in real time through the remote +4. **Output** - Command output streams back to the orchestrator in real time through the remote session. -5. **Cleanup** — Remote PowerShell sessions are stateless per invocation, so no cleanup is needed. +5. **Cleanup** - Remote PowerShell sessions are stateless per invocation, so no cleanup is needed. ## Security Considerations -- **Credential handling** — The `remotePowershellCredential` input expects a `username:password` +- **Credential handling** - The `remotePowershellCredential` input expects a `username:password` format. Always store this as a GitHub secret, never in plain text. The provider constructs a `PSCredential` object at runtime and does not persist credentials. -- **WinRM HTTPS** — For production use, configure WinRM over HTTPS (port 5986) with a valid TLS +- **WinRM HTTPS** - For production use, configure WinRM over HTTPS (port 5986) with a valid TLS certificate to encrypt traffic. The default HTTP transport (port 5985) sends credentials in clear text over the network. -- **SSH key authentication** — Prefer SSH transport with key-based authentication over WinRM with +- **SSH key authentication** - Prefer SSH transport with key-based authentication over WinRM with password credentials when possible. SSH keys avoid transmitting passwords entirely. -- **Network segmentation** — Restrict WinRM/SSH access to the build machines from only the +- **Network segmentation** - Restrict WinRM/SSH access to the build machines from only the orchestrator runners' IP range. -- **Least privilege** — The remote user account should have only the permissions needed to run Unity +- **Least privilege** - The remote user account should have only the permissions needed to run Unity builds (read/write to the project directory, execute Unity). ## Full Workflow Example @@ -154,23 +150,23 @@ jobs: ## Limitations and Considerations -- **Windows targets only** — PowerShell Remoting via WinRM is a Windows technology. For Linux/macOS +- **Windows targets only** - PowerShell Remoting via WinRM is a Windows technology. For Linux/macOS build machines, use SSH transport or consider the Ansible provider instead. -- **No container isolation** — Builds run directly on the target machine's environment. Conflicting +- **No container isolation** - Builds run directly on the target machine's environment. Conflicting Unity versions or project dependencies between concurrent builds can cause issues. -- **No built-in queuing** — The provider does not queue builds. If multiple orchestrator runs +- **No built-in queuing** - The provider does not queue builds. If multiple orchestrator runs dispatch to the same machine simultaneously, they will execute concurrently (or fail if resources conflict). -- **Garbage collection** — Not supported. Build artifacts and temporary files on the remote machine +- **Garbage collection** - Not supported. Build artifacts and temporary files on the remote machine must be managed separately. -- **Firewall configuration** — Ensure the required ports (5985/5986 for WinRM, 22 for SSH) are open +- **Firewall configuration** - Ensure the required ports (5985/5986 for WinRM, 22 for SSH) are open between the orchestrator runner and the target machine. ## Inputs Reference | Input | Required | Default | Description | | ---------------------------- | -------- | ------- | -------------------------------------------------------------- | -| `providerStrategy` | Yes | — | Must be `remote-powershell` | -| `remotePowershellHost` | Yes | — | Hostname or IP address of the target machine | -| `remotePowershellCredential` | No | — | Credentials in `username:password` format (required for WinRM) | +| `providerStrategy` | Yes | - | Must be `remote-powershell` | +| `remotePowershellHost` | Yes | - | Hostname or IP address of the target machine | +| `remotePowershellCredential` | No | - | Credentials in `username:password` format (required for WinRM) | | `remotePowershellTransport` | No | `wsman` | Transport protocol: `wsman` (WinRM) or `ssh` | diff --git a/docs/03-github-orchestrator/05-providers/07-ansible.mdx b/docs/03-github-orchestrator/05-providers/07-ansible.mdx index 86e92776..fd86007d 100644 --- a/docs/03-github-orchestrator/05-providers/07-ansible.mdx +++ b/docs/03-github-orchestrator/05-providers/07-ansible.mdx @@ -8,18 +8,18 @@ The **Ansible** provider orchestrates Unity builds by running Ansible playbooks infrastructure. This enables teams with existing Ansible-based infrastructure management to integrate Unity builds into their configuration-as-code workflows. -**Category:** Infrastructure Automation — runs playbooks against managed inventory rather than +**Category:** Infrastructure Automation - runs playbooks against managed inventory rather than dispatching to a CI platform. ## Use Cases -- **Large-scale build infrastructure** — Distribute builds across a fleet of machines managed by +- **Large-scale build infrastructure** - Distribute builds across a fleet of machines managed by Ansible, with automatic host selection and load distribution handled by your playbooks. -- **Configuration-as-code** — Define build machine setup, Unity installation, and build execution as +- **Configuration-as-code** - Define build machine setup, Unity installation, and build execution as versioned Ansible playbooks alongside your game source. -- **Heterogeneous environments** — Target different machine types (Windows, Linux, macOS) from a +- **Heterogeneous environments** - Target different machine types (Windows, Linux, macOS) from a single inventory with platform-specific playbooks. -- **Existing Ansible infrastructure** — Teams already using Ansible for server management can extend +- **Existing Ansible infrastructure** - Teams already using Ansible for server management can extend their playbooks to handle Unity builds without adopting a separate CI system. ## Prerequisites @@ -155,16 +155,16 @@ all: └──────────────────────┘ └──────────────────────┘ ``` -1. **Setup** — The orchestrator verifies that `ansible` is available on `PATH` and that the +1. **Setup** - The orchestrator verifies that `ansible` is available on `PATH` and that the inventory file exists. -2. **Variable assembly** — Build parameters are assembled into a JSON extra-vars payload. User- +2. **Variable assembly** - Build parameters are assembled into a JSON extra-vars payload. User- provided `ansibleExtraVars` are merged in. Orchestrator secrets are passed as environment variables to the `ansible-playbook` process. -3. **Execution** — The orchestrator runs `ansible-playbook` with the inventory, playbook, extra +3. **Execution** - The orchestrator runs `ansible-playbook` with the inventory, playbook, extra vars, and optional vault password file. Output streams to the orchestrator in real time. -4. **Result** — A zero exit code means success. Any non-zero exit code raises an error with the +4. **Result** - A zero exit code means success. Any non-zero exit code raises an error with the playbook output. -5. **Cleanup** — No orchestrator-side resources to clean up. Playbook cleanup tasks should handle +5. **Cleanup** - No orchestrator-side resources to clean up. Playbook cleanup tasks should handle remote machine cleanup. ## Ansible Vault Integration @@ -244,25 +244,25 @@ jobs: ## Limitations and Considerations -- **Playbook required** — The Ansible provider does not ship with a default playbook. You must +- **Playbook required** - The Ansible provider does not ship with a default playbook. You must provide a playbook that handles repository checkout, Unity build execution, and artifact collection for your specific infrastructure. -- **Ansible installation** — Ansible must be installed on the runner. GitHub-hosted runners do not +- **Ansible installation** - Ansible must be installed on the runner. GitHub-hosted runners do not include Ansible by default; add a `pip install ansible` step or use a custom runner image. -- **No garbage collection** — The provider does not manage remote machine state. Build cleanup +- **No garbage collection** - The provider does not manage remote machine state. Build cleanup (temporary files, old builds) should be handled within playbook tasks. -- **Sequential execution** — The orchestrator runs a single `ansible-playbook` command and waits for +- **Sequential execution** - The orchestrator runs a single `ansible-playbook` command and waits for it to complete. Parallelism across hosts is managed by Ansible's built-in `forks` setting, not by the orchestrator. -- **Extra-vars JSON parsing** — The `ansibleExtraVars` input is parsed as JSON. If parsing fails, +- **Extra-vars JSON parsing** - The `ansibleExtraVars` input is parsed as JSON. If parsing fails, the raw string is passed through, which may cause unexpected behavior. Always provide valid JSON. ## Inputs Reference | Input | Required | Default | Description | | ---------------------- | -------- | ------- | ---------------------------------------------------------- | -| `providerStrategy` | Yes | — | Must be `ansible` | -| `ansibleInventory` | Yes | — | Path to Ansible inventory file or dynamic inventory script | -| `ansiblePlaybook` | Yes | — | Path to Ansible playbook for Unity builds | -| `ansibleExtraVars` | No | — | Additional Ansible variables as a JSON string | -| `ansibleVaultPassword` | No | — | Path to Ansible Vault password file | +| `providerStrategy` | Yes | - | Must be `ansible` | +| `ansibleInventory` | Yes | - | Path to Ansible inventory file or dynamic inventory script | +| `ansiblePlaybook` | Yes | - | Path to Ansible playbook for Unity builds | +| `ansibleExtraVars` | No | - | Additional Ansible variables as a JSON string | +| `ansibleVaultPassword` | No | - | Path to Ansible Vault password file | diff --git a/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx b/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx index a6d5d944..88f69079 100644 --- a/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx +++ b/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx @@ -1,7 +1,7 @@ # GitLab Integration You can use GitLab with Orchestrator via the Command Line mode. Orchestrator is not limited to -GitHub Actions — any CI system that can run shell commands can trigger orchestrator builds. +GitHub Actions - any CI system that can run shell commands can trigger orchestrator builds. ## Setup diff --git a/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx index 497ac64c..58f12b0d 100644 --- a/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx +++ b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx @@ -1,6 +1,6 @@ # GCP Cloud Run (Experimental) -Run Unity builds as [Cloud Run Jobs](https://cloud.google.com/run/docs/create-jobs) — one-off +Run Unity builds as [Cloud Run Jobs](https://cloud.google.com/run/docs/create-jobs) - one-off serverless container executions with configurable storage backends. :::caution Experimental This provider is experimental. APIs and behavior may change between @@ -41,18 +41,18 @@ trade-offs for performance, persistence, and complexity. ### When to use each type -- **gcs-fuse** (default) — Good general-purpose option. Handles very large files well and persists +- **gcs-fuse** (default) - Good general-purpose option. Handles very large files well and persists across builds. Has some latency on small file I/O and eventual consistency edge cases. -- **gcs-copy** — Simpler than FUSE (no driver). Copies everything before the build starts and +- **gcs-copy** - Simpler than FUSE (no driver). Copies everything before the build starts and uploads after it finishes. Best when you only need artifact upload/download, not live filesystem access during the build. -- **nfs** — True POSIX semantics with good random I/O performance. The best choice for caching the +- **nfs** - True POSIX semantics with good random I/O performance. The best choice for caching the Unity Library folder (thousands of small files). Requires a [Filestore](https://cloud.google.com/filestore) instance and a VPC connector. -- **in-memory** — Fastest option (RAM-backed). Data is lost when the job ends. Capped at 32 GiB. Use +- **in-memory** - Fastest option (RAM-backed). Data is lost when the job ends. Capped at 32 GiB. Use for temporary build artifacts that don't need to persist. ## Inputs @@ -62,17 +62,17 @@ trade-offs for performance, persistence, and complexity. | `gcpProject` | `$GOOGLE_CLOUD_PROJECT` | GCP project ID | | `gcpRegion` | `us-central1` | Cloud Run region | | `gcpStorageType` | `gcs-fuse` | Storage backend (see above) | -| `gcpBucket` | — | GCS bucket name (for `gcs-fuse`, `gcs-copy`) | -| `gcpFilestoreIp` | — | Filestore IP address (for `nfs`) | +| `gcpBucket` | - | GCS bucket name (for `gcs-fuse`, `gcs-copy`) | +| `gcpFilestoreIp` | - | Filestore IP address (for `nfs`) | | `gcpFilestoreShare` | `/share1` | Filestore share name (for `nfs`) | | `gcpMachineType` | `e2-standard-4` | Machine type | | `gcpDiskSizeGb` | `100` | In-memory volume size (for `in-memory`, max 32) | -| `gcpServiceAccount` | — | Service account email | -| `gcpVpcConnector` | — | VPC connector (required for `nfs`) | +| `gcpServiceAccount` | - | Service account email | +| `gcpVpcConnector` | - | VPC connector (required for `nfs`) | ## Examples -### GCS FUSE — mount bucket as filesystem +### GCS FUSE - mount bucket as filesystem ```yaml - uses: game-ci/unity-builder@v4 @@ -83,7 +83,7 @@ trade-offs for performance, persistence, and complexity. targetPlatform: StandaloneLinux64 ``` -### NFS — Filestore for fast Library caching +### NFS - Filestore for fast Library caching ```yaml - uses: game-ci/unity-builder@v4 @@ -97,7 +97,7 @@ trade-offs for performance, persistence, and complexity. targetPlatform: StandaloneLinux64 ``` -### Copy — simple artifact upload/download +### Copy - simple artifact upload/download ```yaml - uses: game-ci/unity-builder@v4 @@ -111,6 +111,6 @@ trade-offs for performance, persistence, and complexity. ## Related -- [Azure ACI](azure-aci) — Azure Container Instances provider -- [Custom Providers](custom-providers) — TypeScript provider plugins -- [CLI Provider Protocol](cli-provider-protocol) — Write providers in any language +- [Azure ACI](azure-aci) - Azure Container Instances provider +- [Custom Providers](custom-providers) - TypeScript provider plugins +- [CLI Provider Protocol](cli-provider-protocol) - Write providers in any language diff --git a/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx index 715a9b79..0f4b6303 100644 --- a/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx +++ b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx @@ -1,7 +1,7 @@ # Azure ACI (Experimental) Run Unity builds as -[Azure Container Instances](https://learn.microsoft.com/en-us/azure/container-instances/) — +[Azure Container Instances](https://learn.microsoft.com/en-us/azure/container-instances/) - serverless containers with configurable storage backends. :::caution Experimental This provider is experimental. APIs and behavior may change between @@ -41,18 +41,18 @@ Set `azureStorageType` to control how the build accesses large files. ### When to use each type -- **azure-files** (default) — Simplest persistent option. Works out of the box — auto-creates the +- **azure-files** (default) - Simplest persistent option. Works out of the box - auto-creates the storage account and file share if they don't exist. SMB has some overhead from opportunistic locking but is reliable for most use cases. -- **blob-copy** — Avoids mount overhead entirely. Copies everything before the build starts and +- **blob-copy** - Avoids mount overhead entirely. Copies everything before the build starts and uploads after it finishes. Good when you only need artifact upload/download. -- **azure-files-nfs** — Eliminates SMB lock overhead for better random I/O performance with Unity +- **azure-files-nfs** - Eliminates SMB lock overhead for better random I/O performance with Unity Library files (thousands of small files). Requires **Premium FileStorage** (auto-created) and **VNet integration** via `azureSubnetId`. -- **in-memory** — Fastest option (RAM-backed). Data is lost when the container stops. Size is +- **in-memory** - Fastest option (RAM-backed). Data is lost when the container stops. Size is limited by the container's memory allocation. Use for temporary build artifacts. ## Inputs @@ -69,11 +69,11 @@ Set `azureStorageType` to control how the build accesses large files. | `azureCpu` | `4` | CPU cores (1–16) | | `azureMemoryGb` | `16` | Memory in GB (1–16) | | `azureDiskSizeGb` | `100` | File share quota in GB | -| `azureSubnetId` | — | Subnet ID for VNet (required for `azure-files-nfs`) | +| `azureSubnetId` | - | Subnet ID for VNet (required for `azure-files-nfs`) | ## Examples -### Azure Files — SMB mount (default) +### Azure Files - SMB mount (default) ```yaml - uses: game-ci/unity-builder@v4 @@ -84,7 +84,7 @@ Set `azureStorageType` to control how the build accesses large files. targetPlatform: StandaloneLinux64 ``` -### NFS — better POSIX performance +### NFS - better POSIX performance ```yaml - uses: game-ci/unity-builder@v4 @@ -97,7 +97,7 @@ Set `azureStorageType` to control how the build accesses large files. targetPlatform: StandaloneLinux64 ``` -### Blob copy — simple artifact upload/download +### Blob copy - simple artifact upload/download ```yaml - uses: game-ci/unity-builder@v4 @@ -112,6 +112,6 @@ Set `azureStorageType` to control how the build accesses large files. ## Related -- [GCP Cloud Run](gcp-cloud-run) — Google Cloud Run Jobs provider -- [Custom Providers](custom-providers) — TypeScript provider plugins -- [CLI Provider Protocol](cli-provider-protocol) — Write providers in any language +- [GCP Cloud Run](gcp-cloud-run) - Google Cloud Run Jobs provider +- [Custom Providers](custom-providers) - TypeScript provider plugins +- [CLI Provider Protocol](cli-provider-protocol) - Write providers in any language diff --git a/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx b/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx index 9f182188..8f3b2653 100644 --- a/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx +++ b/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx @@ -1,6 +1,6 @@ # CLI Provider Protocol -Write orchestrator providers in **any language** — Go, Python, Rust, shell, or anything that can +Write orchestrator providers in **any language** - Go, Python, Rust, shell, or anything that can read stdin and write stdout. The CLI provider protocol uses JSON messages over stdin/stdout with the subcommand as the first argument. @@ -189,6 +189,6 @@ BuildParameters object and orchestrator internals. ## Related -- [Custom Providers](custom-providers) — TypeScript provider plugin system -- [Build Services](/docs/github-orchestrator/advanced-topics/build-services) — Submodule profiles, +- [Custom Providers](custom-providers) - TypeScript provider plugin system +- [Build Services](/docs/github-orchestrator/advanced-topics/build-services) - Submodule profiles, caching, LFS agents, hooks diff --git a/docs/03-github-orchestrator/06-secrets.mdx b/docs/03-github-orchestrator/06-secrets.mdx index 362bb8a0..a1bda9c6 100644 --- a/docs/03-github-orchestrator/06-secrets.mdx +++ b/docs/03-github-orchestrator/06-secrets.mdx @@ -6,7 +6,7 @@ transferred to workload containers as environment variables via the provider's n ## Secret Sources Set `secretSource` to use a premade integration or custom command. This is the recommended approach -— it replaces the older `inputPullCommand` mechanism with a cleaner API. + - it replaces the older `inputPullCommand` mechanism with a cleaner API. ### Premade Sources @@ -175,8 +175,8 @@ env: The `parseOutput` field controls how the command output is interpreted: -- `raw` (default) — Use the output as-is -- `json-field` — Parse the output as JSON and extract the field specified by `jsonField` +- `raw` (default) - Use the output as-is +- `json-field` - Parse the output as JSON and extract the field specified by `jsonField` ## Legacy: inputPullCommand @@ -191,8 +191,8 @@ env: The legacy mechanism supports two premade shortcuts: -- `aws-secret-manager` — Expands to `aws secretsmanager get-secret-value --secret-id {0}` -- `gcp-secret-manager` — Expands to `gcloud secrets versions access 1 --secret="{0}"` +- `aws-secret-manager` - Expands to `aws secretsmanager get-secret-value --secret-id {0}` +- `gcp-secret-manager` - Expands to `gcloud secrets versions access 1 --secret="{0}"` New projects should use `secretSource` instead, which provides more premade sources, better output parsing, and YAML file support. diff --git a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx index cc458ebb..97fb71e2 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx @@ -1,7 +1,7 @@ # Caching Orchestrator supports two caching strategies. You can mix both by setting -[`maxRetainedWorkspaces`](../api-reference#caching) — once the limit is reached, additional jobs +[`maxRetainedWorkspaces`](../api-reference#caching) - once the limit is reached, additional jobs fall back to standard caching. ``` @@ -32,7 +32,7 @@ compiled output folder is archived and stored using the same cache key (branch n the next build with the same cache key, the previous build output is available at `/data/cache/{cacheKey}/build/`. -This happens automatically — no configuration required. The cache key controls which builds share +This happens automatically - no configuration required. The cache key controls which builds share output: ```yaml @@ -74,4 +74,4 @@ When using retained workspaces, Orchestrator uses distributed locking (via S3 or only one build uses a workspace at a time. This enables safe concurrent builds that share and reuse workspaces without conflicts. -Locking is managed automatically — no configuration required beyond setting `maxRetainedWorkspaces`. +Locking is managed automatically - no configuration required beyond setting `maxRetainedWorkspaces`. diff --git a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx index f4076e34..da5d8bdf 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx @@ -12,7 +12,7 @@ Set `maxRetainedWorkspaces` to control how many workspaces are kept: | `0` | Unlimited retained workspaces (default). | | `> 0` | Keep at most N workspaces. Additional jobs fall back to standard caching. | -Each retained workspace is locked during use — only one build can use a workspace at a time. +Each retained workspace is locked during use - only one build can use a workspace at a time. Orchestrator handles locking automatically via S3 or rclone. See [Caching](caching) for storage provider details. diff --git a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx index 4a66b125..ad2e4bca 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx @@ -1,7 +1,7 @@ # Load Balancing Orchestrator can intelligently route builds across providers. Built-in load balancing checks runner -availability and routes to the best provider automatically — no custom scripting needed. For +availability and routes to the best provider automatically - no custom scripting needed. For advanced scenarios, standard GitHub Actions scripting gives you full control. ``` @@ -23,11 +23,11 @@ advanced scenarios, standard GitHub Actions scripting gives you full control. Set `fallbackProviderStrategy` to an alternate provider and the action handles routing automatically. Three mechanisms work together: -- **Runner availability check** — Queries the GitHub Runners API. If your self-hosted runners are +- **Runner availability check** - Queries the GitHub Runners API. If your self-hosted runners are busy or offline, routes to the alternate provider. -- **Retry on alternate provider** — If the primary provider fails mid-build (transient cloud error, +- **Retry on alternate provider** - If the primary provider fails mid-build (transient cloud error, quota limit), retries the entire build on the alternate provider. -- **Provider init timeout** — If the primary provider is slow to spin up, switches to the alternate +- **Provider init timeout** - If the primary provider is slow to spin up, switches to the alternate after a configurable timeout. ### Inputs @@ -68,7 +68,7 @@ Runner idle? Build runs locally. Runner busy? Routes to AWS automatically. ### Non-blocking with async mode For long Unity builds, combine load balancing with `asyncOrchestrator: true`. The build dispatches -to the best available provider and returns immediately — the GitHub runner is freed in seconds +to the best available provider and returns immediately - the GitHub runner is freed in seconds regardless of which provider handles the build. ```yaml @@ -123,9 +123,9 @@ swap to the alternate provider if startup takes too long. The built-in load balancing is designed to never block a build: -- **No token** — Skips the runner check, uses the primary provider. -- **API error** (permissions, rate limit) — Logs a warning, uses the primary provider. -- **No alternate set** — The runner check runs for informational logging but never swaps. +- **No token** - Skips the runner check, uses the primary provider. +- **API error** (permissions, rate limit) - Logs a warning, uses the primary provider. +- **No alternate set** - The runner check runs for informational logging but never swaps. ### Log the routing decision @@ -294,7 +294,7 @@ The pattern uses two workflows: a primary workflow that checks runner availabili locally or dispatches a cloud workflow, and a cloud workflow that handles the remote build independently. -**Primary workflow** — checks runners and either builds or dispatches: +**Primary workflow** - checks runners and either builds or dispatches: ```yaml name: Build (Primary) @@ -325,7 +325,7 @@ jobs: gh workflow run cloud-build.yml \ -f targetPlatform=StandaloneLinux64 \ -f ref=${{ github.sha }} - echo "Self-hosted runners busy — dispatched to cloud-build workflow" + echo "Self-hosted runners busy - dispatched to cloud-build workflow" # If runners are available, build locally - uses: actions/checkout@v4 @@ -341,7 +341,7 @@ jobs: gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -**Cloud build workflow** — runs on `workflow_dispatch`, handles the remote build: +**Cloud build workflow** - runs on `workflow_dispatch`, handles the remote build: ```yaml name: Build (Cloud) @@ -372,7 +372,7 @@ jobs: gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -This pattern lets each workflow have completely different configurations — different runners, +This pattern lets each workflow have completely different configurations - different runners, secrets, environment variables, and setup steps. The trade-off is that the dispatched workflow runs independently, so you need to check its status separately (via GitHub Actions UI or [`gh run list`](https://cli.github.com/manual/gh_run_list)). @@ -456,14 +456,14 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` -Unlike the workflow dispatch pattern, this keeps everything in a single workflow run — you can see +Unlike the workflow dispatch pattern, this keeps everything in a single workflow run - you can see the routing decision and build result together in the GitHub Actions UI. ## Async Mode and Load Balancing The [`asyncOrchestrator`](../api-reference#github-integration) parameter is essential for effective load balancing of long builds. When enabled, the action dispatches the build and returns immediately -— no runner minutes wasted waiting. + - no runner minutes wasted waiting. ``` Workflow Step (seconds) Provider A Provider B @@ -482,9 +482,9 @@ load balancing of long builds. When enabled, the action dispatches the build and └─────────────────────────────────────┘ ``` -- **Without async** — The build occupies the runner. Routing still works, but you're paying for +- **Without async** - The build occupies the runner. Routing still works, but you're paying for runner time while the build runs remotely. -- **With async** — The step finishes in seconds. The build continues on the selected provider and +- **With async** - The step finishes in seconds. The build continues on the selected provider and reports status via GitHub Checks. This is the recommended approach for long builds. ```yaml @@ -531,16 +531,16 @@ jobs: ## Tips -- **Start with built-in** — For most teams, `runnerCheckEnabled` + `fallbackProviderStrategy` + +- **Start with built-in** - For most teams, `runnerCheckEnabled` + `fallbackProviderStrategy` + `asyncOrchestrator` covers the common case. Add script-based routing only when you need custom logic. -- **Always use async for long builds** — Combining `asyncOrchestrator: true` with +- **Always use async for long builds** - Combining `asyncOrchestrator: true` with `githubCheck: true` keeps your routing step fast and gives you build status on the PR page. -- **Cache keys are provider-independent** — The [`cacheKey`](../api-reference#caching) parameter +- **Cache keys are provider-independent** - The [`cacheKey`](../api-reference#caching) parameter works the same across all providers, so builds routed to different providers can still share caches if they use the same storage backend. -- **Test routing logic** — Temporarily disable your self-hosted runner to verify that routing works +- **Test routing logic** - Temporarily disable your self-hosted runner to verify that routing works before you need it in production. -- **Custom providers** — The same routing patterns work with +- **Custom providers** - The same routing patterns work with [custom providers](../providers/custom-providers). Set `providerStrategy` to a GitHub repo or NPM package and Orchestrator loads it dynamically. diff --git a/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx b/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx index 900caa39..a2946e2c 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx @@ -33,11 +33,11 @@ storage backend. Your Unity project is cloned into the build container at `/data/{buildGuid}/repo/`. Orchestrator handles Git and LFS automatically: -1. **Shallow clone** — The repository is cloned with `--depth` controlled by the +1. **Shallow clone** - The repository is cloned with `--depth` controlled by the [`cloneDepth`](../api-reference#git-synchronization) parameter (default: 50). -2. **LFS pull** — Git LFS is installed and configured inside the container. LFS files are pulled +2. **LFS pull** - Git LFS is installed and configured inside the container. LFS files are pulled after the clone completes. -3. **LFS hashing** — Orchestrator generates `.lfs-assets-guid` and `.lfs-assets-guid-sum` files to +3. **LFS hashing** - Orchestrator generates `.lfs-assets-guid` and `.lfs-assets-guid-sum` files to track LFS content for cache invalidation. For retained workspaces, the project folder persists between builds at @@ -107,7 +107,7 @@ Orchestrator supports two storage backends for caches, artifacts, and workspace S3 is the default storage backend. It works with AWS S3 and LocalStack (for local testing). -No extra configuration is needed when using the `aws` provider — the S3 bucket is created +No extra configuration is needed when using the `aws` provider - the S3 bucket is created automatically as part of the CloudFormation base stack. For other providers, ensure AWS credentials and region are set in the environment. @@ -209,7 +209,7 @@ and cache data. For the full list of storage-related parameters, see the API Reference: -- [Storage](../api-reference#storage) — `storageProvider`, `rcloneRemote` -- [Caching](../api-reference#caching) — `cacheKey`, `maxRetainedWorkspaces` -- [Build Options](../api-reference#build-options) — `useCompressionStrategy`, `useLargePackages` -- [AWS](../api-reference#aws) — `awsStackName`, `awsS3Endpoint` +- [Storage](../api-reference#storage) - `storageProvider`, `rcloneRemote` +- [Caching](../api-reference#caching) - `cacheKey`, `maxRetainedWorkspaces` +- [Build Options](../api-reference#build-options) - `useCompressionStrategy`, `useLargePackages` +- [AWS](../api-reference#aws) - `awsStackName`, `awsS3Endpoint` diff --git a/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx b/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx index fc838dc1..0c0e65cd 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx @@ -1,6 +1,6 @@ # Architecture -This page describes the internal architecture of Orchestrator — how the components fit together, how +This page describes the internal architecture of Orchestrator - how the components fit together, how a build flows through the system, and where to look in the source code. ``` @@ -55,26 +55,26 @@ A standard Orchestrator build follows these steps: ### Step-by-Step -1. **Initialize** — `Orchestrator.setup()` parses inputs from GitHub Action `with`, CLI flags, or +1. **Initialize** - `Orchestrator.setup()` parses inputs from GitHub Action `with`, CLI flags, or environment variables. It selects a provider, generates a unique build GUID, and optionally creates a GitHub Check. -2. **Setup Provider** — `Provider.setupWorkflow()` provisions cloud resources. For AWS this means +2. **Setup Provider** - `Provider.setupWorkflow()` provisions cloud resources. For AWS this means creating a CloudFormation base stack (ECS cluster, S3 bucket, Kinesis stream). For Kubernetes it creates a service account. Local providers skip this step. -3. **Acquire Workspace** — If `maxRetainedWorkspaces` is set, `SharedWorkspaceLocking` acquires a +3. **Acquire Workspace** - If `maxRetainedWorkspaces` is set, `SharedWorkspaceLocking` acquires a distributed lock on a workspace via S3 or rclone. If all workspaces are locked, the build falls back to standard caching. -4. **Build** — The workflow composition root selects a workflow (standard, async, or custom job). +4. **Build** - The workflow composition root selects a workflow (standard, async, or custom job). The standard workflow clones your repo, restores caches, runs the Unity build, and executes pre/post container hooks. -5. **Post-Build** — `remote-cli-post-build` archives the Unity Library folder and build output, +5. **Post-Build** - `remote-cli-post-build` archives the Unity Library folder and build output, pushes them to cloud storage, and runs any post-build hooks. -6. **Cleanup** — The workspace lock is released, cloud resources are torn down +6. **Cleanup** - The workspace lock is released, cloud resources are torn down (`Provider.cleanupWorkflow()`), and the GitHub Check is updated with the final result. ## Core Components @@ -83,10 +83,10 @@ A standard Orchestrator build follows these steps: The static `Orchestrator` class is the central coordinator. It holds: -- `Provider` — the selected provider implementation -- `buildParameters` — all resolved configuration -- `buildGuid` — unique identifier for this build -- `lockedWorkspace` — retained workspace name (if any) +- `Provider` - the selected provider implementation +- `buildParameters` - all resolved configuration +- `buildGuid` - unique identifier for this build +- `lockedWorkspace` - retained workspace name (if any) `Orchestrator.run()` is the main entry point that drives the full lifecycle. Provider selection happens in `setupSelectedBuildPlatform()`, which handles LocalStack detection, `AWS_FORCE_PROVIDER` @@ -180,10 +180,10 @@ Action returns immediately. Progress is reported via Orchestrator has two hook mechanisms: -**Command Hooks** — Shell commands injected before or after the setup and build steps. Defined via +**Command Hooks** - Shell commands injected before or after the setup and build steps. Defined via the `customCommandHooks` YAML parameter or as files in `.game-ci/command-hooks/`. -**Container Hooks** — Separate Docker containers that run before or after the build. Defined via +**Container Hooks** - Separate Docker containers that run before or after the build. Defined via `containerHookFiles` (built-in names like `aws-s3-upload-build`) or `preBuildSteps` / `postBuildSteps` YAML. Each hook specifies an image, commands, and optional secrets. @@ -215,19 +215,19 @@ The `OrchestratorOptions` class handles this resolution. Environment variables a The remote client runs **inside** the build container (not on the CI runner). It provides two CLI modes: -- **`remote-cli-pre-build`** — Called before the Unity build. Handles git clone, LFS pull, cache +- **`remote-cli-pre-build`** - Called before the Unity build. Handles git clone, LFS pull, cache restoration, retained workspace setup, large package optimization, and custom hook execution. -- **`remote-cli-post-build`** — Called after the Unity build. Pushes the Library and build caches to +- **`remote-cli-post-build`** - Called after the Unity build. Pushes the Library and build caches to cloud storage. ### GitHub Integration The `GitHub` class manages GitHub Checks and async workflow dispatch: -- **`createGitHubCheck()`** — Creates a check run on the commit via the GitHub API. -- **`updateGitHubCheck()`** — Updates check status. In async environments, updates are routed +- **`createGitHubCheck()`** - Creates a check run on the commit via the GitHub API. +- **`updateGitHubCheck()`** - Updates check status. In async environments, updates are routed through the `Async Checks API` workflow (since containers can't call the Checks API directly). -- **`runUpdateAsyncChecksWorkflow()`** — Triggers a GitHub Actions workflow that updates the check +- **`runUpdateAsyncChecksWorkflow()`** - Triggers a GitHub Actions workflow that updates the check run on behalf of the container. ### Caching and Storage @@ -235,8 +235,8 @@ The `GitHub` class manages GitHub Checks and async workflow dispatch: Caching is split between the remote client (push/pull logic) and the storage provider (S3 or rclone): -- **Standard caching** — Archives the `Library/` folder and LFS files as `.tar.lz4` archives. -- **Retained workspaces** — Keeps the entire project folder. Uses distributed locking via S3 or +- **Standard caching** - Archives the `Library/` folder and LFS files as `.tar.lz4` archives. +- **Retained workspaces** - Keeps the entire project folder. Uses distributed locking via S3 or rclone to prevent concurrent access. See [Storage](storage) for the full breakdown of file categories, compression, and storage backends. diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx index 6a521bc1..aa84140e 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx @@ -1,7 +1,7 @@ # Build Services Build services run during the build lifecycle to handle submodule initialization, caching, LFS -configuration, and git hooks. They work with any provider — local, AWS, Kubernetes, GCP Cloud Run, +configuration, and git hooks. They work with any provider - local, AWS, Kubernetes, GCP Cloud Run, Azure ACI, or custom CLI providers. ``` @@ -30,12 +30,12 @@ submodules: branch: main # initialize this submodule - name: OptionalModule branch: empty # skip this submodule (empty branch) - - name: Plugins* # glob pattern — matches PluginsCore, PluginsAudio, etc. + - name: Plugins* # glob pattern - matches PluginsCore, PluginsAudio, etc. branch: main ``` -- `branch: main` — initialize the submodule on its configured branch -- `branch: empty` — skip the submodule (checked out to an empty branch) +- `branch: main` - initialize the submodule on its configured branch +- `branch: empty` - skip the submodule (checked out to an empty branch) - Trailing `*` enables glob matching against submodule names ### Variant Overlays @@ -55,9 +55,9 @@ submodules: | Input | Default | Description | | ---------------------- | ------- | --------------------------------------- | -| `submoduleProfilePath` | — | Path to YAML submodule profile | -| `submoduleVariantPath` | — | Path to variant overlay (merged on top) | -| `submoduleToken` | — | Auth token for private submodule clones | +| `submoduleProfilePath` | - | Path to YAML submodule profile | +| `submoduleVariantPath` | - | Path to variant overlay (merged on top) | +| `submoduleToken` | - | Auth token for private submodule clones | ### How It Works @@ -84,7 +84,7 @@ submodules: ## Local Build Caching Cache the Unity Library folder and LFS objects between local builds without external cache actions. -Filesystem-based — works on self-hosted runners with persistent storage. +Filesystem-based - works on self-hosted runners with persistent storage. ### How It Works @@ -99,7 +99,7 @@ Filesystem-based — works on self-hosted runners with persistent storage. | Input | Default | Description | | ------------------- | ------- | -------------------------- | | `localCacheEnabled` | `false` | Enable filesystem caching | -| `localCacheRoot` | — | Cache directory override | +| `localCacheRoot` | - | Cache directory override | | `localCacheLibrary` | `true` | Cache Unity Library folder | | `localCacheLfs` | `true` | Cache LFS objects | @@ -139,9 +139,9 @@ The agent name is derived from the executable filename (e.g. `elastic-git-storag | Input | Default | Description | | ---------------------- | ------- | --------------------------------------------- | -| `lfsTransferAgent` | — | Path to custom LFS agent executable | -| `lfsTransferAgentArgs` | — | Arguments passed to the agent | -| `lfsStoragePaths` | — | Sets `LFS_STORAGE_PATHS` environment variable | +| `lfsTransferAgent` | - | Path to custom LFS agent executable | +| `lfsTransferAgentArgs` | - | Arguments passed to the agent | +| `lfsStoragePaths` | - | Sets `LFS_STORAGE_PATHS` environment variable | ### Example @@ -159,7 +159,7 @@ The agent name is derived from the executable filename (e.g. `elastic-git-storag ## Git Hooks -Detect and install lefthook or husky during builds. **Disabled by default** for build performance — +Detect and install lefthook or husky during builds. **Disabled by default** for build performance - enable when your build pipeline depends on hooks running. ### How It Works @@ -176,7 +176,7 @@ enable when your build pipeline depends on hooks running. | Input | Default | Description | | ------------------ | ------- | -------------------------------------- | | `gitHooksEnabled` | `false` | Install and run git hooks during build | -| `gitHooksSkipList` | — | Comma-separated hooks to skip | +| `gitHooksSkipList` | - | Comma-separated hooks to skip | ### Example @@ -192,6 +192,6 @@ enable when your build pipeline depends on hooks running. ## Related -- [CLI Provider Protocol](../providers/cli-provider-protocol) — Write providers in any language -- [Cloud Providers](/docs/github-orchestrator/providers/gcp-cloud-run) — GCP Cloud Run and Azure ACI -- [Caching](caching) — Orchestrator caching strategies +- [CLI Provider Protocol](../providers/cli-provider-protocol) - Write providers in any language +- [Cloud Providers](/docs/github-orchestrator/providers/gcp-cloud-run) - GCP Cloud Run and Azure ACI +- [Caching](caching) - Orchestrator caching strategies diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx index 6eafa14e..d8e45fd3 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx @@ -1,6 +1,6 @@ # Custom LFS Agents -Orchestrator supports custom Git LFS transfer agents — external executables that handle LFS upload +Orchestrator supports custom Git LFS transfer agents - external executables that handle LFS upload and download instead of the default HTTPS transport. ## elastic-git-storage (Built-in) diff --git a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx index cfcf017d..9f96aa13 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx @@ -10,7 +10,7 @@ multi-dimensional taxonomy filtering, and structured test result reporting. ## Overview Instead of running tests via a single `buildMethod`, the test workflow engine lets you define test -suites as YAML configurations — specifying exactly which tests run for each CI event, filtered by +suites as YAML configurations - specifying exactly which tests run for each CI event, filtered by taxonomy metadata, with sequential execution dependencies. ## Test Suite Definitions diff --git a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx index f237f4b9..24addb43 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx @@ -57,7 +57,7 @@ Connect to a coordinator via WebSocket or SignalR: ### File-Based Transport -Watch a shared directory for JSON job files — the simplest transport: +Watch a shared directory for JSON job files - the simplest transport: ```yaml - uses: game-ci/unity-builder@v4 @@ -100,7 +100,7 @@ editorMode: persistent Benefits: - No editor startup time (saves 30–120 seconds per build) -- Unity Library folder stays warm — only changed assets reimport +- Unity Library folder stays warm - only changed assets reimport - Domain reload only when scripts change ### Hybrid @@ -153,10 +153,10 @@ Job dispatch and results follow the same JSON protocol. Hot runners compose with other orchestrator features: -- **[Incremental Sync](incremental-sync-protocol)** — Receive workspace updates without full clone. +- **[Incremental Sync](incremental-sync-protocol)** - Receive workspace updates without full clone. Hot runners + incremental sync = fastest possible iteration. -- **[Artifact System](build-output-system)** — Return structured, typed results. -- **[Test Workflow Engine](test-workflow-engine)** — Execute test suites with taxonomy filtering. +- **[Artifact System](build-output-system)** - Return structured, typed results. +- **[Test Workflow Engine](test-workflow-engine)** - Execute test suites with taxonomy filtering. ## Inputs Reference diff --git a/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx index 4eeaf19b..9badc957 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx @@ -9,7 +9,7 @@ post-processing pipelines, and first-class GitHub integration. ## Overview -Production Unity workflows produce many output types beyond a single build artifact — test results, +Production Unity workflows produce many output types beyond a single build artifact - test results, screenshots, server builds, exported data, metrics, and logs. Each type needs different handling: storage, processing, reporting, and retention. The output system provides a structured way to declare, collect, process, and report on all of these. @@ -173,11 +173,11 @@ Output types automatically integrate with GitHub CI surfaces: | Output Type | GitHub Surface | | --------------- | ------------------------------------------------------ | -| Test results | Check annotations — inline failure markers on PR diffs | -| Images | PR comment — image grid with baseline diffs | -| Metrics | Check summary — trend charts and delta tables | -| Coverage | PR comment — coverage percentage and delta | -| Build artifacts | Check run — download links | +| Test results | Check annotations - inline failure markers on PR diffs | +| Images | PR comment - image grid with baseline diffs | +| Metrics | Check summary - trend charts and delta tables | +| Coverage | PR comment - coverage percentage and delta | +| Build artifacts | Check run - download links | ## Combining with Test Suites diff --git a/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx index 99ec34d4..d922a4ad 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx @@ -11,7 +11,7 @@ traditional caching. Changes come from git deltas, direct input, or generic stor Traditional caching archives the Library folder, pushes to storage, pulls on next build, and extracts. Even with cache hits, this takes minutes. The incremental sync protocol eliminates caching -entirely for warm environments — instead of "restore the world," it says "here's what changed." +entirely for warm environments - instead of "restore the world," it says "here's what changed." ## Sync Strategies @@ -51,7 +51,7 @@ Trigger jobs **without pushing to git**. Changes are passed as input: syncInputRef: storage://my-remote/inputs/changes.tar.lz4 ``` -For small changes, content can be inline. For large inputs, content is pulled from generic storage — +For small changes, content can be inline. For large inputs, content is pulled from generic storage - backed by rclone, so **any storage provider works**: S3, GCS, Azure Blob, local filesystem, WebDAV, SFTP, and dozens more. @@ -78,7 +78,7 @@ The protocol: 4. Executes the build/test 5. Optionally reverts the overlay after completion -Users don't need git push access to trigger builds — just write access to the storage backend. +Users don't need git push access to trigger builds - just write access to the storage backend. ### Why rclone? @@ -101,9 +101,9 @@ that works with any provider: | Provider | Sync Strategy | How It Works | | ----------------------- | -------------- | ------------------------------------------- | -| Hot runner (persistent) | `git-delta` | Fastest — warm editor, minimal changes | +| Hot runner (persistent) | `git-delta` | Fastest - warm editor, minimal changes | | Hot runner (persistent) | `direct-input` | No-push iteration | -| Retained workspace | `git-delta` | Fast — workspace persists, no editor warmth | +| Retained workspace | `git-delta` | Fast - workspace persists, no editor warmth | | Cold container | `storage-pull` | Pull overlay, apply to fresh clone | Hot runners + incremental sync = fastest possible iteration cycle. diff --git a/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx index d998bbe9..4d16eb12 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx @@ -4,22 +4,22 @@ sidebar_position: 15 # Massive Projects -Orchestrator includes specific support for Unity projects at extreme scale — repositories exceeding +Orchestrator includes specific support for Unity projects at extreme scale - repositories exceeding 100 GB, asset counts above 500,000 files, and Library folders that dwarf the source tree itself. ## Overview Standard CI assumptions break down at this scale: -- **Clone times** — A 100 GB repository with Git LFS takes 15–45 minutes to clone cold, consuming +- **Clone times** - A 100 GB repository with Git LFS takes 15–45 minutes to clone cold, consuming most of a build budget before Unity opens. -- **Library folder sizes** — Import caches for large projects routinely reach 30–80 GB. Tarring, +- **Library folder sizes** - Import caches for large projects routinely reach 30–80 GB. Tarring, uploading, downloading, and extracting this on every build is impractical. -- **LFS bandwidth** — Pulling all LFS objects for every build exhausts quotas and slows pipelines. +- **LFS bandwidth** - Pulling all LFS objects for every build exhausts quotas and slows pipelines. Most builds need only a fraction of the asset set. -- **Cache inflation** — GitHub Actions cache and similar systems impose size limits (typically 10 GB +- **Cache inflation** - GitHub Actions cache and similar systems impose size limits (typically 10 GB per entry) that Library folders quickly exceed. -- **CI timeouts** — Default job timeouts of 6 hours are insufficient for cold clones followed by +- **CI timeouts** - Default job timeouts of 6 hours are insufficient for cold clones followed by full imports on large projects. Orchestrator addresses each of these with a two-level workspace architecture, move-centric caching, @@ -29,11 +29,11 @@ selective LFS hydration, and submodule profile filtering. Orchestrator manages workspaces at two levels: -**Root workspace** — A lean, long-lived clone of the repository. It contains the full git history +**Root workspace** - A lean, long-lived clone of the repository. It contains the full git history and index, a minimal set of LFS objects (only those needed for compilation), and no Unity Library folder. The root workspace is cached across builds and updated incrementally. -**Child workspaces** — Per-build-target workspaces derived from the root. Each child is LFS-hydrated +**Child workspaces** - Per-build-target workspaces derived from the root. Each child is LFS-hydrated for its specific asset paths, contains the Library folder for its platform target, and is retained between builds of the same target. @@ -85,10 +85,10 @@ in milliseconds. The cache lifecycle for a Library folder: -1. Build starts — move Library from cache to workspace (instant) -2. Unity runs — Library is warm, only changed assets reimport -3. Build ends — move Library back to cache (instant) -4. Next build — Library is already warm at cache location +1. Build starts - move Library from cache to workspace (instant) +2. Unity runs - Library is warm, only changed assets reimport +3. Build ends - move Library back to cache (instant) +4. Next build - Library is already warm at cache location This eliminates the archive/upload/download/extract cycle entirely for builds running on retained storage. Remote cache fallback (S3, GCS, Azure Blob via rclone) is still available for cold runners @@ -163,7 +163,7 @@ submodules: branch: main ``` -Profile initialization is atomic — skipped submodules are never touched, so build time scales with +Profile initialization is atomic - skipped submodules are never touched, so build time scales with the active submodule set rather than the total repository size. ## Incremental Sync @@ -173,11 +173,11 @@ entirely. See the [Incremental Sync Protocol](incremental-sync-protocol) page fo The two strategies most relevant to massive projects: -**git-delta** — The runner tracks its last sync commit SHA. On job dispatch it receives the target +**git-delta** - The runner tracks its last sync commit SHA. On job dispatch it receives the target SHA, diffs the two, and checks out only the changed files. Assets that have not changed are not touched, and their Library import state remains valid. -**storage-pull** — For assets that live outside git (too large for LFS, or managed by a separate +**storage-pull** - For assets that live outside git (too large for LFS, or managed by a separate pipeline), the runner pulls only the changed files from a generic storage remote. This combines with git-delta so that code changes and asset changes are both handled incrementally. diff --git a/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx index 6b144502..40bb25a9 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx @@ -4,7 +4,7 @@ sidebar_position: 16 # Monorepo Support -Orchestrator provides first-class support for Unity monorepos — single repositories that contain +Orchestrator provides first-class support for Unity monorepos - single repositories that contain multiple products sharing engine code, submodules, and build configuration. ## Overview @@ -42,7 +42,7 @@ submodules: branch: main ``` -`primary_submodule` identifies the main game submodule — the orchestrator uses this as the root of +`primary_submodule` identifies the main game submodule - the orchestrator uses this as the root of the build context. Each entry under `submodules` names a submodule (or a glob pattern matching multiple submodules) and diff --git a/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx b/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx index 1539117e..818af019 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx @@ -6,7 +6,7 @@ sidebar_position: 17 Build reliability features harden CI builds against common failure modes: git corruption on persistent runners, Windows filesystem issues with cross-platform repositories, and build output -management. All features are opt-in via action inputs and fail gracefully — a reliability check that +management. All features are opt-in via action inputs and fail gracefully - a reliability check that encounters an error logs a warning rather than failing the build. ## Git Integrity Checking @@ -21,16 +21,16 @@ Git integrity checking catches corruption before it causes build failures. The integrity check runs three validations in sequence: -1. **`git fsck --no-dangling`** — Detects broken links, missing objects, and corrupt pack data in +1. **`git fsck --no-dangling`** - Detects broken links, missing objects, and corrupt pack data in the local repository. The `--no-dangling` flag suppresses harmless warnings about unreachable objects that are normal in CI environments. -2. **Stale lock files** — Scans the `.git/` directory recursively for any files ending in `.lock` +2. **Stale lock files** - Scans the `.git/` directory recursively for any files ending in `.lock` (`index.lock`, `shallow.lock`, `config.lock`, `HEAD.lock`, `refs/**/*.lock`). These are left behind by git processes that were killed mid-operation and prevent subsequent git commands from running. All lock files found are removed. -3. **Submodule backing stores** — For each submodule declared in `.gitmodules`, validates that the +3. **Submodule backing stores** - For each submodule declared in `.gitmodules`, validates that the `.git` file inside the submodule directory points to an existing backing store under `.git/modules/`. A broken backing store reference means the submodule's history is inaccessible, and any git operation inside it will fail. @@ -83,7 +83,7 @@ these names, checking them out on Windows causes problems. ### The Problem Unity is particularly sensitive to reserved filenames. When the asset importer encounters a file -named `aux.meta`, `nul.png`, or similar, it can enter an infinite reimport loop — detecting the +named `aux.meta`, `nul.png`, or similar, it can enter an infinite reimport loop - detecting the file, failing to process it, detecting it again. This manifests as: - Unity hanging during asset import with no progress @@ -134,7 +134,7 @@ managed with a count-based retention policy. 1. After a successful build, the build output directory is moved (or copied, if a cross-device move is not possible) to `{archivePath}/{platform}/build-{timestamp}`. -2. Archives are organized by platform — each target platform gets its own subdirectory. +2. Archives are organized by platform - each target platform gets its own subdirectory. 3. The retention policy keeps the N most recent builds per platform. Older builds are automatically removed. @@ -168,7 +168,7 @@ archives are removed. The reliability service configures a git environment variable automatically: -- `GIT_CONFIG_NOSYSTEM=1` — Bypasses the system-level git configuration file. This prevents +- `GIT_CONFIG_NOSYSTEM=1` - Bypasses the system-level git configuration file. This prevents corrupted or misconfigured system git configs on self-hosted runners from affecting builds. This is applied automatically and does not require any configuration. diff --git a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx index 2e7c81ce..05393870 100644 --- a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx +++ b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx @@ -5,7 +5,7 @@ sidebar_position: 1 # Getting Started with the CLI The `game-ci` CLI lets you run Unity builds, activate licenses, and manage caches directly from your -terminal — no GitHub Actions or CI platform required. +terminal - no GitHub Actions or CI platform required. ## Installation @@ -134,6 +134,6 @@ availability, and which license environment variables are set. ## Next Steps -- [Build Command Reference](build-command) — full list of build flags and options -- [Orchestrate Command](orchestrate-command) — run builds on cloud infrastructure -- [Other Commands](other-commands) — license activation, cache management, and more +- [Build Command Reference](build-command) - full list of build flags and options +- [Orchestrate Command](orchestrate-command) - run builds on cloud infrastructure +- [Other Commands](other-commands) - license activation, cache management, and more diff --git a/docs/03-github-orchestrator/08-cli/02-build-command.mdx b/docs/03-github-orchestrator/08-cli/02-build-command.mdx index 66321b99..d4a14f0c 100644 --- a/docs/03-github-orchestrator/08-cli/02-build-command.mdx +++ b/docs/03-github-orchestrator/08-cli/02-build-command.mdx @@ -153,6 +153,6 @@ game-ci build \ ## See Also -- [Getting Started](getting-started) — installation and first build -- [Orchestrate Command](orchestrate-command) — run builds on cloud infrastructure -- [API Reference](../api-reference) — full parameter reference for the GitHub Action +- [Getting Started](getting-started) - installation and first build +- [Orchestrate Command](orchestrate-command) - run builds on cloud infrastructure +- [API Reference](../api-reference) - full parameter reference for the GitHub Action diff --git a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx index 5f123c36..abc5227a 100644 --- a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx +++ b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx @@ -143,7 +143,7 @@ game-ci orchestrate \ ## See Also -- [Getting Started](getting-started) — installation and first build -- [Build Command](build-command) — local Docker builds -- [API Reference](../api-reference) — full parameter reference -- [Providers](../providers/overview) — provider-specific setup guides +- [Getting Started](getting-started) - installation and first build +- [Build Command](build-command) - local Docker builds +- [API Reference](../api-reference) - full parameter reference +- [Providers](../providers/overview) - provider-specific setup guides diff --git a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx index 35710a10..ffb91a3f 100644 --- a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx +++ b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx @@ -104,13 +104,13 @@ game-ci status Reports: -- **Project** — detected Unity project path and whether a project was found -- **Unity Version** — version detected from `ProjectSettings/ProjectVersion.txt` -- **Library Cache** — whether the Library folder is present and when it was last modified -- **Build Outputs** — any existing build output directories -- **Environment** — platform, Node.js version, and which license environment variables are set - (`UNITY_SERIAL`, `UNITY_LICENSE`, `UNITY_EMAIL`, `UNITY_PASSWORD` — shown as Set/Not set) -- **Docker** — whether Docker is available and its version +- **Project** - detected Unity project path and whether a project was found +- **Unity Version** - version detected from `ProjectSettings/ProjectVersion.txt` +- **Library Cache** - whether the Library folder is present and when it was last modified +- **Build Outputs** - any existing build output directories +- **Environment** - platform, Node.js version, and which license environment variables are set + (`UNITY_SERIAL`, `UNITY_LICENSE`, `UNITY_EMAIL`, `UNITY_PASSWORD` - shown as Set/Not set) +- **Docker** - whether Docker is available and its version ### Flags @@ -180,6 +180,6 @@ game-ci cache --help ## See Also -- [Getting Started](getting-started) — installation and first build -- [Build Command](build-command) — full build reference -- [Orchestrate Command](orchestrate-command) — cloud builds +- [Getting Started](getting-started) - installation and first build +- [Build Command](build-command) - full build reference +- [Orchestrate Command](orchestrate-command) - cloud builds From c05c4edea214cac01545e3597be254332827d1d7 Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 20:04:00 +0000 Subject: [PATCH 49/60] style: run prettier on documentation files Fix formatting issues after em-dash removal. Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 22 ++++---- .../03-examples/02-github-actions.mdx | 10 ++-- .../03-examples/03-aws.mdx | 8 +-- .../03-examples/04-kubernetes.mdx | 12 ++--- docs/03-github-orchestrator/04-jobs.mdx | 22 ++++---- .../05-api-reference.mdx | 46 ++++++++-------- .../05-providers/02-aws.mdx | 2 +- .../05-providers/03-kubernetes.mdx | 4 +- .../04-github-actions-dispatch.mdx | 38 +++++++------- .../05-providers/05-gitlab-ci-dispatch.mdx | 38 +++++++------- .../05-providers/05-local.mdx | 4 +- .../05-providers/06-custom-providers.mdx | 18 +++---- .../05-providers/06-remote-powershell.mdx | 52 +++++++++---------- .../05-providers/07-ansible.mdx | 40 +++++++------- .../05-providers/09-gitlab-integration.mdx | 2 +- .../05-providers/10-gcp-cloud-run.mdx | 30 +++++------ .../05-providers/11-azure-aci.mdx | 24 ++++----- .../05-providers/12-cli-provider-protocol.mdx | 6 +-- docs/03-github-orchestrator/06-secrets.mdx | 11 ++-- .../07-advanced-topics/01-caching.mdx | 6 +-- .../02-retained-workspace.mdx | 2 +- .../07-advanced-topics/07-load-balancing.mdx | 41 ++++++++------- .../07-advanced-topics/08-storage.mdx | 16 +++--- .../07-advanced-topics/09-architecture.mdx | 40 +++++++------- .../07-advanced-topics/10-build-services.mdx | 32 ++++++------ .../07-advanced-topics/10-lfs-agents.mdx | 2 +- .../11-test-workflow-engine.mdx | 2 +- .../12-hot-runner-protocol.mdx | 10 ++-- .../13-build-output-system.mdx | 12 ++--- .../14-incremental-sync-protocol.mdx | 10 ++-- .../15-massive-projects.mdx | 30 +++++------ .../16-monorepo-support.mdx | 4 +- .../17-build-reliability.mdx | 14 ++--- .../08-cli/01-getting-started.mdx | 8 +-- .../08-cli/02-build-command.mdx | 6 +-- .../08-cli/03-orchestrate-command.mdx | 8 +-- .../08-cli/04-other-commands.mdx | 20 +++---- 37 files changed, 327 insertions(+), 325 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 0f1855ea..cd60ca17 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -32,15 +32,15 @@ automatically detects and loads it via the plugin interface. ::: ## ✅ Why Orchestrator? -1. **Flexible and elastic** - balance speed and cost, configure CPU, memory, and disk per build -2. **Scale from zero** - no idle servers, pay only while builds run -3. **Easy setup** - minimal configuration to [get started](getting-started) -4. **Extensible** - run [custom hooks](advanced-topics/hooks/container-hooks), or bring your own +1. **Flexible and elastic** - balance speed and cost, configure CPU, memory, and disk per build +2. **Scale from zero** - no idle servers, pay only while builds run +3. **Easy setup** - minimal configuration to [get started](getting-started) +4. **Extensible** - run [custom hooks](advanced-topics/hooks/container-hooks), or bring your own [provider plugin](providers/custom-providers) ## ❌ When You Don't Need It -- Your project is under 5 GB - standard GitHub runners should work fine +- Your project is under 5 GB - standard GitHub runners should work fine - You have dedicated build servers already running ## 📦 Supported Providers @@ -66,10 +66,10 @@ and [community](providers/community-providers) providers. ## 🔗 External Links -- [Orchestrator Repository](https://github.com/game-ci/orchestrator) - standalone orchestrator +- [Orchestrator Repository](https://github.com/game-ci/orchestrator) - standalone orchestrator package -- [Releases](https://github.com/game-ci/orchestrator/releases) - orchestrator releases -- [Pull Requests](https://github.com/game-ci/orchestrator/pulls) - open orchestrator PRs -- [Issues](https://github.com/game-ci/orchestrator/issues) - bugs and feature requests -- [Discord](https://discord.com/channels/710946343828455455/789631903157583923) - community chat -- [Feedback Form](https://forms.gle/3Wg1gGf9FnZ72RiJ9) - share your experience +- [Releases](https://github.com/game-ci/orchestrator/releases) - orchestrator releases +- [Pull Requests](https://github.com/game-ci/orchestrator/pulls) - open orchestrator PRs +- [Issues](https://github.com/game-ci/orchestrator/issues) - bugs and feature requests +- [Discord](https://discord.com/channels/710946343828455455/789631903157583923) - community chat +- [Feedback Form](https://forms.gle/3Wg1gGf9FnZ72RiJ9) - share your experience diff --git a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx index a88350c2..9b447490 100644 --- a/docs/03-github-orchestrator/03-examples/02-github-actions.mdx +++ b/docs/03-github-orchestrator/03-examples/02-github-actions.mdx @@ -309,7 +309,7 @@ rebuilds at the cost of more storage. See [Retained Workspaces](../advanced-topics/retained-workspace) and [Caching](../advanced-topics/caching) for details on storage strategies. -## 🪝 Container Hooks - S3 Upload + Steam Deploy +## 🪝 Container Hooks - S3 Upload + Steam Deploy Chain multiple container hooks to export builds to S3 and deploy to Steam in a single workflow. @@ -331,8 +331,8 @@ Steam). ## 🔗 Reference -- [API Reference](../api-reference) - full list of all parameters -- [Providers](../providers/overview) - setup guides for each provider -- [Secrets](../secrets) - how credentials are transferred to build containers +- [API Reference](../api-reference) - full list of all parameters +- [Providers](../providers/overview) - setup guides for each provider +- [Secrets](../secrets) - how credentials are transferred to build containers - [Real-world pipeline](https://github.com/game-ci/unity-builder/blob/main/.github/workflows/orchestrator-integrity.yml) - - Game CI's own Orchestrator test pipeline + - Game CI's own Orchestrator test pipeline diff --git a/docs/03-github-orchestrator/03-examples/03-aws.mdx b/docs/03-github-orchestrator/03-examples/03-aws.mdx index 4b1b1a8d..569fbeab 100644 --- a/docs/03-github-orchestrator/03-examples/03-aws.mdx +++ b/docs/03-github-orchestrator/03-examples/03-aws.mdx @@ -225,7 +225,7 @@ game-ci status --providerStrategy aws ## Next Steps -- [AWS Provider Reference](../providers/aws) - architecture, parameters, and setup -- [Container Hooks](../advanced-topics/hooks/built-in-hooks) - S3, rclone, Steam hooks -- [Garbage Collection](../advanced-topics/garbage-collection) - automated cleanup -- [API Reference](../api-reference) - full parameter list +- [AWS Provider Reference](../providers/aws) - architecture, parameters, and setup +- [Container Hooks](../advanced-topics/hooks/built-in-hooks) - S3, rclone, Steam hooks +- [Garbage Collection](../advanced-topics/garbage-collection) - automated cleanup +- [API Reference](../api-reference) - full parameter list diff --git a/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx b/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx index 8ee28d2f..e4a16466 100644 --- a/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx +++ b/docs/03-github-orchestrator/03-examples/04-kubernetes.mdx @@ -125,7 +125,7 @@ Use S3-backed caching for the Library folder to speed up rebuilds. containerHookFiles: aws-s3-pull-cache,aws-s3-upload-cache,aws-s3-upload-build ``` -Hook execution order matters - `aws-s3-pull-cache` restores the cache before the build, +Hook execution order matters - `aws-s3-pull-cache` restores the cache before the build, `aws-s3-upload-cache` saves it after, and `aws-s3-upload-build` uploads the final artifact. ## Retained Workspaces @@ -187,8 +187,8 @@ Store the output as a GitHub Actions secret named `KUBE_CONFIG`. ## Next Steps -- [Kubernetes Provider Reference](../providers/kubernetes) - full setup and parameters -- [Caching](../advanced-topics/caching) - S3 and rclone caching strategies -- [Retained Workspaces](../advanced-topics/retained-workspace) - persistent build environments -- [Container Hooks](../advanced-topics/hooks/built-in-hooks) - S3, rclone, Steam hooks -- [API Reference](../api-reference) - full parameter list +- [Kubernetes Provider Reference](../providers/kubernetes) - full setup and parameters +- [Caching](../advanced-topics/caching) - S3 and rclone caching strategies +- [Retained Workspaces](../advanced-topics/retained-workspace) - persistent build environments +- [Container Hooks](../advanced-topics/hooks/built-in-hooks) - S3, rclone, Steam hooks +- [API Reference](../api-reference) - full parameter list diff --git a/docs/03-github-orchestrator/04-jobs.mdx b/docs/03-github-orchestrator/04-jobs.mdx index b9d1f574..8fa3558b 100644 --- a/docs/03-github-orchestrator/04-jobs.mdx +++ b/docs/03-github-orchestrator/04-jobs.mdx @@ -1,6 +1,6 @@ # Orchestrator Jobs -Orchestrator executes work as **jobs** - containerized or local tasks that run on your chosen +Orchestrator executes work as **jobs** - containerized or local tasks that run on your chosen provider. Understanding job types and their flow is key to customizing your build pipeline. ## Job Flow @@ -18,17 +18,17 @@ Every Orchestrator run follows the same lifecycle, regardless of provider: └─────────────┘ ``` -1. **Setup** - Provision cloud resources (stacks, volumes, secrets). Skipped for local providers. -2. **Pre-build jobs** - Clone the repository, pull LFS, restore caches, run pre-build hooks. -3. **Build job** - Execute the Unity build (or custom editor method). -4. **Post-build jobs** - Push caches, upload artifacts, run post-build hooks. -5. **Cleanup** - Release locks, tear down cloud resources, update GitHub Checks. +1. **Setup** - Provision cloud resources (stacks, volumes, secrets). Skipped for local providers. +2. **Pre-build jobs** - Clone the repository, pull LFS, restore caches, run pre-build hooks. +3. **Build job** - Execute the Unity build (or custom editor method). +4. **Post-build jobs** - Push caches, upload artifacts, run post-build hooks. +5. **Cleanup** - Release locks, tear down cloud resources, update GitHub Checks. ## Job Types ### Build Job -The standard job - runs the Unity Editor to produce a build artifact. This is what most users care +The standard job - runs the Unity Editor to produce a build artifact. This is what most users care about. ```yaml @@ -61,7 +61,7 @@ Run Unity tests without producing a build. Use a custom `buildMethod` that runs gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -With `manualExit: true`, Unity doesn't quit automatically - your build method should call +With `manualExit: true`, Unity doesn't quit automatically - your build method should call `EditorApplication.Exit(0)` after tests complete. This gives you full control over the test lifecycle. @@ -188,6 +188,6 @@ Each provider runs jobs differently: ## Next Steps -- [Custom Job](advanced-topics/custom-job) - Full reference for custom job definitions -- [Hooks](advanced-topics/hooks/container-hooks) - Inject steps at specific lifecycle points -- [Architecture](advanced-topics/architecture) - Deep dive into internal components +- [Custom Job](advanced-topics/custom-job) - Full reference for custom job definitions +- [Hooks](advanced-topics/hooks/container-hooks) - Inject steps at specific lifecycle points +- [Architecture](advanced-topics/architecture) - Deep dive into internal components diff --git a/docs/03-github-orchestrator/05-api-reference.mdx b/docs/03-github-orchestrator/05-api-reference.mdx index 7ab1b2b1..d2d5638f 100644 --- a/docs/03-github-orchestrator/05-api-reference.mdx +++ b/docs/03-github-orchestrator/05-api-reference.mdx @@ -43,8 +43,8 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. | Parameter | Default | Description | | ------------------- | -------- | ------------------------------------------------------------------- | -| `gitPrivateToken` | - | GitHub access token with repo access. Used for git clone and LFS. | -| `githubOwner` | - | GitHub owner or organization name. | +| `gitPrivateToken` | - | GitHub access token with repo access. Used for git clone and LFS. | +| `githubOwner` | - | GitHub owner or organization name. | | `GITHUB_REPOSITORY` | _(auto)_ | Repository in `owner/repo` format. Auto-detected in GitHub Actions. | | `GITHUB_REF` | _(auto)_ | Git ref to build. Falls back to `branch` or `GitSHA` parameters. | | `cloneDepth` | `50` | Depth of the git clone. Use `0` for a full clone. | @@ -54,49 +54,49 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. | Parameter | Default | Description | | ------------------------- | ------- | -------------------------------------------------------------------------------------------------------- | -| `containerHookFiles` | - | Names of [container hook](advanced-topics/hooks/container-hooks) files from `.game-ci/container-hooks/`. | -| `customHookFiles` | - | Names of custom hook files from `.game-ci/hooks/`. | -| `customCommandHooks` | - | Inline [command hooks](advanced-topics/hooks/command-hooks) as YAML. | -| `postBuildSteps` | - | Post-build job in YAML format with keys: `image`, `secrets`, `command`. | -| `preBuildSteps` | - | Pre-build job (after repo setup, before build) in YAML format. | -| `postBuildContainerHooks` | - | Container hook files to run after the build step. | -| `preBuildContainerHooks` | - | Container hook files to run before the build step. | -| `customJob` | - | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/custom-job). | +| `containerHookFiles` | - | Names of [container hook](advanced-topics/hooks/container-hooks) files from `.game-ci/container-hooks/`. | +| `customHookFiles` | - | Names of custom hook files from `.game-ci/hooks/`. | +| `customCommandHooks` | - | Inline [command hooks](advanced-topics/hooks/command-hooks) as YAML. | +| `postBuildSteps` | - | Post-build job in YAML format with keys: `image`, `secrets`, `command`. | +| `preBuildSteps` | - | Pre-build job (after repo setup, before build) in YAML format. | +| `postBuildContainerHooks` | - | Container hook files to run after the build step. | +| `preBuildContainerHooks` | - | Container hook files to run before the build step. | +| `customJob` | - | Custom job YAML to override the default build workflow. See [Custom Job](advanced-topics/custom-job). | ### Pull Secrets | Parameter | Default | Description | | --------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `readInputOverrideCommand` | - | Command to read a parameter value from an external source. Use `{0}` as the parameter name placeholder. Built-in presets: `gcp-secret-manager`, `aws-secret-manager`. See [Secrets](secrets). | -| `readInputFromOverrideList` | - | Comma-separated list of parameter names to pull via `readInputOverrideCommand`. | +| `readInputOverrideCommand` | - | Command to read a parameter value from an external source. Use `{0}` as the parameter name placeholder. Built-in presets: `gcp-secret-manager`, `aws-secret-manager`. See [Secrets](secrets). | +| `readInputFromOverrideList` | - | Comma-separated list of parameter names to pull via `readInputOverrideCommand`. | ### Storage | Parameter | Default | Description | | ----------------- | ------- | ------------------------------------------------------------------------------------------------------ | | `storageProvider` | `s3` | Storage backend for [caching](advanced-topics/caching) and artifacts. Accepted values: `s3`, `rclone`. | -| `rcloneRemote` | - | Rclone remote endpoint. Required when `storageProvider` is `rclone`. | +| `rcloneRemote` | - | Rclone remote endpoint. Required when `storageProvider` is `rclone`. | ### AWS | Parameter | Default | Description | | --------------------------- | --------- | -------------------------------------------------------------- | | `awsStackName` | `game-ci` | Name of the persistent shared CloudFormation base stack. | -| `awsEndpoint` | - | Base endpoint override for all AWS services (e.g. LocalStack). | -| `awsCloudFormationEndpoint` | - | CloudFormation service endpoint override. | -| `awsEcsEndpoint` | - | ECS service endpoint override. | -| `awsKinesisEndpoint` | - | Kinesis service endpoint override. | -| `awsCloudWatchLogsEndpoint` | - | CloudWatch Logs service endpoint override. | -| `awsS3Endpoint` | - | S3 service endpoint override. | +| `awsEndpoint` | - | Base endpoint override for all AWS services (e.g. LocalStack). | +| `awsCloudFormationEndpoint` | - | CloudFormation service endpoint override. | +| `awsEcsEndpoint` | - | ECS service endpoint override. | +| `awsKinesisEndpoint` | - | Kinesis service endpoint override. | +| `awsCloudWatchLogsEndpoint` | - | CloudWatch Logs service endpoint override. | +| `awsS3Endpoint` | - | S3 service endpoint override. | ### Kubernetes | Parameter | Default | Description | | ------------------ | ------- | ----------------------------------------------------------------------- | -| `kubeConfig` | - | Base64-encoded Kubernetes config file. | -| `kubeVolume` | - | Name of the persistent volume claim to use. | +| `kubeConfig` | - | Base64-encoded Kubernetes config file. | +| `kubeVolume` | - | Name of the persistent volume claim to use. | | `kubeVolumeSize` | `5Gi` | Size of the persistent volume. | -| `kubeStorageClass` | - | Storage class for the persistent volume. Empty = auto-install via rook. | +| `kubeStorageClass` | - | Storage class for the persistent volume. Empty = auto-install via rook. | ### Caching @@ -110,7 +110,7 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. | Parameter | Default | Description | | ------------------- | ------- | --------------------------------------------------------------------------------------------------------- | | `githubCheck` | `false` | Create a GitHub Check for each orchestrator step. See [GitHub Integration](providers/github-integration). | -| `asyncOrchestrator` | `false` | Run in async mode - returns immediately without waiting for the build to complete. | +| `asyncOrchestrator` | `false` | Run in async mode - returns immediately without waiting for the build to complete. | | `watchToEnd` | `true` | Whether to follow the build logs until completion. | ### Build Options diff --git a/docs/03-github-orchestrator/05-providers/02-aws.mdx b/docs/03-github-orchestrator/05-providers/02-aws.mdx index bf1e4d61..24a2a70a 100644 --- a/docs/03-github-orchestrator/05-providers/02-aws.mdx +++ b/docs/03-github-orchestrator/05-providers/02-aws.mdx @@ -93,4 +93,4 @@ A full workflow example is available in the builder source: ## AWS Parameters For the full list of AWS-specific parameters (`awsStackName`, endpoint overrides, etc.), see the -[API Reference - AWS section](../api-reference#aws). +[API Reference - AWS section](../api-reference#aws). diff --git a/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx b/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx index 849f23b2..849a04c6 100644 --- a/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx +++ b/docs/03-github-orchestrator/05-providers/03-kubernetes.mdx @@ -16,7 +16,7 @@ env: ## CPU and Memory -Kubernetes accepts the same unit format as AWS - `1024 = 1 vCPU`, memory in MB. Do not include the +Kubernetes accepts the same unit format as AWS - `1024 = 1 vCPU`, memory in MB. Do not include the vCPU or GB suffix. | CPU (`containerCpu`) | Memory (`containerMemory`) | @@ -61,4 +61,4 @@ A full workflow example is available in the builder source: ## K8s Parameters For the full list of Kubernetes parameters (`kubeConfig`, `kubeVolume`, `kubeStorageClass`, etc.), -see the [API Reference - Kubernetes section](../api-reference#kubernetes). +see the [API Reference - Kubernetes section](../api-reference#kubernetes). diff --git a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx index c49ddbdb..5c4fc8f6 100644 --- a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx +++ b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx @@ -10,13 +10,13 @@ orchestrator dispatches the work to another repository's workflow and monitors i ## Use Cases -- **Separate build infrastructure** from your game repository - keep build runners and Unity +- **Separate build infrastructure** from your game repository - keep build runners and Unity licenses in a dedicated repo while orchestrating from your main project. -- **Distribute builds across organizations** - trigger workflows in repos owned by different GitHub +- **Distribute builds across organizations** - trigger workflows in repos owned by different GitHub organizations or teams. -- **Specialized runner pools** - route builds to self-hosted runners registered against a different +- **Specialized runner pools** - route builds to self-hosted runners registered against a different repository with specific hardware (GPU, high memory, fast SSD). -- **License isolation** - keep Unity license activation in a controlled environment while allowing +- **License isolation** - keep Unity license activation in a controlled environment while allowing multiple game repos to dispatch builds to it. ## Prerequisites @@ -102,16 +102,16 @@ Set `providerStrategy: github-actions` and supply the required inputs: └──────────────────────┘ └──────────────────────┘ ``` -1. **Setup** - The orchestrator verifies the target workflow exists by querying the GitHub API. -2. **Dispatch** - A `workflow_dispatch` event is sent with build parameters (build GUID, image, +1. **Setup** - The orchestrator verifies the target workflow exists by querying the GitHub API. +2. **Dispatch** - A `workflow_dispatch` event is sent with build parameters (build GUID, image, base64-encoded commands, environment variables) as workflow inputs. -3. **Poll for run** - The orchestrator polls the target repository's workflow runs (filtering by +3. **Poll for run** - The orchestrator polls the target repository's workflow runs (filtering by creation time) until the dispatched run appears. This typically takes 10-30 seconds. -4. **Monitor** - Once the run is identified, the orchestrator polls its status every 15 seconds +4. **Monitor** - Once the run is identified, the orchestrator polls its status every 15 seconds until it reaches a terminal state (`completed`). -5. **Result** - On success, logs are fetched via `gh run view --log`. On failure, an error is raised +5. **Result** - On success, logs are fetched via `gh run view --log`. On failure, an error is raised with the run's conclusion. -6. **Cleanup** - No cloud resources are created, so cleanup is a no-op. +6. **Cleanup** - No cloud resources are created, so cleanup is a no-op. ## Full Workflow Example @@ -147,17 +147,17 @@ jobs: ## Limitations and Considerations -- **Run identification delay** - After dispatching, the orchestrator must wait for the run to appear +- **Run identification delay** - After dispatching, the orchestrator must wait for the run to appear in the GitHub API. This adds 10-30 seconds of overhead per build. -- **API rate limits** - Each status poll is an API call. Long builds will accumulate many calls. The +- **API rate limits** - Each status poll is an API call. Long builds will accumulate many calls. The 15-second poll interval keeps usage well within GitHub's rate limits for authenticated requests (5,000/hour). -- **No artifact transfer** - Build artifacts remain in the target repository's workflow run. You +- **No artifact transfer** - Build artifacts remain in the target repository's workflow run. You must configure artifact upload/download separately (e.g., via `actions/upload-artifact` in the target workflow). -- **PAT scope** - The token needs `actions:write` on the target repo. Use a fine-grained PAT scoped +- **PAT scope** - The token needs `actions:write` on the target repo. Use a fine-grained PAT scoped to only the build farm repository for least-privilege access. -- **Concurrent dispatch** - If multiple dispatches happen simultaneously, the orchestrator +- **Concurrent dispatch** - If multiple dispatches happen simultaneously, the orchestrator identifies its run by filtering on creation time. Rapid concurrent dispatches to the same workflow could theoretically cause misidentification. @@ -165,8 +165,8 @@ jobs: | Input | Required | Default | Description | | ----------------------- | -------- | ------- | ------------------------------------------------------------------- | -| `providerStrategy` | Yes | - | Must be `github-actions` | -| `githubActionsRepo` | Yes | - | Target repository in `owner/repo` format | -| `githubActionsWorkflow` | Yes | - | Workflow filename (e.g., `unity-build.yml`) or workflow ID | -| `githubActionsToken` | Yes | - | Personal Access Token with `actions:write` scope on the target repo | +| `providerStrategy` | Yes | - | Must be `github-actions` | +| `githubActionsRepo` | Yes | - | Target repository in `owner/repo` format | +| `githubActionsWorkflow` | Yes | - | Workflow filename (e.g., `unity-build.yml`) or workflow ID | +| `githubActionsToken` | Yes | - | Personal Access Token with `actions:write` scope on the target repo | | `githubActionsRef` | No | `main` | Branch or ref to run the dispatched workflow on | diff --git a/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx index 033b7977..db85587e 100644 --- a/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx +++ b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx @@ -10,19 +10,19 @@ while keeping their existing pipeline runners and configuration. ## Use Cases -- **Hybrid GitHub/GitLab setups** - Game source lives on GitHub, but CI runners and Unity licenses +- **Hybrid GitHub/GitLab setups** - Game source lives on GitHub, but CI runners and Unity licenses are managed through GitLab. -- **GitLab Runner infrastructure** - Leverage existing GitLab Runners (including GPU-equipped or +- **GitLab Runner infrastructure** - Leverage existing GitLab Runners (including GPU-equipped or macOS runners) for Unity builds. -- **Self-hosted GitLab** - Organizations running their own GitLab instance can route builds to their +- **Self-hosted GitLab** - Organizations running their own GitLab instance can route builds to their internal infrastructure. -- **GitLab CI/CD catalog** - Integrate orchestrator-triggered builds with existing GitLab CI/CD +- **GitLab CI/CD catalog** - Integrate orchestrator-triggered builds with existing GitLab CI/CD components and templates. ## Prerequisites 1. A **GitLab project** with CI/CD pipelines enabled. -2. A **pipeline trigger token** - created in the GitLab project under **Settings > CI/CD > Pipeline +2. A **pipeline trigger token** - created in the GitLab project under **Settings > CI/CD > Pipeline trigger tokens**. 3. A **`.gitlab-ci.yml`** in the target project that accepts orchestrator variables. @@ -93,17 +93,17 @@ gitlabApiUrl: https://gitlab.internal.company.com └──────────────────────┘ └──────────────────────┘ ``` -1. **Setup** - The orchestrator verifies access to the GitLab project using the provided token. -2. **Trigger** - A pipeline is triggered via the GitLab +1. **Setup** - The orchestrator verifies access to the GitLab project using the provided token. +2. **Trigger** - A pipeline is triggered via the GitLab [Pipeline Triggers API](https://docs.gitlab.com/ee/ci/triggers/) with build parameters passed as pipeline variables (`BUILD_GUID`, `BUILD_IMAGE`, `BUILD_COMMANDS`, etc.). -3. **Monitor** - The orchestrator polls the pipeline status every 15 seconds until it reaches a +3. **Monitor** - The orchestrator polls the pipeline status every 15 seconds until it reaches a terminal state (`success`, `failed`, `canceled`, or `skipped`). -4. **Logs** - On completion, the orchestrator fetches logs for each job in the pipeline individually +4. **Logs** - On completion, the orchestrator fetches logs for each job in the pipeline individually via the GitLab Jobs API, producing a combined log output. -5. **Result** - If the pipeline status is not `success`, an error is raised with the terminal +5. **Result** - If the pipeline status is not `success`, an error is raised with the terminal status. -6. **Cleanup** - No resources are created, so cleanup is a no-op. +6. **Cleanup** - No resources are created, so cleanup is a no-op. ## Full Workflow Example @@ -139,26 +139,26 @@ jobs: ## Limitations and Considerations -- **API rate limits** - GitLab.com enforces API rate limits (authenticated: 2,000 requests/minute +- **API rate limits** - GitLab.com enforces API rate limits (authenticated: 2,000 requests/minute for most plans). The 15-second poll interval keeps usage low, but very long builds with many parallel pipelines should account for this. -- **Token permissions** - The trigger token is scoped to the project. For fetching logs and pipeline +- **Token permissions** - The trigger token is scoped to the project. For fetching logs and pipeline status, the token must also have `read_api` access. A project access token with `api` scope covers both triggering and log retrieval. -- **No direct artifact transfer** - Artifacts stay in GitLab. Configure GitLab CI artifacts or +- **No direct artifact transfer** - Artifacts stay in GitLab. Configure GitLab CI artifacts or external storage (S3, GCS) in your `.gitlab-ci.yml` to export build outputs. -- **Variable size limits** - GitLab pipeline variables have a combined size limit. For large build +- **Variable size limits** - GitLab pipeline variables have a combined size limit. For large build command payloads, the base64-encoded commands variable may approach this limit. Consider storing build scripts in the GitLab repository instead of passing them inline. -- **Self-hosted TLS** - When using `gitlabApiUrl` with a self-hosted instance using self-signed +- **Self-hosted TLS** - When using `gitlabApiUrl` with a self-hosted instance using self-signed certificates, ensure the runner's certificate store trusts the GitLab instance's CA. ## Inputs Reference | Input | Required | Default | Description | | -------------------- | -------- | -------------------- | --------------------------------------------------------------------------------- | -| `providerStrategy` | Yes | - | Must be `gitlab-ci` | -| `gitlabProjectId` | Yes | - | GitLab project ID (numeric) or URL-encoded path (e.g., `my-group%2Funity-builds`) | -| `gitlabTriggerToken` | Yes | - | Pipeline trigger token (created in GitLab project settings) | +| `providerStrategy` | Yes | - | Must be `gitlab-ci` | +| `gitlabProjectId` | Yes | - | GitLab project ID (numeric) or URL-encoded path (e.g., `my-group%2Funity-builds`) | +| `gitlabTriggerToken` | Yes | - | Pipeline trigger token (created in GitLab project settings) | | `gitlabApiUrl` | No | `https://gitlab.com` | GitLab API base URL (for self-hosted instances) | | `gitlabRef` | No | `main` | Branch or ref to trigger the pipeline on | diff --git a/docs/03-github-orchestrator/05-providers/05-local.mdx b/docs/03-github-orchestrator/05-providers/05-local.mdx index 28df24d0..4dc12e77 100644 --- a/docs/03-github-orchestrator/05-providers/05-local.mdx +++ b/docs/03-github-orchestrator/05-providers/05-local.mdx @@ -1,6 +1,6 @@ # Local -Runs builds directly on the host machine with no container isolation. The simplest provider - useful +Runs builds directly on the host machine with no container isolation. The simplest provider - useful for development and testing. ## Requirements @@ -39,5 +39,5 @@ yarn run cli -m cli-build \ - Builds run directly on the host with no isolation. Ensure the machine has the required Unity version and dependencies installed. -- This is the fallback provider - if a custom provider fails to load, Orchestrator falls back to +- This is the fallback provider - if a custom provider fails to load, Orchestrator falls back to `local`. diff --git a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx index 7f65a5a5..6aef64ca 100644 --- a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx +++ b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx @@ -164,13 +164,13 @@ export default class MyProvider { When `providerStrategy` is set to a value that doesn't match a built-in provider name, Orchestrator will: -1. **Detect the source type** - GitHub URL, NPM package, or local path. -2. **Fetch the provider** - For GitHub repos, the repository is cloned (shallow, depth 1) into a +1. **Detect the source type** - GitHub URL, NPM package, or local path. +2. **Fetch the provider** - For GitHub repos, the repository is cloned (shallow, depth 1) into a `.provider-cache/` directory. Cached repos are automatically updated on subsequent runs. -3. **Load the module** - The entry point is imported and the default export is used. -4. **Validate the interface** - All 7 required methods are checked. If any are missing, loading +3. **Load the module** - The entry point is imported and the default export is used. +4. **Validate the interface** - All 7 required methods are checked. If any are missing, loading fails. -5. **Fallback** - If loading fails for any reason, Orchestrator logs the error and falls back to the +5. **Fallback** - If loading fails for any reason, Orchestrator logs the error and falls back to the local provider so your pipeline doesn't break. ## Caching @@ -187,9 +187,9 @@ branch. On subsequent runs the loader checks for updates and pulls them automati ## Best Practices -- **Pin a branch or tag** - Use `user/repo@v1.0` or a specific branch to avoid unexpected changes. -- **Test locally first** - Use a local path during development before publishing. -- **Handle errors gracefully** - Your provider methods should throw clear errors so Orchestrator can +- **Pin a branch or tag** - Use `user/repo@v1.0` or a specific branch to avoid unexpected changes. +- **Test locally first** - Use a local path during development before publishing. +- **Handle errors gracefully** - Your provider methods should throw clear errors so Orchestrator can log them and fall back if needed. -- **Keep it lightweight** - The provider module is loaded at runtime. Minimize dependencies to keep +- **Keep it lightweight** - The provider module is loaded at runtime. Minimize dependencies to keep startup fast. diff --git a/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx b/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx index d70271d3..11d1c062 100644 --- a/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx +++ b/docs/03-github-orchestrator/05-providers/06-remote-powershell.mdx @@ -8,27 +8,27 @@ The **Remote PowerShell** provider executes Unity builds on remote Windows machi Remoting. Unlike CI dispatch providers that trigger pipelines on another CI system, this provider connects directly to target machines and runs build commands over a remote session. -**Category:** Infrastructure Automation - executes directly on target machines rather than +**Category:** Infrastructure Automation - executes directly on target machines rather than dispatching to a CI platform. ## Use Cases -- **Dedicated build machines** - On-premises Windows workstations or servers with Unity installed +- **Dedicated build machines** - On-premises Windows workstations or servers with Unity installed that are not part of any CI system. -- **Windows build farms** - Multiple Windows machines available for parallel builds, managed without +- **Windows build farms** - Multiple Windows machines available for parallel builds, managed without a formal CI/CD platform. -- **Air-gapped environments** - Build machines on internal networks not reachable by cloud CI +- **Air-gapped environments** - Build machines on internal networks not reachable by cloud CI services. -- **Quick prototyping** - Run builds on a colleague's powerful workstation without setting up a full +- **Quick prototyping** - Run builds on a colleague's powerful workstation without setting up a full CI pipeline. ## Prerequisites 1. **PowerShell 5.1+** on both the orchestrator runner and target machine(s). 2. **PowerShell Remoting enabled** on the target machine via one of: - - **WinRM (WSMan)** - Windows default. Enable with `Enable-PSRemoting -Force` on the target. - - **SSH** - Cross-platform transport. Requires OpenSSH server on the target. -3. **Network connectivity** - The orchestrator runner must reach the target machine on port 5985 + - **WinRM (WSMan)** - Windows default. Enable with `Enable-PSRemoting -Force` on the target. + - **SSH** - Cross-platform transport. Requires OpenSSH server on the target. +3. **Network connectivity** - The orchestrator runner must reach the target machine on port 5985 (WinRM HTTP), 5986 (WinRM HTTPS), or 22 (SSH). 4. **Unity installed** on the target machine with the required build support modules. @@ -96,29 +96,29 @@ sequenceDiagram T->>T: 6. Complete ``` -1. **Setup** - The orchestrator tests connectivity to the remote host using `Test-WSMan`. -2. **Execution** - Build commands are wrapped in a PowerShell script block that sets environment +1. **Setup** - The orchestrator tests connectivity to the remote host using `Test-WSMan`. +2. **Execution** - Build commands are wrapped in a PowerShell script block that sets environment variables, changes to the working directory, and runs the build. The entire block is sent via `Invoke-Command`. -3. **Transport** - For WinRM, credentials are constructed as a `PSCredential` object from the +3. **Transport** - For WinRM, credentials are constructed as a `PSCredential` object from the `remotePowershellCredential` input. For SSH, `Invoke-Command -HostName` is used instead. -4. **Output** - Command output streams back to the orchestrator in real time through the remote +4. **Output** - Command output streams back to the orchestrator in real time through the remote session. -5. **Cleanup** - Remote PowerShell sessions are stateless per invocation, so no cleanup is needed. +5. **Cleanup** - Remote PowerShell sessions are stateless per invocation, so no cleanup is needed. ## Security Considerations -- **Credential handling** - The `remotePowershellCredential` input expects a `username:password` +- **Credential handling** - The `remotePowershellCredential` input expects a `username:password` format. Always store this as a GitHub secret, never in plain text. The provider constructs a `PSCredential` object at runtime and does not persist credentials. -- **WinRM HTTPS** - For production use, configure WinRM over HTTPS (port 5986) with a valid TLS +- **WinRM HTTPS** - For production use, configure WinRM over HTTPS (port 5986) with a valid TLS certificate to encrypt traffic. The default HTTP transport (port 5985) sends credentials in clear text over the network. -- **SSH key authentication** - Prefer SSH transport with key-based authentication over WinRM with +- **SSH key authentication** - Prefer SSH transport with key-based authentication over WinRM with password credentials when possible. SSH keys avoid transmitting passwords entirely. -- **Network segmentation** - Restrict WinRM/SSH access to the build machines from only the +- **Network segmentation** - Restrict WinRM/SSH access to the build machines from only the orchestrator runners' IP range. -- **Least privilege** - The remote user account should have only the permissions needed to run Unity +- **Least privilege** - The remote user account should have only the permissions needed to run Unity builds (read/write to the project directory, execute Unity). ## Full Workflow Example @@ -150,23 +150,23 @@ jobs: ## Limitations and Considerations -- **Windows targets only** - PowerShell Remoting via WinRM is a Windows technology. For Linux/macOS +- **Windows targets only** - PowerShell Remoting via WinRM is a Windows technology. For Linux/macOS build machines, use SSH transport or consider the Ansible provider instead. -- **No container isolation** - Builds run directly on the target machine's environment. Conflicting +- **No container isolation** - Builds run directly on the target machine's environment. Conflicting Unity versions or project dependencies between concurrent builds can cause issues. -- **No built-in queuing** - The provider does not queue builds. If multiple orchestrator runs +- **No built-in queuing** - The provider does not queue builds. If multiple orchestrator runs dispatch to the same machine simultaneously, they will execute concurrently (or fail if resources conflict). -- **Garbage collection** - Not supported. Build artifacts and temporary files on the remote machine +- **Garbage collection** - Not supported. Build artifacts and temporary files on the remote machine must be managed separately. -- **Firewall configuration** - Ensure the required ports (5985/5986 for WinRM, 22 for SSH) are open +- **Firewall configuration** - Ensure the required ports (5985/5986 for WinRM, 22 for SSH) are open between the orchestrator runner and the target machine. ## Inputs Reference | Input | Required | Default | Description | | ---------------------------- | -------- | ------- | -------------------------------------------------------------- | -| `providerStrategy` | Yes | - | Must be `remote-powershell` | -| `remotePowershellHost` | Yes | - | Hostname or IP address of the target machine | -| `remotePowershellCredential` | No | - | Credentials in `username:password` format (required for WinRM) | +| `providerStrategy` | Yes | - | Must be `remote-powershell` | +| `remotePowershellHost` | Yes | - | Hostname or IP address of the target machine | +| `remotePowershellCredential` | No | - | Credentials in `username:password` format (required for WinRM) | | `remotePowershellTransport` | No | `wsman` | Transport protocol: `wsman` (WinRM) or `ssh` | diff --git a/docs/03-github-orchestrator/05-providers/07-ansible.mdx b/docs/03-github-orchestrator/05-providers/07-ansible.mdx index fd86007d..1de34956 100644 --- a/docs/03-github-orchestrator/05-providers/07-ansible.mdx +++ b/docs/03-github-orchestrator/05-providers/07-ansible.mdx @@ -8,18 +8,18 @@ The **Ansible** provider orchestrates Unity builds by running Ansible playbooks infrastructure. This enables teams with existing Ansible-based infrastructure management to integrate Unity builds into their configuration-as-code workflows. -**Category:** Infrastructure Automation - runs playbooks against managed inventory rather than +**Category:** Infrastructure Automation - runs playbooks against managed inventory rather than dispatching to a CI platform. ## Use Cases -- **Large-scale build infrastructure** - Distribute builds across a fleet of machines managed by +- **Large-scale build infrastructure** - Distribute builds across a fleet of machines managed by Ansible, with automatic host selection and load distribution handled by your playbooks. -- **Configuration-as-code** - Define build machine setup, Unity installation, and build execution as +- **Configuration-as-code** - Define build machine setup, Unity installation, and build execution as versioned Ansible playbooks alongside your game source. -- **Heterogeneous environments** - Target different machine types (Windows, Linux, macOS) from a +- **Heterogeneous environments** - Target different machine types (Windows, Linux, macOS) from a single inventory with platform-specific playbooks. -- **Existing Ansible infrastructure** - Teams already using Ansible for server management can extend +- **Existing Ansible infrastructure** - Teams already using Ansible for server management can extend their playbooks to handle Unity builds without adopting a separate CI system. ## Prerequisites @@ -155,16 +155,16 @@ all: └──────────────────────┘ └──────────────────────┘ ``` -1. **Setup** - The orchestrator verifies that `ansible` is available on `PATH` and that the +1. **Setup** - The orchestrator verifies that `ansible` is available on `PATH` and that the inventory file exists. -2. **Variable assembly** - Build parameters are assembled into a JSON extra-vars payload. User- +2. **Variable assembly** - Build parameters are assembled into a JSON extra-vars payload. User- provided `ansibleExtraVars` are merged in. Orchestrator secrets are passed as environment variables to the `ansible-playbook` process. -3. **Execution** - The orchestrator runs `ansible-playbook` with the inventory, playbook, extra +3. **Execution** - The orchestrator runs `ansible-playbook` with the inventory, playbook, extra vars, and optional vault password file. Output streams to the orchestrator in real time. -4. **Result** - A zero exit code means success. Any non-zero exit code raises an error with the +4. **Result** - A zero exit code means success. Any non-zero exit code raises an error with the playbook output. -5. **Cleanup** - No orchestrator-side resources to clean up. Playbook cleanup tasks should handle +5. **Cleanup** - No orchestrator-side resources to clean up. Playbook cleanup tasks should handle remote machine cleanup. ## Ansible Vault Integration @@ -244,25 +244,25 @@ jobs: ## Limitations and Considerations -- **Playbook required** - The Ansible provider does not ship with a default playbook. You must +- **Playbook required** - The Ansible provider does not ship with a default playbook. You must provide a playbook that handles repository checkout, Unity build execution, and artifact collection for your specific infrastructure. -- **Ansible installation** - Ansible must be installed on the runner. GitHub-hosted runners do not +- **Ansible installation** - Ansible must be installed on the runner. GitHub-hosted runners do not include Ansible by default; add a `pip install ansible` step or use a custom runner image. -- **No garbage collection** - The provider does not manage remote machine state. Build cleanup +- **No garbage collection** - The provider does not manage remote machine state. Build cleanup (temporary files, old builds) should be handled within playbook tasks. -- **Sequential execution** - The orchestrator runs a single `ansible-playbook` command and waits for +- **Sequential execution** - The orchestrator runs a single `ansible-playbook` command and waits for it to complete. Parallelism across hosts is managed by Ansible's built-in `forks` setting, not by the orchestrator. -- **Extra-vars JSON parsing** - The `ansibleExtraVars` input is parsed as JSON. If parsing fails, +- **Extra-vars JSON parsing** - The `ansibleExtraVars` input is parsed as JSON. If parsing fails, the raw string is passed through, which may cause unexpected behavior. Always provide valid JSON. ## Inputs Reference | Input | Required | Default | Description | | ---------------------- | -------- | ------- | ---------------------------------------------------------- | -| `providerStrategy` | Yes | - | Must be `ansible` | -| `ansibleInventory` | Yes | - | Path to Ansible inventory file or dynamic inventory script | -| `ansiblePlaybook` | Yes | - | Path to Ansible playbook for Unity builds | -| `ansibleExtraVars` | No | - | Additional Ansible variables as a JSON string | -| `ansibleVaultPassword` | No | - | Path to Ansible Vault password file | +| `providerStrategy` | Yes | - | Must be `ansible` | +| `ansibleInventory` | Yes | - | Path to Ansible inventory file or dynamic inventory script | +| `ansiblePlaybook` | Yes | - | Path to Ansible playbook for Unity builds | +| `ansibleExtraVars` | No | - | Additional Ansible variables as a JSON string | +| `ansibleVaultPassword` | No | - | Path to Ansible Vault password file | diff --git a/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx b/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx index 88f69079..b4b74050 100644 --- a/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx +++ b/docs/03-github-orchestrator/05-providers/09-gitlab-integration.mdx @@ -1,7 +1,7 @@ # GitLab Integration You can use GitLab with Orchestrator via the Command Line mode. Orchestrator is not limited to -GitHub Actions - any CI system that can run shell commands can trigger orchestrator builds. +GitHub Actions - any CI system that can run shell commands can trigger orchestrator builds. ## Setup diff --git a/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx index 58f12b0d..fa9f7caa 100644 --- a/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx +++ b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx @@ -1,6 +1,6 @@ # GCP Cloud Run (Experimental) -Run Unity builds as [Cloud Run Jobs](https://cloud.google.com/run/docs/create-jobs) - one-off +Run Unity builds as [Cloud Run Jobs](https://cloud.google.com/run/docs/create-jobs) - one-off serverless container executions with configurable storage backends. :::caution Experimental This provider is experimental. APIs and behavior may change between @@ -41,18 +41,18 @@ trade-offs for performance, persistence, and complexity. ### When to use each type -- **gcs-fuse** (default) - Good general-purpose option. Handles very large files well and persists +- **gcs-fuse** (default) - Good general-purpose option. Handles very large files well and persists across builds. Has some latency on small file I/O and eventual consistency edge cases. -- **gcs-copy** - Simpler than FUSE (no driver). Copies everything before the build starts and +- **gcs-copy** - Simpler than FUSE (no driver). Copies everything before the build starts and uploads after it finishes. Best when you only need artifact upload/download, not live filesystem access during the build. -- **nfs** - True POSIX semantics with good random I/O performance. The best choice for caching the +- **nfs** - True POSIX semantics with good random I/O performance. The best choice for caching the Unity Library folder (thousands of small files). Requires a [Filestore](https://cloud.google.com/filestore) instance and a VPC connector. -- **in-memory** - Fastest option (RAM-backed). Data is lost when the job ends. Capped at 32 GiB. Use +- **in-memory** - Fastest option (RAM-backed). Data is lost when the job ends. Capped at 32 GiB. Use for temporary build artifacts that don't need to persist. ## Inputs @@ -62,17 +62,17 @@ trade-offs for performance, persistence, and complexity. | `gcpProject` | `$GOOGLE_CLOUD_PROJECT` | GCP project ID | | `gcpRegion` | `us-central1` | Cloud Run region | | `gcpStorageType` | `gcs-fuse` | Storage backend (see above) | -| `gcpBucket` | - | GCS bucket name (for `gcs-fuse`, `gcs-copy`) | -| `gcpFilestoreIp` | - | Filestore IP address (for `nfs`) | +| `gcpBucket` | - | GCS bucket name (for `gcs-fuse`, `gcs-copy`) | +| `gcpFilestoreIp` | - | Filestore IP address (for `nfs`) | | `gcpFilestoreShare` | `/share1` | Filestore share name (for `nfs`) | | `gcpMachineType` | `e2-standard-4` | Machine type | | `gcpDiskSizeGb` | `100` | In-memory volume size (for `in-memory`, max 32) | -| `gcpServiceAccount` | - | Service account email | -| `gcpVpcConnector` | - | VPC connector (required for `nfs`) | +| `gcpServiceAccount` | - | Service account email | +| `gcpVpcConnector` | - | VPC connector (required for `nfs`) | ## Examples -### GCS FUSE - mount bucket as filesystem +### GCS FUSE - mount bucket as filesystem ```yaml - uses: game-ci/unity-builder@v4 @@ -83,7 +83,7 @@ trade-offs for performance, persistence, and complexity. targetPlatform: StandaloneLinux64 ``` -### NFS - Filestore for fast Library caching +### NFS - Filestore for fast Library caching ```yaml - uses: game-ci/unity-builder@v4 @@ -97,7 +97,7 @@ trade-offs for performance, persistence, and complexity. targetPlatform: StandaloneLinux64 ``` -### Copy - simple artifact upload/download +### Copy - simple artifact upload/download ```yaml - uses: game-ci/unity-builder@v4 @@ -111,6 +111,6 @@ trade-offs for performance, persistence, and complexity. ## Related -- [Azure ACI](azure-aci) - Azure Container Instances provider -- [Custom Providers](custom-providers) - TypeScript provider plugins -- [CLI Provider Protocol](cli-provider-protocol) - Write providers in any language +- [Azure ACI](azure-aci) - Azure Container Instances provider +- [Custom Providers](custom-providers) - TypeScript provider plugins +- [CLI Provider Protocol](cli-provider-protocol) - Write providers in any language diff --git a/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx index 0f4b6303..ddb085da 100644 --- a/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx +++ b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx @@ -1,7 +1,7 @@ # Azure ACI (Experimental) Run Unity builds as -[Azure Container Instances](https://learn.microsoft.com/en-us/azure/container-instances/) - +[Azure Container Instances](https://learn.microsoft.com/en-us/azure/container-instances/) - serverless containers with configurable storage backends. :::caution Experimental This provider is experimental. APIs and behavior may change between @@ -41,18 +41,18 @@ Set `azureStorageType` to control how the build accesses large files. ### When to use each type -- **azure-files** (default) - Simplest persistent option. Works out of the box - auto-creates the +- **azure-files** (default) - Simplest persistent option. Works out of the box - auto-creates the storage account and file share if they don't exist. SMB has some overhead from opportunistic locking but is reliable for most use cases. -- **blob-copy** - Avoids mount overhead entirely. Copies everything before the build starts and +- **blob-copy** - Avoids mount overhead entirely. Copies everything before the build starts and uploads after it finishes. Good when you only need artifact upload/download. -- **azure-files-nfs** - Eliminates SMB lock overhead for better random I/O performance with Unity +- **azure-files-nfs** - Eliminates SMB lock overhead for better random I/O performance with Unity Library files (thousands of small files). Requires **Premium FileStorage** (auto-created) and **VNet integration** via `azureSubnetId`. -- **in-memory** - Fastest option (RAM-backed). Data is lost when the container stops. Size is +- **in-memory** - Fastest option (RAM-backed). Data is lost when the container stops. Size is limited by the container's memory allocation. Use for temporary build artifacts. ## Inputs @@ -69,11 +69,11 @@ Set `azureStorageType` to control how the build accesses large files. | `azureCpu` | `4` | CPU cores (1–16) | | `azureMemoryGb` | `16` | Memory in GB (1–16) | | `azureDiskSizeGb` | `100` | File share quota in GB | -| `azureSubnetId` | - | Subnet ID for VNet (required for `azure-files-nfs`) | +| `azureSubnetId` | - | Subnet ID for VNet (required for `azure-files-nfs`) | ## Examples -### Azure Files - SMB mount (default) +### Azure Files - SMB mount (default) ```yaml - uses: game-ci/unity-builder@v4 @@ -84,7 +84,7 @@ Set `azureStorageType` to control how the build accesses large files. targetPlatform: StandaloneLinux64 ``` -### NFS - better POSIX performance +### NFS - better POSIX performance ```yaml - uses: game-ci/unity-builder@v4 @@ -97,7 +97,7 @@ Set `azureStorageType` to control how the build accesses large files. targetPlatform: StandaloneLinux64 ``` -### Blob copy - simple artifact upload/download +### Blob copy - simple artifact upload/download ```yaml - uses: game-ci/unity-builder@v4 @@ -112,6 +112,6 @@ Set `azureStorageType` to control how the build accesses large files. ## Related -- [GCP Cloud Run](gcp-cloud-run) - Google Cloud Run Jobs provider -- [Custom Providers](custom-providers) - TypeScript provider plugins -- [CLI Provider Protocol](cli-provider-protocol) - Write providers in any language +- [GCP Cloud Run](gcp-cloud-run) - Google Cloud Run Jobs provider +- [Custom Providers](custom-providers) - TypeScript provider plugins +- [CLI Provider Protocol](cli-provider-protocol) - Write providers in any language diff --git a/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx b/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx index 8f3b2653..d0173b57 100644 --- a/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx +++ b/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx @@ -1,6 +1,6 @@ # CLI Provider Protocol -Write orchestrator providers in **any language** - Go, Python, Rust, shell, or anything that can +Write orchestrator providers in **any language** - Go, Python, Rust, shell, or anything that can read stdin and write stdout. The CLI provider protocol uses JSON messages over stdin/stdout with the subcommand as the first argument. @@ -189,6 +189,6 @@ BuildParameters object and orchestrator internals. ## Related -- [Custom Providers](custom-providers) - TypeScript provider plugin system -- [Build Services](/docs/github-orchestrator/advanced-topics/build-services) - Submodule profiles, +- [Custom Providers](custom-providers) - TypeScript provider plugin system +- [Build Services](/docs/github-orchestrator/advanced-topics/build-services) - Submodule profiles, caching, LFS agents, hooks diff --git a/docs/03-github-orchestrator/06-secrets.mdx b/docs/03-github-orchestrator/06-secrets.mdx index a1bda9c6..3aaf5580 100644 --- a/docs/03-github-orchestrator/06-secrets.mdx +++ b/docs/03-github-orchestrator/06-secrets.mdx @@ -6,7 +6,8 @@ transferred to workload containers as environment variables via the provider's n ## Secret Sources Set `secretSource` to use a premade integration or custom command. This is the recommended approach - - it replaces the older `inputPullCommand` mechanism with a cleaner API. + +- it replaces the older `inputPullCommand` mechanism with a cleaner API. ### Premade Sources @@ -175,8 +176,8 @@ env: The `parseOutput` field controls how the command output is interpreted: -- `raw` (default) - Use the output as-is -- `json-field` - Parse the output as JSON and extract the field specified by `jsonField` +- `raw` (default) - Use the output as-is +- `json-field` - Parse the output as JSON and extract the field specified by `jsonField` ## Legacy: inputPullCommand @@ -191,8 +192,8 @@ env: The legacy mechanism supports two premade shortcuts: -- `aws-secret-manager` - Expands to `aws secretsmanager get-secret-value --secret-id {0}` -- `gcp-secret-manager` - Expands to `gcloud secrets versions access 1 --secret="{0}"` +- `aws-secret-manager` - Expands to `aws secretsmanager get-secret-value --secret-id {0}` +- `gcp-secret-manager` - Expands to `gcloud secrets versions access 1 --secret="{0}"` New projects should use `secretSource` instead, which provides more premade sources, better output parsing, and YAML file support. diff --git a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx index 97fb71e2..53ec1976 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx @@ -1,7 +1,7 @@ # Caching Orchestrator supports two caching strategies. You can mix both by setting -[`maxRetainedWorkspaces`](../api-reference#caching) - once the limit is reached, additional jobs +[`maxRetainedWorkspaces`](../api-reference#caching) - once the limit is reached, additional jobs fall back to standard caching. ``` @@ -32,7 +32,7 @@ compiled output folder is archived and stored using the same cache key (branch n the next build with the same cache key, the previous build output is available at `/data/cache/{cacheKey}/build/`. -This happens automatically - no configuration required. The cache key controls which builds share +This happens automatically - no configuration required. The cache key controls which builds share output: ```yaml @@ -74,4 +74,4 @@ When using retained workspaces, Orchestrator uses distributed locking (via S3 or only one build uses a workspace at a time. This enables safe concurrent builds that share and reuse workspaces without conflicts. -Locking is managed automatically - no configuration required beyond setting `maxRetainedWorkspaces`. +Locking is managed automatically - no configuration required beyond setting `maxRetainedWorkspaces`. diff --git a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx index da5d8bdf..27cf9647 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx @@ -12,7 +12,7 @@ Set `maxRetainedWorkspaces` to control how many workspaces are kept: | `0` | Unlimited retained workspaces (default). | | `> 0` | Keep at most N workspaces. Additional jobs fall back to standard caching. | -Each retained workspace is locked during use - only one build can use a workspace at a time. +Each retained workspace is locked during use - only one build can use a workspace at a time. Orchestrator handles locking automatically via S3 or rclone. See [Caching](caching) for storage provider details. diff --git a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx index ad2e4bca..8a24ee76 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx @@ -1,7 +1,7 @@ # Load Balancing Orchestrator can intelligently route builds across providers. Built-in load balancing checks runner -availability and routes to the best provider automatically - no custom scripting needed. For +availability and routes to the best provider automatically - no custom scripting needed. For advanced scenarios, standard GitHub Actions scripting gives you full control. ``` @@ -23,11 +23,11 @@ advanced scenarios, standard GitHub Actions scripting gives you full control. Set `fallbackProviderStrategy` to an alternate provider and the action handles routing automatically. Three mechanisms work together: -- **Runner availability check** - Queries the GitHub Runners API. If your self-hosted runners are +- **Runner availability check** - Queries the GitHub Runners API. If your self-hosted runners are busy or offline, routes to the alternate provider. -- **Retry on alternate provider** - If the primary provider fails mid-build (transient cloud error, +- **Retry on alternate provider** - If the primary provider fails mid-build (transient cloud error, quota limit), retries the entire build on the alternate provider. -- **Provider init timeout** - If the primary provider is slow to spin up, switches to the alternate +- **Provider init timeout** - If the primary provider is slow to spin up, switches to the alternate after a configurable timeout. ### Inputs @@ -68,7 +68,7 @@ Runner idle? Build runs locally. Runner busy? Routes to AWS automatically. ### Non-blocking with async mode For long Unity builds, combine load balancing with `asyncOrchestrator: true`. The build dispatches -to the best available provider and returns immediately - the GitHub runner is freed in seconds +to the best available provider and returns immediately - the GitHub runner is freed in seconds regardless of which provider handles the build. ```yaml @@ -123,9 +123,9 @@ swap to the alternate provider if startup takes too long. The built-in load balancing is designed to never block a build: -- **No token** - Skips the runner check, uses the primary provider. -- **API error** (permissions, rate limit) - Logs a warning, uses the primary provider. -- **No alternate set** - The runner check runs for informational logging but never swaps. +- **No token** - Skips the runner check, uses the primary provider. +- **API error** (permissions, rate limit) - Logs a warning, uses the primary provider. +- **No alternate set** - The runner check runs for informational logging but never swaps. ### Log the routing decision @@ -294,7 +294,7 @@ The pattern uses two workflows: a primary workflow that checks runner availabili locally or dispatches a cloud workflow, and a cloud workflow that handles the remote build independently. -**Primary workflow** - checks runners and either builds or dispatches: +**Primary workflow** - checks runners and either builds or dispatches: ```yaml name: Build (Primary) @@ -341,7 +341,7 @@ jobs: gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -**Cloud build workflow** - runs on `workflow_dispatch`, handles the remote build: +**Cloud build workflow** - runs on `workflow_dispatch`, handles the remote build: ```yaml name: Build (Cloud) @@ -372,7 +372,7 @@ jobs: gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -This pattern lets each workflow have completely different configurations - different runners, +This pattern lets each workflow have completely different configurations - different runners, secrets, environment variables, and setup steps. The trade-off is that the dispatched workflow runs independently, so you need to check its status separately (via GitHub Actions UI or [`gh run list`](https://cli.github.com/manual/gh_run_list)). @@ -456,14 +456,15 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` -Unlike the workflow dispatch pattern, this keeps everything in a single workflow run - you can see +Unlike the workflow dispatch pattern, this keeps everything in a single workflow run - you can see the routing decision and build result together in the GitHub Actions UI. ## Async Mode and Load Balancing The [`asyncOrchestrator`](../api-reference#github-integration) parameter is essential for effective load balancing of long builds. When enabled, the action dispatches the build and returns immediately - - no runner minutes wasted waiting. + +- no runner minutes wasted waiting. ``` Workflow Step (seconds) Provider A Provider B @@ -482,9 +483,9 @@ load balancing of long builds. When enabled, the action dispatches the build and └─────────────────────────────────────┘ ``` -- **Without async** - The build occupies the runner. Routing still works, but you're paying for +- **Without async** - The build occupies the runner. Routing still works, but you're paying for runner time while the build runs remotely. -- **With async** - The step finishes in seconds. The build continues on the selected provider and +- **With async** - The step finishes in seconds. The build continues on the selected provider and reports status via GitHub Checks. This is the recommended approach for long builds. ```yaml @@ -531,16 +532,16 @@ jobs: ## Tips -- **Start with built-in** - For most teams, `runnerCheckEnabled` + `fallbackProviderStrategy` + +- **Start with built-in** - For most teams, `runnerCheckEnabled` + `fallbackProviderStrategy` + `asyncOrchestrator` covers the common case. Add script-based routing only when you need custom logic. -- **Always use async for long builds** - Combining `asyncOrchestrator: true` with +- **Always use async for long builds** - Combining `asyncOrchestrator: true` with `githubCheck: true` keeps your routing step fast and gives you build status on the PR page. -- **Cache keys are provider-independent** - The [`cacheKey`](../api-reference#caching) parameter +- **Cache keys are provider-independent** - The [`cacheKey`](../api-reference#caching) parameter works the same across all providers, so builds routed to different providers can still share caches if they use the same storage backend. -- **Test routing logic** - Temporarily disable your self-hosted runner to verify that routing works +- **Test routing logic** - Temporarily disable your self-hosted runner to verify that routing works before you need it in production. -- **Custom providers** - The same routing patterns work with +- **Custom providers** - The same routing patterns work with [custom providers](../providers/custom-providers). Set `providerStrategy` to a GitHub repo or NPM package and Orchestrator loads it dynamically. diff --git a/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx b/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx index a2946e2c..1fb16824 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx @@ -33,11 +33,11 @@ storage backend. Your Unity project is cloned into the build container at `/data/{buildGuid}/repo/`. Orchestrator handles Git and LFS automatically: -1. **Shallow clone** - The repository is cloned with `--depth` controlled by the +1. **Shallow clone** - The repository is cloned with `--depth` controlled by the [`cloneDepth`](../api-reference#git-synchronization) parameter (default: 50). -2. **LFS pull** - Git LFS is installed and configured inside the container. LFS files are pulled +2. **LFS pull** - Git LFS is installed and configured inside the container. LFS files are pulled after the clone completes. -3. **LFS hashing** - Orchestrator generates `.lfs-assets-guid` and `.lfs-assets-guid-sum` files to +3. **LFS hashing** - Orchestrator generates `.lfs-assets-guid` and `.lfs-assets-guid-sum` files to track LFS content for cache invalidation. For retained workspaces, the project folder persists between builds at @@ -107,7 +107,7 @@ Orchestrator supports two storage backends for caches, artifacts, and workspace S3 is the default storage backend. It works with AWS S3 and LocalStack (for local testing). -No extra configuration is needed when using the `aws` provider - the S3 bucket is created +No extra configuration is needed when using the `aws` provider - the S3 bucket is created automatically as part of the CloudFormation base stack. For other providers, ensure AWS credentials and region are set in the environment. @@ -209,7 +209,7 @@ and cache data. For the full list of storage-related parameters, see the API Reference: -- [Storage](../api-reference#storage) - `storageProvider`, `rcloneRemote` -- [Caching](../api-reference#caching) - `cacheKey`, `maxRetainedWorkspaces` -- [Build Options](../api-reference#build-options) - `useCompressionStrategy`, `useLargePackages` -- [AWS](../api-reference#aws) - `awsStackName`, `awsS3Endpoint` +- [Storage](../api-reference#storage) - `storageProvider`, `rcloneRemote` +- [Caching](../api-reference#caching) - `cacheKey`, `maxRetainedWorkspaces` +- [Build Options](../api-reference#build-options) - `useCompressionStrategy`, `useLargePackages` +- [AWS](../api-reference#aws) - `awsStackName`, `awsS3Endpoint` diff --git a/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx b/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx index 0c0e65cd..4bcaf1ff 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx @@ -1,6 +1,6 @@ # Architecture -This page describes the internal architecture of Orchestrator - how the components fit together, how +This page describes the internal architecture of Orchestrator - how the components fit together, how a build flows through the system, and where to look in the source code. ``` @@ -55,26 +55,26 @@ A standard Orchestrator build follows these steps: ### Step-by-Step -1. **Initialize** - `Orchestrator.setup()` parses inputs from GitHub Action `with`, CLI flags, or +1. **Initialize** - `Orchestrator.setup()` parses inputs from GitHub Action `with`, CLI flags, or environment variables. It selects a provider, generates a unique build GUID, and optionally creates a GitHub Check. -2. **Setup Provider** - `Provider.setupWorkflow()` provisions cloud resources. For AWS this means +2. **Setup Provider** - `Provider.setupWorkflow()` provisions cloud resources. For AWS this means creating a CloudFormation base stack (ECS cluster, S3 bucket, Kinesis stream). For Kubernetes it creates a service account. Local providers skip this step. -3. **Acquire Workspace** - If `maxRetainedWorkspaces` is set, `SharedWorkspaceLocking` acquires a +3. **Acquire Workspace** - If `maxRetainedWorkspaces` is set, `SharedWorkspaceLocking` acquires a distributed lock on a workspace via S3 or rclone. If all workspaces are locked, the build falls back to standard caching. -4. **Build** - The workflow composition root selects a workflow (standard, async, or custom job). +4. **Build** - The workflow composition root selects a workflow (standard, async, or custom job). The standard workflow clones your repo, restores caches, runs the Unity build, and executes pre/post container hooks. -5. **Post-Build** - `remote-cli-post-build` archives the Unity Library folder and build output, +5. **Post-Build** - `remote-cli-post-build` archives the Unity Library folder and build output, pushes them to cloud storage, and runs any post-build hooks. -6. **Cleanup** - The workspace lock is released, cloud resources are torn down +6. **Cleanup** - The workspace lock is released, cloud resources are torn down (`Provider.cleanupWorkflow()`), and the GitHub Check is updated with the final result. ## Core Components @@ -83,10 +83,10 @@ A standard Orchestrator build follows these steps: The static `Orchestrator` class is the central coordinator. It holds: -- `Provider` - the selected provider implementation -- `buildParameters` - all resolved configuration -- `buildGuid` - unique identifier for this build -- `lockedWorkspace` - retained workspace name (if any) +- `Provider` - the selected provider implementation +- `buildParameters` - all resolved configuration +- `buildGuid` - unique identifier for this build +- `lockedWorkspace` - retained workspace name (if any) `Orchestrator.run()` is the main entry point that drives the full lifecycle. Provider selection happens in `setupSelectedBuildPlatform()`, which handles LocalStack detection, `AWS_FORCE_PROVIDER` @@ -180,10 +180,10 @@ Action returns immediately. Progress is reported via Orchestrator has two hook mechanisms: -**Command Hooks** - Shell commands injected before or after the setup and build steps. Defined via +**Command Hooks** - Shell commands injected before or after the setup and build steps. Defined via the `customCommandHooks` YAML parameter or as files in `.game-ci/command-hooks/`. -**Container Hooks** - Separate Docker containers that run before or after the build. Defined via +**Container Hooks** - Separate Docker containers that run before or after the build. Defined via `containerHookFiles` (built-in names like `aws-s3-upload-build`) or `preBuildSteps` / `postBuildSteps` YAML. Each hook specifies an image, commands, and optional secrets. @@ -215,19 +215,19 @@ The `OrchestratorOptions` class handles this resolution. Environment variables a The remote client runs **inside** the build container (not on the CI runner). It provides two CLI modes: -- **`remote-cli-pre-build`** - Called before the Unity build. Handles git clone, LFS pull, cache +- **`remote-cli-pre-build`** - Called before the Unity build. Handles git clone, LFS pull, cache restoration, retained workspace setup, large package optimization, and custom hook execution. -- **`remote-cli-post-build`** - Called after the Unity build. Pushes the Library and build caches to +- **`remote-cli-post-build`** - Called after the Unity build. Pushes the Library and build caches to cloud storage. ### GitHub Integration The `GitHub` class manages GitHub Checks and async workflow dispatch: -- **`createGitHubCheck()`** - Creates a check run on the commit via the GitHub API. -- **`updateGitHubCheck()`** - Updates check status. In async environments, updates are routed +- **`createGitHubCheck()`** - Creates a check run on the commit via the GitHub API. +- **`updateGitHubCheck()`** - Updates check status. In async environments, updates are routed through the `Async Checks API` workflow (since containers can't call the Checks API directly). -- **`runUpdateAsyncChecksWorkflow()`** - Triggers a GitHub Actions workflow that updates the check +- **`runUpdateAsyncChecksWorkflow()`** - Triggers a GitHub Actions workflow that updates the check run on behalf of the container. ### Caching and Storage @@ -235,8 +235,8 @@ The `GitHub` class manages GitHub Checks and async workflow dispatch: Caching is split between the remote client (push/pull logic) and the storage provider (S3 or rclone): -- **Standard caching** - Archives the `Library/` folder and LFS files as `.tar.lz4` archives. -- **Retained workspaces** - Keeps the entire project folder. Uses distributed locking via S3 or +- **Standard caching** - Archives the `Library/` folder and LFS files as `.tar.lz4` archives. +- **Retained workspaces** - Keeps the entire project folder. Uses distributed locking via S3 or rclone to prevent concurrent access. See [Storage](storage) for the full breakdown of file categories, compression, and storage backends. diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx index aa84140e..c2e95f0e 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx @@ -1,7 +1,7 @@ # Build Services Build services run during the build lifecycle to handle submodule initialization, caching, LFS -configuration, and git hooks. They work with any provider - local, AWS, Kubernetes, GCP Cloud Run, +configuration, and git hooks. They work with any provider - local, AWS, Kubernetes, GCP Cloud Run, Azure ACI, or custom CLI providers. ``` @@ -34,8 +34,8 @@ submodules: branch: main ``` -- `branch: main` - initialize the submodule on its configured branch -- `branch: empty` - skip the submodule (checked out to an empty branch) +- `branch: main` - initialize the submodule on its configured branch +- `branch: empty` - skip the submodule (checked out to an empty branch) - Trailing `*` enables glob matching against submodule names ### Variant Overlays @@ -55,9 +55,9 @@ submodules: | Input | Default | Description | | ---------------------- | ------- | --------------------------------------- | -| `submoduleProfilePath` | - | Path to YAML submodule profile | -| `submoduleVariantPath` | - | Path to variant overlay (merged on top) | -| `submoduleToken` | - | Auth token for private submodule clones | +| `submoduleProfilePath` | - | Path to YAML submodule profile | +| `submoduleVariantPath` | - | Path to variant overlay (merged on top) | +| `submoduleToken` | - | Auth token for private submodule clones | ### How It Works @@ -84,7 +84,7 @@ submodules: ## Local Build Caching Cache the Unity Library folder and LFS objects between local builds without external cache actions. -Filesystem-based - works on self-hosted runners with persistent storage. +Filesystem-based - works on self-hosted runners with persistent storage. ### How It Works @@ -99,7 +99,7 @@ Filesystem-based - works on self-hosted runners with persistent storage. | Input | Default | Description | | ------------------- | ------- | -------------------------- | | `localCacheEnabled` | `false` | Enable filesystem caching | -| `localCacheRoot` | - | Cache directory override | +| `localCacheRoot` | - | Cache directory override | | `localCacheLibrary` | `true` | Cache Unity Library folder | | `localCacheLfs` | `true` | Cache LFS objects | @@ -139,9 +139,9 @@ The agent name is derived from the executable filename (e.g. `elastic-git-storag | Input | Default | Description | | ---------------------- | ------- | --------------------------------------------- | -| `lfsTransferAgent` | - | Path to custom LFS agent executable | -| `lfsTransferAgentArgs` | - | Arguments passed to the agent | -| `lfsStoragePaths` | - | Sets `LFS_STORAGE_PATHS` environment variable | +| `lfsTransferAgent` | - | Path to custom LFS agent executable | +| `lfsTransferAgentArgs` | - | Arguments passed to the agent | +| `lfsStoragePaths` | - | Sets `LFS_STORAGE_PATHS` environment variable | ### Example @@ -159,7 +159,7 @@ The agent name is derived from the executable filename (e.g. `elastic-git-storag ## Git Hooks -Detect and install lefthook or husky during builds. **Disabled by default** for build performance - +Detect and install lefthook or husky during builds. **Disabled by default** for build performance - enable when your build pipeline depends on hooks running. ### How It Works @@ -176,7 +176,7 @@ enable when your build pipeline depends on hooks running. | Input | Default | Description | | ------------------ | ------- | -------------------------------------- | | `gitHooksEnabled` | `false` | Install and run git hooks during build | -| `gitHooksSkipList` | - | Comma-separated hooks to skip | +| `gitHooksSkipList` | - | Comma-separated hooks to skip | ### Example @@ -192,6 +192,6 @@ enable when your build pipeline depends on hooks running. ## Related -- [CLI Provider Protocol](../providers/cli-provider-protocol) - Write providers in any language -- [Cloud Providers](/docs/github-orchestrator/providers/gcp-cloud-run) - GCP Cloud Run and Azure ACI -- [Caching](caching) - Orchestrator caching strategies +- [CLI Provider Protocol](../providers/cli-provider-protocol) - Write providers in any language +- [Cloud Providers](/docs/github-orchestrator/providers/gcp-cloud-run) - GCP Cloud Run and Azure ACI +- [Caching](caching) - Orchestrator caching strategies diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx index d8e45fd3..6294b9ff 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/10-lfs-agents.mdx @@ -1,6 +1,6 @@ # Custom LFS Agents -Orchestrator supports custom Git LFS transfer agents - external executables that handle LFS upload +Orchestrator supports custom Git LFS transfer agents - external executables that handle LFS upload and download instead of the default HTTPS transport. ## elastic-git-storage (Built-in) diff --git a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx index 9f96aa13..4e289a51 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx @@ -10,7 +10,7 @@ multi-dimensional taxonomy filtering, and structured test result reporting. ## Overview Instead of running tests via a single `buildMethod`, the test workflow engine lets you define test -suites as YAML configurations - specifying exactly which tests run for each CI event, filtered by +suites as YAML configurations - specifying exactly which tests run for each CI event, filtered by taxonomy metadata, with sequential execution dependencies. ## Test Suite Definitions diff --git a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx index 24addb43..71b4fad8 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/12-hot-runner-protocol.mdx @@ -57,7 +57,7 @@ Connect to a coordinator via WebSocket or SignalR: ### File-Based Transport -Watch a shared directory for JSON job files - the simplest transport: +Watch a shared directory for JSON job files - the simplest transport: ```yaml - uses: game-ci/unity-builder@v4 @@ -100,7 +100,7 @@ editorMode: persistent Benefits: - No editor startup time (saves 30–120 seconds per build) -- Unity Library folder stays warm - only changed assets reimport +- Unity Library folder stays warm - only changed assets reimport - Domain reload only when scripts change ### Hybrid @@ -153,10 +153,10 @@ Job dispatch and results follow the same JSON protocol. Hot runners compose with other orchestrator features: -- **[Incremental Sync](incremental-sync-protocol)** - Receive workspace updates without full clone. +- **[Incremental Sync](incremental-sync-protocol)** - Receive workspace updates without full clone. Hot runners + incremental sync = fastest possible iteration. -- **[Artifact System](build-output-system)** - Return structured, typed results. -- **[Test Workflow Engine](test-workflow-engine)** - Execute test suites with taxonomy filtering. +- **[Artifact System](build-output-system)** - Return structured, typed results. +- **[Test Workflow Engine](test-workflow-engine)** - Execute test suites with taxonomy filtering. ## Inputs Reference diff --git a/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx index 9badc957..f845b7c6 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/13-build-output-system.mdx @@ -9,7 +9,7 @@ post-processing pipelines, and first-class GitHub integration. ## Overview -Production Unity workflows produce many output types beyond a single build artifact - test results, +Production Unity workflows produce many output types beyond a single build artifact - test results, screenshots, server builds, exported data, metrics, and logs. Each type needs different handling: storage, processing, reporting, and retention. The output system provides a structured way to declare, collect, process, and report on all of these. @@ -173,11 +173,11 @@ Output types automatically integrate with GitHub CI surfaces: | Output Type | GitHub Surface | | --------------- | ------------------------------------------------------ | -| Test results | Check annotations - inline failure markers on PR diffs | -| Images | PR comment - image grid with baseline diffs | -| Metrics | Check summary - trend charts and delta tables | -| Coverage | PR comment - coverage percentage and delta | -| Build artifacts | Check run - download links | +| Test results | Check annotations - inline failure markers on PR diffs | +| Images | PR comment - image grid with baseline diffs | +| Metrics | Check summary - trend charts and delta tables | +| Coverage | PR comment - coverage percentage and delta | +| Build artifacts | Check run - download links | ## Combining with Test Suites diff --git a/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx index d922a4ad..841eb67f 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/14-incremental-sync-protocol.mdx @@ -11,7 +11,7 @@ traditional caching. Changes come from git deltas, direct input, or generic stor Traditional caching archives the Library folder, pushes to storage, pulls on next build, and extracts. Even with cache hits, this takes minutes. The incremental sync protocol eliminates caching -entirely for warm environments - instead of "restore the world," it says "here's what changed." +entirely for warm environments - instead of "restore the world," it says "here's what changed." ## Sync Strategies @@ -51,7 +51,7 @@ Trigger jobs **without pushing to git**. Changes are passed as input: syncInputRef: storage://my-remote/inputs/changes.tar.lz4 ``` -For small changes, content can be inline. For large inputs, content is pulled from generic storage - +For small changes, content can be inline. For large inputs, content is pulled from generic storage - backed by rclone, so **any storage provider works**: S3, GCS, Azure Blob, local filesystem, WebDAV, SFTP, and dozens more. @@ -78,7 +78,7 @@ The protocol: 4. Executes the build/test 5. Optionally reverts the overlay after completion -Users don't need git push access to trigger builds - just write access to the storage backend. +Users don't need git push access to trigger builds - just write access to the storage backend. ### Why rclone? @@ -101,9 +101,9 @@ that works with any provider: | Provider | Sync Strategy | How It Works | | ----------------------- | -------------- | ------------------------------------------- | -| Hot runner (persistent) | `git-delta` | Fastest - warm editor, minimal changes | +| Hot runner (persistent) | `git-delta` | Fastest - warm editor, minimal changes | | Hot runner (persistent) | `direct-input` | No-push iteration | -| Retained workspace | `git-delta` | Fast - workspace persists, no editor warmth | +| Retained workspace | `git-delta` | Fast - workspace persists, no editor warmth | | Cold container | `storage-pull` | Pull overlay, apply to fresh clone | Hot runners + incremental sync = fastest possible iteration cycle. diff --git a/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx index 4d16eb12..6fb20ebf 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/15-massive-projects.mdx @@ -4,22 +4,22 @@ sidebar_position: 15 # Massive Projects -Orchestrator includes specific support for Unity projects at extreme scale - repositories exceeding +Orchestrator includes specific support for Unity projects at extreme scale - repositories exceeding 100 GB, asset counts above 500,000 files, and Library folders that dwarf the source tree itself. ## Overview Standard CI assumptions break down at this scale: -- **Clone times** - A 100 GB repository with Git LFS takes 15–45 minutes to clone cold, consuming +- **Clone times** - A 100 GB repository with Git LFS takes 15–45 minutes to clone cold, consuming most of a build budget before Unity opens. -- **Library folder sizes** - Import caches for large projects routinely reach 30–80 GB. Tarring, +- **Library folder sizes** - Import caches for large projects routinely reach 30–80 GB. Tarring, uploading, downloading, and extracting this on every build is impractical. -- **LFS bandwidth** - Pulling all LFS objects for every build exhausts quotas and slows pipelines. +- **LFS bandwidth** - Pulling all LFS objects for every build exhausts quotas and slows pipelines. Most builds need only a fraction of the asset set. -- **Cache inflation** - GitHub Actions cache and similar systems impose size limits (typically 10 GB +- **Cache inflation** - GitHub Actions cache and similar systems impose size limits (typically 10 GB per entry) that Library folders quickly exceed. -- **CI timeouts** - Default job timeouts of 6 hours are insufficient for cold clones followed by +- **CI timeouts** - Default job timeouts of 6 hours are insufficient for cold clones followed by full imports on large projects. Orchestrator addresses each of these with a two-level workspace architecture, move-centric caching, @@ -29,11 +29,11 @@ selective LFS hydration, and submodule profile filtering. Orchestrator manages workspaces at two levels: -**Root workspace** - A lean, long-lived clone of the repository. It contains the full git history +**Root workspace** - A lean, long-lived clone of the repository. It contains the full git history and index, a minimal set of LFS objects (only those needed for compilation), and no Unity Library folder. The root workspace is cached across builds and updated incrementally. -**Child workspaces** - Per-build-target workspaces derived from the root. Each child is LFS-hydrated +**Child workspaces** - Per-build-target workspaces derived from the root. Each child is LFS-hydrated for its specific asset paths, contains the Library folder for its platform target, and is retained between builds of the same target. @@ -85,10 +85,10 @@ in milliseconds. The cache lifecycle for a Library folder: -1. Build starts - move Library from cache to workspace (instant) -2. Unity runs - Library is warm, only changed assets reimport -3. Build ends - move Library back to cache (instant) -4. Next build - Library is already warm at cache location +1. Build starts - move Library from cache to workspace (instant) +2. Unity runs - Library is warm, only changed assets reimport +3. Build ends - move Library back to cache (instant) +4. Next build - Library is already warm at cache location This eliminates the archive/upload/download/extract cycle entirely for builds running on retained storage. Remote cache fallback (S3, GCS, Azure Blob via rclone) is still available for cold runners @@ -163,7 +163,7 @@ submodules: branch: main ``` -Profile initialization is atomic - skipped submodules are never touched, so build time scales with +Profile initialization is atomic - skipped submodules are never touched, so build time scales with the active submodule set rather than the total repository size. ## Incremental Sync @@ -173,11 +173,11 @@ entirely. See the [Incremental Sync Protocol](incremental-sync-protocol) page fo The two strategies most relevant to massive projects: -**git-delta** - The runner tracks its last sync commit SHA. On job dispatch it receives the target +**git-delta** - The runner tracks its last sync commit SHA. On job dispatch it receives the target SHA, diffs the two, and checks out only the changed files. Assets that have not changed are not touched, and their Library import state remains valid. -**storage-pull** - For assets that live outside git (too large for LFS, or managed by a separate +**storage-pull** - For assets that live outside git (too large for LFS, or managed by a separate pipeline), the runner pulls only the changed files from a generic storage remote. This combines with git-delta so that code changes and asset changes are both handled incrementally. diff --git a/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx index 40bb25a9..b824a5d4 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/16-monorepo-support.mdx @@ -4,7 +4,7 @@ sidebar_position: 16 # Monorepo Support -Orchestrator provides first-class support for Unity monorepos - single repositories that contain +Orchestrator provides first-class support for Unity monorepos - single repositories that contain multiple products sharing engine code, submodules, and build configuration. ## Overview @@ -42,7 +42,7 @@ submodules: branch: main ``` -`primary_submodule` identifies the main game submodule - the orchestrator uses this as the root of +`primary_submodule` identifies the main game submodule - the orchestrator uses this as the root of the build context. Each entry under `submodules` names a submodule (or a glob pattern matching multiple submodules) and diff --git a/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx b/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx index 818af019..1a627c3c 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/17-build-reliability.mdx @@ -6,7 +6,7 @@ sidebar_position: 17 Build reliability features harden CI builds against common failure modes: git corruption on persistent runners, Windows filesystem issues with cross-platform repositories, and build output -management. All features are opt-in via action inputs and fail gracefully - a reliability check that +management. All features are opt-in via action inputs and fail gracefully - a reliability check that encounters an error logs a warning rather than failing the build. ## Git Integrity Checking @@ -21,16 +21,16 @@ Git integrity checking catches corruption before it causes build failures. The integrity check runs three validations in sequence: -1. **`git fsck --no-dangling`** - Detects broken links, missing objects, and corrupt pack data in +1. **`git fsck --no-dangling`** - Detects broken links, missing objects, and corrupt pack data in the local repository. The `--no-dangling` flag suppresses harmless warnings about unreachable objects that are normal in CI environments. -2. **Stale lock files** - Scans the `.git/` directory recursively for any files ending in `.lock` +2. **Stale lock files** - Scans the `.git/` directory recursively for any files ending in `.lock` (`index.lock`, `shallow.lock`, `config.lock`, `HEAD.lock`, `refs/**/*.lock`). These are left behind by git processes that were killed mid-operation and prevent subsequent git commands from running. All lock files found are removed. -3. **Submodule backing stores** - For each submodule declared in `.gitmodules`, validates that the +3. **Submodule backing stores** - For each submodule declared in `.gitmodules`, validates that the `.git` file inside the submodule directory points to an existing backing store under `.git/modules/`. A broken backing store reference means the submodule's history is inaccessible, and any git operation inside it will fail. @@ -83,7 +83,7 @@ these names, checking them out on Windows causes problems. ### The Problem Unity is particularly sensitive to reserved filenames. When the asset importer encounters a file -named `aux.meta`, `nul.png`, or similar, it can enter an infinite reimport loop - detecting the +named `aux.meta`, `nul.png`, or similar, it can enter an infinite reimport loop - detecting the file, failing to process it, detecting it again. This manifests as: - Unity hanging during asset import with no progress @@ -134,7 +134,7 @@ managed with a count-based retention policy. 1. After a successful build, the build output directory is moved (or copied, if a cross-device move is not possible) to `{archivePath}/{platform}/build-{timestamp}`. -2. Archives are organized by platform - each target platform gets its own subdirectory. +2. Archives are organized by platform - each target platform gets its own subdirectory. 3. The retention policy keeps the N most recent builds per platform. Older builds are automatically removed. @@ -168,7 +168,7 @@ archives are removed. The reliability service configures a git environment variable automatically: -- `GIT_CONFIG_NOSYSTEM=1` - Bypasses the system-level git configuration file. This prevents +- `GIT_CONFIG_NOSYSTEM=1` - Bypasses the system-level git configuration file. This prevents corrupted or misconfigured system git configs on self-hosted runners from affecting builds. This is applied automatically and does not require any configuration. diff --git a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx index 05393870..beefd115 100644 --- a/docs/03-github-orchestrator/08-cli/01-getting-started.mdx +++ b/docs/03-github-orchestrator/08-cli/01-getting-started.mdx @@ -5,7 +5,7 @@ sidebar_position: 1 # Getting Started with the CLI The `game-ci` CLI lets you run Unity builds, activate licenses, and manage caches directly from your -terminal - no GitHub Actions or CI platform required. +terminal - no GitHub Actions or CI platform required. ## Installation @@ -134,6 +134,6 @@ availability, and which license environment variables are set. ## Next Steps -- [Build Command Reference](build-command) - full list of build flags and options -- [Orchestrate Command](orchestrate-command) - run builds on cloud infrastructure -- [Other Commands](other-commands) - license activation, cache management, and more +- [Build Command Reference](build-command) - full list of build flags and options +- [Orchestrate Command](orchestrate-command) - run builds on cloud infrastructure +- [Other Commands](other-commands) - license activation, cache management, and more diff --git a/docs/03-github-orchestrator/08-cli/02-build-command.mdx b/docs/03-github-orchestrator/08-cli/02-build-command.mdx index d4a14f0c..c8fe0fbe 100644 --- a/docs/03-github-orchestrator/08-cli/02-build-command.mdx +++ b/docs/03-github-orchestrator/08-cli/02-build-command.mdx @@ -153,6 +153,6 @@ game-ci build \ ## See Also -- [Getting Started](getting-started) - installation and first build -- [Orchestrate Command](orchestrate-command) - run builds on cloud infrastructure -- [API Reference](../api-reference) - full parameter reference for the GitHub Action +- [Getting Started](getting-started) - installation and first build +- [Orchestrate Command](orchestrate-command) - run builds on cloud infrastructure +- [API Reference](../api-reference) - full parameter reference for the GitHub Action diff --git a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx index abc5227a..91b6d0fc 100644 --- a/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx +++ b/docs/03-github-orchestrator/08-cli/03-orchestrate-command.mdx @@ -143,7 +143,7 @@ game-ci orchestrate \ ## See Also -- [Getting Started](getting-started) - installation and first build -- [Build Command](build-command) - local Docker builds -- [API Reference](../api-reference) - full parameter reference -- [Providers](../providers/overview) - provider-specific setup guides +- [Getting Started](getting-started) - installation and first build +- [Build Command](build-command) - local Docker builds +- [API Reference](../api-reference) - full parameter reference +- [Providers](../providers/overview) - provider-specific setup guides diff --git a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx index ffb91a3f..656bb2af 100644 --- a/docs/03-github-orchestrator/08-cli/04-other-commands.mdx +++ b/docs/03-github-orchestrator/08-cli/04-other-commands.mdx @@ -104,13 +104,13 @@ game-ci status Reports: -- **Project** - detected Unity project path and whether a project was found -- **Unity Version** - version detected from `ProjectSettings/ProjectVersion.txt` -- **Library Cache** - whether the Library folder is present and when it was last modified -- **Build Outputs** - any existing build output directories -- **Environment** - platform, Node.js version, and which license environment variables are set - (`UNITY_SERIAL`, `UNITY_LICENSE`, `UNITY_EMAIL`, `UNITY_PASSWORD` - shown as Set/Not set) -- **Docker** - whether Docker is available and its version +- **Project** - detected Unity project path and whether a project was found +- **Unity Version** - version detected from `ProjectSettings/ProjectVersion.txt` +- **Library Cache** - whether the Library folder is present and when it was last modified +- **Build Outputs** - any existing build output directories +- **Environment** - platform, Node.js version, and which license environment variables are set + (`UNITY_SERIAL`, `UNITY_LICENSE`, `UNITY_EMAIL`, `UNITY_PASSWORD` - shown as Set/Not set) +- **Docker** - whether Docker is available and its version ### Flags @@ -180,6 +180,6 @@ game-ci cache --help ## See Also -- [Getting Started](getting-started) - installation and first build -- [Build Command](build-command) - full build reference -- [Orchestrate Command](orchestrate-command) - cloud builds +- [Getting Started](getting-started) - installation and first build +- [Build Command](build-command) - full build reference +- [Orchestrate Command](orchestrate-command) - cloud builds From 6f04c0311c1db3877feff1a8f2bef78ab06771b4 Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 21:37:28 +0000 Subject: [PATCH 50/60] docs: update CLI examples to use standalone orchestrator binary Replace old "git clone unity-builder / yarn run cli" instructions with the proper game-ci CLI install and usage from the orchestrator package. Co-Authored-By: Claude Opus 4.6 --- .../03-examples/01-command-line.mdx | 84 ++++++++++++------- 1 file changed, 52 insertions(+), 32 deletions(-) diff --git a/docs/03-github-orchestrator/03-examples/01-command-line.mdx b/docs/03-github-orchestrator/03-examples/01-command-line.mdx index 9159f7d3..151215fd 100644 --- a/docs/03-github-orchestrator/03-examples/01-command-line.mdx +++ b/docs/03-github-orchestrator/03-examples/01-command-line.mdx @@ -1,67 +1,87 @@ # Command Line -You can install Game CI locally and start orchestrator jobs from the command line or by integrating -your own tools. All parameters in the [API Reference](../api-reference) can be specified as CLI -flags. +You can run orchestrator builds directly from your terminal - no GitHub Actions or CI platform +required. All parameters in the [API Reference](../api-reference) can be specified as CLI flags. ## Install +### Linux / macOS + ```bash -git clone https://github.com/game-ci/unity-builder.git -cd unity-builder -yarn install +curl -fsSL https://raw.githubusercontent.com/game-ci/orchestrator/main/install.sh | sh ``` -## Usage +### Windows (PowerShell) -```bash -yarn run cli -m --projectPath [options] +```powershell +irm https://raw.githubusercontent.com/game-ci/orchestrator/main/install.ps1 | iex ``` -### Examples +Pre-built binaries for every platform are available on the +[GitHub Releases](https://github.com/game-ci/orchestrator/releases) page. + +## Examples -Run a standard build: +### Local build ```bash -yarn run cli -m cli-build \ - --projectPath /path/to/your/unity/project \ - --providerStrategy aws \ - --targetPlatform StandaloneLinux64 \ - --gitPrivateToken $GIT_TOKEN +game-ci build \ + --target-platform StandaloneLinux64 ``` -List active resources: +### Cloud build (AWS) ```bash -yarn run cli -m list-resources --providerStrategy aws +game-ci build \ + --target-platform StandaloneLinux64 \ + --provider-strategy aws \ + --git-private-token $GIT_TOKEN ``` -Watch a running build: +### Cloud build (Kubernetes) ```bash -yarn run cli -m watch --providerStrategy aws +game-ci build \ + --target-platform StandaloneLinux64 \ + --provider-strategy k8s \ + --git-private-token $GIT_TOKEN ``` -Clean up old resources: +### List active resources ```bash -yarn run cli -m garbage-collect --providerStrategy aws +game-ci list-resources --provider-strategy aws ``` -## Help +### Watch a running build -Run `yarn run cli --help` to list all modes and parameters with descriptions. +```bash +game-ci watch --provider-strategy aws +``` -## Keeping Commands Short +### Clean up old resources -You can avoid long CLI flags for credentials by using environment variables or the -[Pull Secrets](../secrets#-pulling-secrets-from-external-sources) feature. +```bash +game-ci garbage-collect --provider-strategy aws +``` + +## Keeping Commands Short -This lets you pull input from a secret manager: +Avoid long CLI flags for credentials by using environment variables or the +[Pull Secrets](../secrets#-pulling-secrets-from-external-sources) feature: ```bash -yarn run cli \ - --populateOverride true \ - --pullInputList UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD \ - --inputPullCommand='gcloud secrets versions access 1 --secret="{0}"' +game-ci build \ + --target-platform StandaloneLinux64 \ + --populate-override true \ + --pull-input-list UNITY_EMAIL,UNITY_SERIAL,UNITY_PASSWORD \ + --input-pull-command='gcloud secrets versions access 1 --secret="{0}"' ``` + +## Further Reading + +- [CLI Getting Started](../cli/getting-started) - installation options, license activation, first + build walkthrough +- [Build Command Reference](../cli/build-command) - full list of build flags +- [Orchestrate Command](../cli/orchestrate-command) - cloud-specific options +- [Other Commands](../cli/other-commands) - license activation, cache management, and more From 64a8769d802cd39e777f5459eba18de203b5fb00 Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 21:51:27 +0000 Subject: [PATCH 51/60] docs: add mermaid support and convert ASCII diagrams across orchestrator docs - Enable @docusaurus/theme-mermaid for native diagram rendering - Convert all ASCII box-drawing diagrams to mermaid flowcharts (22 files) - Fix broken admonition syntax (:::info/:::caution blocks) - Rewrite getting-started page with clear GitHub Actions and CLI sections Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 41 +- .../02-game-ci-vs-orchestrator.mdx | 22 +- .../02-getting-started.mdx | 99 +- docs/03-github-orchestrator/04-jobs.mdx | 14 +- .../05-providers/01-overview.mdx | 16 +- .../05-providers/02-aws.mdx | 26 +- .../04-github-actions-dispatch.mdx | 30 +- .../05-providers/05-gitlab-ci-dispatch.mdx | 29 +- .../05-providers/06-custom-providers.mdx | 17 +- .../05-providers/07-ansible.mdx | 27 +- .../05-providers/08-github-integration.mdx | 21 +- .../05-providers/10-gcp-cloud-run.mdx | 25 +- .../05-providers/11-azure-aci.mdx | 26 +- .../05-providers/12-cli-provider-protocol.mdx | 18 +- .../07-advanced-topics/01-caching.mdx | 18 +- .../02-retained-workspace.mdx | 21 +- .../04-garbage-collection.mdx | 27 +- .../05-hooks/04-container-hooks.mdx | 22 +- .../07-advanced-topics/06-logging.mdx | 9 +- .../07-advanced-topics/07-load-balancing.mdx | 40 +- .../07-advanced-topics/08-storage.mdx | 49 +- .../07-advanced-topics/09-architecture.mdx | 104 +- .../07-advanced-topics/10-build-services.mdx | 21 +- docusaurus.config.js | 4 + package.json | 1 + yarn.lock | 9018 ++++++++++------- 26 files changed, 5551 insertions(+), 4194 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index cd60ca17..a9560dc3 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -6,29 +6,36 @@ command line, or any CI system. Orchestrator provisions a cloud environment, sends your project to be built, and streams results back. -``` - Your Machine / CI Cloud Provider - ┌──────────────┐ git push ┌─────────────────┐ - │ GitHub │ ─────────────────►│ AWS Fargate │ - │ Actions, │ │ Kubernetes │ - │ GitLab CI, │ ◄─────────────────│ Local Docker │ - │ CLI, etc. │ build artifacts │ │ - └──────────────┘ └─────────────────┘ - │ │ - │ Orchestrator handles: │ - │ * Provisioning │ - │ * Git sync + LFS │ - │ * Caching (S3 / rclone) │ - │ * Automatic cleanup │ - └───────────────────────────────────┘ +```mermaid +flowchart LR + subgraph local["Your Machine / CI"] + A["GitHub Actions\nGitLab CI\nCLI, etc."] + end + subgraph cloud["Cloud Provider"] + B["AWS Fargate\nKubernetes\nLocal Docker"] + end + A -- "git push" --> B + B -- "build artifacts" --> A + + subgraph handles["Orchestrator handles"] + direction TB + C["Provisioning"] + D["Git sync + LFS"] + E["Caching (S3 / rclone)"] + F["Automatic cleanup"] + end ``` Orchestrator supports large projects with first-class Unity support and native cloud services like AWS Fargate and Kubernetes. -:::info Standalone Package The orchestrator is available as a standalone package +:::info Standalone Package + +The orchestrator is available as a standalone package [`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator). When installed, unity-builder -automatically detects and loads it via the plugin interface. ::: +automatically detects and loads it via the plugin interface. + +::: ## ✅ Why Orchestrator? diff --git a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx index e4ce3c61..a07fc0a5 100644 --- a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx +++ b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx @@ -20,18 +20,16 @@ the CI runner itself. This is useful when: - You need **more CPU or memory** than the CI platform provides - You want to **scale to many concurrent builds** without managing servers -``` - Standard Game-CI Orchestrator Mode - - ┌────────────────┐ ┌─────────────────┐ ┌──────────────┐ - │ GitHub │ │ GitHub Action │ │ │ - │ Runner │ │ CLI / Any CI │───►│ Cloud │ - │ │ │ │ │ Container │ - │ (builds │ │ (dispatches │◄───│ (builds │ - │ locally) │ │ only) │ │ remotely) │ - └────────────────┘ └─────────────────┘ └──────────────┘ - ~14 GB disk Configurable CPU, memory, disk - Fixed resources Scales to zero when idle +```mermaid +flowchart LR + subgraph Standard Game-CI + GR["GitHub Runner\n(builds locally)\n\n~14 GB disk\nFixed resources"] + end + subgraph Orchestrator Mode + GA["GitHub Action\nCLI / Any CI\n(dispatches only)\n\nConfigurable CPU, memory, disk\nScales to zero when idle"] + CC["Cloud Container\n(builds remotely)"] + GA <--> CC + end ``` ## Self-Hosted Runners vs Orchestrator diff --git a/docs/03-github-orchestrator/02-getting-started.mdx b/docs/03-github-orchestrator/02-getting-started.mdx index 21945a9b..c5bc3ba4 100644 --- a/docs/03-github-orchestrator/02-getting-started.mdx +++ b/docs/03-github-orchestrator/02-getting-started.mdx @@ -3,30 +3,28 @@ Orchestrator lets you run Unity builds on remote cloud infrastructure instead of GitHub-hosted runners. This is useful for large projects that exceed GitHub's disk or resource limits. -The orchestrator is distributed as a standalone npm package -([`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator)). When installed alongside -unity-builder, it is automatically detected and loaded via the plugin interface. +The orchestrator is distributed as a standalone package +([`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator)). It can be used from GitHub +Actions (via `game-ci/unity-builder`) or directly from the command line. ## Prerequisites -- A Unity project in a GitHub repository +- A Unity project - A cloud provider account (AWS or a Kubernetes cluster) -- Provider credentials configured as GitHub [secrets](secrets) +- Provider credentials (as GitHub secrets or environment variables) -## Quick Start +## GitHub Actions -1. **Choose a provider**: `aws` (AWS Fargate) or `k8s` (Kubernetes) -2. **Configure credentials** for your chosen provider -3. **Add the orchestrator step** to your workflow +### 1. Install the orchestrator -See the provider-specific setup guides: +Add a step before `unity-builder` to install the orchestrator package: -- [AWS Fargate](providers/aws) -- [Kubernetes](providers/kubernetes) -- [Local Docker](providers/local-docker) -- [Command Line](examples/command-line) +```yaml +- name: Install orchestrator + run: npm install -g @game-ci/orchestrator +``` -## Minimal Example +### 2. Run the build ```yaml - uses: game-ci/unity-builder@main @@ -36,4 +34,73 @@ See the provider-specific setup guides: gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} ``` -For full parameter documentation, see the [API Reference](api-reference). +### Full workflow example + +```yaml +name: Build +on: push + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install orchestrator + run: npm install -g @game-ci/orchestrator + + - uses: game-ci/unity-builder@main + env: + UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} + UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} + UNITY_SERIAL: ${{ secrets.UNITY_SERIAL }} + with: + providerStrategy: aws + targetPlatform: StandaloneLinux64 + gitPrivateToken: ${{ secrets.GITHUB_TOKEN }} +``` + +## Command Line + +### 1. Install + +```bash +# Linux / macOS +curl -fsSL https://raw.githubusercontent.com/game-ci/orchestrator/main/install.sh | sh + +# Windows (PowerShell) +irm https://raw.githubusercontent.com/game-ci/orchestrator/main/install.ps1 | iex +``` + +### 2. Set credentials + +```bash +export UNITY_SERIAL="XX-XXXX-XXXX-XXXX-XXXX-XXXX" +export AWS_ACCESS_KEY_ID="..." +export AWS_SECRET_ACCESS_KEY="..." +``` + +### 3. Run a build + +```bash +game-ci build \ + --target-platform StandaloneLinux64 \ + --provider-strategy aws +``` + +See the [CLI documentation](cli/getting-started) for full details. + +## Choose a Provider + +| Provider | Best for | +| -------------------------------------- | ---------------------------- | +| [AWS Fargate](providers/aws) | Fully managed, no servers | +| [Kubernetes](providers/kubernetes) | Existing K8s clusters | +| [Local Docker](providers/local-docker) | Testing locally before cloud | + +## Next Steps + +- [Provider setup guides](providers/overview) - configure your cloud credentials +- [API Reference](api-reference) - full parameter documentation +- [Examples](examples/github-actions) - more workflow examples +- [CLI Reference](cli/build-command) - full CLI flag reference diff --git a/docs/03-github-orchestrator/04-jobs.mdx b/docs/03-github-orchestrator/04-jobs.mdx index 8fa3558b..264a49e0 100644 --- a/docs/03-github-orchestrator/04-jobs.mdx +++ b/docs/03-github-orchestrator/04-jobs.mdx @@ -7,15 +7,11 @@ provider. Understanding job types and their flow is key to customizing your buil Every Orchestrator run follows the same lifecycle, regardless of provider: -``` - ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ - │ Setup │────►│ Pre-Build │────►│ Build │────►│ Post-Build │ - │ Provider │ │ Jobs │ │ Job │ │ Jobs │ - └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ - │ │ - │ ┌─────────────┐ │ - └───────────────────►│ Cleanup │◄────────────────────────┘ - └─────────────┘ +```mermaid +flowchart LR + S["Setup\nProvider"] --> PRE["Pre-Build\nJobs"] --> B["Build\nJob"] --> POST["Post-Build\nJobs"] + S --> C["Cleanup"] + POST --> C ``` 1. **Setup** - Provision cloud resources (stacks, volumes, secrets). Skipped for local providers. diff --git a/docs/03-github-orchestrator/05-providers/01-overview.mdx b/docs/03-github-orchestrator/05-providers/01-overview.mdx index be952d2d..b32a1827 100644 --- a/docs/03-github-orchestrator/05-providers/01-overview.mdx +++ b/docs/03-github-orchestrator/05-providers/01-overview.mdx @@ -3,16 +3,12 @@ A **provider** is the backend that Orchestrator uses to run your builds. You choose a provider by setting the `providerStrategy` parameter. -``` - ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ - │ aws │ │ k8s │ │ local-docker │ │ local │ - │ │ │ │ │ │ │ │ - │ Fargate │ │ Cluster │ │ Container │ │ Direct │ - │ Fully │ │ Bring your │ │ No cloud │ │ No container │ - │ managed │ │ own cluster │ │ needed │ │ needed │ - └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ - Cloud scaling Cloud scaling Local builds Local builds - No servers Flexible Docker required Simplest setup +```mermaid +graph LR + aws["aws
Fargate
Fully managed
Cloud scaling
No servers"] + k8s["k8s
Cluster
Bring your own cluster
Cloud scaling
Flexible"] + ld["local-docker
Container
No cloud needed
Local builds
Docker required"] + local["local
Direct
No container needed
Local builds
Simplest setup"] ``` ## Built-in Providers diff --git a/docs/03-github-orchestrator/05-providers/02-aws.mdx b/docs/03-github-orchestrator/05-providers/02-aws.mdx index 24a2a70a..f1da314c 100644 --- a/docs/03-github-orchestrator/05-providers/02-aws.mdx +++ b/docs/03-github-orchestrator/05-providers/02-aws.mdx @@ -4,23 +4,15 @@ Orchestrator creates and manages these AWS resources automatically: -``` - CloudFormation (base stack) - ┌──────────────────────────────────────────────────┐ - │ │ - │ ┌────────────┐ ┌─────────────┐ │ - │ │ ECS │ │ S3 │ │ - │ │ Fargate │ │ Bucket │ │ - │ │ (build │ │ (cache + │ │ - │ │ tasks) │ │ artifacts) │ │ - │ └────────────┘ └─────────────┘ │ - │ │ - │ ┌────────────┐ ┌─────────────┐ │ - │ │ CloudWatch │───►│ Kinesis │──► Log stream │ - │ │ Logs │ │ Stream │ to CI │ - │ └────────────┘ └─────────────┘ │ - │ │ - └──────────────────────────────────────────────────┘ +```mermaid +graph LR + subgraph CF["CloudFormation (base stack)"] + ECS["ECS Fargate
(build tasks)"] + S3["S3 Bucket
(cache + artifacts)"] + CW["CloudWatch Logs"] + KS["Kinesis Stream"] + end + CW --> KS --> Log["Log stream to CI"] ``` ## Requirements diff --git a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx index 5c4fc8f6..d2ea60f8 100644 --- a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx +++ b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx @@ -84,22 +84,20 @@ Set `providerStrategy: github-actions` and supply the required inputs: ## How It Works -``` - Orchestrator (your repo) Target repo - ┌──────────────────────┐ ┌──────────────────────┐ - │ │ workflow_dispatch│ │ - │ 1. Validate target │──────────────────►│ 4. Run build job │ - │ workflow exists │ │ on target runner │ - │ │ │ │ - │ 2. Dispatch event │ │ 5. Execute commands │ - │ with build inputs│ │ │ - │ │ poll status │ │ - │ 3. Wait for run to │◄─────────────────►│ 6. Complete │ - │ appear │ │ │ - │ │ fetch logs │ │ - │ 7. Stream logs and │◄──────────────────│ │ - │ report result │ │ │ - └──────────────────────┘ └──────────────────────┘ +```mermaid +sequenceDiagram + participant O as Orchestrator (your repo) + participant T as Target repo + O->>O: 1. Validate target workflow exists + O->>T: 2. Dispatch event with build inputs (workflow_dispatch) + O->>O: 3. Wait for run to appear + T->>T: 4. Run build job on target runner + T->>T: 5. Execute commands + O->>T: Poll status + T-->>O: Status updates + T->>T: 6. Complete + T-->>O: Fetch logs + O->>O: 7. Stream logs and report result ``` 1. **Setup** - The orchestrator verifies the target workflow exists by querying the GitHub API. diff --git a/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx index db85587e..3183599d 100644 --- a/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx +++ b/docs/03-github-orchestrator/05-providers/05-gitlab-ci-dispatch.mdx @@ -75,22 +75,19 @@ gitlabApiUrl: https://gitlab.internal.company.com ## How It Works -``` - Orchestrator (GitHub) GitLab CI - ┌──────────────────────┐ ┌──────────────────────┐ - │ │ POST /trigger │ │ - │ 1. Verify project │────────────────►│ 3. Run pipeline │ - │ access │ │ jobs on GitLab │ - │ │ │ Runners │ - │ 2. Trigger pipeline │ │ │ - │ with variables │ poll status │ 4. Execute build │ - │ │◄───────────────►│ commands │ - │ 5. Monitor pipeline │ │ │ - │ status │ fetch job logs │ 5. Complete │ - │ │◄────────────────│ │ - │ 6. Collect per-job │ │ │ - │ logs and report │ │ │ - └──────────────────────┘ └──────────────────────┘ +```mermaid +sequenceDiagram + participant O as Orchestrator (GitHub) + participant G as GitLab CI + O->>O: 1. Verify project access + O->>G: 2. Trigger pipeline with variables (POST /trigger) + G->>G: 3. Run pipeline jobs on GitLab Runners + G->>G: 4. Execute build commands + O->>G: 5. Monitor pipeline status (poll) + G-->>O: Status updates + G->>G: 5. Complete + G-->>O: Fetch job logs + O->>O: 6. Collect per-job logs and report ``` 1. **Setup** - The orchestrator verifies access to the GitLab project using the provided token. diff --git a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx index 6aef64ca..1625c0b0 100644 --- a/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx +++ b/docs/03-github-orchestrator/05-providers/06-custom-providers.mdx @@ -7,17 +7,12 @@ pluggable backend that controls where and how your builds run. Built-in provider With custom providers, you can point `providerStrategy` at a GitHub repository, NPM package, or local path and Orchestrator will dynamically load it at runtime. -``` - providerStrategy Build - ┌─────────────────┐ fetch ┌────────────────┐ ┌──────────────┐ - │ "user/repo" │──────────►│ Clone repo / │ │ │ - │ "npm-package" │ │ Install pkg / │──►│ Provider │ - │ "./local/path" │ │ Resolve path │ │ Interface │ - └─────────────────┘ └────────────────┘ │ │ - cached in │ setupWorkflow│ - .provider-cache/ │ runTask │ - │ cleanup │ - └──────────────┘ +```mermaid +graph LR + PS["providerStrategy
"user/repo"
"npm-package"
"./local/path""] + Fetch["Clone repo /
Install pkg /
Resolve path
cached in .provider-cache/"] + PI["Provider Interface
setupWorkflow
runTask
cleanup"] + PS -->|fetch| Fetch --> PI ``` ## Using a Custom Provider diff --git a/docs/03-github-orchestrator/05-providers/07-ansible.mdx b/docs/03-github-orchestrator/05-providers/07-ansible.mdx index 1de34956..5656af70 100644 --- a/docs/03-github-orchestrator/05-providers/07-ansible.mdx +++ b/docs/03-github-orchestrator/05-providers/07-ansible.mdx @@ -138,21 +138,18 @@ all: ## How It Works -``` - Orchestrator (runner) Ansible → Target Machines - ┌──────────────────────┐ ┌──────────────────────┐ - │ │ verify ansible │ │ - │ 1. Check ansible │ verify inventory│ │ - │ is installed │ │ │ - │ │ │ │ - │ 2. Build extra-vars │ ansible-playbook│ 3. Connect to hosts │ - │ from build │────────────────►│ in inventory │ - │ parameters │ │ │ - │ │ │ 4. Execute playbook │ - │ │ stdout stream │ tasks │ - │ 5. Capture output │◄────────────────│ │ - │ and report │ │ 6. Complete │ - └──────────────────────┘ └──────────────────────┘ +```mermaid +sequenceDiagram + participant O as Orchestrator (runner) + participant A as Ansible / Target Machines + O->>O: 1. Check ansible is installed, verify inventory + O->>O: 2. Build extra-vars from build parameters + O->>A: Run ansible-playbook + A->>A: 3. Connect to hosts in inventory + A->>A: 4. Execute playbook tasks + A-->>O: stdout stream + O->>O: 5. Capture output and report + A->>A: 6. Complete ``` 1. **Setup** - The orchestrator verifies that `ansible` is available on `PATH` and that the diff --git a/docs/03-github-orchestrator/05-providers/08-github-integration.mdx b/docs/03-github-orchestrator/05-providers/08-github-integration.mdx index 9225960f..9b22691f 100644 --- a/docs/03-github-orchestrator/05-providers/08-github-integration.mdx +++ b/docs/03-github-orchestrator/05-providers/08-github-integration.mdx @@ -28,16 +28,17 @@ Set [`asyncOrchestrator: true`](../api-reference#github-integration) to start a waiting for it to complete. The GitHub Action will return immediately and you can check progress via GitHub Checks or by running the [`watch` mode](../api-reference#modes). -``` - GitHub Action Cloud GitHub PR - ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ - │ 1. Dispatch │──────────►│ 2. Building │ │ │ - │ 3. Return │ │ ... │────────►│ 4. Check │ - │ (done) │ │ ... │ update │ updated │ - └──────────────┘ │ 5. Complete │────────►│ 6. Check │ - Action finishes └──────────────┘ └──────────────┘ - in seconds Build runs for Monitor from - minutes/hours the PR page +```mermaid +sequenceDiagram + participant GA as GitHub Action + participant C as Cloud + participant PR as GitHub PR + GA->>C: 1. Dispatch + GA->>GA: 3. Return (done, action finishes in seconds) + C->>C: 2. Building... + C->>PR: 4. Check updated + C->>C: 5. Complete (build runs for minutes/hours) + C->>PR: 6. Check updated (monitor from the PR page) ``` ```yaml diff --git a/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx index fa9f7caa..a53f00de 100644 --- a/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx +++ b/docs/03-github-orchestrator/05-providers/10-gcp-cloud-run.mdx @@ -3,21 +3,18 @@ Run Unity builds as [Cloud Run Jobs](https://cloud.google.com/run/docs/create-jobs) - one-off serverless container executions with configurable storage backends. -:::caution Experimental This provider is experimental. APIs and behavior may change between -releases. ::: +:::caution Experimental -``` - GitHub Actions Runner - ┌──────────────────────────┐ - │ unity-builder │ - │ providerStrategy: │ gcloud CLI - │ gcp-cloud-run │────────────────► Cloud Run Jobs API - │ │ ┌─────────────────┐ - │ gcpStorageType: │ │ Job: unity-build│ - │ gcs-fuse / gcs-copy / │ │ │ - │ nfs / in-memory │ │ Image: unityci │ - │ │ │ Storage: ... │ - └──────────────────────────┘ └─────────────────┘ +This provider is experimental. APIs and behavior may change between releases. + +::: + +```mermaid +graph LR + Runner["GitHub Actions Runner
unity-builder
providerStrategy: gcp-cloud-run
gcpStorageType:
gcs-fuse / gcs-copy /
nfs / in-memory"] + API["Cloud Run Jobs API"] + Job["Job: unity-build
Image: unityci
Storage: ..."] + Runner -->|gcloud CLI| API --> Job ``` ## Prerequisites diff --git a/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx index ddb085da..b8c16462 100644 --- a/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx +++ b/docs/03-github-orchestrator/05-providers/11-azure-aci.mdx @@ -4,22 +4,18 @@ Run Unity builds as [Azure Container Instances](https://learn.microsoft.com/en-us/azure/container-instances/) - serverless containers with configurable storage backends. -:::caution Experimental This provider is experimental. APIs and behavior may change between -releases. ::: +:::caution Experimental -``` - GitHub Actions Runner - ┌──────────────────────────┐ - │ unity-builder │ - │ providerStrategy: │ Azure CLI - │ azure-aci │────────────────► Container Instances API - │ │ ┌─────────────────┐ - │ azureStorageType: │ │ Container: │ - │ azure-files / │ │ unity-build │ - │ blob-copy / │ │ │ - │ azure-files-nfs / │ │ Image: unityci │ - │ in-memory │ │ Storage: ... │ - └──────────────────────────┘ └─────────────────┘ +This provider is experimental. APIs and behavior may change between releases. + +::: + +```mermaid +graph LR + Runner["GitHub Actions Runner
unity-builder
providerStrategy: azure-aci
azureStorageType:
azure-files / blob-copy /
azure-files-nfs / in-memory"] + API["Container Instances API"] + Container["Container: unity-build
Image: unityci
Storage: ..."] + Runner -->|Azure CLI| API --> Container ``` ## Prerequisites diff --git a/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx b/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx index d0173b57..672f83b6 100644 --- a/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx +++ b/docs/03-github-orchestrator/05-providers/12-cli-provider-protocol.mdx @@ -4,18 +4,12 @@ Write orchestrator providers in **any language** - Go, Python, Rust, shell, or a read stdin and write stdout. The CLI provider protocol uses JSON messages over stdin/stdout with the subcommand as the first argument. -``` - providerExecutable Your executable - ┌──────────────────────┐ ┌──────────────────────┐ - │ ./my-provider │ argv[1] │ │ - │ │───────────────►│ setup-workflow │ - │ Orchestrator spawns │ JSON stdin │ run-task │ - │ your executable per │───────────────►│ cleanup-workflow │ - │ subcommand │ JSON stdout │ garbage-collect │ - │ │◄───────────────│ list-resources │ - └──────────────────────┘ stderr→logs │ list-workflow │ - │ watch-workflow │ - └──────────────────────┘ +```mermaid +graph LR + Orch["providerExecutable
./my-provider
Orchestrator spawns your
executable per subcommand"] + Exec["Your executable
setup-workflow
run-task
cleanup-workflow
garbage-collect
list-resources
list-workflow
watch-workflow"] + Orch -->|"argv[1], JSON stdin"| Exec + Exec -->|"JSON stdout, stderr→logs"| Orch ``` ## Quick Start diff --git a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx index 53ec1976..a1d4ae14 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx @@ -4,16 +4,14 @@ Orchestrator supports two caching strategies. You can mix both by setting [`maxRetainedWorkspaces`](../api-reference#caching) - once the limit is reached, additional jobs fall back to standard caching. -``` - Standard Caching Retained Workspace - ┌─────────────────┐ ┌─────────────────┐ - │ LFS files │ │ Entire project │ - │ Library/ │ │ folder │ - │ │ │ │ - │ Smaller storage │ │ Faster builds │ - │ Good for small │ │ Good for large │ - │ projects │ │ projects │ - └─────────────────┘ └─────────────────┘ +```mermaid +flowchart LR + subgraph Standard Caching + A1["LFS files\nLibrary/\n\nSmaller storage\nGood for small projects"] + end + subgraph Retained Workspace + B1["Entire project folder\n\nFaster builds\nGood for large projects"] + end ``` ## Standard Caching diff --git a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx index 27cf9647..e7581b3f 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/02-retained-workspace.mdx @@ -16,18 +16,15 @@ Each retained workspace is locked during use - only one build can use a workspac Orchestrator handles locking automatically via S3 or rclone. See [Caching](caching) for storage provider details. -``` - maxRetainedWorkspaces: 3 - - Workspace 1 Workspace 2 Workspace 3 - ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ - │ [locked] │ │ [locked] │ │ (idle) │ - │ Build A │ │ Build B │ │ │ - │ Full project │ │ Full project │ │ Full project │ - └───────────────┘ └───────────────┘ └───────────────┘ - - Build C arrives --> claims Workspace 3 - Build D arrives --> all locked --> falls back to standard caching +```mermaid +flowchart LR + subgraph maxRetainedWorkspaces: 3 + W1["Workspace 1\n🔒 locked\nBuild A\nFull project"] + W2["Workspace 2\n🔒 locked\nBuild B\nFull project"] + W3["Workspace 3\n💤 idle\nFull project"] + end + C["Build C arrives"] --> W3 + D["Build D arrives"] -.->|all locked| FB["Falls back to\nstandard caching"] ``` ## Example diff --git a/docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx b/docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx index 30830fba..7097d86e 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/04-garbage-collection.mdx @@ -3,23 +3,16 @@ Orchestrator creates cloud resources (containers, stacks, volumes) for each build and cleans them up automatically. If a build fails or is interrupted, resources may be left behind. -``` - Normal Build Failed / Interrupted Build - - ┌──────────┐ ┌──────────┐ Auto ┌──────────┐ ┌──────────┐ - │ Create │─►│ Build │─►Clean │ Create │─►│ Build │──► crash - │ resources│ │ │ up │ resources│ │ │ - └──────────┘ └──────────┘ └──────────┘ └──────────┘ - | - v - Resources left behind - | - v - ┌─────────────────┐ - │ garbage-collect │ - │ removes after │ - │ garbageMaxAge │ - └─────────────────┘ +```mermaid +flowchart LR + subgraph Normal Build + N1[Create resources] --> N2[Build] --> N3[Auto cleanup] + end + subgraph Failed / Interrupted Build + F1[Create resources] --> F2[Build] --> F3["crash ✕"] + F3 --> F4[Resources left behind] + F4 --> F5["garbage-collect\nremoves after\ngarbageMaxAge"] + end ``` Use garbage collection to clean up stale resources. See the diff --git a/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx index f88a41ae..67929a73 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/05-hooks/04-container-hooks.mdx @@ -4,16 +4,18 @@ Run custom Docker containers as steps in the build workflow. Useful for uploadin deploying builds, or running additional tools. For inline shell commands instead, see [Command Hooks](command-hooks). -``` - Build Pipeline - - preBuildContainerHooks Unity Build postBuildContainerHooks - ┌──────────────────────┐ ┌──────────────┐ ┌──────────────────────┐ - │ Pull cache │ │ │ │ Upload build │ - │ Setup deps │──►│ Build │──►│ Deploy to Steam │ - │ ... │ │ │ │ ... │ - └──────────────────────┘ └──────────────┘ └──────────────────────┘ - Runs before build Core build step Runs after build +```mermaid +flowchart LR + subgraph preBuildContainerHooks + A["Pull cache\nSetup deps\n..."] + end + subgraph Unity Build + B["Build"] + end + subgraph postBuildContainerHooks + C["Upload build\nDeploy to Steam\n..."] + end + A -->|Runs before build| B -->|Core build step| C ``` ## Format diff --git a/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx b/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx index e7c8c9af..1d2c351c 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/06-logging.mdx @@ -2,12 +2,9 @@ Orchestrator streams logs from the remote build back to your CI runner in real time. -``` - Cloud Container Orchestrator Your CI - ┌───────────────┐ ┌──────────────┐ ┌──────────────┐ - │ Build output │──────►│ Log stream │─────►│ Console │ - │ │ │ │ │ output │ - └───────────────┘ └──────────────┘ └──────────────┘ +```mermaid +flowchart LR + A["Cloud Container\nBuild output"] --> B["Orchestrator\nLog stream"] --> C["Your CI\nConsole output"] ``` ## Provider-Specific Log Transport diff --git a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx index 8a24ee76..79a774e1 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/07-load-balancing.mdx @@ -4,18 +4,12 @@ Orchestrator can intelligently route builds across providers. Built-in load bala availability and routes to the best provider automatically - no custom scripting needed. For advanced scenarios, standard GitHub Actions scripting gives you full control. -``` - unity-builder - ┌──────────────────────────────────┐ - │ 1. Check runner availability │ - │ 2. Route to best provider │ - │ 3. Build (sync or async) │ - │ 4. Retry on alternate if failed │ - └──┬──────────┬───────────────┬───┘ - │ │ │ - ▼ ▼ ▼ - local-docker aws k8s - (self-hosted) (scalable) (flexible) +```mermaid +flowchart TD + UB["unity-builder\n1. Check runner availability\n2. Route to best provider\n3. Build (sync or async)\n4. Retry on alternate if failed"] + UB --> LD["local-docker\n(self-hosted)"] + UB --> AWS["aws\n(scalable)"] + UB --> K8S["k8s\n(flexible)"] ``` ## Built-in Load Balancing @@ -466,21 +460,13 @@ load balancing of long builds. When enabled, the action dispatches the build and - no runner minutes wasted waiting. -``` - Workflow Step (seconds) Provider A Provider B - ┌───────────────────────┐ ┌──────────────┐ ┌──────────────┐ - │ 1. Check runners │ │ │ │ │ - │ 2. Route to provider │ │ │ │ │ - │ 3. Dispatch build ├──►│ 3a. Building │ OR ──►│ 3b. Building │ - │ 4. Return (done) │ │ ... │ │ ... │ - └───────────────────────┘ │ ... │ │ ... │ - Completes instantly │ 5. Complete │ │ 5. Complete │ - └──────┬───────┘ └──────┬───────┘ - │ │ - ┌──────▼───────────────────────▼──────┐ - │ GitHub Check updated │ - │ (monitor from PR page) │ - └─────────────────────────────────────┘ +```mermaid +flowchart TD + WF["Workflow Step (seconds)\n1. Check runners\n2. Route to provider\n3. Dispatch build\n4. Return (done)\n\nCompletes instantly"] + WF --> PA["Provider A\nBuilding...\nComplete"] + WF --> PB["Provider B\nBuilding...\nComplete"] + PA --> GH["GitHub Check updated\n(monitor from PR page)"] + PB --> GH ``` - **Without async** - The build occupies the runner. Routing still works, but you're paying for diff --git a/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx b/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx index 1fb16824..c2804ce0 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/08-storage.mdx @@ -5,25 +5,15 @@ and Git LFS assets), **build output** (the compiled game), and **caches** (Unity LFS files). This page explains how each category flows through the system and how to configure the storage backend. -``` - CI / Local Machine Build Container - ┌──────────────────┐ ┌──────────────────────────────────┐ - │ Git repository │──── clone ────►│ /data/{buildGuid}/repo/ │ - │ + LFS assets │ │ ├── Assets/ │ - │ │ │ ├── Library/ (cached) │ - └──────────────────┘ │ └── .git/lfs/ (cached) │ - │ │ - │ /data/cache/{cacheKey}/ │ - │ ├── Library/ (tar.lz4) │ - │ └── build/ (tar.lz4) │ - └────────────┬─────────────────────┘ - │ - ┌────────────▼─────────────────────┐ - │ Cloud Storage (S3 / rclone) │ - │ ├── Library cache archives │ - │ ├── Build artifacts │ - │ └── Workspace locks │ - └──────────────────────────────────┘ +```mermaid +flowchart TD + CI["CI / Local Machine\nGit repository\n+ LFS assets"] + CI -->|clone| BC + subgraph BC["Build Container"] + REPO["/data/{buildGuid}/repo/\n├── Assets/\n├── Library/ (cached)\n└── .git/lfs/ (cached)"] + CACHE["/data/cache/{cacheKey}/\n├── Library/ (tar.lz4)\n└── build/ (tar.lz4)"] + end + BC --> CS["Cloud Storage (S3 / rclone)\n├── Library cache archives\n├── Build artifacts\n└── Workspace locks"] ``` ## File Categories @@ -88,19 +78,14 @@ skip re-importing unchanged assets. Orchestrator supports two storage backends for caches, artifacts, and workspace locks. -``` - storageProvider: "s3" storageProvider: "rclone" - ┌────────────────────┐ ┌────────────────────┐ - │ AWS S3 │ │ Rclone │ - │ │ │ │ - │ - Default backend │ │ - 70+ backends │ - │ - Works with │ │ - Google Cloud │ - │ LocalStack │ │ - Azure Blob │ - │ - Built-in lock │ │ - Backblaze B2 │ - │ support │ │ - SFTP, FTP │ - │ │ │ - Any rclone │ - │ │ │ remote │ - └────────────────────┘ └────────────────────┘ +```mermaid +flowchart LR + subgraph "storageProvider: s3" + S3["AWS S3\n\n- Default backend\n- Works with LocalStack\n- Built-in lock support"] + end + subgraph "storageProvider: rclone" + RC["Rclone\n\n- 70+ backends\n- Google Cloud\n- Azure Blob\n- Backblaze B2\n- SFTP, FTP\n- Any rclone remote"] + end ``` ### S3 (Default) diff --git a/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx b/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx index 4bcaf1ff..26ee0bad 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/09-architecture.mdx @@ -3,54 +3,28 @@ This page describes the internal architecture of Orchestrator - how the components fit together, how a build flows through the system, and where to look in the source code. -``` - ┌───────────────────────────┐ - │ Entry Point │ - │ GitHub Action / CLI │ - └─────────────┬─────────────┘ - │ - ┌─────────────▼─────────────┐ - │ Orchestrator │ - │ (orchestrator.ts) │ - │ │ - │ - setup() │ - │ - run() │ - │ - Provider selection │ - └──┬──────────┬──────────┬──┘ - │ │ │ - ┌──────────────────▼┐ ┌──────▼───────┐ ┌▼──────────────────┐ - │ Provider │ │ Workflow │ │ Services │ - │ (pluggable) │ │ Composition │ │ │ - │ │ │ Root │ │ - Logger │ - │ - aws │ │ │ │ - Hooks │ - │ - k8s │ │ - Standard │ │ - Caching │ - │ - local-docker │ │ - Async │ │ - Locking │ - │ - local │ │ - Custom Job │ │ - LFS │ - │ - custom plugin │ │ │ │ - GitHub Checks │ - └────────────────────┘ └──────────────┘ └────────────────────┘ +```mermaid +flowchart TD + EP["Entry Point\nGitHub Action / CLI"] + EP --> O["Orchestrator\n(orchestrator.ts)\n\n- setup()\n- run()\n- Provider selection"] + O --> P["Provider\n(pluggable)\n\n- aws\n- k8s\n- local-docker\n- local\n- custom plugin"] + O --> W["Workflow\nComposition Root\n\n- Standard\n- Async\n- Custom Job"] + O --> S["Services\n\n- Logger\n- Hooks\n- Caching\n- Locking\n- LFS\n- GitHub Checks"] ``` ## Build Lifecycle A standard Orchestrator build follows these steps: -``` - 1. Initialize 2. Setup Provider 3. Acquire Workspace - ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ - │ Parse inputs │ │ Create cloud │ │ Lock retained │ - │ Select provider │──►│ resources │──►│ workspace │ - │ Generate GUID │ │ (stacks, PVCs) │ │ (if enabled) │ - │ Create GH check │ │ │ │ │ - └──────────────────┘ └──────────────────┘ └──────────────────┘ - │ - 6. Cleanup 5. Post-Build 4. Build - ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ - │ Release workspace│ │ Push Library │ │ Clone repo + LFS │ - │ Delete cloud │◄──│ and build cache │◄──│ Restore cache │ - │ resources │ │ Run post hooks │ │ Run Unity build │ - │ Update GH check │ │ │ │ Run pre/post │ - └──────────────────┘ └──────────────────┘ │ container hooks │ - └──────────────────┘ +```mermaid +flowchart LR + S1["1. Initialize\nParse inputs\nSelect provider\nGenerate GUID\nCreate GH check"] + S2["2. Setup Provider\nCreate cloud resources\n(stacks, PVCs)"] + S3["3. Acquire Workspace\nLock retained workspace\n(if enabled)"] + S4["4. Build\nClone repo + LFS\nRestore cache\nRun Unity build\nRun pre/post\ncontainer hooks"] + S5["5. Post-Build\nPush Library\nand build cache\nRun post hooks"] + S6["6. Cleanup\nRelease workspace\nDelete cloud resources\nUpdate GH check"] + S1 --> S2 --> S3 --> S4 --> S5 --> S6 ``` ### Step-by-Step @@ -140,26 +114,13 @@ See [Custom Providers](../providers/custom-providers) for the user-facing guide. The `WorkflowCompositionRoot` selects which workflow to run: -``` - asyncOrchestrator: true? - │ - ┌────▼────┐ - │ Yes │──► AsyncWorkflow - └────┬────┘ Dispatches build to cloud container - │ and returns immediately - ┌────▼────┐ - │ No │ - └────┬────┘ - │ - customJob set? - │ - ┌────▼────┐ - │ Yes │──► CustomWorkflow - └────┬────┘ Parses YAML job definition - │ and runs container steps - ┌────▼────┐ - │ No │──► BuildAutomationWorkflow - └─────────┘ Standard build pipeline +```mermaid +flowchart TD + Q1{"asyncOrchestrator: true?"} + Q1 -->|Yes| AW["AsyncWorkflow\nDispatches build to cloud container\nand returns immediately"] + Q1 -->|No| Q2{"customJob set?"} + Q2 -->|Yes| CW["CustomWorkflow\nParses YAML job definition\nand runs container steps"] + Q2 -->|No| BAW["BuildAutomationWorkflow\nStandard build pipeline"] ``` **BuildAutomationWorkflow** generates a shell script that runs inside the container. The script: @@ -193,18 +154,13 @@ See [Hooks](hooks/container-hooks) for the full guide. Orchestrator reads configuration from multiple sources with this priority: -``` - Highest Priority - ┌──────────────────────┐ - │ GitHub Action inputs │ with: providerStrategy: aws - ├──────────────────────┤ - │ CLI flags │ --providerStrategy aws - ├──────────────────────┤ - │ Query overrides │ Pull Secrets from external sources - ├──────────────────────┤ - │ Environment variables │ PROVIDER_STRATEGY=aws - └──────────────────────┘ - Lowest Priority +```mermaid +flowchart TD + A["GitHub Action inputs\nwith: providerStrategy: aws"] -->|overrides| B["CLI flags\n--providerStrategy aws"] + B -->|overrides| C["Query overrides\nPull Secrets from external sources"] + C -->|overrides| D["Environment variables\nPROVIDER_STRATEGY=aws"] + style A fill:#4a9,color:#fff + style D fill:#a94,color:#fff ``` The `OrchestratorOptions` class handles this resolution. Environment variables accept both diff --git a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx index c2e95f0e..54d4dc44 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/10-build-services.mdx @@ -4,16 +4,17 @@ Build services run during the build lifecycle to handle submodule initialization configuration, and git hooks. They work with any provider - local, AWS, Kubernetes, GCP Cloud Run, Azure ACI, or custom CLI providers. -``` - Build lifecycle - ┌─────────────────────────────────────────────────────────┐ - │ 1. Submodule init (selective, from YAML profile) │ - │ 2. LFS agent config (custom transfer agent) │ - │ 3. Cache restore (Library + LFS from filesystem) │ - │ 4. Hook install (lefthook / husky) │ - │ 5. ──── BUILD ──── │ - │ 6. Cache save (Library + LFS to filesystem) │ - └─────────────────────────────────────────────────────────┘ +```mermaid +flowchart TD + subgraph Build Lifecycle + S1["1. Submodule init (selective, from YAML profile)"] + S2["2. LFS agent config (custom transfer agent)"] + S3["3. Cache restore (Library + LFS from filesystem)"] + S4["4. Hook install (lefthook / husky)"] + S5["5. BUILD"] + S6["6. Cache save (Library + LFS to filesystem)"] + S1 --> S2 --> S3 --> S4 --> S5 --> S6 + end ``` ## Submodule Profiles diff --git a/docusaurus.config.js b/docusaurus.config.js index fd432e6c..665579b0 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -17,6 +17,10 @@ const config = { favicon: 'icons/favicon.ico', organizationName: 'game-ci', // Usually your GitHub org/user name. projectName: 'documentation', // Usually your repo name. + markdown: { + mermaid: true, + }, + themes: ['@docusaurus/theme-mermaid'], plugins: [ ['docusaurus-plugin-sass', {}], diff --git a/package.json b/package.json index 4df3f01c..7a982799 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "@docusaurus/module-type-aliases": "^2.4.1", "@docusaurus/preset-classic": "^2.4.1", "@docusaurus/theme-common": "^2.4.1", + "@docusaurus/theme-mermaid": "^2.4.3", "@docusaurus/tsconfig": "^3.0.0-alpha.0", "@mdx-js/react": "^1.6.22", "@reduxjs/toolkit": "^1.8.1", diff --git a/yarn.lock b/yarn.lock index be0823be..02d70bdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,133 +5,217 @@ __metadata: version: 8 cacheKey: 10 -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: 10/6eebd12a5cd03cee38fcb915ef9f4ea557df6a06f642dfc7fe8eb4839eb5c9ca55a382f3604d52c14200b0c214c12af5e1f23d2a6d8e23ef2d016b105a9d6c0a +"@algolia/abtesting@npm:1.15.2": + version: 1.15.2 + resolution: "@algolia/abtesting@npm:1.15.2" + dependencies: + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/9ffad5c88c4b54ad8cb2f3de2aa1de9298d21f7247fbbc8569131ceb00c25c5149372b0e07c53867c1291b2c86982b0f0121f9c793be512e8fac766f56f0d6f4 languageName: node linkType: hard -"@algolia/autocomplete-core@npm:1.9.3": - version: 1.9.3 - resolution: "@algolia/autocomplete-core@npm:1.9.3" +"@algolia/autocomplete-core@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-core@npm:1.17.9" dependencies: - "@algolia/autocomplete-plugin-algolia-insights": "npm:1.9.3" - "@algolia/autocomplete-shared": "npm:1.9.3" - checksum: 10/a0d195ecde8027f99d40f45a16ecc6db74302063576627f1660fc206d4a9a26fdfcbb4e21a9a6b7812f4f9d378eaa9a4d5899d8ccc9a8fc75cbbad3bb73fd13c + "@algolia/autocomplete-plugin-algolia-insights": "npm:1.17.9" + "@algolia/autocomplete-shared": "npm:1.17.9" + checksum: 10/cf4f0f1d9e0ca4e7f1ea25291b270e47315385cbda4a01bbc0c56c3659d21f2357ec2026a1b828f063d4cd1d13509b6f76960f0bfd51acafd76a487a752eec3c languageName: node linkType: hard -"@algolia/autocomplete-plugin-algolia-insights@npm:1.9.3": - version: 1.9.3 - resolution: "@algolia/autocomplete-plugin-algolia-insights@npm:1.9.3" +"@algolia/autocomplete-plugin-algolia-insights@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-plugin-algolia-insights@npm:1.17.9" dependencies: - "@algolia/autocomplete-shared": "npm:1.9.3" + "@algolia/autocomplete-shared": "npm:1.17.9" peerDependencies: search-insights: ">= 1 < 3" - checksum: 10/de0ddbf4813ac7403dbd1a91cdda950cfecff9cfd23bb5e5823dd2e2666b75c73241daf00c9d002446b625f402381fa23d72f16bb3f848a763f0b3c9851cad43 + checksum: 10/5cd16d91aff4e5eb0823387d480d04d4cc0e8f1ebf9970f91f0c0bc88a358b09112218d6c9762e35f444a22251a3bbe0934a82fcd55eab32fc2701c9399f3baf languageName: node linkType: hard -"@algolia/autocomplete-preset-algolia@npm:1.9.3": - version: 1.9.3 - resolution: "@algolia/autocomplete-preset-algolia@npm:1.9.3" +"@algolia/autocomplete-preset-algolia@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-preset-algolia@npm:1.17.9" dependencies: - "@algolia/autocomplete-shared": "npm:1.9.3" + "@algolia/autocomplete-shared": "npm:1.17.9" peerDependencies: "@algolia/client-search": ">= 4.9.1 < 6" algoliasearch: ">= 4.9.1 < 6" - checksum: 10/a0df95f377a9db4fe33207e59534cbd80893b1f3eb5fb631dc4b481f0afeaf47135da916500550b52a63d073d1d89df439407efd232201ead7ad65dcbcdce208 + checksum: 10/7343b54aa6a7d9a75acf4dfbcc007bf328d1ae991f6bb4a92893bf5492b64ba52b331e9edd2da05008db080aaa6c91889d7ea2ccf0cc99ef44d55440bf22de38 languageName: node linkType: hard -"@algolia/autocomplete-shared@npm:1.9.3": - version: 1.9.3 - resolution: "@algolia/autocomplete-shared@npm:1.9.3" +"@algolia/autocomplete-shared@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-shared@npm:1.17.9" peerDependencies: "@algolia/client-search": ">= 4.9.1 < 6" algoliasearch: ">= 4.9.1 < 6" - checksum: 10/2332d12268b7f9e8cd54954dace9d78791c44c44477b3dc37e15868f2244ae6cbf6f9650c1399a984646d37cf647f35284ecddbfcd98355925fae44ff4b11a4e + checksum: 10/32f74fa2efb0a67def376a0a040b553c9109fb0891f6d4dd525048388b613a6ea1440aeff672b7b67da47b0b584f40c37826c34b5346f0a35bd64c08d559acb6 + languageName: node + linkType: hard + +"@algolia/cache-browser-local-storage@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/cache-browser-local-storage@npm:4.27.0" + dependencies: + "@algolia/cache-common": "npm:4.27.0" + checksum: 10/f495cc5130caea73effcee371164fd6322deda3c2b78c26f688542e6c44e706925c148cf48675173b2e3ab7eafa8889bc5cccae07c300f2fd5e990d10cbc0b68 + languageName: node + linkType: hard + +"@algolia/cache-common@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/cache-common@npm:4.27.0" + checksum: 10/0e3629d291ccd4b40919826450bc538a16ec0f1aa77a8f104639dee1de9263a1fa6ff982d1afabae7a14ac91807820d716ed4b8019c0d54dce2b7e9fa361887b + languageName: node + linkType: hard + +"@algolia/cache-in-memory@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/cache-in-memory@npm:4.27.0" + dependencies: + "@algolia/cache-common": "npm:4.27.0" + checksum: 10/055f6220a7ab4db328102d473bb0e4a40afcc1ad8ec215c401361d063865fde2cfab24c947b66080c2214f6168dbc7a289897513556e6bb74856e32c6a22a438 + languageName: node + linkType: hard + +"@algolia/client-abtesting@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/client-abtesting@npm:5.49.2" + dependencies: + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/c659748ac7ff09bdbcaa5eb9aae35dca6f0619767ecdc962c18119b27fb7b3251f1e89f82fac7343ef9acea3a8f5d609461d44972170aadbd0f84cb528474255 + languageName: node + linkType: hard + +"@algolia/client-account@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/client-account@npm:4.27.0" + dependencies: + "@algolia/client-common": "npm:4.27.0" + "@algolia/client-search": "npm:4.27.0" + "@algolia/transporter": "npm:4.27.0" + checksum: 10/c9afa59d111eb9fa17dc4ba235d17190845dbfb640a39e4e54e3d3146fb64072367d0b8d9d40694c143d99883c9c0ca226eea1b42b967c14e230d64d4ec72c34 + languageName: node + linkType: hard + +"@algolia/client-analytics@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/client-analytics@npm:4.27.0" + dependencies: + "@algolia/client-common": "npm:4.27.0" + "@algolia/client-search": "npm:4.27.0" + "@algolia/requester-common": "npm:4.27.0" + "@algolia/transporter": "npm:4.27.0" + checksum: 10/641ff017787fd941d411a1dfcd66cc5035ca5183d0fbbf96dae9034205228ca4ded7ac02e639aaee20e1d96a9c43fd7fdcb1ab775f4f8a8fc341b1cce9c89c53 + languageName: node + linkType: hard + +"@algolia/client-analytics@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/client-analytics@npm:5.49.2" + dependencies: + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/bfd687e8aa05a341600161fe64461d0ed285650421a5c9b3d80f2142231253bf5dd5d5f2d5d7ce95df0ea0b69038c0a49de956a7675506dff798a70c562daf22 languageName: node linkType: hard -"@algolia/cache-browser-local-storage@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/cache-browser-local-storage@npm:4.19.1" +"@algolia/client-common@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/client-common@npm:4.27.0" dependencies: - "@algolia/cache-common": "npm:4.19.1" - checksum: 10/5e3106d11d57ecbbe98c4c90a6fb197dbc078101a5f70e347efec0c993a33a8203ff7b9ef837905ba74de4bd6453eee7d6e45236b4b48cf50ab11b82d2a79741 + "@algolia/requester-common": "npm:4.27.0" + "@algolia/transporter": "npm:4.27.0" + checksum: 10/860aaf97666e0faae3212b761b3a35f4adbd5b8d1630c0b60659b5cac0bbd37c3afbd900021ae2c24f6e0b22cabcad8f4db0a80c23df0a30faa1f71f4260a913 languageName: node linkType: hard -"@algolia/cache-common@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/cache-common@npm:4.19.1" - checksum: 10/e4e120b9a573235ef401bb40ab1c1e622c618b79b1185fb2d46d6b28c5996297f157fa92afccf1b9e0e74b6792f222832b9a2f0913d5bf389810376b4a5476a4 +"@algolia/client-common@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/client-common@npm:5.49.2" + checksum: 10/1182ecf5e7d23aa7c83525b1f761a07aa536a33de42217f450952d6978d2566aee2742db59ddda5bb9a9c0f9020f39603e2b68d5328384fc9160af8926a0acd9 languageName: node linkType: hard -"@algolia/cache-in-memory@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/cache-in-memory@npm:4.19.1" +"@algolia/client-insights@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/client-insights@npm:5.49.2" dependencies: - "@algolia/cache-common": "npm:4.19.1" - checksum: 10/67a396a67d6c184b2f77c3d6da512e4798c7de7d969c43510fc44562a2409a12a970ffdd8c9335c0ec0365b990b70f1f6bbb5af7083b6ebb8491535c743c1929 + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/031b049554d70ee6bba985508cd79af554785826f88b371b529c031098078ddfedf4103f323bbaff6740f87a3802c8b05b0716f12fba6879eaae40a8c1aea98a languageName: node linkType: hard -"@algolia/client-account@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/client-account@npm:4.19.1" +"@algolia/client-personalization@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/client-personalization@npm:4.27.0" dependencies: - "@algolia/client-common": "npm:4.19.1" - "@algolia/client-search": "npm:4.19.1" - "@algolia/transporter": "npm:4.19.1" - checksum: 10/95da48597d12899fc4d5975a1405a67561b27a58336921288dd14419194b19b9994164841442306d339f25f359629a9c2a34a9e8f41f4fbd76564e0785598e3d + "@algolia/client-common": "npm:4.27.0" + "@algolia/requester-common": "npm:4.27.0" + "@algolia/transporter": "npm:4.27.0" + checksum: 10/aba1b4b255e201f1d764ef6a55f258d5cd14004d42de982eee360493dc2688bda4a3e89788448977fdee7358837d2eb42fe3724dc817389555d7f3df6581b673 languageName: node linkType: hard -"@algolia/client-analytics@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/client-analytics@npm:4.19.1" +"@algolia/client-personalization@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/client-personalization@npm:5.49.2" dependencies: - "@algolia/client-common": "npm:4.19.1" - "@algolia/client-search": "npm:4.19.1" - "@algolia/requester-common": "npm:4.19.1" - "@algolia/transporter": "npm:4.19.1" - checksum: 10/d7da694610b68dd2f70cc238c4ab53965e2673dfee5bc39769f7666c6a77481824e0b45df1436871097c3dad247f92d610d0100bda6b37f11ce011c4da9bae37 + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/f73c2a2bd5c1596f1db957f8b670f9c7526f4d51b9d2468e59bcb5541cefd4198abbbd174106532227623c44ba5ccf5baa6b0a9aec6577f89b71eab7ae85abb5 languageName: node linkType: hard -"@algolia/client-common@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/client-common@npm:4.19.1" +"@algolia/client-query-suggestions@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/client-query-suggestions@npm:5.49.2" dependencies: - "@algolia/requester-common": "npm:4.19.1" - "@algolia/transporter": "npm:4.19.1" - checksum: 10/20a8fc178a4fa1bad2b4261d7b3ae1c83310008e1fc9deb8b3840fffd68b2e1422cbdc5208e4ed71eb8a5bbcdfdd1a0da5df165c6eb2ac5a1360b2340bd59772 + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/9d355b5ab4a353046ce8d17f318fbe49ad2ef314462e858704627c1f1a66e6e89cdb0572ae8cba229c8a0583ad38e6c834ec61f7905c4ed214b08a8ac2dce6be languageName: node linkType: hard -"@algolia/client-personalization@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/client-personalization@npm:4.19.1" +"@algolia/client-search@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/client-search@npm:4.27.0" dependencies: - "@algolia/client-common": "npm:4.19.1" - "@algolia/requester-common": "npm:4.19.1" - "@algolia/transporter": "npm:4.19.1" - checksum: 10/d29307f7c66f2251bccff9907d3c8277c11e9313267faed9485b0f8f708f9cb98d497925ecddf179f36fac8ca352fd8e0f27e70863e0af16e8e5bc4074683a57 + "@algolia/client-common": "npm:4.27.0" + "@algolia/requester-common": "npm:4.27.0" + "@algolia/transporter": "npm:4.27.0" + checksum: 10/c7bdce43de232b4e80910f7f7dfca3156c9d21fcc92aff1934f2b5fc255686a14a0db32a02a272be9f79c67534f06105b8cb1b781da6c91f29dc8819e97df100 languageName: node linkType: hard -"@algolia/client-search@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/client-search@npm:4.19.1" +"@algolia/client-search@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/client-search@npm:5.49.2" dependencies: - "@algolia/client-common": "npm:4.19.1" - "@algolia/requester-common": "npm:4.19.1" - "@algolia/transporter": "npm:4.19.1" - checksum: 10/f0f3a6501045d61e424fc55ba48cba00fc544ec74ea069882cb81e88a7a64c8c1fb2aea217cb2ea002ee53408c1cde76a795180d0dd808343fb41a56f9ef494d + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/be6e22cb0610383dc0dc5183ba9eb9847573f9bd755967809ad41764dbaccaef47580c8794d572e532ea1eced047d26aa331ad947494a87ac36c7d7275963279 languageName: node linkType: hard @@ -142,72 +226,144 @@ __metadata: languageName: node linkType: hard -"@algolia/logger-common@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/logger-common@npm:4.19.1" - checksum: 10/87659bdf11573c3aa44dff573e008ff5c8e3f8968d711ecb131387825779b827c6c5204554acdf1887ba079b8581cb35e519d0550fb1f520ef7d91166df62927 +"@algolia/ingestion@npm:1.49.2": + version: 1.49.2 + resolution: "@algolia/ingestion@npm:1.49.2" + dependencies: + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/28c07f7667c4e2fb58230242a01c2208909d99b843c2280ade0639586f1d068b6af63c4da59f2268f1664fb6ccdf8ff892fee1e572abf46fc0d616de3c30c960 + languageName: node + linkType: hard + +"@algolia/logger-common@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/logger-common@npm:4.27.0" + checksum: 10/1d3c7b445bda72a2696123fcc9bc4e2702908e258ee0596b738e92c169d2524c26b29c7a5eb1c979f1823f5fbb9537113fe3aa56e57c6240c2f51f1ed80f2ec2 languageName: node linkType: hard -"@algolia/logger-console@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/logger-console@npm:4.19.1" +"@algolia/logger-console@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/logger-console@npm:4.27.0" dependencies: - "@algolia/logger-common": "npm:4.19.1" - checksum: 10/c0aad90daa937908a2ec26e0dfe5278173120ac9ccd06ac0f159c332b8df26fc258dc776dfe14a83cb1bcc9d5452ff3bed9d8de7d809622d78a172eb239f0f09 + "@algolia/logger-common": "npm:4.27.0" + checksum: 10/ec187e61c07dd528ae059684dcb99bab1e6b530a8c717b5e5e124da1d998b85a8cd376d55540ea490c2aee2b3bdf24b5d4b41e3f72c4974a15b1bcb309de6189 languageName: node linkType: hard -"@algolia/requester-browser-xhr@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/requester-browser-xhr@npm:4.19.1" +"@algolia/monitoring@npm:1.49.2": + version: 1.49.2 + resolution: "@algolia/monitoring@npm:1.49.2" dependencies: - "@algolia/requester-common": "npm:4.19.1" - checksum: 10/af38dab17bb4195cd96cdbd933182c04878566cfe52d5a435b85b69f05ac8bca396d8f518f19dfaefc2e9fcddec9494b981bed6c096de855e78bd2188d3ae375 + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/d22a8a87c431fde03fb5a62819053687333bf4d865513aeebfcb79ab43d1f7963e07fa955b9deba4bef1d243e4f59accb32aa4dec2fced02787bb582580300a5 languageName: node linkType: hard -"@algolia/requester-common@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/requester-common@npm:4.19.1" - checksum: 10/21628388464852127a66a78ca3dbd21350613b401ea3c8756b3136f0a05450de6158282d70934d0c81304c3b922f1383d0351ab9d4b5c5c7c666718d52c6bae8 +"@algolia/recommend@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/recommend@npm:4.27.0" + dependencies: + "@algolia/cache-browser-local-storage": "npm:4.27.0" + "@algolia/cache-common": "npm:4.27.0" + "@algolia/cache-in-memory": "npm:4.27.0" + "@algolia/client-common": "npm:4.27.0" + "@algolia/client-search": "npm:4.27.0" + "@algolia/logger-common": "npm:4.27.0" + "@algolia/logger-console": "npm:4.27.0" + "@algolia/requester-browser-xhr": "npm:4.27.0" + "@algolia/requester-common": "npm:4.27.0" + "@algolia/requester-node-http": "npm:4.27.0" + "@algolia/transporter": "npm:4.27.0" + checksum: 10/d927e4b2ef8d615e7067903ecca33d8247af050e18005fc6ebbea1799d3122068293258b6db66a88c13a0a6c573e74d5cc1e18ca4004f4e75b46af3aa74e0ef4 languageName: node linkType: hard -"@algolia/requester-node-http@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/requester-node-http@npm:4.19.1" +"@algolia/recommend@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/recommend@npm:5.49.2" dependencies: - "@algolia/requester-common": "npm:4.19.1" - checksum: 10/d338108ce3b07d3989f7ad9e8621e029808e6ac1688f67dcfbd601abd90b0e31bace7e69f6ce13068ca1272d9687e5394cb89051dbb499ba1279a04b9dd5ebef + "@algolia/client-common": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/590a81b8ef1b30c0f9db446d97ad759869230bb2f1948a919240699f08dc2b7d759bd4b4f7f8f6700bf9e401ed44ab2ce89ff26f5ed8c4e2f24ed6dabdd1e7ce languageName: node linkType: hard -"@algolia/transporter@npm:4.19.1": - version: 4.19.1 - resolution: "@algolia/transporter@npm:4.19.1" +"@algolia/requester-browser-xhr@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/requester-browser-xhr@npm:4.27.0" dependencies: - "@algolia/cache-common": "npm:4.19.1" - "@algolia/logger-common": "npm:4.19.1" - "@algolia/requester-common": "npm:4.19.1" - checksum: 10/4e2641c3b2edaa445bbe4ba69356eb40232f7b4f2a5198ce53173f818adf60fd81501a98b6920fabecd1036a5d453e66c9aee3ec9c917843b669546a1976cc0d + "@algolia/requester-common": "npm:4.27.0" + checksum: 10/8ca2bc006b68cf703cd659f99db04abcf3ff3e89c0633ecab7eb0d26acad030121fcd3f7e2990efb7fa16f389d0109ee4d4aefc4f95d4d57dacd8ff16289eee9 languageName: node linkType: hard -"@alloc/quick-lru@npm:^5.2.0": - version: 5.2.0 - resolution: "@alloc/quick-lru@npm:5.2.0" - checksum: 10/bdc35758b552bcf045733ac047fb7f9a07c4678b944c641adfbd41f798b4b91fffd0fdc0df2578d9b0afc7b4d636aa6e110ead5d6281a2adc1ab90efd7f057f8 +"@algolia/requester-browser-xhr@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/requester-browser-xhr@npm:5.49.2" + dependencies: + "@algolia/client-common": "npm:5.49.2" + checksum: 10/81414a4635296dc76aacc12a35fa40a07fadff38185608f9d48edc9758315a0ab59b64f7683159c18f70e331fa707e925c174d6aa30b42e1dc90a356daed9355 languageName: node linkType: hard -"@ampproject/remapping@npm:^2.2.0": - version: 2.2.1 - resolution: "@ampproject/remapping@npm:2.2.1" +"@algolia/requester-common@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/requester-common@npm:4.27.0" + checksum: 10/000c125faa1e69f273c7ce0445284babed6ea519997eaeef06b010be3abdd1e77dc454d4cf712693ebc37f68a564052e2cf3e623ab0916c5f7d7c036a6c2e3f1 + languageName: node + linkType: hard + +"@algolia/requester-fetch@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/requester-fetch@npm:5.49.2" dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10/e15fecbf3b54c988c8b4fdea8ef514ab482537e8a080b2978cc4b47ccca7140577ca7b65ad3322dcce65bc73ee6e5b90cbfe0bbd8c766dad04d5c62ec9634c42 + "@algolia/client-common": "npm:5.49.2" + checksum: 10/36c4060651b94cf41cb0b856d8a4cb738ed2bf55e2fb6adf6951134c6ea64d75042d1012141c6bcf2a92b02c83dcb31b16e26ea77c45664e43cbc912907556c1 + languageName: node + linkType: hard + +"@algolia/requester-node-http@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/requester-node-http@npm:4.27.0" + dependencies: + "@algolia/requester-common": "npm:4.27.0" + checksum: 10/eb8c47aed7d3245393f6d6b76e8c3cd144fbbe990ca93f45e9d2f08d9ec2fb46a379db7796c2bbca1e0179a86812ecd42eb3ad3613ab44065e95b655855740ed + languageName: node + linkType: hard + +"@algolia/requester-node-http@npm:5.49.2": + version: 5.49.2 + resolution: "@algolia/requester-node-http@npm:5.49.2" + dependencies: + "@algolia/client-common": "npm:5.49.2" + checksum: 10/bd67a6a99381cb82860520747617faaf972f62cfda14b3d35890aec54f16796a03e147bdf4ed829eb50eee45784167b62a2741ec7c45799279d4ac2ce118e8b6 + languageName: node + linkType: hard + +"@algolia/transporter@npm:4.27.0": + version: 4.27.0 + resolution: "@algolia/transporter@npm:4.27.0" + dependencies: + "@algolia/cache-common": "npm:4.27.0" + "@algolia/logger-common": "npm:4.27.0" + "@algolia/requester-common": "npm:4.27.0" + checksum: 10/5efaa7651605ceaca1935b553afdf2c44b4a501fc51ab3852967c632dd86d6084408a5cdcb8202cee001a15863335a290d3d997d2e0666f25f9b4a4175c8cbf5 + languageName: node + linkType: hard + +"@alloc/quick-lru@npm:^5.2.0": + version: 5.2.0 + resolution: "@alloc/quick-lru@npm:5.2.0" + checksum: 10/bdc35758b552bcf045733ac047fb7f9a07c4678b944c641adfbd41f798b4b91fffd0fdc0df2578d9b0afc7b4d636aa6e110ead5d6281a2adc1ab90efd7f057f8 languageName: node linkType: hard @@ -221,15 +377,15 @@ __metadata: linkType: hard "@ant-design/icons-svg@npm:^4.3.0": - version: 4.3.0 - resolution: "@ant-design/icons-svg@npm:4.3.0" - checksum: 10/66a728a23a344f3dc5cbbf0c4260b9e17f7d70e8814e0428ed6494afe0507085559b0e5fbfb9ead4a8ef9ecc811c2869db34cbe086de00e3b7fd5e4ccc1b4f64 + version: 4.4.2 + resolution: "@ant-design/icons-svg@npm:4.4.2" + checksum: 10/cb926eb6b0386c8364514fd60760a7a467bdef1146f1edd3cdfc28b025a06fc84ceb179dea773ef357de88f33f2c27f10c091d5d1bdec94c28dc02a72aa0ac0b languageName: node linkType: hard -"@ant-design/icons@npm:^4.7.0": - version: 4.8.1 - resolution: "@ant-design/icons@npm:4.8.1" +"@ant-design/icons@npm:^4.8.2": + version: 4.8.3 + resolution: "@ant-design/icons@npm:4.8.3" dependencies: "@ant-design/colors": "npm:^6.0.0" "@ant-design/icons-svg": "npm:^4.3.0" @@ -240,11 +396,11 @@ __metadata: peerDependencies: react: ">=16.0.0" react-dom: ">=16.0.0" - checksum: 10/b6ec5f0febe50f9f6ad9b6e6736d57fd09a19496f54cdda051667fd3ecdea0011257b6c9f9be1f985dd5e5eb49bf116540197732bcff4d5275cf576a40c8a6eb + checksum: 10/e84c8411f1462cfbec9af6ddd1de985b2e49c9d268fa37548dff58ecb171ec32692cc432ffaf62f87afb8e24350d8c895068ed68ba3da49c29b2163a6b448901 languageName: node linkType: hard -"@ant-design/react-slick@npm:~1.0.0": +"@ant-design/react-slick@npm:~1.0.2": version: 1.0.2 resolution: "@ant-design/react-slick@npm:1.0.2" dependencies: @@ -268,20 +424,21 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.22.10, @babel/code-frame@npm:^7.22.5, @babel/code-frame@npm:^7.8.3": - version: 7.22.10 - resolution: "@babel/code-frame@npm:7.22.10" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0, @babel/code-frame@npm:^7.8.3": + version: 7.29.0 + resolution: "@babel/code-frame@npm:7.29.0" dependencies: - "@babel/highlight": "npm:^7.22.10" - chalk: "npm:^2.4.2" - checksum: 10/53620d831c8f2230a7d2fbe833c01c071740a642317c960d45cda9b0b2d0492e152e00ab45aad8b55329ba5de647354b95f42b546fb905c0b7acf78d3f2d3ecd + "@babel/helper-validator-identifier": "npm:^7.28.5" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10/199e15ff89007dd30675655eec52481cb245c9fdf4f81e4dc1f866603b0217b57aff25f5ffa0a95bbc8e31eb861695330cd7869ad52cc211aa63016320ef72c5 languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/compat-data@npm:7.22.9" - checksum: 10/6797f59857917e57e1765811e4f48371f2bc6063274be012e380e83cbc1a4f7931d616c235df56404134aa4bb4775ee61f7b382688314e1b625a4d51caabd734 +"@babel/compat-data@npm:^7.28.6, @babel/compat-data@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/compat-data@npm:7.29.0" + checksum: 10/7f21beedb930ed8fbf7eabafc60e6e6521c1d905646bf1317a61b2163339157fe797efeb85962bf55136e166b01fd1a6b526a15974b92a8b877d564dcb6c9580 languageName: node linkType: hard @@ -310,197 +467,168 @@ __metadata: linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.16, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.6, @babel/core@npm:^7.19.6": - version: 7.22.10 - resolution: "@babel/core@npm:7.22.10" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.22.10" - "@babel/generator": "npm:^7.22.10" - "@babel/helper-compilation-targets": "npm:^7.22.10" - "@babel/helper-module-transforms": "npm:^7.22.9" - "@babel/helpers": "npm:^7.22.10" - "@babel/parser": "npm:^7.22.10" - "@babel/template": "npm:^7.22.5" - "@babel/traverse": "npm:^7.22.10" - "@babel/types": "npm:^7.22.10" - convert-source-map: "npm:^1.7.0" + version: 7.29.0 + resolution: "@babel/core@npm:7.29.0" + dependencies: + "@babel/code-frame": "npm:^7.29.0" + "@babel/generator": "npm:^7.29.0" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helpers": "npm:^7.28.6" + "@babel/parser": "npm:^7.29.0" + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + "@jridgewell/remapping": "npm:^2.3.5" + convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.2" + json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10/3d8be31a9c1174941b1a56e754c20943bf4d0af4b6fd44d02bfd219d9c5ce268fa3fdc9a91b7df7a7f0668fa7ac32e6d37861d7bb43fec30ad9152dcedcc7013 + checksum: 10/25f4e91688cdfbaf1365831f4f245b436cdaabe63d59389b75752013b8d61819ee4257101b52fc328b0546159fd7d0e74457ed7cf12c365fea54be4fb0a40229 languageName: node linkType: hard "@babel/eslint-parser@npm:^7.12.16": - version: 7.22.10 - resolution: "@babel/eslint-parser@npm:7.22.10" + version: 7.28.6 + resolution: "@babel/eslint-parser@npm:7.28.6" dependencies: "@nicolo-ribaudo/eslint-scope-5-internals": "npm:5.1.1-v1" eslint-visitor-keys: "npm:^2.1.0" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - checksum: 10/eb30a16fba64d03eca8c178d604923e00c7a3f8ba5e30e6d907d15a633075512cc803cc8c9bd5bf2026caa8faa81c93ddad616cf62567f0a7e9d6abd3a154619 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.12.5, @babel/generator@npm:^7.18.7, @babel/generator@npm:^7.22.10, @babel/generator@npm:^7.7.2": - version: 7.22.10 - resolution: "@babel/generator@npm:7.22.10" - dependencies: - "@babel/types": "npm:^7.22.10" - "@jridgewell/gen-mapping": "npm:^0.3.2" - "@jridgewell/trace-mapping": "npm:^0.3.17" - jsesc: "npm:^2.5.1" - checksum: 10/b0df0265694a4baa8e824f1c065769ebd83678a78b5ef16bc75b8471e27d17f7a68d3658d8ce401d3fbbe8bc2e4e9f1d9506c89931d3fc125ff32dfdea1c0f7e + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + checksum: 10/15c0c9c78abcc5f267a34bab95437c37dfc468e3ac5e11094ed26bebd63c7a5b056fa47c005ba74eb9fbed6c79e37f90cbe2a24ed09425921275391fe9a5bbe7 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" +"@babel/generator@npm:^7.12.5, @babel/generator@npm:^7.18.7, @babel/generator@npm:^7.29.0, @babel/generator@npm:^7.7.2": + version: 7.29.1 + resolution: "@babel/generator@npm:7.29.1" dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 10/53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d + "@babel/parser": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10/61fe4ddd6e817aa312a14963ccdbb5c9a8c57e8b97b98d19a8a99ccab2215fda1a5f52bc8dd8d2e3c064497ddeb3ab8ceb55c76fa0f58f8169c34679d2256fe0 languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5": - version: 7.22.10 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.10" +"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" dependencies: - "@babel/types": "npm:^7.22.10" - checksum: 10/6de4a1f30e6244f9a1efdfcbe89df39923df3d165be606da5ad11319f8a11c12c72c60d9dc5fb696363281e2d6f741444c1af51f525fc7cf1d2a90fe23370bd9 + "@babel/types": "npm:^7.27.3" + checksum: 10/63863a5c936ef82b546ca289c9d1b18fabfc24da5c4ee382830b124e2e79b68d626207febc8d4bffc720f50b2ee65691d7d12cc0308679dee2cd6bdc926b7190 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.10, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": - version: 7.22.10 - resolution: "@babel/helper-compilation-targets@npm:7.22.10" +"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-compilation-targets@npm:7.28.6" dependencies: - "@babel/compat-data": "npm:^7.22.9" - "@babel/helper-validator-option": "npm:^7.22.5" - browserslist: "npm:^4.21.9" + "@babel/compat-data": "npm:^7.28.6" + "@babel/helper-validator-option": "npm:^7.27.1" + browserslist: "npm:^4.24.0" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 10/974085237b34b3d5e7eb0ec62454e1855fce3e5285cdd9461f01e0058ffaefab2491305be2b218f6e9a0f3f1e7f3edcb2067932a9f5545c39c6a9079328e5931 + checksum: 10/f512a5aeee4dfc6ea8807f521d085fdca8d66a7d068a6dd5e5b37da10a6081d648c0bbf66791a081e4e8e6556758da44831b331540965dfbf4f5275f3d0a8788 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.22.10, @babel/helper-create-class-features-plugin@npm:^7.22.5": - version: 7.22.10 - resolution: "@babel/helper-create-class-features-plugin@npm:7.22.10" +"@babel/helper-create-class-features-plugin@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-create-class-features-plugin@npm:7.28.6" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-function-name": "npm:^7.22.5" - "@babel/helper-member-expression-to-functions": "npm:^7.22.5" - "@babel/helper-optimise-call-expression": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-member-expression-to-functions": "npm:^7.28.5" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.6" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/79e2b199fea23b656cc4b2d018c398b88630e7cb39372f68f4a63055e14a51dd7b05656ac1f02d732815321c9cebfbe7857d7e03da2fb37fee6024769a96caf8 + checksum: 10/11f55607fcf66827ade745c0616aa3c6086aa655c0fab665dd3c4961829752e4c94c942262db30c4831ef9bce37ad444722e85ef1b7136587e28c6b1ef8ad43c languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": - version: 7.22.9 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.9" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1, @babel/helper-create-regexp-features-plugin@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.28.5" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - regexpu-core: "npm:^5.3.1" + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + regexpu-core: "npm:^6.3.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/6f3475a7661bc34527201c07eeeec3077c8adab0ed74bff728dc479da6c74bb393b6121ddf590ef1671f3f508fab3c7792a5ada65672665d84db4556daebd210 + checksum: 10/d8791350fe0479af0909aa5efb6dfd3bacda743c7c3f8fa1b0bb18fe014c206505834102ee24382df1cfe5a83b4e4083220e97f420a48b2cec15bb1ad6c7c9d3 languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.4.2": - version: 0.4.2 - resolution: "@babel/helper-define-polyfill-provider@npm:0.4.2" +"@babel/helper-define-polyfill-provider@npm:^0.6.5, @babel/helper-define-polyfill-provider@npm:^0.6.7": + version: 0.6.7 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.7" dependencies: - "@babel/helper-compilation-targets": "npm:^7.22.6" - "@babel/helper-plugin-utils": "npm:^7.22.5" - debug: "npm:^4.1.1" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + debug: "npm:^4.4.3" lodash.debounce: "npm:^4.0.8" - resolve: "npm:^1.14.2" + resolve: "npm:^1.22.11" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/6383a34af4048957e46366fa7e6228b61e140955a707f8af7b69c26b2b780880db164d08b6de9420f6ec5a0ee01eb23aa5d78a4b141f2b65b3670e71906471bf - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-environment-visitor@npm:7.22.5" - checksum: 10/248532077d732a34cd0844eb7b078ff917c3a8ec81a7f133593f71a860a582f05b60f818dc5049c2212e5baa12289c27889a4b81d56ef409b4863db49646c4b1 - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-function-name@npm:7.22.5" - dependencies: - "@babel/template": "npm:^7.22.5" - "@babel/types": "npm:^7.22.5" - checksum: 10/6d02e304a45fe2a64d69dfa5b4fdfd6d68e08deb32b0a528e7b99403d664e9207e6b856787a8ff3f420e77d15987ac1de4eb869906e6ed764b67b07c804d20ba + checksum: 10/a13fe848018aad9745018ab1f8c95520f3872572cc931c70c77acacf9b8f774b49e22ece6cc89143867935e2efac3fc7eb325f2846dedc1621d83f2f8f7d8ad1 languageName: node linkType: hard -"@babel/helper-hoist-variables@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-hoist-variables@npm:7.22.5" - dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 10/394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc +"@babel/helper-globals@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/helper-globals@npm:7.28.0" + checksum: 10/91445f7edfde9b65dcac47f4f858f68dc1661bf73332060ab67ad7cc7b313421099a2bfc4bda30c3db3842cfa1e86fffbb0d7b2c5205a177d91b22c8d7d9cb47 languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-member-expression-to-functions@npm:7.22.5" +"@babel/helper-member-expression-to-functions@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5" dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 10/bb51f195c17d8d98ca5fda630fed436643d27f094f3c936f670b43cb05865f192900f455ffb730c8d4310702b2211996a90354fd55ae8659b096bc6c75d36ec5 + "@babel/traverse": "npm:^7.28.5" + "@babel/types": "npm:^7.28.5" + checksum: 10/05e0857cf7913f03d88ca62952d3888693c21a4f4d7cfc141c630983f71fc0a64393e05cecceb7701dfe98298f7cc38fcb735d892e3c8c6f56f112c85ee1b154 languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-module-imports@npm:7.22.5" +"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-imports@npm:7.28.6" dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 10/d8296447c0cdc3c02417ba32864da3374e53bd2763a6c404aae118987c222c47238d9d1f4fd2a88250a85e0a68eff38d878c491b00c56d9bd20e809f91eb41b4 + "@babel/traverse": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10/64b1380d74425566a3c288074d7ce4dea56d775d2d3325a3d4a6df1dca702916c1d268133b6f385de9ba5b822b3c6e2af5d3b11ac88e5453d5698d77264f0ec0 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/helper-module-transforms@npm:7.22.9" +"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-transforms@npm:7.28.6" dependencies: - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-module-imports": "npm:^7.22.5" - "@babel/helper-simple-access": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/helper-validator-identifier": "npm:^7.22.5" + "@babel/helper-module-imports": "npm:^7.28.6" + "@babel/helper-validator-identifier": "npm:^7.28.5" + "@babel/traverse": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/80244f45e3f665305f8cf9412ee2efe44d1d30c201f869ceb0e87f9cddbbff06ebfed1dbe122a40875404867b747e7df73c0825c93765c108bcf2e86d2ef8b9b + checksum: 10/2e421c7db743249819ee51e83054952709dc2e197c7d5d415b4bdddc718580195704bfcdf38544b3f674efc2eccd4d29a65d38678fc827ed3934a7690984cd8b languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 10/c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c + "@babel/types": "npm:^7.27.1" + checksum: 10/0fb7ee824a384529d6b74f8a58279f9b56bfe3cce332168067dddeab2552d8eeb56dc8eaf86c04a3a09166a316cb92dfc79c4c623cd034ad4c563952c98b464f languageName: node linkType: hard @@ -511,70 +639,46 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.22.5 - resolution: "@babel/helper-plugin-utils@npm:7.22.5" - checksum: 10/ab220db218089a2aadd0582f5833fd17fa300245999f5f8784b10f5a75267c4e808592284a29438a0da365e702f05acb369f99e1c915c02f9f9210ec60eab8ea +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.28.6, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.28.6 + resolution: "@babel/helper-plugin-utils@npm:7.28.6" + checksum: 10/21c853bbc13dbdddf03309c9a0477270124ad48989e1ad6524b83e83a77524b333f92edd2caae645c5a7ecf264ec6d04a9ebe15aeb54c7f33c037b71ec521e4a languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.22.5, @babel/helper-remap-async-to-generator@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/helper-remap-async-to-generator@npm:7.22.9" +"@babel/helper-remap-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-wrap-function": "npm:^7.22.9" + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-wrap-function": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/05538079447829b13512157491cc77f9cf1ea7e1680e15cff0682c3ed9ee162de0c4862ece20a6d6b2df28177a1520bcfe45993fbeccf2747a81795a7c3f6290 + checksum: 10/0747397ba013f87dbf575454a76c18210d61c7c9af0f697546b4bcac670b54ddc156330234407b397f0c948738c304c228e0223039bc45eab4fbf46966a5e8cc languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/helper-replace-supers@npm:7.22.9" +"@babel/helper-replace-supers@npm:^7.27.1, @babel/helper-replace-supers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-replace-supers@npm:7.28.6" dependencies: - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-member-expression-to-functions": "npm:^7.22.5" - "@babel/helper-optimise-call-expression": "npm:^7.22.5" + "@babel/helper-member-expression-to-functions": "npm:^7.28.5" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/b5a740a95f12250b67afe30574ad60fa44175db92441658c6c3e8f473fcb8f8eaffd24fdad436cdfa1beee21b470d1190d64a0bb97b444525ca952e6cc081dc9 - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-simple-access@npm:7.22.5" - dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 10/7d5430eecf880937c27d1aed14245003bd1c7383ae07d652b3932f450f60bfcf8f2c1270c593ab063add185108d26198c69d1aca0e6fb7c6fdada4bcf72ab5b7 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" - dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 10/1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 + checksum: 10/ad2724713a4d983208f509e9607e8f950855f11bd97518a700057eb8bec69d687a8f90dc2da0c3c47281d2e3b79cf1d14ecf1fe3e1ee0a8e90b61aee6759c9a7 languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/helper-split-export-declaration@npm:7.22.6" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 10/e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-string-parser@npm:7.22.5" - checksum: 10/7f275a7f1a9504da06afc33441e219796352a4a3d0288a961bc14d1e30e06833a71621b33c3e60ee3ac1ff3c502d55e392bcbc0665f6f9d2629809696fab7cdd + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10/4f380c5d0e0769fa6942a468b0c2d7c8f0c438f941aaa88f785f8752c103631d0904c7b4e76207a3b0e6588b2dec376595370d92ca8f8f1b422c14a69aa146d4 languageName: node linkType: hard @@ -585,90 +689,120 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-validator-identifier@npm:7.22.5" - checksum: 10/12cb7d4535b3f8d109a446f7bef08d20eebe94fd97b534cd415c936ab342e9634edc5c99961af976bd78bcae6e6ec4b2ab8483d0da2ac5926fbe9f7dd9ab28ab - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.28.5": +"@babel/helper-validator-identifier@npm:^7.25.9, @babel/helper-validator-identifier@npm:^7.28.5": version: 7.28.5 resolution: "@babel/helper-validator-identifier@npm:7.28.5" checksum: 10/8e5d9b0133702cfacc7f368bf792f0f8ac0483794877c6dca5fcb73810ee138e27527701826fb58a40a004f3a5ec0a2f3c3dd5e326d262530b119918f3132ba7 languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-validator-option@npm:7.22.5" - checksum: 10/bbeca8a85ee86990215c0424997438b388b8d642d69b9f86c375a174d3cdeb270efafd1ff128bc7a1d370923d13b6e45829ba8581c027620e83e3a80c5c414b3 +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10/db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903 languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.22.9": - version: 7.22.10 - resolution: "@babel/helper-wrap-function@npm:7.22.10" +"@babel/helper-wrap-function@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/helper-wrap-function@npm:7.28.6" dependencies: - "@babel/helper-function-name": "npm:^7.22.5" - "@babel/template": "npm:^7.22.5" - "@babel/types": "npm:^7.22.10" - checksum: 10/b59629a983b957b0fa9a8255cb48efea9777d6ef4c8053613c85d5743abc42a3a5c0a00eb24ac29ecd00d5bb81ed066bedd0579b39db4331cdcf821ae2ded5ca + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10/d8a895a75399904746f4127db33593a20021fc55d1a5b5dfeb060b87cc13a8dceea91e70a4951bcd376ba9bd8232b0c04bff9a86c1dab83d691e01852c3b5bcd languageName: node linkType: hard -"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/helpers@npm:7.22.10" +"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helpers@npm:7.28.6" dependencies: - "@babel/template": "npm:^7.22.5" - "@babel/traverse": "npm:^7.22.10" - "@babel/types": "npm:^7.22.10" - checksum: 10/a5e0371ee5b269936a70fb96945bf21a7032005ceb8074c9869acfaed4ba6c6759e20d211634fa8d2eb46508ab5a85b3a186b483c963de47ea80fb5e2533714e + "@babel/template": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10/213485cdfffc4deb81fc1bf2cefed61bc825049322590ef69690e223faa300a2a4d1e7d806c723bb1f1f538226b9b1b6c356ca94eb47fa7c6d9e9f251ee425e6 languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/highlight@npm:7.22.10" +"@babel/highlight@npm:^7.10.4": + version: 7.25.9 + resolution: "@babel/highlight@npm:7.25.9" dependencies: - "@babel/helper-validator-identifier": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.25.9" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" - checksum: 10/faea6aa09ea7bc02d4d51aabdd1303b00aa2587933a08310d7502f29140bc8bcb32a74387d81dc08e97edd04f891e266623b90043ea4502e052dcbfd7e423a3c + picocolors: "npm:^1.0.0" + checksum: 10/0d165283dd4eb312292cea8fec3ae0d376874b1885f476014f0136784ed5b564b2c2ba2d270587ed546ee92505056dab56493f7960c01c4e6394d71d1b2e7db6 languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.8, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.10, @babel/parser@npm:^7.22.5": - version: 7.22.10 - resolution: "@babel/parser@npm:7.22.10" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.8, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/parser@npm:7.29.0" + dependencies: + "@babel/types": "npm:^7.29.0" bin: parser: ./bin/babel-parser.js - checksum: 10/a11e93c9b371bdd9c44bc96fd37e63eca8450fd11c19f9a8b1d7e2582835a3db970d8202a21736d04c653c8d1facde7b66c15c15bbf095047b7ca98e057a5eb9 + checksum: 10/b1576dca41074997a33ee740d87b330ae2e647f4b7da9e8d2abd3772b18385d303b0cee962b9b88425e0f30d58358dbb8d63792c1a2d005c823d335f6a029747 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/750de98b34e6d09b545ded6e635b43cbab02fe319622964175259b98f41b16052e5931c4fbd45bad8cd0a37ebdd381233edecec9ee395b8ec51f47f47d1dbcd4 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/eb7f4146dc01f1198ce559a90b077e58b951a07521ec414e3c7d4593bf6c4ab5c2af22242a7e9fec085e20299e0ba6ea97f44a45e84ab148141bf9eb959ad25e languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.5" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/1e353a060fb2cd8f1256d28cd768f16fb02513f905b9b6d656fb0242c96c341a196fa188b27c2701506a6e27515359fbcc1a5ca7fa8b9b530cf88fbd137baefc + checksum: 10/621cfddfcc99a81e74f8b6f9101fd260b27500cb1a568e3ceae9cc8afe9aee45ac3bca3900a2b66c612b1a2366d29ef67d4df5a1c975be727eaad6906f98c2c6 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.5" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - "@babel/plugin-transform-optional-chaining": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.13.0 - checksum: 10/16e7a5f3bf2f2ac0ca032a70bf0ebd7e886d84dbb712b55c0643c04c495f0f221fbcbca14b5f8f8027fa6c87a3dafae0934022ad2b409384af6c5c356495b7bd + checksum: 10/f07aa80272bd7a46b7ba11a4644da6c9b6a5a64e848dfaffdad6f02663adefd512e1aaebe664c4dd95f7ed4f80c872c7f8db8d8e34b47aae0930b412a28711a0 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/9377897aa7cba3a0b78a7c6015799ff71504b2b203329357e42ab3185d44aab07344ba33f5dd53f14d5340c1dc5a2587346343e0859538947bbab0484e72b914 languageName: node linkType: hard @@ -716,7 +850,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.12.13": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -749,40 +883,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" +"@babel/plugin-syntax-import-assertions@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/2b8b5572db04a7bef1e6cd20debf447e4eef7cb012616f5eceb8fa3e23ce469b8f76ee74fd6d1e158ba17a8f58b0aec579d092fb67c5a30e83ccfbc5754916c1 + checksum: 10/25017235e1e2c4ed892aa327a3fa10f4209cc618c6dd7806fc40c07d8d7d24a39743d3d5568b8d1c8f416cffe03c174e78874ded513c9338b07a7ab1dcbab050 languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5" +"@babel/plugin-syntax-import-attributes@npm:^7.24.7, @babel/plugin-syntax-import-attributes@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/197b3c5ea2a9649347f033342cb222ab47f4645633695205c0250c6bf2af29e643753b8bb24a2db39948bef08e7c540babfd365591eb57fc110cb30b425ffc47 + checksum: 10/6c8c6a5988dbb9799d6027360d1a5ba64faabf551f2ef11ba4eade0c62253b5c85d44ddc8eb643c74b9acb2bcaa664a950bd5de9a5d4aef291c4f2a48223bb4b languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -815,18 +938,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" +"@babel/plugin-syntax-jsx@npm:^7.27.1, @babel/plugin-syntax-jsx@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-jsx@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce + checksum: 10/572e38f5c1bb4b8124300e7e3dd13e82ae84a21f90d3f0786c98cd05e63c78ca1f32d1cfe462dfbaf5e7d5102fa7cd8fd741dfe4f3afc2e01a3b2877dcc8c866 languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -848,7 +971,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -903,7 +1026,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -914,14 +1037,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.22.5, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.22.5 - resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" +"@babel/plugin-syntax-typescript@npm:^7.28.6, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.28.6 + resolution: "@babel/plugin-syntax-typescript@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a + checksum: 10/5c55f9c63bd36cf3d7e8db892294c8f85000f9c1526c3a1cc310d47d1e174f5c6f6605e5cc902c4636d885faba7a9f3d5e5edc6b35e4f3b1fd4c2d58d0304fa5 languageName: node linkType: hard @@ -937,763 +1060,775 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5" +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/35abb6c57062802c7ce8bd96b2ef2883e3124370c688bbd67609f7d2453802fb73944df8808f893b6c67de978eb2bcf87bbfe325e46d6f39b5fcb09ece11d01a + checksum: 10/62c2cc0ae2093336b1aa1376741c5ed245c0987d9e4b4c5313da4a38155509a7098b5acce582b6781cc0699381420010da2e3086353344abe0a6a0ec38961eb7 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.10" +"@babel/plugin-transform-async-generator-functions@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.29.0" dependencies: - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-remap-async-to-generator": "npm:^7.22.9" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + "@babel/traverse": "npm:^7.29.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/74473ab194a99acc249d043bdfbb60e5d214bb2e409932c216ef052465035e6e60642c01b89eda8aa226952ff0a5732c3abf952fde8a498c21787a9a37573c6e + checksum: 10/e2c064a5eb212cbdf14f7c0113e069b845ca0f0ba431c1cc04607d3fc4f3bf1ed70f5c375fe7c61338a45db88bc1a79d270c8d633ce12256e1fce3666c1e6b93 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5" +"@babel/plugin-transform-async-to-generator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.28.6" dependencies: - "@babel/helper-module-imports": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-remap-async-to-generator": "npm:^7.22.5" + "@babel/helper-module-imports": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/b95f23f99dcb379a9f0a1c2a3bbea3f8dc0e1b16dc1ac8b484fe378370169290a7a63d520959a9ba1232837cf74a80e23f6facbe14fd42a3cda6d3c2d7168e62 + checksum: 10/bca5774263ec01dd2bf71c74bbaf7baa183bf03576636b7826c3346be70c8c8cb15cff549112f2983c36885131a0afde6c443591278c281f733ee17f455aa9b1 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5" +"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/416b1341858e8ca4e524dee66044735956ced5f478b2c3b9bc11ec2285b0c25d7dbb96d79887169eb938084c95d0a89338c8b2fe70d473bd9dc92e5d9db1732c + checksum: 10/7fb4988ca80cf1fc8345310d5edfe38e86b3a72a302675cdd09404d5064fe1d1fe1283ebe658ad2b71445ecef857bfb29a748064306b5f6c628e0084759c2201 languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/plugin-transform-block-scoping@npm:7.22.10" +"@babel/plugin-transform-block-scoping@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-block-scoping@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/90ad83677dd26b6a33faade687b1316d44e6cdc77ace1e3b208f88927e8982686cc3ec11cf02b695dd4e1a5a8ba7e6f05d039cc45247741894b35567efe7a97c + checksum: 10/7ab8a0856024a5360ba16c3569b739385e939bc5a15ad7d811bec8459361a9aa5ee7c5f154a4e2ce79f5d66779c19464e7532600c31a1b6f681db4eb7e1c7bde languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-class-properties@npm:7.22.5" +"@babel/plugin-transform-class-properties@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-class-properties@npm:7.28.6" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/b830152dfc2ff2f647f0abe76e6251babdfbef54d18c4b2c73a6bf76b1a00050a5d998dac80dc901a48514e95604324943a9dd39317073fe0928b559e0e0c579 + checksum: 10/200f30d44b36a768fa3a8cf690db9e333996af2ad14d9fa1b4c91a427ed9302907873b219b4ce87517ca1014a810eb2e929a6a66be68473f72b546fc64d04fbc languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-class-static-block@npm:7.22.5" +"@babel/plugin-transform-class-static-block@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-class-static-block@npm:7.28.6" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10/bc48b92dbaf625a14f2bf62382384eef01e0515802426841636ae9146e27395d068c7a8a45e9e15699491b0a01d990f38f179cbc9dc89274a393f85648772f12 + checksum: 10/bea7836846deefd02d9976ad1b30b5ade0d6329ecd92866db789dcf6aacfaf900b7a77031e25680f8de5ad636a771a5bdca8961361e6218d45d538ec5d9b71cc languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/plugin-transform-classes@npm:7.22.6" +"@babel/plugin-transform-classes@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-classes@npm:7.28.6" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-compilation-targets": "npm:^7.22.6" - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-function-name": "npm:^7.22.5" - "@babel/helper-optimise-call-expression": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" - globals: "npm:^11.1.0" + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-replace-supers": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/9b2f653d12ade0302f8b01a0f647cdbe5e5874984bf85f65e445fb5f660abe0347dd7e45bebc376aa4e096e607f62af73fc44a7e67765cfbe387b632ec8867f9 + checksum: 10/9c3278a314d1c4bcda792bb22aced20e30c735557daf9bcc56397c0f3eb54761b21c770219e4581036a10dabda3e597321ed093bc245d5f4d561e19ceff66a6d languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" +"@babel/plugin-transform-computed-properties@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-computed-properties@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/template": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/template": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/a3efa8de19e4c52f01a99301d864819a7997a7845044d9cef5b67b0fb1e5e3e610ecc23053a8b5cf8fe40fcad93c15a586eaeffd22b89eeaa038339c37919661 + checksum: 10/4a5e270f7e1f1e9787cf7cf133d48e3c1e38eb935d29a90331a1324d7c720f589b7b626b2e6485cd5521a7a13f2dbdc89a3e46ecbe7213d5bbb631175267c4aa languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/plugin-transform-destructuring@npm:7.22.10" +"@babel/plugin-transform-destructuring@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.28.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/36cec1b8e3ecfc77753fe31698cc2441678ee4f70cf042202c3589a3b0079b04934f2d7d2f1c3d811ce6e3b2fe68fa1f4b6b6910555250987fce209d841cc686 + checksum: 10/9cc67d3377bc5d8063599f2eb4588f5f9a8ab3abc9b64a40c24501fb3c1f91f4d5cf281ea9f208fd6b2ef8d9d8b018dacf1bed9493334577c966cd32370a7036 languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5" +"@babel/plugin-transform-dotall-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.28.6" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/409b658d11e3082c8f69e9cdef2d96e4d6d11256f005772425fb230cc48fd05945edbfbcb709dab293a1a2f01f9c8a5bb7b4131e632b23264039d9f95864b453 + checksum: 10/866ffbbdee77fa955063b37c75593db8dbbe46b1ebb64cc788ea437e3a9aa41cb7b9afcee617c678a32b6705baa0892ec8e5d4b8af3bbb0ab1b254514ccdbd37 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5" +"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/bb1280fbabaab6fab2ede585df34900712698210a3bd413f4df5bae6d8c24be36b496c92722ae676a7a67d060a4624f4d6c23b923485f906bfba8773c69f55b4 + checksum: 10/987b718d2fab7626f61b72325c8121ead42341d6f46ad3a9b5e5f67f3ec558c903f1b8336277ffc43caac504ce00dd23a5456b5d1da23913333e1da77751f08d languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.5" +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.29.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/7fa7b773259a578c9e01c80946f75ecc074520064aa7a87a65db06c7df70766e2fa6be78cda55fa9418a14e30b2b9d595484a46db48074d495d9f877a4276065 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/7a9fbc8d17148b7f11a1d1ca3990d2c2cd44bd08a45dcaf14f20a017721235b9044b20e6168b6940282bb1b48fb78e6afbdfb9dd9d82fde614e15baa7d579932 + languageName: node + linkType: hard + +"@babel/plugin-transform-explicit-resource-management@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/186a6d59f36eb3c5824739fc9c22ed0f4ca68e001662aa3a302634346a8b785cb9579b23b0c158f4570604d697d19598ca09b58c60a7fa2894da1163c4eb1907 + checksum: 10/36d638a253dbdaee5548b4ddd21c04ee4e39914b207437bb64cf79bb41c2caadb4321768d3dba308c1016702649bc44efe751e2052de393004563c7376210d86 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5" +"@babel/plugin-transform-exponentiation-operator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.28.6" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/f2d660c1b1d51ad5fec1cd5ad426a52187204068c4158f8c4aa977b31535c61b66898d532603eef21c15756827be8277f724c869b888d560f26d7fe848bb5eae + checksum: 10/b232152499370435c7cd4bf3321f58e189150e35ca3722ea16533d33434b97294df1342f5499671ec48e62b71c34cdea0ca8cf317ad12594a10f6fc670315e62 languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.5" +"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/3d197b788758044983c96b9c49bed4b456055f35a388521a405968db0f6e2ffb6fd59110e3931f4dcc5e126ae9e5e00e154a0afb47a7ea359d8d0dea79f480d7 + checksum: 10/85082923eca317094f08f4953d8ea2a6558b3117826c0b740676983902b7236df1f4213ad844cb38c2dae104753dbe8f1cc51f01567835d476d32f5f544a4385 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-for-of@npm:7.22.5" +"@babel/plugin-transform-for-of@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-for-of@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/07ab9ce49a15a03840937dbbddbf2235e0e6b9af3c1427746fab6aaa667acd92327620f937134922167193ac7aca871d20326b59e7a8b1efd52f22f876348928 + checksum: 10/705c591d17ef263c309bba8c38e20655e8e74ff7fd21883a9cdaf5bf1df42d724383ad3d88ac01f42926e15b1e1e66f2f7f8c4e87de955afffa290d52314b019 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-function-name@npm:7.22.5" +"@babel/plugin-transform-function-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-function-name@npm:7.27.1" dependencies: - "@babel/helper-compilation-targets": "npm:^7.22.5" - "@babel/helper-function-name": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/cff3b876357999cb8ae30e439c3ec6b0491a53b0aa6f722920a4675a6dd5b53af97a833051df4b34791fe5b3dd326ccf769d5c8e45b322aa50ee11a660b17845 + checksum: 10/26a2a183c3c52a96495967420a64afc5a09f743a230272a131668abf23001e393afa6371e6f8e6c60f4182bea210ed31d1caf866452d91009c1daac345a52f23 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-json-strings@npm:7.22.5" +"@babel/plugin-transform-json-strings@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-json-strings@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/4e00b902487a670b6c8948f33f9108133fd745cf9d1478aca515fb460b9b2f12e137988ebc1663630fb82070a870aed8b0c1aa4d007a841c18004619798f255c + checksum: 10/69d82a1a0a72ed6e6f7969e09cf330516599d79b2b4e680e9dd3c57616a8c6af049b5103456e370ab56642815e80e46ed88bb81e9e059304a85c5fe0bf137c29 languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-literals@npm:7.22.5" +"@babel/plugin-transform-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/ec37cc2ffb32667af935ab32fe28f00920ec8a1eb999aa6dc6602f2bebd8ba205a558aeedcdccdebf334381d5c57106c61f52332045730393e73410892a9735b + checksum: 10/0a76d12ab19f32dd139964aea7da48cecdb7de0b75e207e576f0f700121fe92367d788f328bf4fb44b8261a0f605c97b44e62ae61cddbb67b14e94c88b411f95 languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.5" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/18748e953c08f64885f18c224eac58df10a13eac4d845d16b5d9b6276907da7ca2530dfebe6ed41cdc5f8a75d9db3e36d8eb54ddce7cd0364af1cab09b435302 + checksum: 10/36095d5d1cfc680e95298b5389a16016da800ae3379b130dabf557e94652c47b06610407e9fa44aaa03e9b0a5aa7b4b93348123985d44a45e369bf5f3497d149 languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5" +"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/ec4b0e07915ddd4fda0142fd104ee61015c208608a84cfa13643a95d18760b1dc1ceb6c6e0548898b8c49e5959a994e46367260176dbabc4467f729b21868504 + checksum: 10/804121430a6dcd431e6ffe99c6d1fbbc44b43478113b79c677629e7f877b4f78a06b69c6bfb2747fd84ee91879fe2eb32e4620b53124603086cf5b727593ebe8 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-modules-amd@npm:7.22.5" +"@babel/plugin-transform-modules-amd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" dependencies: - "@babel/helper-module-transforms": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/5453f829205f6c918cc74d66946c9bf9544869f961d72a9934b4370049bf72a9b0ac089b64389be5172b217858c5353ec3479a18ab14cebb23329d708f6fc1ab + checksum: 10/5ca9257981f2bbddd9dccf9126f1368de1cb335e7a5ff5cca9282266825af5b18b5f06c144320dcf5d2a200d2b53b6d22d9b801a55dc0509ab5a5838af7e61b7 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.5" +"@babel/plugin-transform-modules-commonjs@npm:^7.27.1, @babel/plugin-transform-modules-commonjs@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.28.6" dependencies: - "@babel/helper-module-transforms": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-simple-access": "npm:^7.22.5" + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/bf8bcc7a0f28f1fb2bfad3e65a50e6aee54998917caf89c68fc871d1831808a74ae7563b8a37485da03a583a9bd1211c30b667bb366c3161a22c6105962ab5f8 + checksum: 10/ec6ea2958e778a7e0220f4a75cb5816cecddc6bd98efa10499fff7baabaa29a594d50d787a4ebf8a8ba66fefcf76ca2ded602be0b4554ae3317e53b3b3375b37 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.22.5" +"@babel/plugin-transform-modules-systemjs@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.29.0" dependencies: - "@babel/helper-hoist-variables": "npm:^7.22.5" - "@babel/helper-module-transforms": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-identifier": "npm:^7.22.5" + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-validator-identifier": "npm:^7.28.5" + "@babel/traverse": "npm:^7.29.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/bc9fc6fe6dfe1aeee379abf771a857fdcfea8a548d40ecdafc8e522e71713ae230450d2c48f03e1e3c2d056c0f30286845c1f1fc8c5fd827bddaeb0d860a312c + checksum: 10/b3e64728eef02d829510778226da4c06be740fe52e0d45d4aa68b24083096d8ad7df67f2e9e67198b2e85f3237d42bd66f5771f85846f7a746105d05ca2e0cae languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5" +"@babel/plugin-transform-modules-umd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" dependencies: - "@babel/helper-module-transforms": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/b955d066c68b60c1179bfb0b744e2fad32dbe86d0673bd94637439cfe425d1e3ff579bd47a417233609aac1624f4fe69915bee73e6deb2af6188fda8aaa5db63 + checksum: 10/7388932863b4ee01f177eb6c2e2df9e2312005e43ada99897624d5565db4b9cef1e30aa7ad2c79bbe5373f284cfcddea98d8fe212714a24c6aba223272163058 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.29.0" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623 + checksum: 10/ed8c27699ca82a6c01cbfd39f3de16b90cfea4f8146a358057f76df290d308a66a8bd2e6734e6a87f68c18576e15d2d70548a84cd474d26fdf256c3f5ae44d8c languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-new-target@npm:7.22.5" +"@babel/plugin-transform-new-target@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-new-target@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/6b72112773487a881a1d6ffa680afde08bad699252020e86122180ee7a88854d5da3f15d9bca3331cf2e025df045604494a8208a2e63b486266b07c14e2ffbf3 + checksum: 10/620d78ee476ae70960989e477dc86031ffa3d554b1b1999e6ec95261629f7a13e5a7b98579c63a009f9fdf14def027db57de1f0ae1f06fb6eaed8908ff65cf68 languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.5" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/e6a059169d257fc61322d0708edae423072449b7c33de396261e68dee582aec5396789a1c22bce84e5bd88a169623c2e750b513fc222930979e6accd52a44bf2 + checksum: 10/88106952ca4f4fea8f97222a25f9595c6859d458d76905845dfa54f54e7d345e3dc338932e8c84a9c57a6c88b2f6d9ebff47130ce508a49c2b6e6a9f03858750 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.5" +"@babel/plugin-transform-numeric-separator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/9e7837d4eae04f211ebaa034fe5003d2927b6bf6d5b9dc09f2b1183c01482cdde5a75b8bd5c7ff195c2abc7b923339eb0b2a9d27cb78359d38248a3b2c2367c4 + checksum: 10/4b5ca60e481e22f0842761a3badca17376a230b5a7e5482338604eb95836c2d0c9c9bde53bdc5c2de1c6a12ae6c12de7464d098bf74b0943f85905ca358f0b68 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.5" +"@babel/plugin-transform-object-rest-spread@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.6" dependencies: - "@babel/compat-data": "npm:^7.22.5" - "@babel/helper-compilation-targets": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-transform-parameters": "npm:^7.22.5" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/traverse": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/f4ab721dff46c9013ba1a29132d6ab334f1f08f6150945b444e606f0dd16a5e0a0da91fc4fa5eec44389d870f1cabcbf3365314dcbfab7b7f25047481976fa6e + checksum: 10/9c8c51a515a5ec98a33a715e82d49f873e58b04b53fa1e826f3c2009f7133cd396d6730553a53d265e096dbfbea17dd100ae38815d0b506c094cb316a7a5519e languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-object-super@npm:7.22.5" +"@babel/plugin-transform-object-super@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-super@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/b71887877d74cb64dbccb5c0324fa67e31171e6a5311991f626650e44a4083e5436a1eaa89da78c0474fb095d4ec322d63ee778b202d33aa2e4194e1ed8e62d7 + checksum: 10/46b819cb9a6cd3cfefe42d07875fee414f18d5e66040366ae856116db560ad4e16f3899a0a7fddd6773e0d1458444f94b208b67c0e3b6977a27ea17a5c13dbf6 languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.5" +"@babel/plugin-transform-optional-catch-binding@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/b0e8b4233ff06b5c9d285257f49c5bd441f883189b24282e6200f9ebdf5db29aeeebbffae57fbbcd5df9f4387b3e66e5d322aaae5652a78e89685ddbae46bbd1 + checksum: 10/ee24a17defec056eb9ef01824d7e4a1f65d531af6b4b79acfd0bcb95ce0b47926e80c61897f36f8c01ce733b069c9acdb1c9ce5ec07a729d0dbf9e8d859fe992 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.22.10, @babel/plugin-transform-optional-chaining@npm:^7.22.5": - version: 7.22.10 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.10" +"@babel/plugin-transform-optional-chaining@npm:^7.27.1, @babel/plugin-transform-optional-chaining@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/5c5624cd3f46d462bd3e41cb94e3a281f104ed025983f68b63eea35985304da954e589b88b6ae8610efdd2bc352f4d9f937f7b4391ff0453f7726eeaccfc588c + checksum: 10/c7cf29f99384a9a98748f04489a122c0106e0316aa64a2e61ef8af74c1057b587b96d9a08eb4e33d2ac17d1aaff1f0a86fae658d429fa7bcce4ef977e0ad684b languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-parameters@npm:7.22.5" +"@babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.27.7": + version: 7.27.7 + resolution: "@babel/plugin-transform-parameters@npm:7.27.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/86bec14b1a42a3c7059fe7dcbbedcae91e778a6b61e59922560d689fea10a165d89e53c2d9f383ad361b642ce444e183880a88dea39d87c09f2046a534b64304 + checksum: 10/ba0aa8c977a03bf83030668f64c1d721e4e82d8cce89cdde75a2755862b79dbe9e7f58ca955e68c721fd494d6ee3826e46efad3fbf0855fcc92cb269477b4777 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-private-methods@npm:7.22.5" +"@babel/plugin-transform-private-methods@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-private-methods@npm:7.28.6" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/321479b4fcb6d3b3ef622ab22fd24001e43d46e680e8e41324c033d5810c84646e470f81b44cbcbef5c22e99030784f7cac92f1829974da7a47a60a7139082c3 + checksum: 10/b80179b28f6a165674d0b0d6c6349b13a01dd282b18f56933423c0a33c23fc0626c8f011f859fc20737d021fe966eb8474a5233e4596401482e9ee7fb00e2aa2 languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.5" +"@babel/plugin-transform-private-property-in-object@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.28.6" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-create-class-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/d340bd71805fd00587b68711e24e7fa02257ad95835628f7e451fcc5a4610685ac43d90a6746df5464b0c9bc11b74d3097f1ac695fb09a04a71aa5035bca40b0 + checksum: 10/d02008c62fd32ff747b850b8581ab5076b717320e1cb01c7fc66ebf5169095bd922e18cfb269992f85bc7fbd2cc61e5b5af25e2b54aad67411474b789ea94d5f languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-property-literals@npm:7.22.5" +"@babel/plugin-transform-property-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/796176a3176106f77fcb8cd04eb34a8475ce82d6d03a88db089531b8f0453a2fb8b0c6ec9a52c27948bc0ea478becec449893741fc546dfc3930ab927e3f9f2e + checksum: 10/7caec27d5ed8870895c9faf4f71def72745d69da0d8e77903146a4e135fd7bed5778f5f9cebb36c5fba86338e6194dd67a08c033fc84b4299b7eceab6d9630cb languageName: node linkType: hard "@babel/plugin-transform-react-constant-elements@npm:^7.18.12": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.22.5" + version: 7.27.1 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/0f2fc4d0a4025975f6cb4e1e80be1fe2e14546d86341beed8dbbbf9357b56908574e89476bd693431966c15b31f9c30f735636232058cf7812ca46b687d053be + checksum: 10/906ea336502a42ca942f492f386111db4041c28c08f9dcc63eb816b75a1a96121505c1522c5e721dd192bf42a244799b78a8991e4abbf3fa17748dac1b6f142e languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-display-name@npm:7.22.5" +"@babel/plugin-transform-react-display-name@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-react-display-name@npm:7.28.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/a12bfd1e4e93055efca3ace3c34722571bda59d9740dca364d225d9c6e3ca874f134694d21715c42cc63d79efd46db9665bd4a022998767f9245f1e29d5d204d + checksum: 10/d623644a078086f410b1952429d82c10e2833ebffb97800b25f55ab7f3ffafde34e57a4a71958da73f4abfcef39b598e2ca172f2b43531f98b3f12e0de17c219 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.22.5" +"@babel/plugin-transform-react-jsx-development@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.27.1" dependencies: - "@babel/plugin-transform-react-jsx": "npm:^7.22.5" + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/36bc3ff0b96bb0ef4723070a50cfdf2e72cfd903a59eba448f9fe92fea47574d6f22efd99364413719e1f3fb3c51b6c9b2990b87af088f8486a84b2a5f9e4560 + checksum: 10/b88865d5b8c018992f2332da939faa15c4d4a864c9435a5937beaff3fe43781432cc42e0a5d5631098e0bd4066fc33f5fa72203b388b074c3545fe7aaa21e474 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-jsx@npm:7.22.5" +"@babel/plugin-transform-react-jsx@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-react-jsx@npm:7.28.6" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-module-imports": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-jsx": "npm:^7.22.5" - "@babel/types": "npm:^7.22.5" + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-module-imports": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/plugin-syntax-jsx": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/6be5db99b170c937c71fbe68dc64804bb041729d2f95b376ab5e7bc51c34a790f28753b14384160e87cabacf5e1b1aa3379a1a430a60b1fd6b031ba58955f5a6 + checksum: 10/c6eade7309f0710b6aac9e747f8c3305633801c035a35efc5e2436742cc466e457ed5848d3dd5dade36e34332cfc50ac92d69a33f7803d66ae2d72f13a76c3bc languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.22.5" +"@babel/plugin-transform-react-pure-annotations@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/092021c4f404e267002099ec20b3f12dd730cb90b0d83c5feed3dc00dbe43b9c42c795a18e7c6c7d7bddea20c7dd56221b146aec81b37f2e7eb5137331c61120 + checksum: 10/a6f591c5e85a1ab0685d4a25afe591fe8d11dc0b73c677cf9560ff8d540d036a1cce9efcb729fc9092def4d854dc304ffdc063a89a9247900b69c516bf971a4c languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/plugin-transform-regenerator@npm:7.22.10" +"@babel/plugin-transform-regenerator@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-regenerator@npm:7.29.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - regenerator-transform: "npm:^0.15.2" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/e13678d62d6fa96f11cb8b863f00e8693491e7adc88bfca3f2820f80cbac8336e7dec3a596eee6a1c4663b7ececc3564f2cd7fb44ed6d4ce84ac2bb7f39ecc6e + checksum: 10/c8fa9da74371568c5d34fd7d53de018752550cb10334040ca59e41f34b27f127974bdc5b4d1a1a8e8f3ebcf3cb7f650aa3f2df3b7bf1b7edf67c04493b9e3cb8 + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.28.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/5aacc570034c085afa0165137bb9a04cd4299b86eb9092933a96dcc1132c8f591d9d534419988f5f762b2f70d43a3c719a6b8fa05fdd3b2b1820d01cf85500da languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5" +"@babel/plugin-transform-reserved-words@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/3ffd7dbc425fe8132bfec118b9817572799cab1473113a635d25ab606c1f5a2341a636c04cf6b22df3813320365ed5a965b5eeb3192320a10e4cc2c137bd8bfc + checksum: 10/dea0b66742d2863b369c06c053e11e15ba785892ea19cccf7aef3c1bdaa38b6ab082e19984c5ea7810d275d9445c5400fcc385ad71ce707ed9256fadb102af3b languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.18.6": - version: 7.22.10 - resolution: "@babel/plugin-transform-runtime@npm:7.22.10" - dependencies: - "@babel/helper-module-imports": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - babel-plugin-polyfill-corejs2: "npm:^0.4.5" - babel-plugin-polyfill-corejs3: "npm:^0.8.3" - babel-plugin-polyfill-regenerator: "npm:^0.5.2" + version: 7.29.0 + resolution: "@babel/plugin-transform-runtime@npm:7.29.0" + dependencies: + "@babel/helper-module-imports": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + babel-plugin-polyfill-corejs2: "npm:^0.4.14" + babel-plugin-polyfill-corejs3: "npm:^0.13.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.5" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/1d984667c18366dfc53935747f1a18f7d2f57d329b5081d76c4e6129f46f8a411024f78cdb87970f9ca2bd8203fb8819b1d1c0eb066e05563a9101cae73b0f51 + checksum: 10/314cfede923a7fb3aeecf4b282a3090e4a9ae1d84005e9a0365284c5142165a4dccd308455af9013d486a4ad8ada25ccad2fea28c2ec19b086d1ffa0088a69d7 languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5" +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/a5ac902c56ea8effa99f681340ee61bac21094588f7aef0bc01dff98246651702e677552fa6d10e548c4ac22a3ffad047dd2f8c8f0540b68316c2c203e56818b + checksum: 10/fbba6e2aef0b69681acb68202aa249c0598e470cc0853d7ff5bd0171fd6a7ec31d77cfabcce9df6360fc8349eded7e4a65218c32551bd3fc0caaa1ac899ac6d4 languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-spread@npm:7.22.5" +"@babel/plugin-transform-spread@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-spread@npm:7.28.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/f9fd247b3fa8953416c8808c124c3a5db5cd697abbf791aae0143a0587fff6b386045f94c62bcd1b6783a1fd275629cc194f25f6c0aafc9f05f12a56fd5f94bf + checksum: 10/1fa02ac60ae5e49d46fa2966aaf3f7578cf37255534c2ecf379d65855088a1623c3eea28b9ee6a0b1413b0199b51f9019d0da3fe9da89986bc47e07242415f60 languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5" +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/63b2c575e3e7f96c32d52ed45ee098fb7d354b35c2223b8c8e76840b32cc529ee0c0ceb5742fd082e56e91e3d82842a367ce177e82b05039af3d602c9627a729 + checksum: 10/e1414a502efba92c7974681767e365a8cda6c5e9e5f33472a9eaa0ce2e75cea0a9bef881ff8dda37c7810ad902f98d3c00ead92a3ac3b73a79d011df85b5a189 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" +"@babel/plugin-transform-template-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/27e9bb030654cb425381c69754be4abe6a7c75b45cd7f962cd8d604b841b2f0fb7b024f2efc1c25cc53f5b16d79d5e8cfc47cacbdaa983895b3aeefa3e7e24ff + checksum: 10/93aad782503b691faef7c0893372d5243df3219b07f1f22cfc32c104af6a2e7acd6102c128439eab15336d048f1b214ca134b87b0630d8cd568bf447f78b25ce languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5" +"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/82a53a63ffc3010b689ca9a54e5f53b2718b9f4b4a9818f36f9b7dba234f38a01876680553d2716a645a61920b5e6e4aaf8d4a0064add379b27ca0b403049512 + checksum: 10/812d736402a6f9313b86b8adf36740394400be7a09c48e51ee45ab4a383a3f46fc618d656dd12e44934665e42ae71cf143e25b95491b699ef7c737950dbdb862 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.22.5": - version: 7.22.10 - resolution: "@babel/plugin-transform-typescript@npm:7.22.10" +"@babel/plugin-transform-typescript@npm:^7.28.5": + version: 7.28.6 + resolution: "@babel/plugin-transform-typescript@npm:7.28.6" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-create-class-features-plugin": "npm:^7.22.10" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-typescript": "npm:^7.22.5" + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/7d48bbc07bc8ed821e3303ae2b4420599bd68c9461ff26adda2b5d5177f6bef05667c654982bb5cd76706e2aa4383bae9c4a5bfe31f42130ebfcfd27a24fe647 + checksum: 10/a0bccc531fa8710a45b0b593140273741e0e4a0721b1ef6ef9dfefae0bbe61528440d65aab7936929551fd76793272257d74f60cf66891352f793294930a4b67 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.10" +"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/807f40ed1324c8cb107c45358f1903384ca3f0ef1d01c5a3c5c9b271c8d8eec66936a3dcc8d75ddfceea9421420368c2e77ae3adef0a50557e778dfe296bf382 + checksum: 10/87b9e49dee4ab6e78f4cdcdbdd837d7784f02868a96bfc206c8dbb17dd85db161b5a0ecbe95b19a42e8aea0ce57e80249e1facbf9221d7f4114d52c3b9136c9e languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5" +"@babel/plugin-transform-unicode-property-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.28.6" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/2495e5f663cb388e3d888b4ba3df419ac436a5012144ac170b622ddfc221f9ea9bdba839fa2bc0185cb776b578030666406452ec7791cbf0e7a3d4c88ae9574c + checksum: 10/d14e8c51aa73f592575c1543400fd67d96df6410d75c9dc10dd640fd7eecb37366a2f2368bbdd7529842532eda4af181c921bda95146c6d373c64ea59c6e9991 languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5" +"@babel/plugin-transform-unicode-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/6b5d1404c8c623b0ec9bd436c00d885a17d6a34f3f2597996343ddb9d94f6379705b21582dfd4cec2c47fd34068872e74ab6b9580116c0566b3f9447e2a7fa06 + checksum: 10/a34d89a2b75fb78e66d97c3dc90d4877f7e31f43316b52176f95a5dee20e9bb56ecf158eafc42a001676ddf7b393d9e67650bad6b32f5405780f25fb83cd68e3 languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.28.6" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/c042070f980b139547f8b0179efbc049ac5930abec7fc26ed7a41d89a048d8ab17d362200e204b6f71c3c20d6991a0e74415e1a412a49adc8131c2a40c04822e + checksum: 10/423971fe2eef9d18782b1c30f5f42613ee510e5b9c08760c5538a0997b36c34495acce261e0e37a27831f81330359230bd1f33c2e1822de70241002b45b7d68e languageName: node linkType: hard "@babel/preset-env@npm:^7.18.6, @babel/preset-env@npm:^7.19.4": - version: 7.22.10 - resolution: "@babel/preset-env@npm:7.22.10" - dependencies: - "@babel/compat-data": "npm:^7.22.9" - "@babel/helper-compilation-targets": "npm:^7.22.10" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.22.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.22.5" + version: 7.29.0 + resolution: "@babel/preset-env@npm:7.29.0" + dependencies: + "@babel/compat-data": "npm:^7.29.0" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.28.6" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - "@babel/plugin-syntax-import-assertions": "npm:^7.22.5" - "@babel/plugin-syntax-import-attributes": "npm:^7.22.5" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + "@babel/plugin-syntax-import-assertions": "npm:^7.28.6" + "@babel/plugin-syntax-import-attributes": "npm:^7.28.6" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.22.5" - "@babel/plugin-transform-async-generator-functions": "npm:^7.22.10" - "@babel/plugin-transform-async-to-generator": "npm:^7.22.5" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.22.5" - "@babel/plugin-transform-block-scoping": "npm:^7.22.10" - "@babel/plugin-transform-class-properties": "npm:^7.22.5" - "@babel/plugin-transform-class-static-block": "npm:^7.22.5" - "@babel/plugin-transform-classes": "npm:^7.22.6" - "@babel/plugin-transform-computed-properties": "npm:^7.22.5" - "@babel/plugin-transform-destructuring": "npm:^7.22.10" - "@babel/plugin-transform-dotall-regex": "npm:^7.22.5" - "@babel/plugin-transform-duplicate-keys": "npm:^7.22.5" - "@babel/plugin-transform-dynamic-import": "npm:^7.22.5" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.22.5" - "@babel/plugin-transform-export-namespace-from": "npm:^7.22.5" - "@babel/plugin-transform-for-of": "npm:^7.22.5" - "@babel/plugin-transform-function-name": "npm:^7.22.5" - "@babel/plugin-transform-json-strings": "npm:^7.22.5" - "@babel/plugin-transform-literals": "npm:^7.22.5" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.22.5" - "@babel/plugin-transform-member-expression-literals": "npm:^7.22.5" - "@babel/plugin-transform-modules-amd": "npm:^7.22.5" - "@babel/plugin-transform-modules-commonjs": "npm:^7.22.5" - "@babel/plugin-transform-modules-systemjs": "npm:^7.22.5" - "@babel/plugin-transform-modules-umd": "npm:^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.22.5" - "@babel/plugin-transform-new-target": "npm:^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.22.5" - "@babel/plugin-transform-numeric-separator": "npm:^7.22.5" - "@babel/plugin-transform-object-rest-spread": "npm:^7.22.5" - "@babel/plugin-transform-object-super": "npm:^7.22.5" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.22.5" - "@babel/plugin-transform-optional-chaining": "npm:^7.22.10" - "@babel/plugin-transform-parameters": "npm:^7.22.5" - "@babel/plugin-transform-private-methods": "npm:^7.22.5" - "@babel/plugin-transform-private-property-in-object": "npm:^7.22.5" - "@babel/plugin-transform-property-literals": "npm:^7.22.5" - "@babel/plugin-transform-regenerator": "npm:^7.22.10" - "@babel/plugin-transform-reserved-words": "npm:^7.22.5" - "@babel/plugin-transform-shorthand-properties": "npm:^7.22.5" - "@babel/plugin-transform-spread": "npm:^7.22.5" - "@babel/plugin-transform-sticky-regex": "npm:^7.22.5" - "@babel/plugin-transform-template-literals": "npm:^7.22.5" - "@babel/plugin-transform-typeof-symbol": "npm:^7.22.5" - "@babel/plugin-transform-unicode-escapes": "npm:^7.22.10" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.22.5" - "@babel/plugin-transform-unicode-regex": "npm:^7.22.5" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.22.5" + "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" + "@babel/plugin-transform-async-generator-functions": "npm:^7.29.0" + "@babel/plugin-transform-async-to-generator": "npm:^7.28.6" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" + "@babel/plugin-transform-block-scoping": "npm:^7.28.6" + "@babel/plugin-transform-class-properties": "npm:^7.28.6" + "@babel/plugin-transform-class-static-block": "npm:^7.28.6" + "@babel/plugin-transform-classes": "npm:^7.28.6" + "@babel/plugin-transform-computed-properties": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + "@babel/plugin-transform-dotall-regex": "npm:^7.28.6" + "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.29.0" + "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" + "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.6" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.28.6" + "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" + "@babel/plugin-transform-for-of": "npm:^7.27.1" + "@babel/plugin-transform-function-name": "npm:^7.27.1" + "@babel/plugin-transform-json-strings": "npm:^7.28.6" + "@babel/plugin-transform-literals": "npm:^7.27.1" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.28.6" + "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" + "@babel/plugin-transform-modules-amd": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.28.6" + "@babel/plugin-transform-modules-systemjs": "npm:^7.29.0" + "@babel/plugin-transform-modules-umd": "npm:^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.29.0" + "@babel/plugin-transform-new-target": "npm:^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.28.6" + "@babel/plugin-transform-numeric-separator": "npm:^7.28.6" + "@babel/plugin-transform-object-rest-spread": "npm:^7.28.6" + "@babel/plugin-transform-object-super": "npm:^7.27.1" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.28.6" + "@babel/plugin-transform-optional-chaining": "npm:^7.28.6" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/plugin-transform-private-methods": "npm:^7.28.6" + "@babel/plugin-transform-private-property-in-object": "npm:^7.28.6" + "@babel/plugin-transform-property-literals": "npm:^7.27.1" + "@babel/plugin-transform-regenerator": "npm:^7.29.0" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.28.6" + "@babel/plugin-transform-reserved-words": "npm:^7.27.1" + "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" + "@babel/plugin-transform-spread": "npm:^7.28.6" + "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" + "@babel/plugin-transform-template-literals": "npm:^7.27.1" + "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" + "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.28.6" + "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.28.6" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - "@babel/types": "npm:^7.22.10" - babel-plugin-polyfill-corejs2: "npm:^0.4.5" - babel-plugin-polyfill-corejs3: "npm:^0.8.3" - babel-plugin-polyfill-regenerator: "npm:^0.5.2" - core-js-compat: "npm:^3.31.0" + babel-plugin-polyfill-corejs2: "npm:^0.4.15" + babel-plugin-polyfill-corejs3: "npm:^0.14.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.6" + core-js-compat: "npm:^3.48.0" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/887cc41e6df54342ffb41b42248f584b2f220e653fc70c683e3d7cc1aa6964b9694d7d6846694647e681f440cd7f2e4454c8a9ee5bce3f523c2e22a99278f2fd + checksum: 10/211b33ec8644636275f61aa273071d8cbc2a6bb28d82ad246e3831a6aa7d96c610a55b5140bcd21be7f71fb04c3aa4a10eb08665fb5505e153cfdd8dbc8c1c1c languageName: node linkType: hard @@ -1711,103 +1846,79 @@ __metadata: linkType: hard "@babel/preset-react@npm:^7.18.6": - version: 7.22.5 - resolution: "@babel/preset-react@npm:7.22.5" + version: 7.28.5 + resolution: "@babel/preset-react@npm:7.28.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.5" - "@babel/plugin-transform-react-display-name": "npm:^7.22.5" - "@babel/plugin-transform-react-jsx": "npm:^7.22.5" - "@babel/plugin-transform-react-jsx-development": "npm:^7.22.5" - "@babel/plugin-transform-react-pure-annotations": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-transform-react-display-name": "npm:^7.28.0" + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" + "@babel/plugin-transform-react-jsx-development": "npm:^7.27.1" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/7c78b1bca3f2de9cb863b50cf0a5378d5e80b1b2e7573b9daabf09c0517d197aa7ff7fcd7daeb4a51e148743ab5dbd24c7b34422c86a256baf0e10e13400fe98 + checksum: 10/c00d43b27790caddee7c4971b11b4bf479a761175433e2f168b3d7e1ac6ee36d4d929a76acc7f302e9bff3a5b26d02d37f0ad7ae6359e076e5baa862b00843b2 languageName: node linkType: hard "@babel/preset-typescript@npm:^7.18.6": - version: 7.22.5 - resolution: "@babel/preset-typescript@npm:7.22.5" + version: 7.28.5 + resolution: "@babel/preset-typescript@npm:7.28.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.5" - "@babel/plugin-syntax-jsx": "npm:^7.22.5" - "@babel/plugin-transform-modules-commonjs": "npm:^7.22.5" - "@babel/plugin-transform-typescript": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-typescript": "npm:^7.28.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/2d851117e78235540be469a12a5c3bad42f994d030cf1fa58943e69f218dd21b805b0f2a592caf5f4bfc7beee2d3f9b66fa2a1daeb80c78edb3c574bd99e63d3 - languageName: node - linkType: hard - -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 10/c57fb730b17332b7572574b74364a77d70faa302a281a62819476fa3b09822974fd75af77aea603ad77378395be64e81f89f0e800bf86cbbf21652d49ce12ee8 + checksum: 10/72c03e01c34906041b1813542761a283c52da1751e7ddf63191bc5fb2a0354eca30a00537c5a92951688bec3975bdc0e50ef4516b5e94cfd6d4cf947f2125bdc languageName: node linkType: hard "@babel/runtime-corejs3@npm:^7.18.6": - version: 7.22.10 - resolution: "@babel/runtime-corejs3@npm:7.22.10" - dependencies: - core-js-pure: "npm:^3.30.2" - regenerator-runtime: "npm:^0.14.0" - checksum: 10/78ee6b6952211942001bd9c543a82a939fae8e32ff4de8eebef9255b5e20ae18b53a63d928016c44c32d1359d464958169ad381c968e0a51f05620804fc78bf3 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": - version: 7.22.10 - resolution: "@babel/runtime@npm:7.22.10" + version: 7.29.0 + resolution: "@babel/runtime-corejs3@npm:7.29.0" dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10/88bba6dfdfd6f6e9365199397146a0dd5d04409e7142a0df95125a198eb76c83fd0a52c117aba50f9a61db2f0186780574c071ea48010e5ffa1f157585c8c950 + core-js-pure: "npm:^3.48.0" + checksum: 10/59b3b614a8b4c5cf94d1f271f36eb96def0f0be0b6fa93da2ff7a87996bc3806f83690e7517f2e675078ff645e4e953f8bf3c6fc1a59cc5327e45f04bc0dd105 languageName: node linkType: hard -"@babel/template@npm:^7.12.7, @babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3": - version: 7.22.5 - resolution: "@babel/template@npm:7.22.5" - dependencies: - "@babel/code-frame": "npm:^7.22.5" - "@babel/parser": "npm:^7.22.5" - "@babel/types": "npm:^7.22.5" - checksum: 10/460634b1c5d61c779270968bd2f0817c19e3a5f20b469330dcab0a324dd29409b15ad1baa8530a21e09a9eb6c7db626500f437690c7be72987e40baa75357799 +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.9.2": + version: 7.28.6 + resolution: "@babel/runtime@npm:7.28.6" + checksum: 10/fbcd439cb74d4a681958eb064c509829e3f46d8a4bfaaf441baa81bb6733d1e680bccc676c813883d7741bcaada1d0d04b15aa320ef280b5734e2192b50decf9 languageName: node linkType: hard -"@babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.18.8, @babel/traverse@npm:^7.22.10, @babel/traverse@npm:^7.7.2": - version: 7.22.10 - resolution: "@babel/traverse@npm:7.22.10" +"@babel/template@npm:^7.12.7, @babel/template@npm:^7.28.6, @babel/template@npm:^7.3.3": + version: 7.28.6 + resolution: "@babel/template@npm:7.28.6" dependencies: - "@babel/code-frame": "npm:^7.22.10" - "@babel/generator": "npm:^7.22.10" - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-function-name": "npm:^7.22.5" - "@babel/helper-hoist-variables": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.22.10" - "@babel/types": "npm:^7.22.10" - debug: "npm:^4.1.0" - globals: "npm:^11.1.0" - checksum: 10/e88334f3be46b580ad164ac19e75825e70115ab519318fcb1b4c676b0a5abaa721383dd758978a5814406175de2c899eb7db4fcf68f10138d9b54cd954c9a076 + "@babel/code-frame": "npm:^7.28.6" + "@babel/parser": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10/0ad6e32bf1e7e31bf6b52c20d15391f541ddd645cbd488a77fe537a15b280ee91acd3a777062c52e03eedbc2e1f41548791f6a3697c02476ec5daf49faa38533 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.7, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.22.10 - resolution: "@babel/types@npm:7.22.10" - dependencies: - "@babel/helper-string-parser": "npm:^7.22.5" - "@babel/helper-validator-identifier": "npm:^7.22.5" - to-fast-properties: "npm:^2.0.0" - checksum: 10/b11f8d13f3418276df654b5276443f95742484c3c83e74f90f92bff01315118507a082edf1e74903b284106447660c31e5f29678730f647fb25e766ce47c56f0 +"@babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.18.8, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0, @babel/traverse@npm:^7.7.2": + version: 7.29.0 + resolution: "@babel/traverse@npm:7.29.0" + dependencies: + "@babel/code-frame": "npm:^7.29.0" + "@babel/generator": "npm:^7.29.0" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.29.0" + "@babel/template": "npm:^7.28.6" + "@babel/types": "npm:^7.29.0" + debug: "npm:^4.3.1" + checksum: 10/3a0d0438f1ba9fed4fbe1706ea598a865f9af655a16ca9517ab57bda526e224569ca1b980b473fb68feea5e08deafbbf2cf9febb941f92f2d2533310c3fc4abc languageName: node linkType: hard -"@babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.7, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": version: 7.29.0 resolution: "@babel/types@npm:7.29.0" dependencies: @@ -1824,6 +1935,13 @@ __metadata: languageName: node linkType: hard +"@braintree/sanitize-url@npm:^6.0.0": + version: 6.0.4 + resolution: "@braintree/sanitize-url@npm:6.0.4" + checksum: 10/52de7e19df29039134e2f0fbe6d11dbc15423d18799dc5306fbc2c92d6a7bd0e6c3c079c09be99260647cc85c3ca910e2099d819965a1d8604d05e5d3f3bb358 + languageName: node + linkType: hard + "@colors/colors@npm:1.5.0": version: 1.5.0 resolution: "@colors/colors@npm:1.5.0" @@ -1831,10 +1949,10 @@ __metadata: languageName: node linkType: hard -"@ctrl/tinycolor@npm:^3.4.0": - version: 3.6.0 - resolution: "@ctrl/tinycolor@npm:3.6.0" - checksum: 10/c6d55fdc33e7d3f9549eb76feeadfa9de699dcdc537d0317d40b1b0d5db442a3fdc3171426e51e39d19ef5858c41f1c73517d5d8527f2ce7a5a821233783a06e +"@ctrl/tinycolor@npm:^3.4.0, @ctrl/tinycolor@npm:^3.6.1": + version: 3.6.1 + resolution: "@ctrl/tinycolor@npm:3.6.1" + checksum: 10/f3c77b2d29076402d6b94632975cea1ce11942b05ca65d9108c951ff4d61965184dd7e480296e6625cb6df9e7de8b7938ce36a88cf1794c3b8ac83c908af468e languageName: node linkType: hard @@ -1845,25 +1963,26 @@ __metadata: languageName: node linkType: hard -"@docsearch/css@npm:3.5.1": - version: 3.5.1 - resolution: "@docsearch/css@npm:3.5.1" - checksum: 10/9cf596c71f4544560213a17cb4d01be3fb70be63382eceb59f919d30b0ff4c34ebeabf765c1671d512c68f690ca6aeedf8f01a5066897577f75dbcc691ab2657 +"@docsearch/css@npm:3.9.0": + version: 3.9.0 + resolution: "@docsearch/css@npm:3.9.0" + checksum: 10/088a05f7e7d5192feee1f5c8bfffcba13c87de2c45588080513be238ee974406ca9ad2fe7434082ad0ca23f54c0d39d486903da780904a03cbbfbe05db488cfe languageName: node linkType: hard "@docsearch/react@npm:^3.1.1": - version: 3.5.1 - resolution: "@docsearch/react@npm:3.5.1" + version: 3.9.0 + resolution: "@docsearch/react@npm:3.9.0" dependencies: - "@algolia/autocomplete-core": "npm:1.9.3" - "@algolia/autocomplete-preset-algolia": "npm:1.9.3" - "@docsearch/css": "npm:3.5.1" - algoliasearch: "npm:^4.0.0" + "@algolia/autocomplete-core": "npm:1.17.9" + "@algolia/autocomplete-preset-algolia": "npm:1.17.9" + "@docsearch/css": "npm:3.9.0" + algoliasearch: "npm:^5.14.2" peerDependencies: - "@types/react": ">= 16.8.0 < 19.0.0" - react: ">= 16.8.0 < 19.0.0" - react-dom: ">= 16.8.0 < 19.0.0" + "@types/react": ">= 16.8.0 < 20.0.0" + react: ">= 16.8.0 < 20.0.0" + react-dom: ">= 16.8.0 < 20.0.0" + search-insights: ">= 1 < 3" peerDependenciesMeta: "@types/react": optional: true @@ -1871,13 +1990,15 @@ __metadata: optional: true react-dom: optional: true - checksum: 10/e3b17921d39532f65791b4748e3c259bb97c35970829a8256ff3887ac4a3151e6347d4afcdecd596ab39573fd06f196ba361057c17deb29e16de7274a5d077fc + search-insights: + optional: true + checksum: 10/26f8dbb7bb88ac2b07c41104ab4f13054495feaea613eb8274ba637435eadce9d192f6b52526ef1d3d36da740015b1f213aeb94cc58497718bd4ac32c1ed974b languageName: node linkType: hard -"@docusaurus/core@npm:2.4.1, @docusaurus/core@npm:^2.4.1": - version: 2.4.1 - resolution: "@docusaurus/core@npm:2.4.1" +"@docusaurus/core@npm:2.4.3, @docusaurus/core@npm:^2.4.1": + version: 2.4.3 + resolution: "@docusaurus/core@npm:2.4.3" dependencies: "@babel/core": "npm:^7.18.6" "@babel/generator": "npm:^7.18.7" @@ -1889,13 +2010,13 @@ __metadata: "@babel/runtime": "npm:^7.18.6" "@babel/runtime-corejs3": "npm:^7.18.6" "@babel/traverse": "npm:^7.18.8" - "@docusaurus/cssnano-preset": "npm:2.4.1" - "@docusaurus/logger": "npm:2.4.1" - "@docusaurus/mdx-loader": "npm:2.4.1" + "@docusaurus/cssnano-preset": "npm:2.4.3" + "@docusaurus/logger": "npm:2.4.3" + "@docusaurus/mdx-loader": "npm:2.4.3" "@docusaurus/react-loadable": "npm:5.5.2" - "@docusaurus/utils": "npm:2.4.1" - "@docusaurus/utils-common": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" + "@docusaurus/utils": "npm:2.4.3" + "@docusaurus/utils-common": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" "@slorber/static-site-generator-webpack-plugin": "npm:^4.0.7" "@svgr/webpack": "npm:^6.2.1" autoprefixer: "npm:^10.4.7" @@ -1955,40 +2076,40 @@ __metadata: react-dom: ^16.8.4 || ^17.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: 10/4a3707cfae8f67826005e1786cc6a5df025999f561b8d1024623e2f9e308e37ee3e612b779f5a90969f74fa16d2a19ecc347d0d214a25a5d03e200478e66801f + checksum: 10/56df20cfd160b27206c9ba417973262e6223ec00590402de84f8de077018cc792e004a4b7377b1dc58b11a95d6f57de600313d35268604765a4e33c34ade6ac3 languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/cssnano-preset@npm:2.4.1" +"@docusaurus/cssnano-preset@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/cssnano-preset@npm:2.4.3" dependencies: cssnano-preset-advanced: "npm:^5.3.8" postcss: "npm:^8.4.14" postcss-sort-media-queries: "npm:^4.2.1" tslib: "npm:^2.4.0" - checksum: 10/d498345981288af2dcb8650bed3c3361cfe336541a8bda65743fbe8ee5746e81e723ba086e2e6249c3b283f4bc50b5c81cff15b0406969cd610bed345b3804ac + checksum: 10/f4a4c60b075c23541da90e00ae26af2e7eaadf20d783b37b9110a5e34599e4e91947425e33bad58ba71abee81c85cca99f5d7d76575f53fbaf73617b55e39c62 languageName: node linkType: hard -"@docusaurus/logger@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/logger@npm:2.4.1" +"@docusaurus/logger@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/logger@npm:2.4.3" dependencies: chalk: "npm:^4.1.2" tslib: "npm:^2.4.0" - checksum: 10/d02ffae3b3494b144d48e7d378a406ef0a4c620a24244d06ce6033b9ba20c8bf447f6df37e0e995fabb4a2c49e18186857ffccc6d1e52353db7565e3b6be77d8 + checksum: 10/239679a8b94612b4fceac5f2e388cc3b894e5a2b27fea1917b623d79b6e7499676fa4c97fc348b557ac2606f493b4de73f43314a9a44740d8c3607bd98d33907 languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/mdx-loader@npm:2.4.1" +"@docusaurus/mdx-loader@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/mdx-loader@npm:2.4.3" dependencies: "@babel/parser": "npm:^7.18.8" "@babel/traverse": "npm:^7.18.8" - "@docusaurus/logger": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" + "@docusaurus/logger": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" "@mdx-js/mdx": "npm:^1.6.22" escape-html: "npm:^1.0.3" file-loader: "npm:^6.2.0" @@ -2005,16 +2126,16 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/a6d75194a7d859f53cfb8cf5ae7bdcde2a1d0d4e0b20e181636f92d0cf1d35fed71b055cf0d3aba3886e05941a9561001f323460cb8d3024e071272d0a5c6a21 + checksum: 10/20e810843d35041788a96cac99811353b5494a29e25bdd11e24bd6f492d5238783371120a2e407a62355e0d88b4b8cc1f3cbccdec33f00b375f300319b5f54f1 languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:2.4.1, @docusaurus/module-type-aliases@npm:^2.4.1": - version: 2.4.1 - resolution: "@docusaurus/module-type-aliases@npm:2.4.1" +"@docusaurus/module-type-aliases@npm:2.4.3, @docusaurus/module-type-aliases@npm:^2.4.1": + version: 2.4.3 + resolution: "@docusaurus/module-type-aliases@npm:2.4.3" dependencies: "@docusaurus/react-loadable": "npm:5.5.2" - "@docusaurus/types": "npm:2.4.1" + "@docusaurus/types": "npm:2.4.3" "@types/history": "npm:^4.7.11" "@types/react": "npm:*" "@types/react-router-config": "npm:*" @@ -2024,21 +2145,21 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 10/c2e05d51417fb3c265e65e7bfcbd6d3d3a067d2acca87845362860f6540bd3d8c2cf0a6510b7150ecb6df86039c4319509d4febe041776b984c2e51cb9757df2 + checksum: 10/24a15666d79c708448819af52726754172339ad312d14eb9125ddab1c8259d458f2358f9d79ad2dfc580b80cfbdcc7b13bf12721afc9ee47c0c0a367c3d1aa65 languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/plugin-content-blog@npm:2.4.1" - dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/logger": "npm:2.4.1" - "@docusaurus/mdx-loader": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" - "@docusaurus/utils-common": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" +"@docusaurus/plugin-content-blog@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/plugin-content-blog@npm:2.4.3" + dependencies: + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/logger": "npm:2.4.3" + "@docusaurus/mdx-loader": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" + "@docusaurus/utils-common": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" cheerio: "npm:^1.0.0-rc.12" feed: "npm:^4.2.2" fs-extra: "npm:^10.1.0" @@ -2051,21 +2172,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/1e75a9223e517070f96f1b4e3a611062acddc809ff0d7e5d96df014bc888e2b268126de18ae7ecb02e1b7267e5836e7fda1ae3d1443bc07261a55c1d5cccb9e6 + checksum: 10/5b5365705def8b6ad9c2086a5d66fa7ce49c4f9ceda54ee2079fcddf92609c68a19c7140d8a36148984d93562e4ed7214aba76ba8a75fb0089e801828e09fead languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/plugin-content-docs@npm:2.4.1" - dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/logger": "npm:2.4.1" - "@docusaurus/mdx-loader": "npm:2.4.1" - "@docusaurus/module-type-aliases": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" +"@docusaurus/plugin-content-docs@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/plugin-content-docs@npm:2.4.3" + dependencies: + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/logger": "npm:2.4.3" + "@docusaurus/mdx-loader": "npm:2.4.3" + "@docusaurus/module-type-aliases": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" "@types/react-router-config": "npm:^5.0.6" combine-promises: "npm:^1.1.0" fs-extra: "npm:^10.1.0" @@ -2078,132 +2199,132 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/0ccd02838cf19ce19a8bf4d82c0c68658d8e58bf787749caf6997cb32f8c00f145c86fd767f7041881f855cbffd507836abd1be298bd55569f8181a864742c64 + checksum: 10/1d768df0f7c4a92e20b480a79fed969e12d56f64997276c2fdffea75cd52ebe1cea62e3b0b6df922968dc97513be898089ee18fa2ba33644b17e412129879442 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/plugin-content-pages@npm:2.4.1" +"@docusaurus/plugin-content-pages@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/plugin-content-pages@npm:2.4.3" dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/mdx-loader": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/mdx-loader": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" fs-extra: "npm:^10.1.0" tslib: "npm:^2.4.0" webpack: "npm:^5.73.0" peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/8076c1d54464fc868b1f644550ac92bb9a8014e82d3f1c5ce8a55c646f8eec5bc056aa0198a3274db7ae02b1c15b9517b0ea7e81c01fe7478b2be1fb73615b9a + checksum: 10/53a22e651e2ff523dfe2aa4f4018e61ec7eafd2a66de981df541472506b8182dc37d6dd241c4691deabcb205684ca9c9a6da3e467ca51e4f5832bfd373725129 languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/plugin-debug@npm:2.4.1" +"@docusaurus/plugin-debug@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/plugin-debug@npm:2.4.3" dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" fs-extra: "npm:^10.1.0" react-json-view: "npm:^1.21.3" tslib: "npm:^2.4.0" peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/0be51e9a881383ed76b6e8f369ca6f7754a4f6bd59093c6d28d955b9422a25e868f24b534eb08ba84a5524ae742edd4a052813767b2ea1e8767914dceffc19b8 + checksum: 10/88955828b72e463e04501cc6bedf802208e377ae0f4d72735625bcbb47918afc4f2588355c6914064cfdbe4945d3da6473ce76319aa1f66dd975b3b43c4c39b0 languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/plugin-google-analytics@npm:2.4.1" +"@docusaurus/plugin-google-analytics@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/plugin-google-analytics@npm:2.4.3" dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" tslib: "npm:^2.4.0" peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/9e754c0bc7779867af07cd77de36f5b491671a96fba5e3517458803465c24773357eb2f1400c41c80e69524cb2c7e9e353262335051aa54192eeae9d9eb055cb + checksum: 10/6e30de6b5c479493614a5552a295f07ffb9c83f3740a68c7d4dbac378b8288da7430f26cdc246d763855c6084ad86a6f87286e6c8b40f4817794bb1a04e109ea languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/plugin-google-gtag@npm:2.4.1" +"@docusaurus/plugin-google-gtag@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/plugin-google-gtag@npm:2.4.3" dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" tslib: "npm:^2.4.0" peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/ed529f2100599401e1c2aa772dca7c60fdb1990e44af3a9e476e1922f1370ef0dd0b5e6442f846bd942b74af63f3163ac85f1eefe1e85660b61ee60f2044c463 + checksum: 10/4aaac4d262b3bb7fc3f16620c5329b90db92bf28361ced54f2945fc0e4669483e2f36b076332e0ee9d11b6233cd2c81ca35c953119bad42171e62571c1692d6a languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/plugin-google-tag-manager@npm:2.4.1" +"@docusaurus/plugin-google-tag-manager@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/plugin-google-tag-manager@npm:2.4.3" dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" tslib: "npm:^2.4.0" peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/c5c6fce9c9eeae7cbeb277b9765a67d5c4403a3e04f634aadac6d4ba9901739a547d4ea023c83a76cfece2fdb2d175851acaa69abb2f190401b612adeab5524d + checksum: 10/c3af89b4d41fab463d853cbfbe8f43d384f702dd09fd914fffcca01fdf94c282d1b98d762c9142fe21f6471f5dd643679e8d11344c95fdf6657aff0618c3c7a5 languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/plugin-sitemap@npm:2.4.1" - dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/logger": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" - "@docusaurus/utils-common": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" +"@docusaurus/plugin-sitemap@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/plugin-sitemap@npm:2.4.3" + dependencies: + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/logger": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" + "@docusaurus/utils-common": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" fs-extra: "npm:^10.1.0" sitemap: "npm:^7.1.1" tslib: "npm:^2.4.0" peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/aa6728278017c047b4ed1456e349b1a267d85b4bb0c422bb63e59fc28ccb0e286dc66918f44f6ade660e550b047e2b14796c54c96fde6eb69395770cf39cf306 + checksum: 10/cf96b9f0e32cefa58e37a4bc2f0a112ea657f06faf47b780ec2ba39d5e2daca6486a73f3b376c56ad3bb42f3f0c3f70a783f1ce1964b74e2ba273e6f439e439b languageName: node linkType: hard "@docusaurus/preset-classic@npm:^2.4.1": - version: 2.4.1 - resolution: "@docusaurus/preset-classic@npm:2.4.1" - dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/plugin-content-blog": "npm:2.4.1" - "@docusaurus/plugin-content-docs": "npm:2.4.1" - "@docusaurus/plugin-content-pages": "npm:2.4.1" - "@docusaurus/plugin-debug": "npm:2.4.1" - "@docusaurus/plugin-google-analytics": "npm:2.4.1" - "@docusaurus/plugin-google-gtag": "npm:2.4.1" - "@docusaurus/plugin-google-tag-manager": "npm:2.4.1" - "@docusaurus/plugin-sitemap": "npm:2.4.1" - "@docusaurus/theme-classic": "npm:2.4.1" - "@docusaurus/theme-common": "npm:2.4.1" - "@docusaurus/theme-search-algolia": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" + version: 2.4.3 + resolution: "@docusaurus/preset-classic@npm:2.4.3" + dependencies: + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/plugin-content-blog": "npm:2.4.3" + "@docusaurus/plugin-content-docs": "npm:2.4.3" + "@docusaurus/plugin-content-pages": "npm:2.4.3" + "@docusaurus/plugin-debug": "npm:2.4.3" + "@docusaurus/plugin-google-analytics": "npm:2.4.3" + "@docusaurus/plugin-google-gtag": "npm:2.4.3" + "@docusaurus/plugin-google-tag-manager": "npm:2.4.3" + "@docusaurus/plugin-sitemap": "npm:2.4.3" + "@docusaurus/theme-classic": "npm:2.4.3" + "@docusaurus/theme-common": "npm:2.4.3" + "@docusaurus/theme-search-algolia": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/bad7f237ac03a9bc6206cb7a5d077d85d5a6316d34ff089c487ce92b8f6103ef22b04f35d637bdc31dddabd97d5babb1817852b9b97db7c33f3d4c7f33cb149d + checksum: 10/a321badc44696adf4ab2d4a5d6c93f595e8c17988aec9609d325928a1d60f5e0205b23fe849b28ddaed24f7935829e86c402f6b761d6e65db4224270b9dd443c languageName: node linkType: hard @@ -2219,22 +2340,22 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-classic@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/theme-classic@npm:2.4.1" - dependencies: - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/mdx-loader": "npm:2.4.1" - "@docusaurus/module-type-aliases": "npm:2.4.1" - "@docusaurus/plugin-content-blog": "npm:2.4.1" - "@docusaurus/plugin-content-docs": "npm:2.4.1" - "@docusaurus/plugin-content-pages": "npm:2.4.1" - "@docusaurus/theme-common": "npm:2.4.1" - "@docusaurus/theme-translations": "npm:2.4.1" - "@docusaurus/types": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" - "@docusaurus/utils-common": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" +"@docusaurus/theme-classic@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/theme-classic@npm:2.4.3" + dependencies: + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/mdx-loader": "npm:2.4.3" + "@docusaurus/module-type-aliases": "npm:2.4.3" + "@docusaurus/plugin-content-blog": "npm:2.4.3" + "@docusaurus/plugin-content-docs": "npm:2.4.3" + "@docusaurus/plugin-content-pages": "npm:2.4.3" + "@docusaurus/theme-common": "npm:2.4.3" + "@docusaurus/theme-translations": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" + "@docusaurus/utils-common": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" "@mdx-js/react": "npm:^1.6.22" clsx: "npm:^1.2.1" copy-text-to-clipboard: "npm:^3.0.1" @@ -2251,21 +2372,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/02d6081dbd447421682ebee03e159cefd9ba772b7a9c0ce03d63e88bc1133df598d6588724c93e8e628c593fd77e30045d9484068f6a899bc9dfdc76e1c0abf0 + checksum: 10/c99e7481939ab7892df289fb99c40c27d4f8ca3aef0e3f84ae725e4f419f4c333af91ba778dea3ba8ba24596a1ed157f698396e51d2cf7feb521b5042879e0c3 languageName: node linkType: hard -"@docusaurus/theme-common@npm:2.4.1, @docusaurus/theme-common@npm:^2.4.1": - version: 2.4.1 - resolution: "@docusaurus/theme-common@npm:2.4.1" - dependencies: - "@docusaurus/mdx-loader": "npm:2.4.1" - "@docusaurus/module-type-aliases": "npm:2.4.1" - "@docusaurus/plugin-content-blog": "npm:2.4.1" - "@docusaurus/plugin-content-docs": "npm:2.4.1" - "@docusaurus/plugin-content-pages": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" - "@docusaurus/utils-common": "npm:2.4.1" +"@docusaurus/theme-common@npm:2.4.3, @docusaurus/theme-common@npm:^2.4.1": + version: 2.4.3 + resolution: "@docusaurus/theme-common@npm:2.4.3" + dependencies: + "@docusaurus/mdx-loader": "npm:2.4.3" + "@docusaurus/module-type-aliases": "npm:2.4.3" + "@docusaurus/plugin-content-blog": "npm:2.4.3" + "@docusaurus/plugin-content-docs": "npm:2.4.3" + "@docusaurus/plugin-content-pages": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" + "@docusaurus/utils-common": "npm:2.4.3" "@types/history": "npm:^4.7.11" "@types/react": "npm:*" "@types/react-router-config": "npm:*" @@ -2278,22 +2399,41 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/32cabba088ad0ed9344d5be9231543855dfa73d0e370788cac101d8ea3a178db3d8e63997d62233bc6fa1c19338c7f37cfcc4862bf03ab48b9cb30bcd52c629b + checksum: 10/ddb26b7eef0e03d85a47ceafa09307fd809fbf3cc1bdb1d746d787c1950259755d00258583b50808de84d2c80a2ee4efc60b63b360c1a5a8c97c3c5f799f30d7 languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/theme-search-algolia@npm:2.4.1" +"@docusaurus/theme-mermaid@npm:^2.4.3": + version: 2.4.3 + resolution: "@docusaurus/theme-mermaid@npm:2.4.3" + dependencies: + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/module-type-aliases": "npm:2.4.3" + "@docusaurus/theme-common": "npm:2.4.3" + "@docusaurus/types": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" + "@mdx-js/react": "npm:^1.6.22" + mermaid: "npm:^9.2.2" + tslib: "npm:^2.4.0" + peerDependencies: + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + checksum: 10/aa3beefa16b83baede6f138509f8a104f046aa99154d575fbb3c61d481b3ab312e05c7803444c02c098396015366667dbcab2f8fa75c77c037eb6e2324bad7e8 + languageName: node + linkType: hard + +"@docusaurus/theme-search-algolia@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/theme-search-algolia@npm:2.4.3" dependencies: "@docsearch/react": "npm:^3.1.1" - "@docusaurus/core": "npm:2.4.1" - "@docusaurus/logger": "npm:2.4.1" - "@docusaurus/plugin-content-docs": "npm:2.4.1" - "@docusaurus/theme-common": "npm:2.4.1" - "@docusaurus/theme-translations": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" - "@docusaurus/utils-validation": "npm:2.4.1" + "@docusaurus/core": "npm:2.4.3" + "@docusaurus/logger": "npm:2.4.3" + "@docusaurus/plugin-content-docs": "npm:2.4.3" + "@docusaurus/theme-common": "npm:2.4.3" + "@docusaurus/theme-translations": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" + "@docusaurus/utils-validation": "npm:2.4.3" algoliasearch: "npm:^4.13.1" algoliasearch-helper: "npm:^3.10.0" clsx: "npm:^1.2.1" @@ -2305,30 +2445,30 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/ebf17c0cb75b5029c0ce82373fb70912e201a9dca02788f63c11079b5a74fe9f5dd4b7032d619787752d923b8f41f5f207194f33449d61ed46a302792084cf28 + checksum: 10/b4f53070bbe647d130f0603a499ba782373a72092e1b2764dcc327a06783758c448159f09ba9322d13cfd023eeb82cebe760005d473d02e2422e01a26cbc1fb8 languageName: node linkType: hard -"@docusaurus/theme-translations@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/theme-translations@npm:2.4.1" +"@docusaurus/theme-translations@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/theme-translations@npm:2.4.3" dependencies: fs-extra: "npm:^10.1.0" tslib: "npm:^2.4.0" - checksum: 10/7c5a1be679b8347c5cff98176fa2a77e9598e2781fea2f16f2499ef49ca5ba56976b2a90ecf19def752718ebe0b2b57613cac8e1c792bb44649fb4820286f115 + checksum: 10/30351034ebe7cdd521a855a9b93572163b1fd2b5a6da54f69de3f44cf8cd4c6c2eaa38ef3c8917e206a55d941f951a12f57f3f56a424adbde363405520d0f956 languageName: node linkType: hard "@docusaurus/tsconfig@npm:^3.0.0-alpha.0": - version: 3.0.0-alpha.0 - resolution: "@docusaurus/tsconfig@npm:3.0.0-alpha.0" - checksum: 10/c1714206e0cb4a1ab7b5694847a47816c02e89df48375767975abc125c2af1f82108e20ab5d7b6a95cb1e7d00499233ad9fb720f1829e0e89c9f696d519248b4 + version: 3.9.2 + resolution: "@docusaurus/tsconfig@npm:3.9.2" + checksum: 10/8e08e352ab8285d4601822dbd424700a7c875b30dd2eefb087f540e62e5a9f05026368625ce3e89948380f0b232ecd7a52e03ce069fab4de1e6a39dedf324d1b languageName: node linkType: hard -"@docusaurus/types@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/types@npm:2.4.1" +"@docusaurus/types@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/types@npm:2.4.3" dependencies: "@types/history": "npm:^4.7.11" "@types/react": "npm:*" @@ -2341,13 +2481,13 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 10/5b6da3d38f1306fbbce78dee8976bc47918593b3cea84b257d92b8d4dc3486e2fc8a5cb552d93eb2f6921594f8ab6a34b49bff2046b6c38bbae2118bf1eed1de + checksum: 10/b1faa664fd6473a707985d4dd2748db8d132e4c55a504acfab77a2f9f1b7bbdfeef511ac6f9b3a9f9a97734f7d096f82edc8ce8803213c9ff04716da7e0562ac languageName: node linkType: hard -"@docusaurus/utils-common@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/utils-common@npm:2.4.1" +"@docusaurus/utils-common@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/utils-common@npm:2.4.3" dependencies: tslib: "npm:^2.4.0" peerDependencies: @@ -2355,28 +2495,28 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 10/5150b8d025c7750cad5dd0f70883dd7576afa4c98364c8d11fc26b41449d0a4ca5e898ca1bf53d57f808a00a891447d3471a1be8e4fe76d63e64508f983c8ae2 + checksum: 10/20e3a81d586140e97e2c06fb13d9f1c0b17fa018cd0c354b5e7bb844f8d94c2958d62c637178b67e2164f43cc12e28db56fbdf1ef4ddc29aec8aa8e4bcf94cea languageName: node linkType: hard -"@docusaurus/utils-validation@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/utils-validation@npm:2.4.1" +"@docusaurus/utils-validation@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/utils-validation@npm:2.4.3" dependencies: - "@docusaurus/logger": "npm:2.4.1" - "@docusaurus/utils": "npm:2.4.1" + "@docusaurus/logger": "npm:2.4.3" + "@docusaurus/utils": "npm:2.4.3" joi: "npm:^17.6.0" js-yaml: "npm:^4.1.0" tslib: "npm:^2.4.0" - checksum: 10/44dc482770ea3932e68e58c0bb9503e1b3c73ce28565c438b0d68a7427ee91760ca84a5e150dfc4e04497e072fe4394050dd2af4c4ff43a227b1464e89d705a0 + checksum: 10/d3472b3f7a0a029c2cef1f00bc9db403d5f7e74e2091eccbc45d06f5776a84fd73bd1a18cf3a8a3cc0348ce49f753a1300deac670c2a82c56070cc40ca9df06e languageName: node linkType: hard -"@docusaurus/utils@npm:2.4.1": - version: 2.4.1 - resolution: "@docusaurus/utils@npm:2.4.1" +"@docusaurus/utils@npm:2.4.3": + version: 2.4.3 + resolution: "@docusaurus/utils@npm:2.4.3" dependencies: - "@docusaurus/logger": "npm:2.4.1" + "@docusaurus/logger": "npm:2.4.3" "@svgr/webpack": "npm:^6.2.1" escape-string-regexp: "npm:^4.0.0" file-loader: "npm:^6.2.0" @@ -2397,142 +2537,170 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 10/4c0593763e8b8150675bd7a4f514dce3b3a00f0054145c040fa6cd6d3e3e742f1152c85615c6810dca4f475a57dc9edb271fc4e19810526619be70897e2ba613 + checksum: 10/11caf1b04be456eb9324045d324ebbbd1107fdf448e01673341d54fa71d321b4f917e87496af79476a058b767b0bea685966e8af14f41e8f1b0930da5e4fcaf2 + languageName: node + linkType: hard + +"@emnapi/core@npm:^1.4.3": + version: 1.8.1 + resolution: "@emnapi/core@npm:1.8.1" + dependencies: + "@emnapi/wasi-threads": "npm:1.1.0" + tslib: "npm:^2.4.0" + checksum: 10/904ea60c91fc7d8aeb4a8f2c433b8cfb47c50618f2b6f37429fc5093c857c6381c60628a5cfbc3a7b0d75b0a288f21d4ed2d4533e82f92c043801ef255fd6a5c + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.4.3": + version: 1.8.1 + resolution: "@emnapi/runtime@npm:1.8.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/26725e202d4baefdc4a6ba770f703dfc80825a27c27a08c22bac1e1ce6f8f75c47b4fe9424d9b63239463c33ef20b650f08d710da18dfa1164a95e5acb865dba + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.1.0": + version: 1.1.0 + resolution: "@emnapi/wasi-threads@npm:1.1.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/0d557e75262d2f4c95cb2a456ba0785ef61f919ce488c1d76e5e3acfd26e00c753ef928cd80068363e0c166ba8cc0141305daf0f81aad5afcd421f38f11e0f4e languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.11.0": - version: 11.11.0 - resolution: "@emotion/babel-plugin@npm:11.11.0" +"@emotion/babel-plugin@npm:^11.13.5": + version: 11.13.5 + resolution: "@emotion/babel-plugin@npm:11.13.5" dependencies: "@babel/helper-module-imports": "npm:^7.16.7" "@babel/runtime": "npm:^7.18.3" - "@emotion/hash": "npm:^0.9.1" - "@emotion/memoize": "npm:^0.8.1" - "@emotion/serialize": "npm:^1.1.2" + "@emotion/hash": "npm:^0.9.2" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/serialize": "npm:^1.3.3" babel-plugin-macros: "npm:^3.1.0" convert-source-map: "npm:^1.5.0" escape-string-regexp: "npm:^4.0.0" find-root: "npm:^1.1.0" source-map: "npm:^0.5.7" stylis: "npm:4.2.0" - checksum: 10/8de017666838fc06b1a961d7a49b4e6dc0c83dbb064ea33512bae056594f0811a87e3242ef90fa2aa49fc080fab1cc7af536e7aee9398eaca7a1fc020d2dd527 + checksum: 10/cd310568314d886ca328e504f84c4f7f9c7f092ea34a2b43fdb61f84665bf301ba2ef49e0fd1e7ded3d81363d9bbefbb32674ce88b317cfb64db2b65e5ff423f languageName: node linkType: hard -"@emotion/cache@npm:^11.11.0": - version: 11.11.0 - resolution: "@emotion/cache@npm:11.11.0" +"@emotion/cache@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/cache@npm:11.14.0" dependencies: - "@emotion/memoize": "npm:^0.8.1" - "@emotion/sheet": "npm:^1.2.2" - "@emotion/utils": "npm:^1.2.1" - "@emotion/weak-memoize": "npm:^0.3.1" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/sheet": "npm:^1.4.0" + "@emotion/utils": "npm:^1.4.2" + "@emotion/weak-memoize": "npm:^0.4.0" stylis: "npm:4.2.0" - checksum: 10/ef29756247dafb87168b4ffb76ee60feb06b8a1016323ecb1d3ba8aed3f4300ca10049bedbfe83aa11e0d81e616c328002a9d50020ebb3af6e4f5337a785c1fe + checksum: 10/52336b28a27b07dde8fcdfd80851cbd1487672bbd4db1e24cca1440c95d8a6a968c57b0453c2b7c88d9b432b717f99554dbecc05b5cdef27933299827e69fd8e languageName: node linkType: hard -"@emotion/hash@npm:^0.9.1": - version: 0.9.1 - resolution: "@emotion/hash@npm:0.9.1" - checksum: 10/716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876 +"@emotion/hash@npm:^0.9.2": + version: 0.9.2 + resolution: "@emotion/hash@npm:0.9.2" + checksum: 10/379bde2830ccb0328c2617ec009642321c0e009a46aa383dfbe75b679c6aea977ca698c832d225a893901f29d7b3eef0e38cf341f560f6b2b56f1ff23c172387 languageName: node linkType: hard -"@emotion/memoize@npm:^0.8.1": - version: 0.8.1 - resolution: "@emotion/memoize@npm:0.8.1" - checksum: 10/a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 +"@emotion/memoize@npm:^0.9.0": + version: 0.9.0 + resolution: "@emotion/memoize@npm:0.9.0" + checksum: 10/038132359397348e378c593a773b1148cd0cf0a2285ffd067a0f63447b945f5278860d9de718f906a74c7c940ba1783ac2ca18f1c06a307b01cc0e3944e783b1 languageName: node linkType: hard "@emotion/react@npm:^11.1.4": - version: 11.11.1 - resolution: "@emotion/react@npm:11.11.1" + version: 11.14.0 + resolution: "@emotion/react@npm:11.14.0" dependencies: "@babel/runtime": "npm:^7.18.3" - "@emotion/babel-plugin": "npm:^11.11.0" - "@emotion/cache": "npm:^11.11.0" - "@emotion/serialize": "npm:^1.1.2" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.1" - "@emotion/utils": "npm:^1.2.1" - "@emotion/weak-memoize": "npm:^0.3.1" + "@emotion/babel-plugin": "npm:^11.13.5" + "@emotion/cache": "npm:^11.14.0" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" + "@emotion/utils": "npm:^1.4.2" + "@emotion/weak-memoize": "npm:^0.4.0" hoist-non-react-statics: "npm:^3.3.1" peerDependencies: react: ">=16.8.0" peerDependenciesMeta: "@types/react": optional: true - checksum: 10/dfc140718d0a8051a74e51c379226d9de6b19f6a5dd595fb282ef72f4413695a2d012ba919f1e9eeff761c6659e6f7398da8e0e36eb7997a4fdf54cef88644ae + checksum: 10/3356c1d66f37f4e7abf88a2be843f6023b794b286c9c99a0aaf1cd1b2b7c50f8d80a2ef77183da737de70150f638e698ff4a2a38ab2d922f868615f1d5761c37 languageName: node linkType: hard -"@emotion/serialize@npm:^1.1.2": - version: 1.1.2 - resolution: "@emotion/serialize@npm:1.1.2" +"@emotion/serialize@npm:^1.3.3": + version: 1.3.3 + resolution: "@emotion/serialize@npm:1.3.3" dependencies: - "@emotion/hash": "npm:^0.9.1" - "@emotion/memoize": "npm:^0.8.1" - "@emotion/unitless": "npm:^0.8.1" - "@emotion/utils": "npm:^1.2.1" + "@emotion/hash": "npm:^0.9.2" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/unitless": "npm:^0.10.0" + "@emotion/utils": "npm:^1.4.2" csstype: "npm:^3.0.2" - checksum: 10/71ed270ee4e9678d6d1c541cb111f8247aef862a28729e511f7036f22b12822e976b5843f5829a1c2a7b959a9728dcac831f39de3084664725eba1345a03b4a0 + checksum: 10/44a2e06fc52dba177d9cf720f7b2c5d45ee4c0d9c09b78302d9a625e758d728ef3ae26f849237fec6f70e9eeb7d87e45a65028e944dc1f877df97c599f1cdaee languageName: node linkType: hard -"@emotion/sheet@npm:^1.2.2": - version: 1.2.2 - resolution: "@emotion/sheet@npm:1.2.2" - checksum: 10/cc46b20ef7273dc28de889927ae1498f854be2890905745fcc3154fbbacaa54df1e28c3d89ff3339c2022782c78933f51955bb950d105d5a219576db1eadfb7a +"@emotion/sheet@npm:^1.4.0": + version: 1.4.0 + resolution: "@emotion/sheet@npm:1.4.0" + checksum: 10/8ac6e9bf6b373a648f26ae7f1c24041038524f4c72f436f4f8c4761c665e58880c3229d8d89b1f7a4815dd8e5b49634d03e60187cb6f93097d7f7c1859e869d5 languageName: node linkType: hard -"@emotion/unitless@npm:^0.8.1": - version: 0.8.1 - resolution: "@emotion/unitless@npm:0.8.1" - checksum: 10/918f73c46ac0b7161e3c341cc07d651ce87e31ab1695e74b12adb7da6bb98dfbff8c69cf68a4e40d9eb3d820ca055dc1267aeb3007927ce88f98b885bf729b63 +"@emotion/unitless@npm:^0.10.0": + version: 0.10.0 + resolution: "@emotion/unitless@npm:0.10.0" + checksum: 10/6851c16edce01c494305f43b2cad7a26b939a821131b7c354e49b8e3b012c8810024755b0f4a03ef51117750309e55339825a97bd10411fb3687e68904769106 languageName: node linkType: hard -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": - version: 1.0.1 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.2.0" peerDependencies: react: ">=16.8.0" - checksum: 10/7d7ead9ba3f615510f550aea67815281ec5a5487de55aafc250f820317afc1fd419bd9e9e27602a0206ec5c152f13dc6130bccad312c1036706c584c65d66ef7 + checksum: 10/2374999db8d53ef661d61ed1026c42a849632e4f03826f7eba0314c1d92ae342161d737f5045453aa46dd4008e13ccefeba68d3165b667dfad8e5784fcb0c643 languageName: node linkType: hard -"@emotion/utils@npm:^1.2.1": - version: 1.2.1 - resolution: "@emotion/utils@npm:1.2.1" - checksum: 10/472fa529c64a13edff80aa11698092e8841c1ffb5001c739d84eb9d0fdd6d8e1cd1848669310578ccfa6383b8601132eca54f8749fca40af85d21fdfc9b776c4 +"@emotion/utils@npm:^1.4.2": + version: 1.4.2 + resolution: "@emotion/utils@npm:1.4.2" + checksum: 10/e5f3b8bca066b3361a7ad9064baeb9d01ed1bf51d98416a67359b62cb3affec6bb0249802c4ed11f4f8030f93cc4b67506909420bdb110adec6983d712897208 languageName: node linkType: hard -"@emotion/weak-memoize@npm:^0.3.1": - version: 0.3.1 - resolution: "@emotion/weak-memoize@npm:0.3.1" - checksum: 10/b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594 +"@emotion/weak-memoize@npm:^0.4.0": + version: 0.4.0 + resolution: "@emotion/weak-memoize@npm:0.4.0" + checksum: 10/db5da0e89bd752c78b6bd65a1e56231f0abebe2f71c0bd8fc47dff96408f7065b02e214080f99924f6a3bfe7ee15afc48dad999d76df86b39b16e513f7a94f52 languageName: node linkType: hard "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" + version: 4.9.1 + resolution: "@eslint-community/eslint-utils@npm:4.9.1" dependencies: - eslint-visitor-keys: "npm:^3.3.0" + eslint-visitor-keys: "npm:^3.4.3" peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10/8d70bcdcd8cd279049183aca747d6c2ed7092a5cf0cf5916faac1ef37ffa74f0c245c2a3a3d3b9979d9dfdd4ca59257b4c5621db699d637b847a2c5e02f491c2 + checksum: 10/863b5467868551c9ae34d03eefe634633d08f623fc7b19d860f8f26eb6f303c1a5934253124163bee96181e45ed22bf27473dccc295937c3078493a4a8c9eddd languageName: node linkType: hard "@eslint-community/regexpp@npm:^4.5.1": - version: 4.6.2 - resolution: "@eslint-community/regexpp@npm:4.6.2" - checksum: 10/59ea2fa13a70996a8cebbd5a9f4499c92bceeff872286ef2fb34948fcfb9d3467692371d9cc116e7d613f2c18086a1c8337c9d461ccdf213f0dc47f6f6d2fbb6 + version: 4.12.2 + resolution: "@eslint-community/regexpp@npm:4.12.2" + checksum: 10/049b280fddf71dd325514e0a520024969431dc3a8b02fa77476e6820e9122f28ab4c9168c11821f91a27982d2453bcd7a66193356ea84e84fb7c8d793be1ba0c languageName: node linkType: hard @@ -2908,13 +3076,22 @@ __metadata: languageName: node linkType: hard +"@gar/promise-retry@npm:^1.0.0": + version: 1.0.2 + resolution: "@gar/promise-retry@npm:1.0.2" + dependencies: + retry: "npm:^0.13.1" + checksum: 10/b91326999ce94677cbe91973079eabc689761a93a045f6a2d34d4070e9305b27f6c54e4021688c7080cb14caf89eafa0c0f300af741b94c20d18608bdb66ca46 + languageName: node + linkType: hard + "@grpc/grpc-js@npm:^1.3.2": - version: 1.9.0 - resolution: "@grpc/grpc-js@npm:1.9.0" + version: 1.14.3 + resolution: "@grpc/grpc-js@npm:1.14.3" dependencies: - "@grpc/proto-loader": "npm:^0.7.0" - "@types/node": "npm:>=12.12.47" - checksum: 10/91c2e3a11fcac6a24e2b994d61e065d585929faf6eb4878372e3293dcb50d138fd3cd263a1795f670892b599b7c1b91e124e706ec6e71a71ddd4f9014f81d9af + "@grpc/proto-loader": "npm:^0.8.0" + "@js-sdsl/ordered-map": "npm:^4.4.2" + checksum: 10/bb9bfe2f749179ae5ac7774d30486dfa2e0b004518c28de158b248e0f6f65f40138f01635c48266fa540670220f850216726e3724e1eb29d078817581c96e4db languageName: node linkType: hard @@ -2933,29 +3110,28 @@ __metadata: languageName: node linkType: hard -"@grpc/proto-loader@npm:^0.7.0": - version: 0.7.8 - resolution: "@grpc/proto-loader@npm:0.7.8" +"@grpc/proto-loader@npm:^0.8.0": + version: 0.8.0 + resolution: "@grpc/proto-loader@npm:0.8.0" dependencies: - "@types/long": "npm:^4.0.1" lodash.camelcase: "npm:^4.3.0" - long: "npm:^4.0.0" - protobufjs: "npm:^7.2.4" + long: "npm:^5.0.0" + protobufjs: "npm:^7.5.3" yargs: "npm:^17.7.2" bin: proto-loader-gen-types: build/bin/proto-loader-gen-types.js - checksum: 10/a7dde023f8209e7a97eecad5f627c31b796c663e0bf4a3bc81b848a8bdf0c2ba5de712189e4b6f759a2a766599b2a0ea197cdd4a45ab9d091329ca9ffb053bb8 + checksum: 10/216813bdca52cd3a84ac355ad93c2c3f54252be47327692fe666fd85baa5b1d50aa681ebc5626ab08926564fb2deae3b2ea435aa5bd883197650bbe56f2ae108 languageName: node linkType: hard -"@hapi/hoek@npm:^9.0.0": +"@hapi/hoek@npm:^9.0.0, @hapi/hoek@npm:^9.3.0": version: 9.3.0 resolution: "@hapi/hoek@npm:9.3.0" checksum: 10/ad83a223787749f3873bce42bd32a9a19673765bf3edece0a427e138859ff729469e68d5fdf9ff6bbee6fb0c8e21bab61415afa4584f527cfc40b59ea1957e70 languageName: node linkType: hard -"@hapi/topo@npm:^5.0.0": +"@hapi/topo@npm:^5.1.0": version: 5.1.0 resolution: "@hapi/topo@npm:5.1.0" dependencies: @@ -2982,20 +3158,6 @@ __metadata: languageName: node linkType: hard -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10/e9ed5fd27c3aec1095e3a16e0c0cf148d1fee55a38665c35f7b3f86a9b5d00d042ddaabc98e8a1cb7463b9378c15f22a94eb35e99469c201453eb8375191f243 - languageName: node - linkType: hard - "@isaacs/fs-minipass@npm:^4.0.0": version: 4.0.1 resolution: "@isaacs/fs-minipass@npm:4.0.1" @@ -3184,12 +3346,12 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^29.6.0": - version: 29.6.0 - resolution: "@jest/schemas@npm:29.6.0" +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" dependencies: "@sinclair/typebox": "npm:^0.27.8" - checksum: 10/c00511c69cf89138a7d974404d3a5060af375b5a52b9c87215d91873129b382ca11c1ff25bd6d605951404bb381ddce5f8091004a61e76457da35db1f5c51365 + checksum: 10/910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 languageName: node linkType: hard @@ -3265,39 +3427,37 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/types@npm:29.6.1" +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" dependencies: - "@jest/schemas": "npm:^29.6.0" + "@jest/schemas": "npm:^29.6.3" "@types/istanbul-lib-coverage": "npm:^2.0.0" "@types/istanbul-reports": "npm:^3.0.0" "@types/node": "npm:*" "@types/yargs": "npm:^17.0.8" chalk: "npm:^4.0.0" - checksum: 10/f6264fb0fc60efcb95adf3c4b30be6433aae75769b4f90d09de35fb19c65f7184d6c227a75f5b9e0054368d4fbf5cc4b397f9756d9a59eee25f3247d2e020f93 + checksum: 10/f74bf512fd09bbe2433a2ad460b04668b7075235eea9a0c77d6a42222c10a79b9747dc2b2a623f140ed40d6865a2ed8f538f3cbb75169120ea863f29a7ed76cd languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.0": - version: 0.3.3 - resolution: "@jridgewell/gen-mapping@npm:0.3.3" +"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.13 + resolution: "@jridgewell/gen-mapping@npm:0.3.13" dependencies: - "@jridgewell/set-array": "npm:^1.0.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10/072ace159c39ab85944bdabe017c3de15c5e046a4a4a772045b00ff05e2ebdcfa3840b88ae27e897d473eb4d4845b37be3c78e28910c779f5aeeeae2fb7f0cc2 + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10/902f8261dcf450b4af7b93f9656918e02eec80a2169e155000cb2059f90113dd98f3ccf6efc6072cee1dd84cac48cade51da236972d942babc40e4c23da4d62a languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" +"@jridgewell/remapping@npm:^2.3.5": + version: 2.3.5 + resolution: "@jridgewell/remapping@npm:2.3.5" dependencies: - "@jridgewell/set-array": "npm:^1.2.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10/81587b3c4dd8e6c60252122937cea0c637486311f4ed208b52b62aae2e7a87598f63ec330e6cd0984af494bfb16d3f0d60d3b21d7e5b4aedd2602ff3fe9d32e2 + checksum: 10/c2bb01856e65b506d439455f28aceacf130d6c023d1d4e3b48705e88def3571753e1a887daa04b078b562316c92d26ce36408a60534bceca3f830aec88a339ad languageName: node linkType: hard @@ -3308,54 +3468,44 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.1, @jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 10/832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 - languageName: node - linkType: hard - "@jridgewell/source-map@npm:^0.3.3": - version: 0.3.5 - resolution: "@jridgewell/source-map@npm:0.3.5" + version: 0.3.11 + resolution: "@jridgewell/source-map@npm:0.3.11" dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10/73838ac43235edecff5efc850c0d759704008937a56b1711b28c261e270fe4bf2dc06d0b08663aeb1ab304f81f6de4f5fb844344403cf53ba7096967a9953cae + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + checksum: 10/847f1177d3d133a0966ef61ca29abea0d79788a0652f90ee1893b3da968c190b7e31c3534cc53701179dd6b14601eef3d78644e727e05b1a08c68d281aedc4ba languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: 10/89960ac087781b961ad918978975bcdf2051cd1741880469783c42de64239703eab9db5230d776d8e6a09d73bb5e4cb964e07d93ee6e2e7aea5a7d726e865c09 +"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10/5d9d207b462c11e322d71911e55e21a4e2772f71ffe8d6f1221b8eb5ae6774458c1d242f897fb0814e8714ca9a6b498abfa74dfe4f434493342902b1a48b33a5 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.17": - version: 0.3.19 - resolution: "@jridgewell/trace-mapping@npm:0.3.19" +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" dependencies: "@jridgewell/resolve-uri": "npm:^3.1.0" "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10/06a2a4e26e3cc369c41144fad7cbee29ba9ea6aca85acc565ec8f2110e298fdbf93986e17da815afae94539dcc03115cdbdbb575d3bea356e167da6987531e4d + checksum: 10/da0283270e691bdb5543806077548532791608e52386cfbbf3b9e8fb00457859d1bd01d512851161c886eb3a2f3ce6fd9bcf25db8edf3bddedd275bd4a88d606 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10/dced32160a44b49d531b80a4a2159dceab6b3ddf0c8e95a0deae4b0e894b172defa63d5ac52a19c2068e1fe7d31ea4ba931fbeec103233ecb4208953967120fc +"@js-sdsl/ordered-map@npm:^4.4.2": + version: 4.4.2 + resolution: "@js-sdsl/ordered-map@npm:4.4.2" + checksum: 10/ac64e3f0615ecc015461c9f527f124d2edaa9e68de153c1e270c627e01e83d046522d7e872692fd57a8c514578b539afceff75831c0d8b2a9a7a347fbed35af4 languageName: node linkType: hard "@leichtgewicht/ip-codec@npm:^2.0.1": - version: 2.0.4 - resolution: "@leichtgewicht/ip-codec@npm:2.0.4" - checksum: 10/3c7ffb0afb86c731a02813aa4370da27eac037abf8a15fce211226c11b644610382c8eca7efadace9471ee1959afe72fc1d43a62227d974b9fca8eae8b8d2124 + version: 2.0.5 + resolution: "@leichtgewicht/ip-codec@npm:2.0.5" + checksum: 10/cb98c608392abe59457a14e00134e7dfa57c0c9b459871730cd4e907bb12b834cbd03e08ad8663fea9e486f260da7f1293ccd9af0376bf5524dd8536192f248c languageName: node linkType: hard @@ -3402,6 +3552,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^0.2.11": + version: 0.2.12 + resolution: "@napi-rs/wasm-runtime@npm:0.2.12" + dependencies: + "@emnapi/core": "npm:^1.4.3" + "@emnapi/runtime": "npm:^1.4.3" + "@tybys/wasm-util": "npm:^0.10.0" + checksum: 10/5fd518182427980c28bc724adf06c5f32f9a8915763ef560b5f7d73607d30cd15ac86d0cbd2eb80d4cfab23fc80d0876d89ca36a9daadcb864bc00917c94187c + languageName: node + linkType: hard + "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": version: 5.1.1-v1 resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" @@ -3438,6 +3599,13 @@ __metadata: languageName: node linkType: hard +"@nolyfill/is-core-module@npm:1.0.39": + version: 1.0.39 + resolution: "@nolyfill/is-core-module@npm:1.0.39" + checksum: 10/0d6e098b871eca71d875651288e1f0fa770a63478b0b50479c99dc760c64175a56b5b04f58d5581bbcc6b552b8191ab415eada093d8df9597ab3423c8cac1815 + languageName: node + linkType: hard + "@npmcli/agent@npm:^4.0.0": version: 4.0.0 resolution: "@npmcli/agent@npm:4.0.0" @@ -3460,10 +3628,147 @@ __metadata: languageName: node linkType: hard -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff +"@parcel/watcher-android-arm64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-android-arm64@npm:2.5.6" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-darwin-arm64@npm:2.5.6" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-darwin-x64@npm:2.5.6" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-freebsd-x64@npm:2.5.6" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.5.6" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-musl@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-arm-musl@npm:2.5.6" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.5.6" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.5.6" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.5.6" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.5.6" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-win32-arm64@npm:2.5.6" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-win32-ia32@npm:2.5.6" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-win32-x64@npm:2.5.6" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.4.1": + version: 2.5.6 + resolution: "@parcel/watcher@npm:2.5.6" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.5.6" + "@parcel/watcher-darwin-arm64": "npm:2.5.6" + "@parcel/watcher-darwin-x64": "npm:2.5.6" + "@parcel/watcher-freebsd-x64": "npm:2.5.6" + "@parcel/watcher-linux-arm-glibc": "npm:2.5.6" + "@parcel/watcher-linux-arm-musl": "npm:2.5.6" + "@parcel/watcher-linux-arm64-glibc": "npm:2.5.6" + "@parcel/watcher-linux-arm64-musl": "npm:2.5.6" + "@parcel/watcher-linux-x64-glibc": "npm:2.5.6" + "@parcel/watcher-linux-x64-musl": "npm:2.5.6" + "@parcel/watcher-win32-arm64": "npm:2.5.6" + "@parcel/watcher-win32-ia32": "npm:2.5.6" + "@parcel/watcher-win32-x64": "npm:2.5.6" + detect-libc: "npm:^2.0.3" + is-glob: "npm:^4.0.3" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + picomatch: "npm:^4.0.3" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm-musl": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 10/00e027ef6bd67239bd63d63d062363a0263377a3de3114c29f0f717076616b3a03fd67902a70ba52dbb7241efc27498a8f1da983aa41280c454b9c1246a6f191 languageName: node linkType: hard @@ -3478,10 +3783,10 @@ __metadata: languageName: node linkType: hard -"@polka/url@npm:^1.0.0-next.20": - version: 1.0.0-next.21 - resolution: "@polka/url@npm:1.0.0-next.21" - checksum: 10/c7654046d38984257dd639eab3dc770d1b0340916097b2fac03ce5d23506ada684e05574a69b255c32ea6a144a957c8cd84264159b545fca031c772289d88788 +"@polka/url@npm:^1.0.0-next.24": + version: 1.0.0-next.29 + resolution: "@polka/url@npm:1.0.0-next.29" + checksum: 10/69ca11ab15a4ffec7f0b07fcc4e1f01489b3d9683a7e1867758818386575c60c213401259ba3705b8a812228d17e2bfd18e6f021194d943fff4bca389c9d4f28 languageName: node linkType: hard @@ -3572,131 +3877,139 @@ __metadata: languageName: node linkType: hard -"@react-spring/animated@npm:~9.7.3": - version: 9.7.3 - resolution: "@react-spring/animated@npm:9.7.3" +"@react-spring/animated@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/animated@npm:9.7.5" dependencies: - "@react-spring/shared": "npm:~9.7.3" - "@react-spring/types": "npm:~9.7.3" + "@react-spring/shared": "npm:~9.7.5" + "@react-spring/types": "npm:~9.7.5" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/75c427e810b05ef508ac81695e3410619bcc8b8b87e232eb6fa05a91155bb6a558b324937fcaacb9b2002fdffb557de97ee5f6f6b226c53f5f356f62559f89a1 + checksum: 10/f4130b7ffae25621514ff2b3873acab65c21d6acf8eab798ef1fe5ee917c07f4c75aaa19788244dce7d9a0d6586a794f59634f2809e2f6399d9766dfbd454837 languageName: node linkType: hard -"@react-spring/core@npm:~9.7.3": - version: 9.7.3 - resolution: "@react-spring/core@npm:9.7.3" +"@react-spring/core@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/core@npm:9.7.5" dependencies: - "@react-spring/animated": "npm:~9.7.3" - "@react-spring/shared": "npm:~9.7.3" - "@react-spring/types": "npm:~9.7.3" + "@react-spring/animated": "npm:~9.7.5" + "@react-spring/shared": "npm:~9.7.5" + "@react-spring/types": "npm:~9.7.5" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/91102271531eae8fc146b8847ae6dbc03ebfbab5816529b9bfdd71e6d922ea07361fcbc57b404de57dac2f719246876f94539c04e2f314b3c767ad33d8d4f984 + checksum: 10/b76578ffbd26f66cce7212ab3335eea488c05a533acea6bc09c5357f3d5f7a2550e4588124fc7445f5effcb91f8b2ddf049a556c9c8786556740a90780cbd73b languageName: node linkType: hard -"@react-spring/konva@npm:~9.7.3": - version: 9.7.3 - resolution: "@react-spring/konva@npm:9.7.3" +"@react-spring/konva@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/konva@npm:9.7.5" dependencies: - "@react-spring/animated": "npm:~9.7.3" - "@react-spring/core": "npm:~9.7.3" - "@react-spring/shared": "npm:~9.7.3" - "@react-spring/types": "npm:~9.7.3" + "@react-spring/animated": "npm:~9.7.5" + "@react-spring/core": "npm:~9.7.5" + "@react-spring/shared": "npm:~9.7.5" + "@react-spring/types": "npm:~9.7.5" peerDependencies: konva: ">=2.6" react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-konva: ^16.8.0 || ^16.8.7-0 || ^16.9.0-0 || ^16.10.1-0 || ^16.12.0-0 || ^16.13.0-0 || ^17.0.0-0 || ^17.0.1-0 || ^17.0.2-0 || ^18.0.0-0 - checksum: 10/e6cc925fb74abfeea6247bd92232d764f671b51cf2aa0b7dd09eb134bf24230b968bc9f9bb0cf63bedaedf95d85fc5a0eb79b757213fa9e7cabf0d2dee4e82b1 + checksum: 10/0460f107b08d0f71e71dee27ff11ad0fac8ce8b3faad00b63c0711ab1e07d8b693aca59f1c965d541f3c55dc3115c9896ad429097818f26613eeb1f801b9fe70 languageName: node linkType: hard -"@react-spring/native@npm:~9.7.3": - version: 9.7.3 - resolution: "@react-spring/native@npm:9.7.3" +"@react-spring/native@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/native@npm:9.7.5" dependencies: - "@react-spring/animated": "npm:~9.7.3" - "@react-spring/core": "npm:~9.7.3" - "@react-spring/shared": "npm:~9.7.3" - "@react-spring/types": "npm:~9.7.3" + "@react-spring/animated": "npm:~9.7.5" + "@react-spring/core": "npm:~9.7.5" + "@react-spring/shared": "npm:~9.7.5" + "@react-spring/types": "npm:~9.7.5" peerDependencies: - react: ^16.8.0 || >=17.0.0 || >=18.0.0 + react: 16.8.0 || >=17.0.0 || >=18.0.0 react-native: ">=0.58" - checksum: 10/df78b2f660aa30166f0fdd860b958df0d53ad4ad229b7f5357d3cd7945351e79b0a722761c9e2a482a15856021bebf458cd0a815860bbe1b8d64e72051c87c23 + checksum: 10/894c25fb332c14c3e70520b0679b372853c4e7d307c3e96fdc24ecf9869a47e60c1fb7a508b29dfc53e6002e6ba690a24370caecbc0aab503e65f32cb07df8d0 + languageName: node + linkType: hard + +"@react-spring/rafz@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/rafz@npm:9.7.5" + checksum: 10/25b2dfc674603251bb4645758b4b35e7807a887fe7b58e7257edd32993abb9d7e36cd381f831d532f45278460227357112dd008ca3d07f9d8694aedd59d786b8 languageName: node linkType: hard -"@react-spring/shared@npm:~9.7.3": - version: 9.7.3 - resolution: "@react-spring/shared@npm:9.7.3" +"@react-spring/shared@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/shared@npm:9.7.5" dependencies: - "@react-spring/types": "npm:~9.7.3" + "@react-spring/rafz": "npm:~9.7.5" + "@react-spring/types": "npm:~9.7.5" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/76e44fe8ad63c83861a8453e26d085c69a40f0e5865ca2af7d2fecacb030e59ebe6db5f8e7ef8b1a6b6e193cc3c1c6fd3d5172b10bf216b205844e6d3e90e860 + checksum: 10/4e8d7927a1543745f36600396250999d2e8fdb57d73b2cb8b4d859f35ba202cf3bdcc1a64c72ca495fcc8025f739b428b1735ab5159d01fc45ea30b568be11d8 languageName: node linkType: hard -"@react-spring/three@npm:~9.7.3": - version: 9.7.3 - resolution: "@react-spring/three@npm:9.7.3" +"@react-spring/three@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/three@npm:9.7.5" dependencies: - "@react-spring/animated": "npm:~9.7.3" - "@react-spring/core": "npm:~9.7.3" - "@react-spring/shared": "npm:~9.7.3" - "@react-spring/types": "npm:~9.7.3" + "@react-spring/animated": "npm:~9.7.5" + "@react-spring/core": "npm:~9.7.5" + "@react-spring/shared": "npm:~9.7.5" + "@react-spring/types": "npm:~9.7.5" peerDependencies: "@react-three/fiber": ">=6.0" react: ^16.8.0 || ^17.0.0 || ^18.0.0 three: ">=0.126" - checksum: 10/7fde4d5cea2ad7b4e15089c0464799b857662a5a97537fc85f82ee7777f187945f32cf70c4609111a4557e46dbe475d1328325841a8825c0f5ded21ea49d7599 + checksum: 10/0ae7bfcc438fa308b83cf6213fb34ef5eb8fbec3868190dd5eb27dde67810d4060dd944559f936e36b1efbdd84f03ffa0235dab8e0979a03e3e5f1bef7f70921 languageName: node linkType: hard -"@react-spring/types@npm:~9.7.3": - version: 9.7.3 - resolution: "@react-spring/types@npm:9.7.3" - checksum: 10/fcaf5fe02ae3e56a07f340dd5a0a17e9c283ff7deab8b6549ff513ef2f5ad57e0218d448b5331e422cfa739b40f0de3511e7b3f3e73ae8690496cda5bb984854 +"@react-spring/types@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/types@npm:9.7.5" + checksum: 10/5b0edc00f31dcd3a8c5027130c9992ba286dd275112800c63f706da2b871837ca96b52f6a1f0796f38190a947d7ae7bf4916ec9b440b04a0bc0e5c57f6fd70aa languageName: node linkType: hard -"@react-spring/web@npm:~9.7.3": - version: 9.7.3 - resolution: "@react-spring/web@npm:9.7.3" +"@react-spring/web@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/web@npm:9.7.5" dependencies: - "@react-spring/animated": "npm:~9.7.3" - "@react-spring/core": "npm:~9.7.3" - "@react-spring/shared": "npm:~9.7.3" - "@react-spring/types": "npm:~9.7.3" + "@react-spring/animated": "npm:~9.7.5" + "@react-spring/core": "npm:~9.7.5" + "@react-spring/shared": "npm:~9.7.5" + "@react-spring/types": "npm:~9.7.5" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/65c71e28ef1197d2afdc053d776b6bd1db6b5558d50849d78c7fc665c3ed1bbd08850fabfceba2223f8660915301aaea18588ebee2429e7b6de99a2640335bbe + checksum: 10/ecd6c410d0277649c6a6dc19156a06cc7beb92ac79eb798ee18d30ca9bdf92ccf63ad7794b384471059f03d3dc8c612b26ca6aec42769d01e2a43d07919fd02b languageName: node linkType: hard -"@react-spring/zdog@npm:~9.7.3": - version: 9.7.3 - resolution: "@react-spring/zdog@npm:9.7.3" +"@react-spring/zdog@npm:~9.7.5": + version: 9.7.5 + resolution: "@react-spring/zdog@npm:9.7.5" dependencies: - "@react-spring/animated": "npm:~9.7.3" - "@react-spring/core": "npm:~9.7.3" - "@react-spring/shared": "npm:~9.7.3" - "@react-spring/types": "npm:~9.7.3" + "@react-spring/animated": "npm:~9.7.5" + "@react-spring/core": "npm:~9.7.5" + "@react-spring/shared": "npm:~9.7.5" + "@react-spring/types": "npm:~9.7.5" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 react-zdog: ">=1.0" zdog: ">=1.0" - checksum: 10/26f2f61f7829f2bd394b5688c9a6bf110430c4f6ade45ae52dcc53f95451c4d99a6c6c6c649366a66edbde710777121c97926904c1952224c8d445ab8a3a9f7d + checksum: 10/ce43ad30013cad30dcccf390328d309a7b467b8fdddfd5f86a70b87b9e2ea198471a0803160fb239d33d78876e81e0421fe0cd772817fc1697927314f68cfcda languageName: node linkType: hard "@reduxjs/toolkit@npm:^1.8.1": - version: 1.9.5 - resolution: "@reduxjs/toolkit@npm:1.9.5" + version: 1.9.7 + resolution: "@reduxjs/toolkit@npm:1.9.7" dependencies: immer: "npm:^9.0.21" redux: "npm:^4.2.1" @@ -3710,16 +4023,23 @@ __metadata: optional: true react-redux: optional: true - checksum: 10/ac24173de599b830232da5e040ea2b898c34cc803cb219e537ce15c5b914c85dfdb97f8f7015ea4e8cc9110430e2a081766b0dcbc1e71f99639b8bec136d3499 + checksum: 10/11c718270bb378e5b26e172eb84cc549d6f263748b6f330b07ee9c366c6474b013fd410e5b2f65a5742e73b7873a3ac14e06cae4bb01480ba03b423c4fd92583 languageName: node linkType: hard -"@sideway/address@npm:^4.1.3": - version: 4.1.4 - resolution: "@sideway/address@npm:4.1.4" +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 10/17d04adf404e04c1e61391ed97bca5117d4c2767a76ae3e879390d6dec7b317fcae68afbf9e98badee075d0b64fa60f287729c4942021b4d19cd01db77385c01 + languageName: node + linkType: hard + +"@sideway/address@npm:^4.1.5": + version: 4.1.5 + resolution: "@sideway/address@npm:4.1.5" dependencies: "@hapi/hoek": "npm:^9.0.0" - checksum: 10/48c422bd2d1d1c7bff7e834f395b870a66862125e9f2302f50c781a33e9f4b2b004b4db0003b232899e71c5f649d39f34aa6702a55947145708d7689ae323cc5 + checksum: 10/c4c73ac0339504f34e016d3a687118e7ddf197c1c968579572123b67b230be84caa705f0f634efdfdde7f2e07a6e0224b3c70665dc420d8bc95bf400cfc4c998 languageName: node linkType: hard @@ -3745,9 +4065,9 @@ __metadata: linkType: hard "@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: 10/297f95ff77c82c54de8c9907f186076e715ff2621c5222ba50b8d40a170661c0c5242c763cba2a4791f0f91cb1d8ffa53ea1d7294570cf8cd4694c0e383e484d + version: 0.27.10 + resolution: "@sinclair/typebox@npm:0.27.10" + checksum: 10/1498c5ef1375787e6272528615d5c262afb60873191d2441316359817b1c411917063c8be102ef15b0b5c62243a9daa7aefc8426f20eb406b67038b3eaa0695a languageName: node linkType: hard @@ -3989,165 +4309,179 @@ __metadata: languageName: node linkType: hard -"@trysound/sax@npm:0.2.0": - version: 0.2.0 - resolution: "@trysound/sax@npm:0.2.0" - checksum: 10/7379713eca480ac0d9b6c7b063e06b00a7eac57092354556c81027066eb65b61ea141a69d0cc2e15d32e05b2834d4c9c2184793a5e36bbf5daf05ee5676af18c +"@tybys/wasm-util@npm:^0.10.0": + version: 0.10.1 + resolution: "@tybys/wasm-util@npm:0.10.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/7fe0d239397aebb002ac4855d30c197c06a05ea8df8511350a3a5b1abeefe26167c60eda8a5508337571161e4c4b53d7c1342296123f9607af8705369de9fa7f languageName: node linkType: hard "@types/aria-query@npm:^5.0.1": - version: 5.0.1 - resolution: "@types/aria-query@npm:5.0.1" - checksum: 10/0635081bb506576b937899afa8e76e6b8d2faf5662f309d6fdc3fc89c749d63362cd8cb3baa0a6d786fe8664994fbffbb11461fcad62b5394f2663891e722b86 + version: 5.0.4 + resolution: "@types/aria-query@npm:5.0.4" + checksum: 10/c0084c389dc030daeaf0115a92ce43a3f4d42fc8fef2d0e22112d87a42798d4a15aac413019d4a63f868327d52ad6740ab99609462b442fe6b9286b172d2e82e languageName: node linkType: hard "@types/babel__core@npm:^7.1.14": - version: 7.20.1 - resolution: "@types/babel__core@npm:7.20.1" + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" dependencies: "@babel/parser": "npm:^7.20.7" "@babel/types": "npm:^7.20.7" "@types/babel__generator": "npm:*" "@types/babel__template": "npm:*" "@types/babel__traverse": "npm:*" - checksum: 10/e63e5e71be75dd2fe41951c83650ab62006179340a7b280bfa58e9c39118cb2752ca786f952f4a12f75b83b55346f2d5e8df2b91926ef99f2f4a2a69162cab99 + checksum: 10/c32838d280b5ab59d62557f9e331d3831f8e547ee10b4f85cb78753d97d521270cebfc73ce501e9fb27fe71884d1ba75e18658692c2f4117543f0fc4e3e118b3 languageName: node linkType: hard "@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" + version: 7.27.0 + resolution: "@types/babel__generator@npm:7.27.0" dependencies: "@babel/types": "npm:^7.0.0" - checksum: 10/34f361a0d54a0d85ea4c4b5122c4025a5738fe6795361c85f07a4f8f9add383de640e8611edeeb8339db8203c2d64bff30be266bdcfe3cf777c19e8d34f9cebc + checksum: 10/f572e67a9a39397664350a4437d8a7fbd34acc83ff4887a8cf08349e39f8aeb5ad2f70fb78a0a0a23a280affe3a5f4c25f50966abdce292bcf31237af1c27b1a languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" dependencies: "@babel/parser": "npm:^7.1.0" "@babel/types": "npm:^7.0.0" - checksum: 10/649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + checksum: 10/d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 languageName: node linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.20.1 - resolution: "@types/babel__traverse@npm:7.20.1" + version: 7.28.0 + resolution: "@types/babel__traverse@npm:7.28.0" dependencies: - "@babel/types": "npm:^7.20.7" - checksum: 10/8f18d1488adf296f50d01e2386797c56a607cde2cfc3c7c55cea34d760aed9386c81ea808a151a0efb11d99e0083c138c5733d3f214471a30abed055bede39d8 + "@babel/types": "npm:^7.28.2" + checksum: 10/371c5e1b40399ef17570e630b2943617b84fafde2860a56f0ebc113d8edb1d0534ade0175af89eda1ae35160903c33057ed42457e165d4aa287fedab2c82abcf languageName: node linkType: hard "@types/body-parser@npm:*": - version: 1.19.2 - resolution: "@types/body-parser@npm:1.19.2" + version: 1.19.6 + resolution: "@types/body-parser@npm:1.19.6" dependencies: "@types/connect": "npm:*" "@types/node": "npm:*" - checksum: 10/e17840c7d747a549f00aebe72c89313d09fbc4b632b949b2470c5cb3b1cb73863901ae84d9335b567a79ec5efcfb8a28ff8e3f36bc8748a9686756b6d5681f40 + checksum: 10/33041e88eae00af2cfa0827e951e5f1751eafab2a8b6fce06cd89ef368a988907996436b1325180edaeddd1c0c7d0d0d4c20a6c9ff294a91e0039a9db9e9b658 languageName: node linkType: hard "@types/bonjour@npm:^3.5.9": - version: 3.5.10 - resolution: "@types/bonjour@npm:3.5.10" + version: 3.5.13 + resolution: "@types/bonjour@npm:3.5.13" dependencies: "@types/node": "npm:*" - checksum: 10/bfcadb042a41b124c4e3de4925e3be6d35b78f93f27c4535d5ff86980dc0f8bc407ed99b9b54528952dc62834d5a779392f7a12c2947dd19330eb05a6bcae15a + checksum: 10/e827570e097bd7d625a673c9c208af2d1a22fa3885c0a1646533cf24394c839c3e5f60ac1bc60c0ddcc69c0615078c9fb2c01b42596c7c582d895d974f2409ee languageName: node linkType: hard "@types/connect-history-api-fallback@npm:^1.3.5": - version: 1.5.0 - resolution: "@types/connect-history-api-fallback@npm:1.5.0" + version: 1.5.4 + resolution: "@types/connect-history-api-fallback@npm:1.5.4" dependencies: "@types/express-serve-static-core": "npm:*" "@types/node": "npm:*" - checksum: 10/f180e7c540728d6dd3a1eb2376e445fe7f9de4ee8a5b460d5ad80062cdb6de6efc91c6851f39e9d5933b3dcd5cd370673c52343a959aa091238b6f863ea4447c + checksum: 10/e1dee43b8570ffac02d2d47a2b4ba80d3ca0dd1840632dafb221da199e59dbe3778d3d7303c9e23c6b401f37c076935a5bc2aeae1c4e5feaefe1c371fe2073fd languageName: node linkType: hard "@types/connect@npm:*": - version: 3.4.35 - resolution: "@types/connect@npm:3.4.35" + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" dependencies: "@types/node": "npm:*" - checksum: 10/fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 + checksum: 10/7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 languageName: node linkType: hard -"@types/eslint-scope@npm:^3.7.3": - version: 3.7.4 - resolution: "@types/eslint-scope@npm:3.7.4" +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" dependencies: "@types/eslint": "npm:*" "@types/estree": "npm:*" - checksum: 10/ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 + checksum: 10/e2889a124aaab0b89af1bab5959847c5bec09809209255de0e63b9f54c629a94781daa04adb66bffcdd742f5e25a17614fb933965093c0eea64aacda4309380e languageName: node linkType: hard "@types/eslint@npm:*": - version: 8.44.2 - resolution: "@types/eslint@npm:8.44.2" + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" dependencies: "@types/estree": "npm:*" "@types/json-schema": "npm:*" - checksum: 10/9fe07d4fba1ab9d53d0da404c5774c056deb4bb37a3712a11d35f40ec4389d5d8cc46f19387cf79a3054754e1b71f5dbb796ee6f7411449e9f2399aff8a94def + checksum: 10/719fcd255760168a43d0e306ef87548e1e15bffe361d5f4022b0f266575637acc0ecb85604ac97879ee8ae83c6a6d0613b0ed31d0209ddf22a0fe6d608fc56fe languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.0": - version: 1.0.1 - resolution: "@types/estree@npm:1.0.1" - checksum: 10/f252569c002506c61ad913e778aa69415908078c46c78c901ccad77bc66cd34f1e1b9babefb8ff0d27c07a15fb0824755edd7bb3fa7ea828f32ae0fe5faa9962 +"@types/estree@npm:*, @types/estree@npm:^1.0.8": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10/25a4c16a6752538ffde2826c2cc0c6491d90e69cd6187bef4a006dd2c3c45469f049e643d7e516c515f21484dc3d48fd5c870be158a5beb72f5baf3dc43e4099 + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:*": + version: 5.1.1 + resolution: "@types/express-serve-static-core@npm:5.1.1" + dependencies: + "@types/node": "npm:*" + "@types/qs": "npm:*" + "@types/range-parser": "npm:*" + "@types/send": "npm:*" + checksum: 10/7f3d8cf7e68764c9f3e8f6a12825b69ccf5287347fc1c20b29803d4f08a4abc1153ae11d7258852c61aad50f62ef72d4c1b9c97092b0a90462c3dddec2f6026c languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33": - version: 4.17.35 - resolution: "@types/express-serve-static-core@npm:4.17.35" +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.19.8 + resolution: "@types/express-serve-static-core@npm:4.19.8" dependencies: "@types/node": "npm:*" "@types/qs": "npm:*" "@types/range-parser": "npm:*" "@types/send": "npm:*" - checksum: 10/9f08212ac163e9b2a1005d84cc43ace52d5057dfaa009c575eb3f3a659949b9c9cecec0cbff863622871c56e1c604bd67857a5e1d353256eaf9adacec59f87bf + checksum: 10/eb1b832343c0991395c9b10e124dc805921ea7c08efe01222d83912123b8c054119d009e9e55c91af6bdbeeec153c0d35411c9c6d80781bc8c0a43e8b1a84387 languageName: node linkType: hard "@types/express@npm:*, @types/express@npm:^4.17.13": - version: 4.17.17 - resolution: "@types/express@npm:4.17.17" + version: 4.17.25 + resolution: "@types/express@npm:4.17.25" dependencies: "@types/body-parser": "npm:*" "@types/express-serve-static-core": "npm:^4.17.33" "@types/qs": "npm:*" - "@types/serve-static": "npm:*" - checksum: 10/e2959a5fecdc53f8a524891a16e66dfc330ee0519e89c2579893179db686e10cfa6079a68e0fb8fd00eedbcaf3eabfd10916461939f3bc02ef671d848532c37e + "@types/serve-static": "npm:^1" + checksum: 10/c309fdb79fb8569b5d8d8f11268d0160b271f8b38f0a82c20a0733e526baf033eb7a921cd51d54fe4333c616de9e31caf7d4f3ef73baaf212d61f23f460b0369 languageName: node linkType: hard "@types/graceful-fs@npm:^4.1.3": - version: 4.1.6 - resolution: "@types/graceful-fs@npm:4.1.6" + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" dependencies: "@types/node": "npm:*" - checksum: 10/c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + checksum: 10/79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 languageName: node linkType: hard "@types/hast@npm:^2.0.0": - version: 2.3.5 - resolution: "@types/hast@npm:2.3.5" + version: 2.3.10 + resolution: "@types/hast@npm:2.3.10" dependencies: "@types/unist": "npm:^2" - checksum: 10/e435e9fbf6afc616ade377d2246a632fb75f4064be4bfd619b67a1ba0d9935d75968a18fbdb66535dfb5e77ef81f4b9b56fd8f35c1cffa34b48ddb0287fec91e + checksum: 10/41531b7fbf590b02452996fc63272479c20a07269e370bd6514982cbcd1819b4b84d3ea620f2410d1b9541a23d08ce2eeb0a592145d05e00e249c3d56700d460 languageName: node linkType: hard @@ -4159,12 +4493,13 @@ __metadata: linkType: hard "@types/hoist-non-react-statics@npm:^3.3.1": - version: 3.3.1 - resolution: "@types/hoist-non-react-statics@npm:3.3.1" + version: 3.3.7 + resolution: "@types/hoist-non-react-statics@npm:3.3.7" dependencies: - "@types/react": "npm:*" hoist-non-react-statics: "npm:^3.3.0" - checksum: 10/071e6d75a0ed9aa0e9ca2cc529a8c15bf7ac3e4a37aac279772ea6036fd0bf969b67fb627b65cfce65adeab31fec1e9e95b4dcdefeab075b580c0c7174206f63 + peerDependencies: + "@types/react": "*" + checksum: 10/13f610572c073970b3f43cc446396974fed786fee6eac2d6fd4b0ca5c985f13e79d4a0de58af4e5b4c68470d808567c3a14108d98edb7d526d4d46c8ec851ed1 languageName: node linkType: hard @@ -4176,43 +4511,43 @@ __metadata: linkType: hard "@types/http-errors@npm:*": - version: 2.0.1 - resolution: "@types/http-errors@npm:2.0.1" - checksum: 10/3bb0c50b0a652e679a84c30cd0340d696c32ef6558518268c238840346c077f899315daaf1c26c09c57ddd5dc80510f2a7f46acd52bf949e339e35ed3ee9654f + version: 2.0.5 + resolution: "@types/http-errors@npm:2.0.5" + checksum: 10/a88da669366bc483e8f3b3eb3d34ada5f8d13eeeef851b1204d77e2ba6fc42aba4566d877cca5c095204a3f4349b87fe397e3e21288837bdd945dd514120755b languageName: node linkType: hard "@types/http-proxy@npm:^1.17.8": - version: 1.17.11 - resolution: "@types/http-proxy@npm:1.17.11" + version: 1.17.17 + resolution: "@types/http-proxy@npm:1.17.17" dependencies: "@types/node": "npm:*" - checksum: 10/7cda456611b4adfdd87e4317745af643153d502576fb7095806d5b1b397b9a878b105e14abff9b7ab1d1c71132b61b5fc7052461f766165963950f1b46e18315 + checksum: 10/893e46e12be576baa471cf2fc13a4f0e413eaf30a5850de8fdbea3040e138ad4171234c59b986cf7137ff20a1582b254bf0c44cfd715d5ed772e1ab94dd75cd1 languageName: node linkType: hard "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.4 - resolution: "@types/istanbul-lib-coverage@npm:2.0.4" - checksum: 10/a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 10/3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 languageName: node linkType: hard "@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" dependencies: "@types/istanbul-lib-coverage": "npm:*" - checksum: 10/f121dcac8a6b8184f3cab97286d8d519f1937fa8620ada5dbc43b699d602b8be289e4a4bccbd6ee1aade6869d3c9fb68bf04c6fdca8c5b0c4e7e314c31c7900a + checksum: 10/b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 languageName: node linkType: hard "@types/istanbul-reports@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/istanbul-reports@npm:3.0.1" + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" dependencies: "@types/istanbul-lib-report": "npm:*" - checksum: 10/f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + checksum: 10/93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 languageName: node linkType: hard @@ -4237,10 +4572,10 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": - version: 7.0.12 - resolution: "@types/json-schema@npm:7.0.12" - checksum: 10/7a72ba9cb7d2b45d7bb032e063c9eeb1ce4102d62551761e84c91f99f8273ba5aaffd34be835869456ec7c40761b4389009d9e777c0020a7227ca0f5e3238e94 +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 languageName: node linkType: hard @@ -4268,32 +4603,36 @@ __metadata: linkType: hard "@types/mdast@npm:^3.0.0": - version: 3.0.12 - resolution: "@types/mdast@npm:3.0.12" + version: 3.0.15 + resolution: "@types/mdast@npm:3.0.15" dependencies: "@types/unist": "npm:^2" - checksum: 10/7446c87e3c51db5e3daa7490f9d04c183e619a8f6542f5dbaa263599052adc89af17face06609d4f5c5c49aacee2bff04748bba0342cbc4106904f9cf1121a69 + checksum: 10/050a5c1383928b2688dd145382a22535e2af87dc3fd592c843abb7851bcc99893a1ee0f63be19fc4e89779387ec26a57486cfb425b016c0b2a98a17fc4a1e8b3 languageName: node linkType: hard -"@types/mime@npm:*": - version: 3.0.1 - resolution: "@types/mime@npm:3.0.1" - checksum: 10/4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 +"@types/mime@npm:^1": + version: 1.3.5 + resolution: "@types/mime@npm:1.3.5" + checksum: 10/e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78 languageName: node linkType: hard -"@types/mime@npm:^1": - version: 1.3.2 - resolution: "@types/mime@npm:1.3.2" - checksum: 10/0493368244cced1a69cb791b485a260a422e6fcc857782e1178d1e6f219f1b161793e9f87f5fae1b219af0f50bee24fcbe733a18b4be8fdd07a38a8fb91146fd +"@types/node-forge@npm:^1.3.0": + version: 1.3.14 + resolution: "@types/node-forge@npm:1.3.14" + dependencies: + "@types/node": "npm:*" + checksum: 10/500ce72435285fca145837da079b49a09a5bdf8391b0effc3eb2455783dd81ab129e574a36e1a0374a4823d889d5328177ebfd6fe45b432c0c43d48d790fe39c languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": - version: 20.5.0 - resolution: "@types/node@npm:20.5.0" - checksum: 10/0d3f4b66f6514ec2cd4d600daeac666dc16b148b576013c830333e27b9eba12be8577f243028d285e45114d5f98646bc4b89ef1f9ba47d5a5cbb55018ff046bd +"@types/node@npm:*, @types/node@npm:>=13.7.0": + version: 25.4.0 + resolution: "@types/node@npm:25.4.0" + dependencies: + undici-types: "npm:~7.18.0" + checksum: 10/c8d55bdb395d56ad94d227724302b2615d6cd2d8a20f432a1ccf16bd4e537c61b062882e49dbd1fcfd845d91a18f62deb256ab07268c24549a4c7f740d74b903 languageName: node linkType: hard @@ -4305,16 +4644,16 @@ __metadata: linkType: hard "@types/normalize-package-data@npm:^2.4.0": - version: 2.4.1 - resolution: "@types/normalize-package-data@npm:2.4.1" - checksum: 10/e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 10/65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 languageName: node linkType: hard "@types/parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "@types/parse-json@npm:4.0.0" - checksum: 10/4df9de98150d2978afc2161482a3a8e6617883effba3223324f079de97ba7eabd7d84b90ced11c3f82b0c08d4a8383f678c9f73e9c41258f769b3fa234a2bb4f + version: 4.0.2 + resolution: "@types/parse-json@npm:4.0.2" + checksum: 10/5bf62eec37c332ad10059252fc0dab7e7da730764869c980b0714777ad3d065e490627be9f40fc52f238ffa3ac4199b19de4127196910576c2fe34dd47c7a470 languageName: node linkType: hard @@ -4339,44 +4678,37 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*": - version: 15.7.5 - resolution: "@types/prop-types@npm:15.7.5" - checksum: 10/5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 - languageName: node - linkType: hard - "@types/qs@npm:*": - version: 6.9.7 - resolution: "@types/qs@npm:6.9.7" - checksum: 10/7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba + version: 6.15.0 + resolution: "@types/qs@npm:6.15.0" + checksum: 10/871162881f1c83e61d0c8c243c65549be5dddf33a6911f3324edeebd4087207b1174644da9a3afaa20cf494c5288d2a1ece09e10e4822f755339f14a05c339ea languageName: node linkType: hard "@types/range-parser@npm:*": - version: 1.2.4 - resolution: "@types/range-parser@npm:1.2.4" - checksum: 10/b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 10/95640233b689dfbd85b8c6ee268812a732cf36d5affead89e806fe30da9a430767af8ef2cd661024fd97e19d61f3dec75af2df5e80ec3bea000019ab7028629a languageName: node linkType: hard "@types/react-dom@npm:^18.0.0": - version: 18.2.7 - resolution: "@types/react-dom@npm:18.2.7" - dependencies: - "@types/react": "npm:*" - checksum: 10/9b70ef66cbe2d2898ea37eb79ee3697e0e4ad3d950e769a601f79be94097d43b8ef45b98a0b29528203c7d731c81666f637b2b7032deeced99214b4bc0662614 + version: 18.3.7 + resolution: "@types/react-dom@npm:18.3.7" + peerDependencies: + "@types/react": ^18.0.0 + checksum: 10/317569219366d487a3103ba1e5e47154e95a002915fdcf73a44162c48fe49c3a57fcf7f57fc6979e70d447112681e6b13c6c3c1df289db8b544df4aab2d318f3 languageName: node linkType: hard "@types/react-router-config@npm:*, @types/react-router-config@npm:^5.0.6": - version: 5.0.7 - resolution: "@types/react-router-config@npm:5.0.7" + version: 5.0.11 + resolution: "@types/react-router-config@npm:5.0.11" dependencies: "@types/history": "npm:^4.7.11" "@types/react": "npm:*" "@types/react-router": "npm:^5.1.0" - checksum: 10/e7ecc3fc957a41a22d64c53529e801c434d8b3fb80d0b98e9fc614b2d34ede1b89ec32bbaf68ead8ec7e573a485ac6a5476142e6e659bbee0697599f206070a7 + checksum: 10/4b72d9b71e0576e193c11e5085bbdac43f31debfa3b6ebc24666f3d646ef25c1f57f16c29b1ddd3051c881e85f8e0d4ab5a7bbd5fc215b9377f57675b210be7c languageName: node linkType: hard @@ -4402,13 +4734,11 @@ __metadata: linkType: hard "@types/react@npm:*": - version: 18.2.20 - resolution: "@types/react@npm:18.2.20" + version: 19.2.14 + resolution: "@types/react@npm:19.2.14" dependencies: - "@types/prop-types": "npm:*" - "@types/scheduler": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10/469b0c1fb36cd97ea0b39281a521a667e459fa3b30cdeb7af6a22ebd38b0866c2fcb75416532d10a2ec58e0a421a698a0026810840c693c0708fb2bb7926c0e9 + csstype: "npm:^3.2.2" + checksum: 10/fbff239089ee64b6bd9b00543594db498278b06de527ef1b0f71bb0eb09cc4445a71b5dd3c0d3d0257255c4eed94406be40a74ad4a987ade8a8d5dd65c82bc5f languageName: node linkType: hard @@ -4429,85 +4759,87 @@ __metadata: linkType: hard "@types/sax@npm:^1.2.1": - version: 1.2.4 - resolution: "@types/sax@npm:1.2.4" + version: 1.2.7 + resolution: "@types/sax@npm:1.2.7" dependencies: "@types/node": "npm:*" - checksum: 10/2aa50cbf1d1f0cf8541ef1787f94c7442e58e63900afd3b45c354e4140ed5efc5cf26fca8eb9df9970a74c7ea582293ae2083271bd046dedf4c3cc2689a40892 + checksum: 10/7ece5fbb5d9c8fc76ab0de2f99d705edf92f18e701d4f9d9b0647275e32eb65e656c1badf9dfaa12f4e1ff3e250561c8c9cfe79e8b5f33dd1417ac0f1804f6cc languageName: node linkType: hard -"@types/scheduler@npm:*": - version: 0.16.3 - resolution: "@types/scheduler@npm:0.16.3" - checksum: 10/2b0aec39c24268e3ce938c5db2f2e77f5c3dd280e05c262d9c2fe7d890929e4632a6b8e94334017b66b45e4f92a5aa42ba3356640c2a1175fa37bef2f5200767 +"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": + version: 7.7.1 + resolution: "@types/semver@npm:7.7.1" + checksum: 10/8f09e7e6ca3ded67d78ba7a8f7535c8d9cf8ced83c52e7f3ac3c281fe8c689c3fe475d199d94390dc04fc681d51f2358b430bb7b2e21c62de24f2bee2c719068 languageName: node linkType: hard -"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": - version: 7.5.0 - resolution: "@types/semver@npm:7.5.0" - checksum: 10/8fbfbf79e9c14c3c20160a42145a146cba44d9763d0fac78358b394dc36e41bc2590bc4f0129c6fcbbc9b30f12ea1ba821bfe84b29dc80897f315cc7dd251393 +"@types/send@npm:*": + version: 1.2.1 + resolution: "@types/send@npm:1.2.1" + dependencies: + "@types/node": "npm:*" + checksum: 10/81ef5790037ba1d2d458392e4241501f0f8b4838cc8797e169e179e099410e12069ec68e8dbd39211cb097c4a9b1ff1682dbcea897ab4ce21dad93438b862d27 languageName: node linkType: hard -"@types/send@npm:*": - version: 0.17.1 - resolution: "@types/send@npm:0.17.1" +"@types/send@npm:<1": + version: 0.17.6 + resolution: "@types/send@npm:0.17.6" dependencies: "@types/mime": "npm:^1" "@types/node": "npm:*" - checksum: 10/6420837887858f7aa82f2c0272f73edb42385bd0978f43095e83590a405d86c8cc6d918c30b2d542f1d8bddc9f3d16c2e8fdfca936940de71b97c45f228d1896 + checksum: 10/4948ab32ab84a81a0073f8243dd48ee766bc80608d5391060360afd1249f83c08a7476f142669ac0b0b8831c89d909a88bcb392d1b39ee48b276a91b50f3d8d1 languageName: node linkType: hard "@types/serve-index@npm:^1.9.1": - version: 1.9.1 - resolution: "@types/serve-index@npm:1.9.1" + version: 1.9.4 + resolution: "@types/serve-index@npm:1.9.4" dependencies: "@types/express": "npm:*" - checksum: 10/026f3995fb500f6df7c3fe5009e53bad6d739e20b84089f58ebfafb2f404bbbb6162bbe33f72d2f2af32d5b8d3799c8e179793f90d9ed5871fb8591190bb6056 + checksum: 10/72727c88d54da5b13275ebfb75dcdc4aa12417bbe9da1939e017c4c5f0c906fae843aa4e0fbfe360e7ee9df2f3d388c21abfc488f77ce58693fb57809f8ded92 languageName: node linkType: hard -"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": - version: 1.15.2 - resolution: "@types/serve-static@npm:1.15.2" +"@types/serve-static@npm:^1, @types/serve-static@npm:^1.13.10": + version: 1.15.10 + resolution: "@types/serve-static@npm:1.15.10" dependencies: "@types/http-errors": "npm:*" - "@types/mime": "npm:*" "@types/node": "npm:*" - checksum: 10/d5f8f5aaa765be6417aa3f2ebe36591f4e9d2d8a7480edf7d3db041427420fd565cb921fc021271098dd2afafce2b443fc0d978faa3ae21a2a58ebde7d525e9e + "@types/send": "npm:<1" + checksum: 10/d9be72487540b9598e7d77260d533f241eb2e5db5181bb885ef2d6bc4592dad1c9e8c0e27f465d59478b2faf90edd2d535e834f20fbd9dd3c0928d43dc486404 languageName: node linkType: hard "@types/sockjs@npm:^0.3.33": - version: 0.3.33 - resolution: "@types/sockjs@npm:0.3.33" + version: 0.3.36 + resolution: "@types/sockjs@npm:0.3.36" dependencies: "@types/node": "npm:*" - checksum: 10/b9bbb2b5c5ead2fb884bb019f61a014e37410bddd295de28184e1b2e71ee6b04120c5ba7b9954617f0bdf962c13d06249ce65004490889c747c80d3f628ea842 + checksum: 10/b4b5381122465d80ea8b158537c00bc82317222d3fb31fd7229ff25b31fa89134abfbab969118da55622236bf3d8fee75759f3959908b5688991f492008f29bc languageName: node linkType: hard "@types/stack-utils@npm:^2.0.0": - version: 2.0.1 - resolution: "@types/stack-utils@npm:2.0.1" - checksum: 10/205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 10/72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 languageName: node linkType: hard "@types/tough-cookie@npm:*": - version: 4.0.2 - resolution: "@types/tough-cookie@npm:4.0.2" - checksum: 10/8682b4062959c15c0521361825839e10d374344fa84166ee0b731b815ac7b79a942f6e9192fad6383d69df2251021678c86c46748ff69c61609934a3e27472f2 + version: 4.0.5 + resolution: "@types/tough-cookie@npm:4.0.5" + checksum: 10/01fd82efc8202670865928629697b62fe9bf0c0dcbc5b1c115831caeb073a2c0abb871ff393d7df1ae94ea41e256cb87d2a5a91fd03cdb1b0b4384e08d4ee482 languageName: node linkType: hard "@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2, @types/unist@npm:^2.0.3": - version: 2.0.7 - resolution: "@types/unist@npm:2.0.7" - checksum: 10/b97a219554e83431f19a93ff113306bf0512909292815e8f32964e47d041c505af1aaa2a381c23e137c4c0b962fad58d4ce9c5c3256642921a466be43c1fc715 + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 10/6d436e832bc35c6dde9f056ac515ebf2b3384a1d7f63679d12358766f9b313368077402e9c1126a14d827f10370a5485e628bf61aa91117cf4fc882423191a4e languageName: node linkType: hard @@ -4519,39 +4851,39 @@ __metadata: linkType: hard "@types/ws@npm:^8.5.5": - version: 8.5.5 - resolution: "@types/ws@npm:8.5.5" + version: 8.18.1 + resolution: "@types/ws@npm:8.18.1" dependencies: "@types/node": "npm:*" - checksum: 10/b2d7da5bd469c2ff1ddcfba1da33a556dc02c539e727001e7dc7b4182935154143e96a101cc091686acefb4e115c8ee38111c6634934748b8dd2db0c851c50ab + checksum: 10/1ce05e3174dcacf28dae0e9b854ef1c9a12da44c7ed73617ab6897c5cbe4fccbb155a20be5508ae9a7dde2f83bd80f5cf3baa386b934fc4b40889ec963e94f3a languageName: node linkType: hard "@types/yargs-parser@npm:*": - version: 21.0.0 - resolution: "@types/yargs-parser@npm:21.0.0" - checksum: 10/c4caec730c1ee09466588389ba4ac83d85a01423c539b9565bb5b5a084bff3f4e47bfb7c06e963c0ef8d4929cf6fca0bc2923a33ef16727cdba60e95c8cdd0d0 + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: 10/a794eb750e8ebc6273a51b12a0002de41343ffe46befef460bdbb57262d187fdf608bc6615b7b11c462c63c3ceb70abe2564c8dd8ee0f7628f38a314f74a9b9b languageName: node linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.24 - resolution: "@types/yargs@npm:17.0.24" + version: 17.0.35 + resolution: "@types/yargs@npm:17.0.35" dependencies: "@types/yargs-parser": "npm:*" - checksum: 10/03d9a985cb9331b2194a52d57a66aad88bf46aa32b3968a71cc6f39fb05c74f0709f0dd3aa9c0b29099cfe670343e3b1bd2ac6df2abfab596ede4453a616f63f + checksum: 10/47bcd4476a4194ea11617ea71cba8a1eddf5505fc39c44336c1a08d452a0de4486aedbc13f47a017c8efbcb5a8aa358d976880663732ebcbc6dbcbbecadb0581 languageName: node linkType: hard "@typescript-eslint/eslint-plugin@npm:^6.4.0": - version: 6.4.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.4.0" + version: 6.21.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:6.4.0" - "@typescript-eslint/type-utils": "npm:6.4.0" - "@typescript-eslint/utils": "npm:6.4.0" - "@typescript-eslint/visitor-keys": "npm:6.4.0" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/type-utils": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -4564,7 +4896,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/e6c79b560b091e3babd156d194c1c123046c20d7140881c9fd7e0e1a51313e5592c4b82e421009dc751b4adc4c2d6a69369121c1248751026d059aa4634d2b2e + checksum: 10/a57de0f630789330204cc1531f86cfc68b391cafb1ba67c8992133f1baa2a09d629df66e71260b040de4c9a3ff1252952037093c4128b0d56c4dbb37720b4c1d languageName: node linkType: hard @@ -4586,20 +4918,20 @@ __metadata: linkType: hard "@typescript-eslint/parser@npm:^6.4.0": - version: 6.4.0 - resolution: "@typescript-eslint/parser@npm:6.4.0" + version: 6.21.0 + resolution: "@typescript-eslint/parser@npm:6.21.0" dependencies: - "@typescript-eslint/scope-manager": "npm:6.4.0" - "@typescript-eslint/types": "npm:6.4.0" - "@typescript-eslint/typescript-estree": "npm:6.4.0" - "@typescript-eslint/visitor-keys": "npm:6.4.0" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/e8db4750c805cdd1945d43c9bd55a6d527c2dc6a46aec5a34769490590ab2b4b2af903c3ad27fef68cab2d8b4625c9d5c02d889e3f93cb16cba43c58051d77b1 + checksum: 10/4d51cdbc170e72275efc5ef5fce48a81ec431e4edde8374f4d0213d8d370a06823e1a61ae31d502a5f1b0d1f48fc4d29a1b1b5c2dcf809d66d3872ccf6e46ac7 languageName: node linkType: hard @@ -4623,22 +4955,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.4.0": - version: 6.4.0 - resolution: "@typescript-eslint/scope-manager@npm:6.4.0" +"@typescript-eslint/scope-manager@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/scope-manager@npm:6.21.0" dependencies: - "@typescript-eslint/types": "npm:6.4.0" - "@typescript-eslint/visitor-keys": "npm:6.4.0" - checksum: 10/adc5ca2101fa8ca50c6a1ded86f83d2c360a86c54b30b46a0fbbea7f9ff0bc484232069717ff5ee2ccb879cebccfe06cd57e4d8bf4b18dfe69921a85ce718698 + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" + checksum: 10/fe91ac52ca8e09356a71dc1a2f2c326480f3cccfec6b2b6d9154c1a90651ab8ea270b07c67df5678956c3bbf0bbe7113ab68f68f21b20912ea528b1214197395 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.4.0": - version: 6.4.0 - resolution: "@typescript-eslint/type-utils@npm:6.4.0" +"@typescript-eslint/type-utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/type-utils@npm:6.21.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:6.4.0" - "@typescript-eslint/utils": "npm:6.4.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" + "@typescript-eslint/utils": "npm:6.21.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -4646,7 +4978,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/6aafb235bd7d542e34549b308ae5116e797eaea3005a1ef5ce262da2bdbb4c726faf2592790bddaf1197068bad567a836f0a86ab8ef0b753babf8e61c97ae979 + checksum: 10/d03fb3ee1caa71f3ce053505f1866268d7ed79ffb7fed18623f4a1253f5b8f2ffc92636d6fd08fcbaf5bd265a6de77bf192c53105131e4724643dfc910d705fc languageName: node linkType: hard @@ -4664,10 +4996,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:6.4.0": - version: 6.4.0 - resolution: "@typescript-eslint/types@npm:6.4.0" - checksum: 10/9e3e5c854524a0b3b53d4ce23f08ff0d646280062e7d7655318b8e7ee03c2e5ab756d685c615f4a91d81be0b7988997fb40ba3587965ab88f345ce3cfe84185d +"@typescript-eslint/types@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/types@npm:6.21.0" + checksum: 10/e26da86d6f36ca5b6ef6322619f8ec55aabcd7d43c840c977ae13ae2c964c3091fc92eb33730d8be08927c9de38466c5323e78bfb270a9ff1d3611fe821046c5 languageName: node linkType: hard @@ -4707,38 +5039,39 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.4.0": - version: 6.4.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.4.0" +"@typescript-eslint/typescript-estree@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" dependencies: - "@typescript-eslint/types": "npm:6.4.0" - "@typescript-eslint/visitor-keys": "npm:6.4.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" + minimatch: "npm:9.0.3" semver: "npm:^7.5.4" ts-api-utils: "npm:^1.0.1" peerDependenciesMeta: typescript: optional: true - checksum: 10/179690b9b42ea75a9ced4b5fce872479080a0c8a9755089955b024a1c4bc5b9e2185075445154b609264476b0668e1131e881a11e68556895457d3197e895bc7 + checksum: 10/b32fa35fca2a229e0f5f06793e5359ff9269f63e9705e858df95d55ca2cd7fdb5b3e75b284095a992c48c5fc46a1431a1a4b6747ede2dd08929dc1cbacc589b8 languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.4.0": - version: 6.4.0 - resolution: "@typescript-eslint/utils@npm:6.4.0" +"@typescript-eslint/utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/utils@npm:6.21.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.4.0" - "@typescript-eslint/types": "npm:6.4.0" - "@typescript-eslint/typescript-estree": "npm:6.4.0" + "@typescript-eslint/scope-manager": "npm:6.21.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:6.21.0" semver: "npm:^7.5.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 10/f31971a22d56cc298e692650599ededd8ac6e23234dbb452a63541028d7220ee34a4e55224342170a600edd1eca2498e59b845a526655d3adc0c3e3eff27be48 + checksum: 10/b404a2c55a425a79d054346ae123087d30c7ecf7ed7abcf680c47bf70c1de4fabadc63434f3f460b2fa63df76bc9e4a0b9fa2383bb8a9fcd62733fb5c4e4f3e3 languageName: node linkType: hard @@ -4780,164 +5113,299 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.4.0": - version: 6.4.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.4.0" +"@typescript-eslint/visitor-keys@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" dependencies: - "@typescript-eslint/types": "npm:6.4.0" + "@typescript-eslint/types": "npm:6.21.0" eslint-visitor-keys: "npm:^3.4.1" - checksum: 10/d198124868db16ee12b9eaba18dfefa36a06eeeddacaf302b219d147df574eafec8a2992a2b0693301d1a5c46ed0913f42dde80fb6d778b39673af95dccf89e2 + checksum: 10/30422cdc1e2ffad203df40351a031254b272f9c6f2b7e02e9bfa39e3fc2c7b1c6130333b0057412968deda17a3a68a578a78929a8139c6acef44d9d841dc72e1 languageName: node linkType: hard -"@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": - version: 1.11.6 - resolution: "@webassemblyjs/ast@npm:1.11.6" - dependencies: - "@webassemblyjs/helper-numbers": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - checksum: 10/4c1303971ccd5188731c9b01073d9738333f37b946a48c4e049f7b788706cdc66f473cd6f3e791423a94c52a3b2230d070007930d29bccbce238b23835839f3c +"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-android-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.1" + conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" - checksum: 10/29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 +"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.1" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@webassemblyjs/helper-api-error@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" - checksum: 10/e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f +"@unrs/resolver-binding-darwin-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.1" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@webassemblyjs/helper-buffer@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-buffer@npm:1.11.6" - checksum: 10/b14d0573bf680d22b2522e8a341ec451fddd645d1f9c6bd9012ccb7e587a2973b86ab7b89fe91e1c79939ba96095f503af04369a3b356c8023c13a5893221644 +"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.1" + conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@webassemblyjs/helper-numbers@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" - dependencies: - "@webassemblyjs/floating-point-hex-parser": "npm:1.11.6" - "@webassemblyjs/helper-api-error": "npm:1.11.6" - "@xtuc/long": "npm:4.2.2" - checksum: 10/9ffd258ad809402688a490fdef1fd02222f20cdfe191c895ac215a331343292164e5033dbc0347f0f76f2447865c0b5c2d2e3304ee948d44f7aa27857028fd08 +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1" + conditions: os=linux & cpu=arm languageName: node linkType: hard -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" - checksum: 10/4ebf03e9c1941288c10e94e0f813f413f972bfaa1f09be2cc2e5577f300430906b61aa24d52f5ef2f894e8e24e61c6f7c39871d7e3d98bc69460e1b8e00bb20b +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1" + conditions: os=linux & cpu=arm languageName: node linkType: hard -"@webassemblyjs/helper-wasm-section@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-buffer": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/wasm-gen": "npm:1.11.6" - checksum: 10/38a615ab3d55f953daaf78b69f145e2cc1ff5288ab71715d1a164408b735c643a87acd7e7ba3e9633c5dd965439a45bb580266b05a06b22ff678d6c013514108 +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1" + conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@webassemblyjs/ieee754@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/ieee754@npm:1.11.6" - dependencies: - "@xtuc/ieee754": "npm:^1.2.0" - checksum: 10/13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de +"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1" + conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@webassemblyjs/leb128@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/leb128@npm:1.11.6" - dependencies: - "@xtuc/long": "npm:4.2.2" - checksum: 10/ec3b72db0e7ce7908fe08ec24395bfc97db486063824c0edc580f0973a4cfbadf30529569d9c7db663a56513e45b94299cca03be9e1992ea3308bb0744164f3d +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1" + conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@webassemblyjs/utf8@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/utf8@npm:1.11.6" - checksum: 10/361a537bd604101b320a5604c3c96d1038d83166f1b9fb86cedadc7e81bae54c3785ae5d90bf5b1842f7da08194ccaf0f44a64fcca0cbbd6afe1a166196986d6 +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1" + conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@webassemblyjs/wasm-edit@npm:^1.11.5": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-edit@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-buffer": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/helper-wasm-section": "npm:1.11.6" - "@webassemblyjs/wasm-gen": "npm:1.11.6" - "@webassemblyjs/wasm-opt": "npm:1.11.6" - "@webassemblyjs/wasm-parser": "npm:1.11.6" - "@webassemblyjs/wast-printer": "npm:1.11.6" - checksum: 10/c168bfc6d0cdd371345f36f95a4766d098a96ccc1257e6a6e3a74d987a5c4f2ddd2244a6aecfa5d032a47d74ed2c3b579e00a314d31e4a0b76ad35b31cdfa162 +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1" + conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@webassemblyjs/wasm-gen@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-gen@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/ieee754": "npm:1.11.6" - "@webassemblyjs/leb128": "npm:1.11.6" - "@webassemblyjs/utf8": "npm:1.11.6" - checksum: 10/f91903506ce50763592863df5d80ffee80f71a1994a882a64cdb83b5e44002c715f1ef1727d8ccb0692d066af34d3d4f5e59e8f7a4e2eeb2b7c32692ac44e363 +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1" + conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@webassemblyjs/wasm-opt@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-opt@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-buffer": "npm:1.11.6" - "@webassemblyjs/wasm-gen": "npm:1.11.6" - "@webassemblyjs/wasm-parser": "npm:1.11.6" - checksum: 10/e0cfeea381ecbbd0ca1616e9a08974acfe7fc81f8a16f9f2d39f565dc51784dd7043710b6e972f9968692d273e32486b9a8a82ca178d4bd520b2d5e2cf28234d +"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1" + conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@webassemblyjs/wasm-parser@npm:1.11.6, @webassemblyjs/wasm-parser@npm:^1.11.5": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-parser@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-api-error": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/ieee754": "npm:1.11.6" - "@webassemblyjs/leb128": "npm:1.11.6" - "@webassemblyjs/utf8": "npm:1.11.6" - checksum: 10/6995e0b7b8ebc52b381459c6a555f87763dcd3975c4a112407682551e1c73308db7af23385972a253dceb5af94e76f9c97cb861e8239b5ed1c3e79b95d8e2097 +"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.1" + conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@webassemblyjs/wast-printer@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/wast-printer@npm:1.11.6" +"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.1" dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@xtuc/long": "npm:4.2.2" - checksum: 10/fd45fd0d693141d678cc2f6ff2d3a0d7a8884acb1c92fb0c63cf43b7978e9560be04118b12792638a39dd185640453510229e736f3049037d0c361f6435f2d5f + "@napi-rs/wasm-runtime": "npm:^0.2.11" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10/f83e6abe38057f5d87c1fb356513a371a8b43c9b87657f2790741a66b1ef8ecf958d1391bc42f27c5fb33f58ab8286a38ea849fdd21f433cd4df1307424bab45 + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10/e866ec8433f4a70baa511df5e8f2ebcd6c24f4e2cc6274c7c5aabe2bcce3459ea4680e0f35d450e1f3602acf3913b6b8e4f15069c8cfd34ae8609fb9a7d01795 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10/48b5df7fd3095bb252f59a139fe2cbd999a62ac9b488123e9a0da3906ad8a2f2da7b2eb21d328c01a90da987380928706395c2897d1f3ed9e2125b6d75a920d0 + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10/9690afeafa5e765a34620aa6216e9d40f9126d4e37e9726a2594bf60cab6b211ef20ab6670fd3c4449dd4a3497e69e49b2b725c8da0fb213208c7f45f15f5d5b + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10/e4c7d0b09811e1cda8eec644a022b560b28f4e974f50195375ccd007df5ee48a922a6dcff5ac40b6a8ec850d56d0ea6419318eee49fec7819ede14e90417a6a4 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10/3edd191fff7296df1ef3b023bdbe6cb5ea668f6386fd197ccfce46015c6f2a8cc9763cfb86503a0b94973ad27996645afff2252ee39a236513833259a47af6ed + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10/6b73874f906532512371181d7088460f767966f26309e836060c5a8e4e4bfe6d523fb5f4c034b34aa22ebb1192815f95f0e264298769485c1f0980fdd63ae0ce + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10/d7e3520baa37a7309fa7db4d73d69fb869878853b1ebd4b168821bd03fcc4c0e1669c06231315b0039035d9a7a462e53de3ad982da4a426a4b0743b5888e8673 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10/3a10542c86807061ec3230bac8ee732289c852b6bceb4b88ebd521a12fbcecec7c432848284b298154f28619e2746efbed19d6904aef06c49ef20a0b85f650cf + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10/27885e5d19f339501feb210867d69613f281eda695ac508f04d69fa3398133d05b6870969c0242b054dc05420ed1cc49a64dea4fe0588c18d211cddb0117cc54 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10/c62c50eadcf80876713f8c9f24106b18cf208160ab842fcb92060fd78c37bf37e7fcf0b7cbf1afc05d230277c2ce0f3f728432082c472dd1293e184a95f9dbdd + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10/6085166b0987d3031355fe17a4f9ef0f412e08098d95454059aced2bd72a4c3df2bc099fa4d32d640551fc3eca1ac1a997b44432e46dc9d84642688e42c17ed4 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10/fa5d1ef8d2156e7390927f938f513b7fb4440dd6804b3d6c8622b7b1cf25a3abf1a5809f615896d4918e04b27b52bc3cbcf18faf2d563cb563ae0a9204a492db + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10/07d9805fda88a893c984ed93d5a772d20d671e9731358ab61c6c1af8e0e58d1c42fc230c18974dfddebc9d2dd7775d514ba4d445e70080b16478b4b16c39c7d9 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10/cef09aad2fcd291bfcf9efdae2ea1e961a1ba0f925d1d9dcdd8c746d32fbaf431b6d26a0241699c0e39f82139018aa720b4ceb84ac6f4c78f13072747480db69 languageName: node linkType: hard @@ -4969,7 +5437,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": +"accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -4989,12 +5457,12 @@ __metadata: languageName: node linkType: hard -"acorn-import-assertions@npm:^1.9.0": - version: 1.9.0 - resolution: "acorn-import-assertions@npm:1.9.0" +"acorn-import-phases@npm:^1.0.3": + version: 1.0.4 + resolution: "acorn-import-phases@npm:1.0.4" peerDependencies: - acorn: ^8 - checksum: 10/af8dd58f6b0c6a43e85849744534b99f2133835c6fcdabda9eea27d0a0da625a0d323c4793ba7cb25cf4507609d0f747c210ccc2fc9b5866de04b0e59c9c5617 + acorn: ^8.14.0 + checksum: 10/471050ac7d9b61909c837b426de9eeef2958997f6277ad7dea88d5894fd9b3245d8ed4a225c2ca44f814dbb20688009db7a80e525e8196fc9e98c5285b66161d languageName: node linkType: hard @@ -5015,9 +5483,11 @@ __metadata: linkType: hard "acorn-walk@npm:^8.0.0": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 10/e69f7234f2adfeb16db3671429a7c80894105bd7534cb2032acf01bb26e6a847952d11a062d071420b43f8d82e33d2e57f26fe87d9cce0853e8143d8910ff1de + version: 8.3.5 + resolution: "acorn-walk@npm:8.3.5" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10/f52a158a1c1f00c82702c7eb9b8ae8aad79748a7689241dcc2d797dce680f1dcb15c78f312f687eeacdfb3a4cac4b87d04af470f0201bd56c6661fca6f94b195 languageName: node linkType: hard @@ -5030,12 +5500,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.5.0, acorn@npm:^8.7.1, acorn@npm:^8.8.2": - version: 8.10.0 - resolution: "acorn@npm:8.10.0" +"acorn@npm:^8.0.4, acorn@npm:^8.11.0, acorn@npm:^8.15.0, acorn@npm:^8.16.0, acorn@npm:^8.5.0": + version: 8.16.0 + resolution: "acorn@npm:8.16.0" bin: acorn: bin/acorn - checksum: 10/522310c20fdc3c271caed3caf0f06c51d61cb42267279566edd1d58e83dbc12eebdafaab666a0f0be1b7ad04af9c6bc2a6f478690a9e6391c3c8b165ada917dd + checksum: 10/690c673bb4d61b38ef82795fab58526471ad7f7e67c0e40c4ff1e10ecd80ce5312554ef633c9995bfc4e6d170cef165711f9ca9e49040b62c0c66fbf2dd3df2b languageName: node linkType: hard @@ -5107,30 +5577,30 @@ __metadata: linkType: hard "ajv@npm:^6.10.0, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" + version: 6.14.0 + resolution: "ajv@npm:6.14.0" dependencies: fast-deep-equal: "npm:^3.1.1" fast-json-stable-stringify: "npm:^2.0.0" json-schema-traverse: "npm:^0.4.1" uri-js: "npm:^4.2.2" - checksum: 10/48d6ad21138d12eb4d16d878d630079a2bda25a04e745c07846a4ad768319533031e28872a9b3c5790fa1ec41aabdf2abed30a56e5a03ebc2cf92184b8ee306c + checksum: 10/c71f14dd2b6f2535d043f74019c8169f7aeb1106bafbb741af96f34fdbf932255c919ddd46344043d03b62ea0ccb319f83667ec5eedf612393f29054fe5ce4a5 languageName: node linkType: hard "ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.9.0": - version: 8.12.0 - resolution: "ajv@npm:8.12.0" + version: 8.18.0 + resolution: "ajv@npm:8.18.0" dependencies: - fast-deep-equal: "npm:^3.1.1" + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" json-schema-traverse: "npm:^1.0.0" require-from-string: "npm:^2.0.2" - uri-js: "npm:^4.2.2" - checksum: 10/b406f3b79b5756ac53bfe2c20852471b08e122bc1ee4cde08ae4d6a800574d9cd78d60c81c69c63ff81e4da7cd0b638fafbb2303ae580d49cf1600b9059efb85 + checksum: 10/bfed9de827a2b27c6d4084324eda76a4e32bdde27410b3e9b81d06e6f8f5c78370fc6b93fe1d869f1939ff1d7c4ae8896960995acb8425e3e9288c8884247c48 languageName: node linkType: hard -"algoliasearch-helper@npm:3.14.0, algoliasearch-helper@npm:^3.10.0": +"algoliasearch-helper@npm:3.14.0": version: 3.14.0 resolution: "algoliasearch-helper@npm:3.14.0" dependencies: @@ -5141,25 +5611,59 @@ __metadata: languageName: node linkType: hard -"algoliasearch@npm:^4.0.0, algoliasearch@npm:^4.13.1": - version: 4.19.1 - resolution: "algoliasearch@npm:4.19.1" +"algoliasearch-helper@npm:^3.10.0": + version: 3.28.0 + resolution: "algoliasearch-helper@npm:3.28.0" dependencies: - "@algolia/cache-browser-local-storage": "npm:4.19.1" - "@algolia/cache-common": "npm:4.19.1" - "@algolia/cache-in-memory": "npm:4.19.1" - "@algolia/client-account": "npm:4.19.1" - "@algolia/client-analytics": "npm:4.19.1" - "@algolia/client-common": "npm:4.19.1" - "@algolia/client-personalization": "npm:4.19.1" - "@algolia/client-search": "npm:4.19.1" - "@algolia/logger-common": "npm:4.19.1" - "@algolia/logger-console": "npm:4.19.1" - "@algolia/requester-browser-xhr": "npm:4.19.1" - "@algolia/requester-common": "npm:4.19.1" - "@algolia/requester-node-http": "npm:4.19.1" - "@algolia/transporter": "npm:4.19.1" - checksum: 10/9b9eccdde6788698cad5f2bd9c25e1245de6eef9400440ee4b0aebb84d8ad72838a8ec0c1582c0848cda0c362bbde65a12c33d81578eb4102a6298243368e4b3 + "@algolia/events": "npm:^4.0.1" + peerDependencies: + algoliasearch: ">= 3.1 < 6" + checksum: 10/63a667ce2dbd3ce3db337df1b588b8a1575252d661e8d05bbf85734cbf3188434a14e9cb6f3e9398f9a2bcab5d5d40a3c8c5b594b6ef2391bb24100230bab51b + languageName: node + linkType: hard + +"algoliasearch@npm:^4.13.1": + version: 4.27.0 + resolution: "algoliasearch@npm:4.27.0" + dependencies: + "@algolia/cache-browser-local-storage": "npm:4.27.0" + "@algolia/cache-common": "npm:4.27.0" + "@algolia/cache-in-memory": "npm:4.27.0" + "@algolia/client-account": "npm:4.27.0" + "@algolia/client-analytics": "npm:4.27.0" + "@algolia/client-common": "npm:4.27.0" + "@algolia/client-personalization": "npm:4.27.0" + "@algolia/client-search": "npm:4.27.0" + "@algolia/logger-common": "npm:4.27.0" + "@algolia/logger-console": "npm:4.27.0" + "@algolia/recommend": "npm:4.27.0" + "@algolia/requester-browser-xhr": "npm:4.27.0" + "@algolia/requester-common": "npm:4.27.0" + "@algolia/requester-node-http": "npm:4.27.0" + "@algolia/transporter": "npm:4.27.0" + checksum: 10/8c791f62dc646f25e0381aec18e3df4464b4f2ff7baa0bb9a63dac34799a267572db6d6f9247242b02e2c05a76f3194d2fcbd4a27c9513f2d1bf34b458282c04 + languageName: node + linkType: hard + +"algoliasearch@npm:^5.14.2": + version: 5.49.2 + resolution: "algoliasearch@npm:5.49.2" + dependencies: + "@algolia/abtesting": "npm:1.15.2" + "@algolia/client-abtesting": "npm:5.49.2" + "@algolia/client-analytics": "npm:5.49.2" + "@algolia/client-common": "npm:5.49.2" + "@algolia/client-insights": "npm:5.49.2" + "@algolia/client-personalization": "npm:5.49.2" + "@algolia/client-query-suggestions": "npm:5.49.2" + "@algolia/client-search": "npm:5.49.2" + "@algolia/ingestion": "npm:1.49.2" + "@algolia/monitoring": "npm:1.49.2" + "@algolia/recommend": "npm:5.49.2" + "@algolia/requester-browser-xhr": "npm:5.49.2" + "@algolia/requester-fetch": "npm:5.49.2" + "@algolia/requester-node-http": "npm:5.49.2" + checksum: 10/92ecf377c0250eac23160dd00d68536776ac73df0cdb18cecb3268b99efd3b975cbd34ef55c9d1b4da18e15533357984ef6a6110f6a7170dddabfa37a01482d2 languageName: node linkType: hard @@ -5204,10 +5708,10 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10/1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 +"ansi-regex@npm:^6.2.2": + version: 6.2.2 + resolution: "ansi-regex@npm:6.2.2" + checksum: 10/9b17ce2c6daecc75bcd5966b9ad672c23b184dc3ed9bf3c98a0702f0d2f736c15c10d461913568f2cf527a5e64291c7473358885dd493305c84a1cfed66ba94f languageName: node linkType: hard @@ -5237,63 +5741,63 @@ __metadata: linkType: hard "ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: 10/70fdf883b704d17a5dfc9cde206e698c16bcd74e7f196ab821511651aee4f9f76c9514bdfa6ca3a27b5e49138b89cb222a28caf3afe4567570139577f991df32 + version: 6.2.3 + resolution: "ansi-styles@npm:6.2.3" + checksum: 10/c49dad7639f3e48859bd51824c93b9eb0db628afc243c51c3dd2410c4a15ede1a83881c6c7341aa2b159c4f90c11befb38f2ba848c07c66c9f9de4bcd7cb9f30 languageName: node linkType: hard "antd@npm:^4.20.2": - version: 4.24.13 - resolution: "antd@npm:4.24.13" + version: 4.24.16 + resolution: "antd@npm:4.24.16" dependencies: "@ant-design/colors": "npm:^6.0.0" - "@ant-design/icons": "npm:^4.7.0" - "@ant-design/react-slick": "npm:~1.0.0" + "@ant-design/icons": "npm:^4.8.2" + "@ant-design/react-slick": "npm:~1.0.2" "@babel/runtime": "npm:^7.18.3" - "@ctrl/tinycolor": "npm:^3.4.0" + "@ctrl/tinycolor": "npm:^3.6.1" classnames: "npm:^2.2.6" copy-to-clipboard: "npm:^3.2.0" lodash: "npm:^4.17.21" moment: "npm:^2.29.2" - rc-cascader: "npm:~3.7.0" - rc-checkbox: "npm:~3.0.0" + rc-cascader: "npm:~3.7.3" + rc-checkbox: "npm:~3.0.1" rc-collapse: "npm:~3.4.2" rc-dialog: "npm:~9.0.2" rc-drawer: "npm:~6.3.0" - rc-dropdown: "npm:~4.0.0" - rc-field-form: "npm:~1.34.0" + rc-dropdown: "npm:~4.0.1" + rc-field-form: "npm:~1.38.2" rc-image: "npm:~5.13.0" rc-input: "npm:~0.1.4" - rc-input-number: "npm:~7.3.9" + rc-input-number: "npm:~7.3.11" rc-mentions: "npm:~1.13.1" - rc-menu: "npm:~9.8.0" - rc-motion: "npm:^2.6.1" - rc-notification: "npm:~4.6.0" + rc-menu: "npm:~9.8.4" + rc-motion: "npm:^2.9.0" + rc-notification: "npm:~4.6.1" rc-pagination: "npm:~3.2.0" - rc-picker: "npm:~2.7.0" - rc-progress: "npm:~3.4.1" - rc-rate: "npm:~2.9.0" - rc-resize-observer: "npm:^1.2.0" - rc-segmented: "npm:~2.1.0" - rc-select: "npm:~14.1.17" - rc-slider: "npm:~10.0.0" - rc-steps: "npm:~5.0.0-alpha.2" - rc-switch: "npm:~3.2.0" + rc-picker: "npm:~2.7.6" + rc-progress: "npm:~3.4.2" + rc-rate: "npm:~2.9.3" + rc-resize-observer: "npm:^1.3.1" + rc-segmented: "npm:~2.3.0" + rc-select: "npm:~14.1.18" + rc-slider: "npm:~10.0.1" + rc-steps: "npm:~5.0.0" + rc-switch: "npm:~3.2.2" rc-table: "npm:~7.26.0" - rc-tabs: "npm:~12.5.6" - rc-textarea: "npm:~0.4.5" - rc-tooltip: "npm:~5.2.0" - rc-tree: "npm:~5.7.0" - rc-tree-select: "npm:~5.5.0" - rc-trigger: "npm:^5.2.10" - rc-upload: "npm:~4.3.0" - rc-util: "npm:^5.22.5" + rc-tabs: "npm:~12.5.10" + rc-textarea: "npm:~0.4.7" + rc-tooltip: "npm:~5.2.2" + rc-tree: "npm:~5.7.12" + rc-tree-select: "npm:~5.5.5" + rc-trigger: "npm:^5.3.4" + rc-upload: "npm:~4.3.6" + rc-util: "npm:^5.37.0" scroll-into-view-if-needed: "npm:^2.2.25" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/9e04a6e5cdd530937137dea8b4c3dfcde7b56f46a8b36e6ad7340882add8869063beb1bb1ef9f78f029cb1b6ae8d061394cd5afd3797119f6d283ea378b48046 + checksum: 10/22278e81d05a9e0b0cd709fa768680c822fdfff54f1aa9b456a1c972efe6666f76449c2796d66c08b3d887fc6f494f0be825c18bcae650706aa3a59302267302 languageName: node linkType: hard @@ -5346,22 +5850,20 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.1.3": - version: 5.3.0 - resolution: "aria-query@npm:5.3.0" - dependencies: - dequal: "npm:^2.0.3" - checksum: 10/c3e1ed127cc6886fea4732e97dd6d3c3938e64180803acfb9df8955517c4943760746ffaf4020ce8f7ffaa7556a3b5f85c3769a1f5ca74a1288e02d042f9ae4e +"aria-query@npm:^5.3.2": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: 10/b2fe9bc98bd401bc322ccb99717c1ae2aaf53ea0d468d6e7aebdc02fac736e4a99b46971ee05b783b08ade23c675b2d8b60e4a1222a95f6e27bc4d2a0bfdcc03 languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "array-buffer-byte-length@npm:1.0.0" +"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "array-buffer-byte-length@npm:1.0.2" dependencies: - call-bind: "npm:^1.0.2" - is-array-buffer: "npm:^3.0.1" - checksum: 10/044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + call-bound: "npm:^1.0.3" + is-array-buffer: "npm:^3.0.5" + checksum: 10/0ae3786195c3211b423e5be8dd93357870e6fb66357d81da968c2c39ef43583ef6eece1f9cb1caccdae4806739c65dea832b44b8593414313cd76a89795fca63 languageName: node linkType: hard @@ -5372,23 +5874,19 @@ __metadata: languageName: node linkType: hard -"array-flatten@npm:^2.1.2": - version: 2.1.2 - resolution: "array-flatten@npm:2.1.2" - checksum: 10/e8988aac1fbfcdaae343d08c9a06a6fddd2c6141721eeeea45c3cf523bf4431d29a46602929455ed548c7a3e0769928cdc630405427297e7081bd118fdec9262 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.6": - version: 3.1.6 - resolution: "array-includes@npm:3.1.6" +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8, array-includes@npm:^3.1.9": + version: 3.1.9 + resolution: "array-includes@npm:3.1.9" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - get-intrinsic: "npm:^1.1.3" - is-string: "npm:^1.0.7" - checksum: 10/a7168bd16821ec76b95a8f50f73076577a7cbd6c762452043d2b978c8a5fa4afe4f98a025d6f1d5c971b8d0b440b4ee73f6a57fc45382c858b8e17c275015428 + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.24.0" + es-object-atoms: "npm:^1.1.1" + get-intrinsic: "npm:^1.3.0" + is-string: "npm:^1.1.1" + math-intrinsics: "npm:^1.1.0" + checksum: 10/8bfe9a58df74f326b4a76b04ee05c13d871759e888b4ee8f013145297cf5eb3c02cfa216067ebdaac5d74eb9763ac5cad77cdf2773b8ab475833701e032173aa languageName: node linkType: hard @@ -5406,67 +5904,84 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.2": - version: 1.2.2 - resolution: "array.prototype.findlastindex@npm:1.2.2" +"array.prototype.findlast@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlast@npm:1.2.5" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - es-shim-unscopables: "npm:^1.0.0" - get-intrinsic: "npm:^1.1.3" - checksum: 10/a97b6dad48ac27bccb1a062c1d9dec6726bcedf34d6be2ee7b9ed9a8db519df6d278b8011c2d6c49ed70802488f23ab10c0142606ef58e48dbc0a035a810318e + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10/7dffcc665aa965718ad6de7e17ac50df0c5e38798c0a5bf9340cf24feb8594df6ec6f3fcbe714c1577728a1b18b5704b15669474b27bceeca91ef06ce2a23c31 languageName: node linkType: hard -"array.prototype.flat@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flat@npm:1.3.1" +"array.prototype.findlastindex@npm:^1.2.6": + version: 1.2.6 + resolution: "array.prototype.findlastindex@npm:1.2.6" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - es-shim-unscopables: "npm:^1.0.0" - checksum: 10/787bd3e93887b1c12cfed018864cb819a4fe361728d4aadc7b401b0811cf923121881cca369557432529ffa803a463f01e37eaa4b52e4c13bc574c438cd615cb + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.9" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + es-shim-unscopables: "npm:^1.1.0" + checksum: 10/5ddb6420e820bef6ddfdcc08ce780d0fd5e627e97457919c27e32359916de5a11ce12f7c55073555e503856618eaaa70845d6ca11dcba724766f38eb1c22f7a2 languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flatmap@npm:1.3.1" +"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.3": + version: 1.3.3 + resolution: "array.prototype.flat@npm:1.3.3" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - es-shim-unscopables: "npm:^1.0.0" - checksum: 10/f1f3d8e0610afce06a8622295b4843507dfc2fbbd2c2b2a8d541d9f42871747393c3099d630a3f8266ca086b97b089687db64cd86b6eb7e270ebc8f767eec9fc + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10/f9b992fa0775d8f7c97abc91eb7f7b2f0ed8430dd9aeb9fdc2967ac4760cdd7fc2ef7ead6528fef40c7261e4d790e117808ce0d3e7e89e91514d4963a531cd01 languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.1": - version: 1.1.1 - resolution: "array.prototype.tosorted@npm:1.1.1" +"array.prototype.flatmap@npm:^1.3.2, array.prototype.flatmap@npm:^1.3.3": + version: 1.3.3 + resolution: "array.prototype.flatmap@npm:1.3.3" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - es-shim-unscopables: "npm:^1.0.0" - get-intrinsic: "npm:^1.1.3" - checksum: 10/23e86074d0dda9260aaa137ec45ae5a8196916ee3f256e41665381f120fdb5921bd84ad93eeba8d0234e5cd355093049585167ba2307fde340e5cee15b12415d + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10/473534573aa4b37b1d80705d0ce642f5933cccf5617c9f3e8a56686e9815ba93d469138e86a1f25d2fe8af999c3d24f54d703ec1fc2db2e6778d46d0f4ac951e languageName: node linkType: hard -"arraybuffer.prototype.slice@npm:^1.0.1": - version: 1.0.1 - resolution: "arraybuffer.prototype.slice@npm:1.0.1" +"array.prototype.tosorted@npm:^1.1.4": + version: 1.1.4 + resolution: "array.prototype.tosorted@npm:1.1.4" dependencies: - array-buffer-byte-length: "npm:^1.0.0" - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - get-intrinsic: "npm:^1.2.1" - is-array-buffer: "npm:^3.0.2" - is-shared-array-buffer: "npm:^1.0.2" - checksum: 10/e3e9b2a3e988ebfeddce4c7e8f69df730c9e48cb04b0d40ff0874ce3d86b3d1339dd520ffde5e39c02610bc172ecfbd4bc93324b1cabd9554c44a56b131ce0ce + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.3" + es-errors: "npm:^1.3.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10/874694e5d50e138894ff5b853e639c29b0aa42bbd355acda8e8e9cd337f1c80565f21edc15e8c727fa4c0877fd9d8783c575809e440cc4d2d19acaa048bf967d + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.4": + version: 1.0.4 + resolution: "arraybuffer.prototype.slice@npm:1.0.4" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + is-array-buffer: "npm:^3.0.4" + checksum: 10/4821ebdfe7d699f910c7f09bc9fa996f09b96b80bccb4f5dd4b59deae582f6ad6e505ecef6376f8beac1eda06df2dbc89b70e82835d104d6fcabd33c1aed1ae9 languageName: node linkType: hard @@ -5477,10 +5992,10 @@ __metadata: languageName: node linkType: hard -"ast-types-flow@npm:^0.0.7": - version: 0.0.7 - resolution: "ast-types-flow@npm:0.0.7" - checksum: 10/663b90e99b56ee2d7f736a6b6fff8b3c5404f28fa1860bb8d83ee5a9bff9e687520d0d6d9db6edff5a34fd4d3c0c11a3beb1cf75e43c9a880cca04371cc99808 +"ast-types-flow@npm:^0.0.8": + version: 0.0.8 + resolution: "ast-types-flow@npm:0.0.8" + checksum: 10/85a1c24af4707871c27cfe456bd2ff7fcbe678f3d1c878ac968c9557735a171a17bdcc8c8f903ceab3fc3c49d5b3da2194e6ab0a6be7fec0e133fa028f21ba1b languageName: node linkType: hard @@ -5491,6 +6006,13 @@ __metadata: languageName: node linkType: hard +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10/1a09379937d846f0ce7614e75071c12826945d4e417db634156bf0e4673c495989302f52186dfa9767a1d9181794554717badd193ca2bbab046ef1da741d8efd + languageName: node + linkType: hard + "async-validator@npm:^4.1.0": version: 4.2.5 resolution: "async-validator@npm:4.2.5" @@ -5498,15 +6020,6 @@ __metadata: languageName: node linkType: hard -"asynciterator.prototype@npm:^1.0.0": - version: 1.0.0 - resolution: "asynciterator.prototype@npm:1.0.0" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10/e8ebfd9493ac651cf9b4165e9d64030b3da1d17181bb1963627b59e240cdaf021d9b59d44b827dc1dde4e22387ec04c2d0f8720cf58a1c282e34e40cc12721b3 - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -5522,34 +6035,35 @@ __metadata: linkType: hard "autoprefixer@npm:^10.4.12, autoprefixer@npm:^10.4.7": - version: 10.4.15 - resolution: "autoprefixer@npm:10.4.15" + version: 10.4.27 + resolution: "autoprefixer@npm:10.4.27" dependencies: - browserslist: "npm:^4.21.10" - caniuse-lite: "npm:^1.0.30001520" - fraction.js: "npm:^4.2.0" - normalize-range: "npm:^0.1.2" - picocolors: "npm:^1.0.0" + browserslist: "npm:^4.28.1" + caniuse-lite: "npm:^1.0.30001774" + fraction.js: "npm:^5.3.4" + picocolors: "npm:^1.1.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.1.0 bin: autoprefixer: bin/autoprefixer - checksum: 10/99ab82461d33bb79318dbf26c76d207eab8bf98680d8981aeddf7af4208fd57579b4c68dcf576b1d1baba8bd5410665b9406eac468f8119bd42e11b9ff0074b7 + checksum: 10/5dd9ec57cc1c2af556e10d6c76d082f66d23275671b8b125f6c1d33ba7d9a984d80d3fb4fab7b5e092ac1a34f3aa5a131a392f131f5924029c3cb82faea15b0c languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 10/4d4d5e86ea0425696f40717882f66a570647b94ac8d273ddc7549a9b61e5da099e149bf431530ccbd776bd74e02039eb8b5edf426e3e2211ee61af16698a9064 +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10/6c9da3a66caddd83c875010a1ca8ef11eac02ba15fb592dc9418b2b5e7b77b645fa7729380a92d9835c2f05f2ca1b6251f39b993e0feb3f1517c74fa1af02cab languageName: node linkType: hard -"axe-core@npm:^4.6.2": - version: 4.7.2 - resolution: "axe-core@npm:4.7.2" - checksum: 10/1b94fcbe203296fc7174992a3d70dbcd477d88b933afa045aaffa1704fe63d8da8945e4b38fc576f9c7384abeb353e2d6607ab54d25b5c90b255ef2244bda29a +"axe-core@npm:^4.10.0": + version: 4.11.1 + resolution: "axe-core@npm:4.11.1" + checksum: 10/bbc8e8959258a229b92fbaa73437050825579815051cac7b0fdbb6752946fea226e403bfeeef3d60d712477bdd4c01afdc8455f27c3d85e4251df88b032b6250 languageName: node linkType: hard @@ -5562,12 +6076,10 @@ __metadata: languageName: node linkType: hard -"axobject-query@npm:^3.1.1": - version: 3.2.1 - resolution: "axobject-query@npm:3.2.1" - dependencies: - dequal: "npm:^2.0.3" - checksum: 10/675af2548ed4ece75ad6d50cc0473cfdec7579eac77ec9861e7088d03ffb171aa697b70d2877423bee2ce16460ef62c698c6442a105612cc015719e8ea06b0bd +"axobject-query@npm:^4.1.0": + version: 4.1.0 + resolution: "axobject-query@npm:4.1.0" + checksum: 10/e275dea9b673f71170d914f2d2a18be5d57d8d29717b629e7fedd907dcc2ebdc7a37803ff975874810bd423f222f299c020d28fde40a146f537448bf6bfecb6e languageName: node linkType: hard @@ -5589,17 +6101,17 @@ __metadata: linkType: hard "babel-loader@npm:^8.2.5": - version: 8.3.0 - resolution: "babel-loader@npm:8.3.0" + version: 8.4.1 + resolution: "babel-loader@npm:8.4.1" dependencies: find-cache-dir: "npm:^3.3.1" - loader-utils: "npm:^2.0.0" + loader-utils: "npm:^2.0.4" make-dir: "npm:^3.1.0" schema-utils: "npm:^2.6.5" peerDependencies: "@babel/core": ^7.0.0 webpack: ">=2" - checksum: 10/e775e96f605f10d68adc693403ccda2470e856cc52e6017f3621c17dade003d0fc53facfce7b4ada02273a1c0a6a48167f798cc81b73110585d74bf890b39bd5 + checksum: 10/b54ae3796a351e5b5186cd7a8d53a902b679a33a187424c2858e385850142139a4343524c9fddd0eb4356250e51e67e47a9efeef79d01e132976c406212cba1d languageName: node linkType: hard @@ -5669,61 +6181,76 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.4.5": - version: 0.4.5 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.5" +"babel-plugin-polyfill-corejs2@npm:^0.4.14, babel-plugin-polyfill-corejs2@npm:^0.4.15": + version: 0.4.16 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.16" dependencies: - "@babel/compat-data": "npm:^7.22.6" - "@babel/helper-define-polyfill-provider": "npm:^0.4.2" + "@babel/compat-data": "npm:^7.28.6" + "@babel/helper-define-polyfill-provider": "npm:^0.6.7" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/75552d49f7d874e2e9a082d19e3ce9cc95998abadbdc589e5af7de64f5088059863eb194989cfcfefc99623925c46e273bd49333f6aae58f6fff59696279132b + checksum: 10/0a2e1e7c8bfce0db7062421aabf0c4c874ee4b14e717ff0eeed73f2714ad136bb909efd445bc54f075ecf2e2a32160ab220de3c2d08382e169cbaa8a6108bd13 languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.8.3": - version: 0.8.3 - resolution: "babel-plugin-polyfill-corejs3@npm:0.8.3" +"babel-plugin-polyfill-corejs3@npm:^0.13.0": + version: 0.13.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.4.2" - core-js-compat: "npm:^3.31.0" + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + core-js-compat: "npm:^3.43.0" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/95e57300341c52b4954b8c8d9d7dd6f9a5bd26f3ac6f67180f146398e5ea5ec5a8496a79d222e147a3e61b698ce4176677a194397ac9887bfa8072d2d7e4e29c + checksum: 10/aa36f9a09521404dd0569a4cbd5f88aa4b9abff59508749abde5d09d66c746012fb94ed1e6e2c8be3710939a2a4c6293ee3be889125d7611c93e5897d9e5babd languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.5.2": - version: 0.5.2 - resolution: "babel-plugin-polyfill-regenerator@npm:0.5.2" +"babel-plugin-polyfill-corejs3@npm:^0.14.0": + version: 0.14.1 + resolution: "babel-plugin-polyfill-corejs3@npm:0.14.1" dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.4.2" + "@babel/helper-define-polyfill-provider": "npm:^0.6.7" + core-js-compat: "npm:^3.48.0" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/d962200f604016a9a09bc9b4aaf60a3db7af876bb65bcefaeac04d44ac9d9ec4037cf24ce117760cc141d7046b6394c7eb0320ba9665cb4a2ee64df2be187c93 + checksum: 10/c92b118f824026f27423610f690609eba8a2b9a178082f5e160a9fe146d858a8153a2c568de3b0409ddb0190d680c73d79d911bc075ce72c79f06b88e022a565 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.5, babel-plugin-polyfill-regenerator@npm:^0.6.6": + version: 0.6.7 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.7" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.7" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10/40640a7caa6a7af07fcbedda446c00c057096dc12c142d304cc987af6a2611ee99a9693abdb7c98eccff6889fe9ef352981add970435805f85b9664998bbd416 languageName: node linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" + version: 1.2.0 + resolution: "babel-preset-current-node-syntax@npm:1.2.0" dependencies: "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-bigint": "npm:^7.8.3" - "@babel/plugin-syntax-class-properties": "npm:^7.8.3" - "@babel/plugin-syntax-import-meta": "npm:^7.8.3" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-meta": "npm:^7.10.4" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-top-level-await": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/94561959cb12bfa80867c9eeeace7c3d48d61707d33e55b4c3fdbe82fc745913eb2dbfafca62aef297421b38aadcb58550e5943f50fbcebbeefd70ce2bed4b74 + "@babel/core": ^7.0.0 || ^8.0.0-0 + checksum: 10/3608fa671cfa46364ea6ec704b8fcdd7514b7b70e6ec09b1199e13ae73ed346c51d5ce2cb6d4d5b295f6a3f2cad1fdeec2308aa9e037002dd7c929194cc838ea languageName: node linkType: hard @@ -5754,9 +6281,9 @@ __metadata: linkType: hard "balanced-match@npm:^4.0.2": - version: 4.0.3 - resolution: "balanced-match@npm:4.0.3" - checksum: 10/e9e2177f1eb7db0af2375715e6f992f15d41518921e14f5029de50766ff1b3da824e47e1d5492493e9bb7c743b827e42546cbc260a055b7086e45f54b2b152b9 + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: 10/fb07bb66a0959c2843fc055838047e2a95ccebb837c519614afb067ebfdf2fa967ca8d712c35ced07f2cd26fc6f07964230b094891315ad74f11eba3d53178a0 languageName: node linkType: hard @@ -5767,6 +6294,15 @@ __metadata: languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.9.0": + version: 2.10.0 + resolution: "baseline-browser-mapping@npm:2.10.0" + bin: + baseline-browser-mapping: dist/cli.cjs + checksum: 10/8145e076e4299f04c7a412e6ea63803e330153cd89c47b5303f9b56b58078f4c3d5a5b5332c1069da889e76facacca4d43f8940375f7e73ce0a4d96214332953 + languageName: node + linkType: hard + "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -5788,35 +6324,33 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.1": - version: 1.20.1 - resolution: "body-parser@npm:1.20.1" +"body-parser@npm:~1.20.3": + version: 1.20.4 + resolution: "body-parser@npm:1.20.4" dependencies: - bytes: "npm:3.1.2" - content-type: "npm:~1.0.4" + bytes: "npm:~3.1.2" + content-type: "npm:~1.0.5" debug: "npm:2.6.9" depd: "npm:2.0.0" - destroy: "npm:1.2.0" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - on-finished: "npm:2.4.1" - qs: "npm:6.11.0" - raw-body: "npm:2.5.1" + destroy: "npm:~1.2.0" + http-errors: "npm:~2.0.1" + iconv-lite: "npm:~0.4.24" + on-finished: "npm:~2.4.1" + qs: "npm:~6.14.0" + raw-body: "npm:~2.5.3" type-is: "npm:~1.6.18" - unpipe: "npm:1.0.0" - checksum: 10/5f8d128022a2fb8b6e7990d30878a0182f300b70e46b3f9d358a9433ad6275f0de46add6d63206da3637c01c3b38b6111a7480f7e7ac2e9f7b989f6133fe5510 + unpipe: "npm:~1.0.0" + checksum: 10/ff67e28d3f426707be8697a75fdf8d564dc50c341b41f054264d8ab6e2924e519c7ce8acc9d0de05328fdc41e1d9f3f200aec9c1cfb1867d6b676a410d97c689 languageName: node linkType: hard "bonjour-service@npm:^1.0.11": - version: 1.1.1 - resolution: "bonjour-service@npm:1.1.1" + version: 1.3.0 + resolution: "bonjour-service@npm:1.3.0" dependencies: - array-flatten: "npm:^2.1.2" - dns-equal: "npm:^1.0.0" fast-deep-equal: "npm:^3.1.3" multicast-dns: "npm:^7.2.5" - checksum: 10/60a14328dff846a66ae5cddbba4f2e2845a4b3cf62f64d93b57808e08e5e1a8e8c4454e37e0e289741706b359a343444ba132957bf53be9e8f5eaebdebb06306 + checksum: 10/63d516d88f15fa4b89e247e6ff7d81c21a3ef5ed035b0b043c2b38e0c839f54f4ce58fbf9b7668027bf538ac86de366939dbb55cca63930f74eeea1e278c9585 languageName: node linkType: hard @@ -5860,39 +6394,39 @@ __metadata: linkType: hard "brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" + version: 1.1.12 + resolution: "brace-expansion@npm:1.1.12" dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: 10/faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + checksum: 10/12cb6d6310629e3048cadb003e1aca4d8c9bb5c67c3c321bafdd7e7a50155de081f78ea3e0ed92ecc75a9015e784f301efc8132383132f4f7904ad1ac529c562 languageName: node linkType: hard "brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" + version: 2.0.2 + resolution: "brace-expansion@npm:2.0.2" dependencies: balanced-match: "npm:^1.0.0" - checksum: 10/a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + checksum: 10/01dff195e3646bc4b0d27b63d9bab84d2ebc06121ff5013ad6e5356daa5a9d6b60fa26cf73c74797f2dc3fbec112af13578d51f75228c1112b26c790a87b0488 languageName: node linkType: hard "brace-expansion@npm:^5.0.2": - version: 5.0.2 - resolution: "brace-expansion@npm:5.0.2" + version: 5.0.4 + resolution: "brace-expansion@npm:5.0.4" dependencies: balanced-match: "npm:^4.0.2" - checksum: 10/18d382c0919c68f8bb56fbe4a9cb1181a0bf10e6786b5683e586493dfbb517bdcf972f4a3a8d560486627fd9c9c6ecef0a2b8fd454eb6082780307ffd5586251 + checksum: 10/cfd57e20d8ded9578149e47ae4d3fff2b2f78d06b54a32a73057bddff65c8e9b930613f0cbcfefedf12dd117151e19d4da16367d5127c54f3bff02d8a4479bb2 languageName: node linkType: hard -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" +"braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" dependencies: - fill-range: "npm:^7.0.1" - checksum: 10/966b1fb48d193b9d155f810e5efd1790962f2c4e0829f8440b8ad236ba009222c501f70185ef732fef17a4c490bb33a03b90dab0631feafbdf447da91e8165b1 + fill-range: "npm:^7.1.1" + checksum: 10/fad11a0d4697a27162840b02b1fad249c1683cbc510cd5bf1a471f2f8085c046d41094308c577a50a03a579dd99d5a6b3724c4b5e8b14df2c4443844cfcda2c6 languageName: node linkType: hard @@ -5903,17 +6437,18 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.21.9": - version: 4.21.10 - resolution: "browserslist@npm:4.21.10" +"browserslist@npm:^4.0.0, browserslist@npm:^4.18.1, browserslist@npm:^4.21.4, browserslist@npm:^4.24.0, browserslist@npm:^4.28.1": + version: 4.28.1 + resolution: "browserslist@npm:4.28.1" dependencies: - caniuse-lite: "npm:^1.0.30001517" - electron-to-chromium: "npm:^1.4.477" - node-releases: "npm:^2.0.13" - update-browserslist-db: "npm:^1.0.11" + baseline-browser-mapping: "npm:^2.9.0" + caniuse-lite: "npm:^1.0.30001759" + electron-to-chromium: "npm:^1.5.263" + node-releases: "npm:^2.0.27" + update-browserslist-db: "npm:^1.2.0" bin: browserslist: cli.js - checksum: 10/cdb9272433994393a995235720c304e8c7123b4994b02fc0b24ca0f483db482c4f85fe8b40995aa6193d47d781e5535cf5d0efe96e465d2af42058fb3251b13a + checksum: 10/64f2a97de4bce8473c0e5ae0af8d76d1ead07a5b05fc6bc87b848678bb9c3a91ae787b27aa98cdd33fc00779607e6c156000bed58fefb9cf8e4c5a183b994cdb languageName: node linkType: hard @@ -5940,7 +6475,7 @@ __metadata: languageName: node linkType: hard -"bytes@npm:3.1.2": +"bytes@npm:3.1.2, bytes@npm:~3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" checksum: 10/a10abf2ba70c784471d6b4f58778c0beeb2b5d405148e66affa91f23a9f13d07603d0a0354667310ae1d6dc141474ffd44e2a074be0f6e2254edb8fc21445388 @@ -5981,13 +6516,35 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": version: 1.0.2 - resolution: "call-bind@npm:1.0.2" + resolution: "call-bind-apply-helpers@npm:1.0.2" dependencies: - function-bind: "npm:^1.1.1" - get-intrinsic: "npm:^1.0.2" - checksum: 10/ca787179c1cbe09e1697b56ad499fd05dc0ae6febe5081d728176ade699ea6b1589240cb1ff1fe11fcf9f61538c1af60ad37e8eb2ceb4ef21cd6085dfd3ccedd + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10/00482c1f6aa7cfb30fb1dbeb13873edf81cfac7c29ed67a5957d60635a56b2a4a480f1016ddbdb3395cc37900d46037fb965043a51c5c789ffeab4fc535d18b5 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10/659b03c79bbfccf0cde3a79e7d52570724d7290209823e1ca5088f94b52192dc1836b82a324d0144612f816abb2f1734447438e38d9dafe0b3f82c2a1b9e3bce + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3, call-bound@npm:^1.0.4": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10/ef2b96e126ec0e58a7ff694db43f4d0d44f80e641370c21549ed911fecbdbc2df3ebc9bddad918d6bbdefeafb60bb3337902006d5176d72bcd2da74820991af7 languageName: node linkType: hard @@ -6041,10 +6598,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001517, caniuse-lite@npm:^1.0.30001520": - version: 1.0.30001521 - resolution: "caniuse-lite@npm:1.0.30001521" - checksum: 10/68e1a355e05a3b531f9d3b39391d505ec8aea1a2719d866ddb260d87c5da7e53efecf2db752d213b539dab877bb141aa2a66cc3ccd4c0d1a498430f9b9057bd9 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001759, caniuse-lite@npm:^1.0.30001774": + version: 1.0.30001777 + resolution: "caniuse-lite@npm:1.0.30001777" + checksum: 10/4f71c57ac7f46bd0c0b42bef212df28639652972e7cf6e3f40f902a87fa86d77217f76b1021dcef202ab6eb5958bad83cdcc81336a954fb4e857c2975ddb2569 languageName: node linkType: hard @@ -6119,23 +6676,27 @@ __metadata: linkType: hard "cheerio@npm:^1.0.0-rc.12": - version: 1.0.0-rc.12 - resolution: "cheerio@npm:1.0.0-rc.12" + version: 1.2.0 + resolution: "cheerio@npm:1.2.0" dependencies: cheerio-select: "npm:^2.1.0" dom-serializer: "npm:^2.0.0" domhandler: "npm:^5.0.3" - domutils: "npm:^3.0.1" - htmlparser2: "npm:^8.0.1" - parse5: "npm:^7.0.0" - parse5-htmlparser2-tree-adapter: "npm:^7.0.0" - checksum: 10/812fed61aa4b669bbbdd057d0d7f73ba4649cabfd4fc3a8f1d5c7499e4613b430636102716369cbd6bbed8f1bdcb06387ae8342289fb908b2743184775f94f18 + domutils: "npm:^3.2.2" + encoding-sniffer: "npm:^0.2.1" + htmlparser2: "npm:^10.1.0" + parse5: "npm:^7.3.0" + parse5-htmlparser2-tree-adapter: "npm:^7.1.0" + parse5-parser-stream: "npm:^7.1.2" + undici: "npm:^7.19.0" + whatwg-mimetype: "npm:^4.0.0" + checksum: 10/eda2ad43e1d649c99c1338789bb58a4add3b7995d881db889be94e70b3c95a83074c366486e46379eb145d22ddf6d2f207da945d70c5dff5fae1afb54b8a39e0 languageName: node linkType: hard -"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.4.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" +"chokidar@npm:^3.4.2, chokidar@npm:^3.5.3, chokidar@npm:^3.6.0": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" dependencies: anymatch: "npm:~3.1.2" braces: "npm:~3.0.2" @@ -6148,26 +6709,16 @@ __metadata: dependenciesMeta: fsevents: optional: true - checksum: 10/863e3ff78ee7a4a24513d2a416856e84c8e4f5e60efbe03e8ab791af1a183f569b62fc6f6b8044e2804966cb81277ddbbc1dc374fba3265bd609ea8efd62f5b3 + checksum: 10/c327fb07704443f8d15f7b4a7ce93b2f0bc0e6cea07ec28a7570aa22cd51fcf0379df589403976ea956c369f25aa82d84561947e227cd925902e1751371658df languageName: node linkType: hard -"chokidar@npm:^3.5.3": - version: 3.6.0 - resolution: "chokidar@npm:3.6.0" +"chokidar@npm:^4.0.0": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" dependencies: - anymatch: "npm:~3.1.2" - braces: "npm:~3.0.2" - fsevents: "npm:~2.3.2" - glob-parent: "npm:~5.1.2" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.6.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10/c327fb07704443f8d15f7b4a7ce93b2f0bc0e6cea07ec28a7570aa22cd51fcf0379df589403976ea956c369f25aa82d84561947e227cd925902e1751371658df + readdirp: "npm:^4.0.1" + checksum: 10/bf2a575ea5596000e88f5db95461a9d59ad2047e939d5a4aac59dd472d126be8f1c1ff3c7654b477cf532d18f42a97279ef80ee847972fd2a25410bf00b80b59 languageName: node linkType: hard @@ -6179,9 +6730,9 @@ __metadata: linkType: hard "chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: 10/b5fbdae5bf00c96fa3213de919f2b2617a942bfcb891cdf735fbad2a6f4f3c25d42e3f2b1703328619d352c718b46b9e18999fd3af7ef86c26c91db6fae1f0da + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: 10/1762bed739774903bf5915fe3045c3120fc3c7f7d929d88e566447ea38944937a6370ccb687278318c43c24f837ad22dac780bed67c066336815557b8cf558c6 languageName: node linkType: hard @@ -6193,32 +6744,32 @@ __metadata: linkType: hard "ci-info@npm:^3.2.0": - version: 3.8.0 - resolution: "ci-info@npm:3.8.0" - checksum: 10/b00e9313c1f7042ca8b1297c157c920d6d69f0fbad7b867910235676df228c4b4f4df33d06cacae37f9efba7a160b0a167c6be85492b419ef71d85660e60606b + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10/75bc67902b4d1c7b435497adeb91598f6d52a3389398e44294f6601b20cfef32cf2176f7be0eb961d9e085bb333a8a5cae121cb22f81cf238ae7f58eb80e9397 languageName: node linkType: hard "cjs-module-lexer@npm:^1.0.0": - version: 1.2.3 - resolution: "cjs-module-lexer@npm:1.2.3" - checksum: 10/f96a5118b0a012627a2b1c13bd2fcb92509778422aaa825c5da72300d6dcadfb47134dd2e9d97dfa31acd674891dd91642742772d19a09a8adc3e56bd2f5928c + version: 1.4.3 + resolution: "cjs-module-lexer@npm:1.4.3" + checksum: 10/d2b92f919a2dedbfd61d016964fce8da0035f827182ed6839c97cac56e8a8077cfa6a59388adfe2bc588a19cef9bbe830d683a76a6e93c51f65852062cfe2591 languageName: node linkType: hard "classnames@npm:2.x, classnames@npm:^2.2.1, classnames@npm:^2.2.3, classnames@npm:^2.2.5, classnames@npm:^2.2.6, classnames@npm:^2.3.1, classnames@npm:^2.3.2": - version: 2.3.2 - resolution: "classnames@npm:2.3.2" - checksum: 10/ba3151c12e8b6a84c64b340ab4259ad0408947652009314462d828e94631505989c6a7d7e796bec1d309be9295d3111b498ad18a9d533fe3e6f859e51e574cbb + version: 2.5.1 + resolution: "classnames@npm:2.5.1" + checksum: 10/58eb394e8817021b153bb6e7d782cfb667e4ab390cb2e9dac2fc7c6b979d1cc2b2a733093955fc5c94aa79ef5c8c89f11ab77780894509be6afbb91dddd79d15 languageName: node linkType: hard "clean-css@npm:^5.2.2, clean-css@npm:^5.3.0": - version: 5.3.2 - resolution: "clean-css@npm:5.3.2" + version: 5.3.3 + resolution: "clean-css@npm:5.3.3" dependencies: source-map: "npm:~0.6.0" - checksum: 10/efd9efbf400f38a12f99324bad5359bdd153211b048721e4d4ddb629a88865dff3012dca547a14bdd783d78ccf064746e39fd91835546a08e2d811866aff0857 + checksum: 10/2db1ae37b384c8ff0a06a12bfa80f56cc02b4abcaaf340db98c0ae88a61dd67c856653fd8135ace6eb0ec13aeab3089c425d2e4238d2a2ad6b6917e6ccc74729 languageName: node linkType: hard @@ -6253,15 +6804,15 @@ __metadata: linkType: hard "cli-table3@npm:^0.6.2": - version: 0.6.3 - resolution: "cli-table3@npm:0.6.3" + version: 0.6.5 + resolution: "cli-table3@npm:0.6.5" dependencies: "@colors/colors": "npm:1.5.0" string-width: "npm:^4.2.0" dependenciesMeta: "@colors/colors": optional: true - checksum: 10/8d82b75be7edc7febb1283dc49582a521536527cba80af62a2e4522a0ee39c252886a1a2f02d05ae9d753204dbcffeb3a40d1358ee10dccd7fe8d935cfad3f85 + checksum: 10/8dca71256f6f1367bab84c33add3f957367c7c43750a9828a4212ebd31b8df76bd7419d386e3391ac7419698a8540c25f1a474584028f35b170841cde2e055c5 languageName: node linkType: hard @@ -6329,9 +6880,9 @@ __metadata: linkType: hard "collect-v8-coverage@npm:^1.0.0": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: 10/30ea7d5c9ee51f2fdba4901d4186c5b7114a088ef98fd53eda3979da77eed96758a2cae81cc6d97e239aaea6065868cf908b24980663f7b7e96aa291b3e12fa4 + version: 1.0.3 + resolution: "collect-v8-coverage@npm:1.0.3" + checksum: 10/656443261fb7b79cf79e89cba4b55622b07c1d4976c630829d7c5c585c73cda1c2ff101f316bfb19bb9e2c58d724c7db1f70a21e213dcd14099227c5e6019860 languageName: node linkType: hard @@ -6382,9 +6933,9 @@ __metadata: linkType: hard "combine-promises@npm:^1.1.0": - version: 1.1.0 - resolution: "combine-promises@npm:1.1.0" - checksum: 10/23b55f66d5cea3ddf39608c07f7a96065c7bb7cc4f54c7f217040771262ad97e808b30f7f267c553a9ca95552fc9813fb465232f5d82e190e118b33238186af8 + version: 1.2.0 + resolution: "combine-promises@npm:1.2.0" + checksum: 10/ddce91436e24da03d5dc360c59cd55abfc9da5e949a26255aa42761925c574797c43138f0aabfc364e184e738e5e218a94ac6e88ebc459045bcf048ac7fe5f07 languageName: node linkType: hard @@ -6404,6 +6955,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:7, commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 10/9973af10727ad4b44f26703bf3e9fdc323528660a7590efe3aa9ad5042b4584c0deed84ba443f61c9d6f02dade54a5a5d3c95e306a1e1630f8374ae6db16c06d + languageName: node + linkType: hard + "commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" @@ -6425,13 +6983,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^7.2.0": - version: 7.2.0 - resolution: "commander@npm:7.2.0" - checksum: 10/9973af10727ad4b44f26703bf3e9fdc323528660a7590efe3aa9ad5042b4584c0deed84ba443f61c9d6f02dade54a5a5d3c95e306a1e1630f8374ae6db16c06d - languageName: node - linkType: hard - "commander@npm:^8.3.0": version: 8.3.0 resolution: "commander@npm:8.3.0" @@ -6446,7 +6997,7 @@ __metadata: languageName: node linkType: hard -"compressible@npm:~2.0.16": +"compressible@npm:~2.0.18": version: 2.0.18 resolution: "compressible@npm:2.0.18" dependencies: @@ -6456,17 +7007,17 @@ __metadata: linkType: hard "compression@npm:^1.7.4": - version: 1.7.4 - resolution: "compression@npm:1.7.4" + version: 1.8.1 + resolution: "compression@npm:1.8.1" dependencies: - accepts: "npm:~1.3.5" - bytes: "npm:3.0.0" - compressible: "npm:~2.0.16" + bytes: "npm:3.1.2" + compressible: "npm:~2.0.18" debug: "npm:2.6.9" - on-headers: "npm:~1.0.2" - safe-buffer: "npm:5.1.2" + negotiator: "npm:~0.6.4" + on-headers: "npm:~1.1.0" + safe-buffer: "npm:5.2.1" vary: "npm:~1.1.2" - checksum: 10/469cd097908fe1d3ff146596d4c24216ad25eabb565c5456660bdcb3a14c82ebc45c23ce56e19fc642746cf407093b55ab9aa1ac30b06883b27c6c736e6383c2 + checksum: 10/e7552bfbd780f2003c6fe8decb44561f5cc6bc82f0c61e81122caff5ec656f37824084f52155b1e8ef31d7656cecbec9a2499b7a68e92e20780ffb39b479abb7 languageName: node linkType: hard @@ -6546,7 +7097,7 @@ __metadata: languageName: node linkType: hard -"content-disposition@npm:0.5.4": +"content-disposition@npm:~0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" dependencies: @@ -6555,38 +7106,45 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.4": +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: 10/585847d98dc7fb8035c02ae2cb76c7a9bd7b25f84c447e5ed55c45c2175e83617c8813871b4ee22f368126af6b2b167df655829007b21aa10302873ea9c62662 languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" checksum: 10/dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 languageName: node linkType: hard -"cookie-signature@npm:1.0.6": - version: 1.0.6 - resolution: "cookie-signature@npm:1.0.6" - checksum: 10/f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10/c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15 languageName: node linkType: hard -"cookie@npm:0.5.0": - version: 0.5.0 - resolution: "cookie@npm:0.5.0" - checksum: 10/aae7911ddc5f444a9025fbd979ad1b5d60191011339bce48e555cb83343d0f98b865ff5c4d71fecdfb8555a5cafdc65632f6fce172f32aaf6936830a883a0380 +"cookie-signature@npm:~1.0.6": + version: 1.0.7 + resolution: "cookie-signature@npm:1.0.7" + checksum: 10/1a62808cd30d15fb43b70e19829b64d04b0802d8ef00275b57d152de4ae6a3208ca05c197b6668d104c4d9de389e53ccc2d3bc6bcaaffd9602461417d8c40710 + languageName: node + linkType: hard + +"cookie@npm:~0.7.1": + version: 0.7.2 + resolution: "cookie@npm:0.7.2" + checksum: 10/24b286c556420d4ba4e9bc09120c9d3db7d28ace2bd0f8ccee82422ce42322f73c8312441271e5eefafbead725980e5996cc02766dbb89a90ac7f5636ede608f languageName: node linkType: hard "copy-text-to-clipboard@npm:^3.0.1": - version: 3.2.0 - resolution: "copy-text-to-clipboard@npm:3.2.0" - checksum: 10/df7115c197a166d51f59e4e20ab2a68a855ae8746d25ff149b5465c694d9a405c7e6684b73a9f87ba8d653070164e229c15dfdb9fd77c30be1ff0da569661060 + version: 3.2.2 + resolution: "copy-text-to-clipboard@npm:3.2.2" + checksum: 10/ae512de746632eb0cc3fe78ba16022b46134f835aa411d372798ee76c93baae8faa6b2cf5052ebd132ec6a2016124dc19786b231e5c0d333999c5d448e7a2e42 languageName: node linkType: hard @@ -6615,19 +7173,19 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.31.0": - version: 3.32.0 - resolution: "core-js-compat@npm:3.32.0" +"core-js-compat@npm:^3.43.0, core-js-compat@npm:^3.48.0": + version: 3.48.0 + resolution: "core-js-compat@npm:3.48.0" dependencies: - browserslist: "npm:^4.21.9" - checksum: 10/a4601192319b67a575abfb175a9822ae266bfa88cd0dc6be5bce3d6ce6d4674bd675a052c48a48520d956b193ccd5c8458c1b0901bf0f71d59edaad2a56ef667 + browserslist: "npm:^4.28.1" + checksum: 10/83c326dcfef5e174fd3f8f33c892c66e06d567ce27f323a1197a6c280c0178fe18d3e9c5fb95b00c18b98d6c53fba5c646def5fedaa77310a4297d16dfbe2029 languageName: node linkType: hard -"core-js-pure@npm:^3.30.2": - version: 3.32.0 - resolution: "core-js-pure@npm:3.32.0" - checksum: 10/f98fc9610fedffd5587266cabddc880a8259bb0c99e81c5630e2076a4cd39b618f8db54137a6fdc578a8bb12a7fef2f341175085d89a16683a36aa89bc0ee137 +"core-js-pure@npm:^3.48.0": + version: 3.48.0 + resolution: "core-js-pure@npm:3.48.0" + checksum: 10/7c624d5551252ad166b9a7df4daca354540b71bb2ce9c8df2a9ef7acb6335a7a56557bcbe2bd78e20e3a4eeeee2922ff37a22a67e978b293a2b4e5b9a7a04d9b languageName: node linkType: hard @@ -6639,9 +7197,9 @@ __metadata: linkType: hard "core-js@npm:^3.23.3": - version: 3.32.0 - resolution: "core-js@npm:3.32.0" - checksum: 10/b08473c4cb2963e7428fddc5b519abf74b6262da731beb6caf05c617349149d58bd221b91f85c6f0e91e709e873dc017cce2259f3b2b7377c4c08a556230f5f1 + version: 3.48.0 + resolution: "core-js@npm:3.48.0" + checksum: 10/08bb3cc9b3225b905e72370c18257a14bb5563946d9eb7496799e0ee4f13231768b980ffe98434df7dbd0f8209bd2c19519938a2fa94846b2c82c2d5aa804037 languageName: node linkType: hard @@ -6652,6 +7210,24 @@ __metadata: languageName: node linkType: hard +"cose-base@npm:^1.0.0": + version: 1.0.3 + resolution: "cose-base@npm:1.0.3" + dependencies: + layout-base: "npm:^1.0.0" + checksum: 10/52e1f4ae173738aebe14395e3f865dc10ce430156554bab52f4b8ef0c583375644348c2a226b83d97eebc7d35340919e7bc10d23a3e2fe51b853bf56f27b5da7 + languageName: node + linkType: hard + +"cose-base@npm:^2.2.0": + version: 2.2.0 + resolution: "cose-base@npm:2.2.0" + dependencies: + layout-base: "npm:^2.0.0" + checksum: 10/4d4b16a84188b8f9419d9dbaffca62561f0e0ee125569339782141111aaf2bec1d180270bbaf5a13ac956f6a8c6b74ab2431e456da239982046b9ddb612bde6a + languageName: node + linkType: hard + "cosmiconfig@npm:^6.0.0": version: 6.0.0 resolution: "cosmiconfig@npm:6.0.0" @@ -6678,35 +7254,40 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.2.0": - version: 8.2.0 - resolution: "cosmiconfig@npm:8.2.0" +"cosmiconfig@npm:^8.3.5": + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" dependencies: - import-fresh: "npm:^3.2.1" + import-fresh: "npm:^3.3.0" js-yaml: "npm:^4.1.0" - parse-json: "npm:^5.0.0" + parse-json: "npm:^5.2.0" path-type: "npm:^4.0.0" - checksum: 10/e0b188f9a672ee7135851bf9d9fc8f0ba00f9769c95fda5af0ebc274804f6aeb713b753e04e706f595e1fbd0fa67c5073840666019068c0296a06057560ab39d + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/91d082baca0f33b1c085bf010f9ded4af43cbedacba8821da0fb5667184d0a848addc52c31fadd080007f904a555319c238cf5f4c03e6d58ece2e4876b2e73d6 languageName: node linkType: hard "cross-fetch@npm:^3.1.5": - version: 3.1.8 - resolution: "cross-fetch@npm:3.1.8" + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" dependencies: - node-fetch: "npm:^2.6.12" - checksum: 10/ac8c4ca87d2ac0e17a19b6a293a67ee8934881aee5ec9a5a8323c30e9a9a60a0f5291d3c0d633ec2a2f970cbc60978d628804dfaf03add92d7e720b6d37f392c + node-fetch: "npm:^2.7.0" + checksum: 10/e4ab1d390a5b6ca8bb0605f028af2ffc1127d2e407b954654949f506d04873c4863ece264662c074865d7874060e35f938cec74fe7b5736d46d545e2685f6aec languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" +"cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: "npm:^3.1.0" shebang-command: "npm:^2.0.0" which: "npm:^2.0.1" - checksum: 10/e1a13869d2f57d974de0d9ef7acbf69dc6937db20b918525a01dacb5032129bd552d290d886d981e99f1b624cb03657084cc87bd40f115c07ecf376821c729ce + checksum: 10/0d52657d7ae36eb130999dffff1168ec348687b48dd38e2ff59992ed916c88d328cf1d07ff4a4a10bc78de5e1c23f04b306d569e42f7a2293915c081e4dfee86 languageName: node linkType: hard @@ -6727,20 +7308,26 @@ __metadata: linkType: hard "css-loader@npm:^6.7.1": - version: 6.8.1 - resolution: "css-loader@npm:6.8.1" + version: 6.11.0 + resolution: "css-loader@npm:6.11.0" dependencies: icss-utils: "npm:^5.1.0" - postcss: "npm:^8.4.21" - postcss-modules-extract-imports: "npm:^3.0.0" - postcss-modules-local-by-default: "npm:^4.0.3" - postcss-modules-scope: "npm:^3.0.0" + postcss: "npm:^8.4.33" + postcss-modules-extract-imports: "npm:^3.1.0" + postcss-modules-local-by-default: "npm:^4.0.5" + postcss-modules-scope: "npm:^3.2.0" postcss-modules-values: "npm:^4.0.0" postcss-value-parser: "npm:^4.2.0" - semver: "npm:^7.3.8" + semver: "npm:^7.5.4" peerDependencies: + "@rspack/core": 0.x || 1.x webpack: ^5.0.0 - checksum: 10/f20bb2a181c64d2f49586ab3922cae884519cfc8ae9ba8513065032255ed7bbdb4de75362f99d641d39d36d3732b7932884cd0e6fc71c8b0fb8b99a654f9cd08 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10/9e3665509f6786d46683de5c5f5c4bdd4aa62396b4017b41dbbb41ea5ada4012c80ee1e3302b79b504bc24da7fa69e3552d99006cecc953e0d9eef4a3053b929 languageName: node linkType: hard @@ -6787,15 +7374,15 @@ __metadata: linkType: hard "css-select@npm:^5.1.0": - version: 5.1.0 - resolution: "css-select@npm:5.1.0" + version: 5.2.2 + resolution: "css-select@npm:5.2.2" dependencies: boolbase: "npm:^1.0.0" css-what: "npm:^6.1.0" domhandler: "npm:^5.0.2" domutils: "npm:^3.0.1" nth-check: "npm:^2.0.1" - checksum: 10/d486b1e7eb140468218a5ab5af53257e01f937d2173ac46981f6b7de9c5283d55427a36715dc8decfc0c079cf89259ac5b41ef58f6e1a422eee44ab8bfdc78da + checksum: 10/ebb6a88446433312d1a16301afd1c5f75090805b730dbbdccb0338b0d6ca7922410375f16dde06673ef7da086e2cf3b9ad91afe9a8e0d2ee3625795cb5e0170d languageName: node linkType: hard @@ -6810,9 +7397,9 @@ __metadata: linkType: hard "css-what@npm:^6.0.1, css-what@npm:^6.1.0": - version: 6.1.0 - resolution: "css-what@npm:6.1.0" - checksum: 10/c67a3a2d0d81843af87f8bf0a4d0845b0f952377714abbb2884e48942409d57a2110eabee003609d02ee487b054614bdfcfc59ee265728ff105bd5aa221c1d0e + version: 6.2.2 + resolution: "css-what@npm:6.2.2" + checksum: 10/3c5a53be94728089bd1716f915f7f96adde5dd8bf374610eb03982266f3d860bf1ebaf108cda30509d02ef748fe33eaa59aa75911e2c49ee05a85ef1f9fb5223 languageName: node linkType: hard @@ -6934,10 +7521,367 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2": +"csstype@npm:^3.0.2, csstype@npm:^3.1.3, csstype@npm:^3.2.2": + version: 3.2.3 + resolution: "csstype@npm:3.2.3" + checksum: 10/ad41baf7e2ffac65ab544d79107bf7cd1a4bb9bab9ac3302f59ab4ba655d5e30942a8ae46e10ba160c6f4ecea464cc95b975ca2fefbdeeacd6ac63f12f99fe1f + languageName: node + linkType: hard + +"cytoscape-cose-bilkent@npm:^4.1.0": + version: 4.1.0 + resolution: "cytoscape-cose-bilkent@npm:4.1.0" + dependencies: + cose-base: "npm:^1.0.0" + peerDependencies: + cytoscape: ^3.2.0 + checksum: 10/9ec2999159af62f1a251bf1e146a9a779085c4fdb1b8146596208f0097c0512fc4bffda53d3b00c87a1e8ae5024db3ebfb97162115216f5b4d024e314f4a03bb + languageName: node + linkType: hard + +"cytoscape-fcose@npm:^2.1.0": + version: 2.2.0 + resolution: "cytoscape-fcose@npm:2.2.0" + dependencies: + cose-base: "npm:^2.2.0" + peerDependencies: + cytoscape: ^3.2.0 + checksum: 10/927aa3b29c1d514c6513c5a785d7af7a8d0499eb166de1f42b958ef20d264ef9cbe238da0b65ae01860424972dce1c73017cf2afdae4f02f9a247f7031b00de3 + languageName: node + linkType: hard + +"cytoscape@npm:^3.23.0": + version: 3.33.1 + resolution: "cytoscape@npm:3.33.1" + checksum: 10/0e8d3ea87eb624899341d6a765cfb732199af8a871beedeb94971061632ce814c2c39e8257d6628c5611ca9dadc1a723a00377d04f149e0d24f6c133a6ab8647 + languageName: node + linkType: hard + +"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:2.5.0 - 3, d3-array@npm:3, d3-array@npm:^3.2.0": + version: 3.2.4 + resolution: "d3-array@npm:3.2.4" + dependencies: + internmap: "npm:1 - 2" + checksum: 10/5800c467f89634776a5977f6dae3f4e127d91be80f1d07e3e6e35303f9de93e6636d014b234838eea620f7469688d191b3f41207a30040aab750a63c97ec1d7c + languageName: node + linkType: hard + +"d3-axis@npm:3": + version: 3.0.0 + resolution: "d3-axis@npm:3.0.0" + checksum: 10/15ec43ecbd4e7b606fcda60f67a522e45576dfd6aa83dff47f3e91ef6c8448841a09cd91f630b492250dcec67c6ea64463510ead5e632ff6b827aeefae1d42ad + languageName: node + linkType: hard + +"d3-brush@npm:3": + version: 3.0.0 + resolution: "d3-brush@npm:3.0.0" + dependencies: + d3-dispatch: "npm:1 - 3" + d3-drag: "npm:2 - 3" + d3-interpolate: "npm:1 - 3" + d3-selection: "npm:3" + d3-transition: "npm:3" + checksum: 10/fa3a461b62f0f0ee6fe41f5babf45535a0a8f6d4999f675fb1dce932ee02eff72dec14c7296af31ca15998dc0141ccf5d02aa6499363f8bf2941d90688a1d644 + languageName: node + linkType: hard + +"d3-chord@npm:3": + version: 3.0.1 + resolution: "d3-chord@npm:3.0.1" + dependencies: + d3-path: "npm:1 - 3" + checksum: 10/4febcdca4fdc8ba91fc4f7545f4b6321c440150dff80c1ebef887db07bb4200395dfebede63b257393259de07f914da10842da5ab3135e1e281e33ad153e0849 + languageName: node + linkType: hard + +"d3-color@npm:1 - 3, d3-color@npm:3": + version: 3.1.0 + resolution: "d3-color@npm:3.1.0" + checksum: 10/536ba05bfd9f4fcd6fa289b5974f5c846b21d186875684637e22bf6855e6aba93e24a2eb3712985c6af3f502fbbfa03708edb72f58142f626241a8a17258e545 + languageName: node + linkType: hard + +"d3-contour@npm:4": + version: 4.0.2 + resolution: "d3-contour@npm:4.0.2" + dependencies: + d3-array: "npm:^3.2.0" + checksum: 10/0b252267e0c3c5e97d7e0c720bd35654de99f981199f7240d7dd1acfd4e2d5bf1638829f6db486452eff9c38608efa4a6ab5a0d1525131735c011ee7be3cb4ba + languageName: node + linkType: hard + +"d3-delaunay@npm:6": + version: 6.0.4 + resolution: "d3-delaunay@npm:6.0.4" + dependencies: + delaunator: "npm:5" + checksum: 10/4588e2872d4154daaf2c3f34fefe74e43b909cc460238a7b02823907ca6dd109f2c488c57c8551f1a2607fe4b44fdf24e3a190cea29bca70ef5606678dd9e2de + languageName: node + linkType: hard + +"d3-dispatch@npm:1 - 3, d3-dispatch@npm:3": + version: 3.0.1 + resolution: "d3-dispatch@npm:3.0.1" + checksum: 10/2b82f41bf4ef88c2f9033dfe32815b67e2ef1c5754a74137a74c7d44d6f0d6ecfa934ac56ed8afe358f6c1f06462e8aa42ca0a388397b5b77a42721570e80487 + languageName: node + linkType: hard + +"d3-drag@npm:2 - 3, d3-drag@npm:3": + version: 3.0.0 + resolution: "d3-drag@npm:3.0.0" + dependencies: + d3-dispatch: "npm:1 - 3" + d3-selection: "npm:3" + checksum: 10/80bc689935e5a46ee92b2d7f71e1c792279382affed9fbcf46034bff3ff7d3f50cf61a874da4bdf331037292b9e7dca5c6401a605d4bb699fdcb4e0c87e176ec + languageName: node + linkType: hard + +"d3-dsv@npm:1 - 3, d3-dsv@npm:3": + version: 3.0.1 + resolution: "d3-dsv@npm:3.0.1" + dependencies: + commander: "npm:7" + iconv-lite: "npm:0.6" + rw: "npm:1" + bin: + csv2json: bin/dsv2json.js + csv2tsv: bin/dsv2dsv.js + dsv2dsv: bin/dsv2dsv.js + dsv2json: bin/dsv2json.js + json2csv: bin/json2dsv.js + json2dsv: bin/json2dsv.js + json2tsv: bin/json2dsv.js + tsv2csv: bin/dsv2dsv.js + tsv2json: bin/dsv2json.js + checksum: 10/a628ac42a272466940f713f310db2e5246690b22035121dc1230077070c9135fb7c9b4d260f093fcadf63b0528202a1953107448a4be3a860c4f42f50d09504d + languageName: node + linkType: hard + +"d3-ease@npm:1 - 3, d3-ease@npm:3": + version: 3.0.1 + resolution: "d3-ease@npm:3.0.1" + checksum: 10/985d46e868494e9e6806fedd20bad712a50dcf98f357bf604a843a9f6bc17714a657c83dd762f183173dcde983a3570fa679b2bc40017d40b24163cdc4167796 + languageName: node + linkType: hard + +"d3-fetch@npm:3": + version: 3.0.1 + resolution: "d3-fetch@npm:3.0.1" + dependencies: + d3-dsv: "npm:1 - 3" + checksum: 10/cd35d55f8fbb1ea1e37be362a575bb0161449957133aa5b45b9891889b2aca1dc0769c240a236736e33cd823e820a0e73fb3744582307a5d26d1df7bed0ccecb + languageName: node + linkType: hard + +"d3-force@npm:3": + version: 3.0.0 + resolution: "d3-force@npm:3.0.0" + dependencies: + d3-dispatch: "npm:1 - 3" + d3-quadtree: "npm:1 - 3" + d3-timer: "npm:1 - 3" + checksum: 10/85945f8d444d78567009518f0ab54c0f0c8873eb8eb9a2ff0ab667b0f81b419e101a411415d4a2c752547ec7143f89675e8c33b8f111e55e5579a04cb7f4591c + languageName: node + linkType: hard + +"d3-format@npm:1 - 3, d3-format@npm:3": + version: 3.1.2 + resolution: "d3-format@npm:3.1.2" + checksum: 10/811d913c2c7624cb0d2a8f0ccd7964c50945b3de3c7f7aa14c309fba7266a3ec53cbee8c05f6ad61b2b65b93e157c55a0e07db59bc3180c39dac52be8e841ab1 + languageName: node + linkType: hard + +"d3-geo@npm:3": + version: 3.1.1 + resolution: "d3-geo@npm:3.1.1" + dependencies: + d3-array: "npm:2.5.0 - 3" + checksum: 10/dc5e980330d891dabf92869b98871b05ca2021c64d7ef253bcfd4f2348839ad33576fba474baecc2def86ebd3d943a11d93c0af26be0a2694f5bd59824838133 + languageName: node + linkType: hard + +"d3-hierarchy@npm:3": version: 3.1.2 - resolution: "csstype@npm:3.1.2" - checksum: 10/1f39c541e9acd9562996d88bc9fb62d1cb234786ef11ed275567d4b2bd82e1ceacde25debc8de3d3b4871ae02c2933fa02614004c97190711caebad6347debc2 + resolution: "d3-hierarchy@npm:3.1.2" + checksum: 10/497b79dc6c35e28b21e8a7b94db92876abd1d4ec082d9803a07ea8964e55b0e71c511a21489363a36f1456f069adb8ff7d33c633678730d6ae961ed350b27733 + languageName: node + linkType: hard + +"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:3": + version: 3.0.1 + resolution: "d3-interpolate@npm:3.0.1" + dependencies: + d3-color: "npm:1 - 3" + checksum: 10/988d66497ef5c190cf64f8c80cd66e1e9a58c4d1f8932d776a8e3ae59330291795d5a342f5a97602782ccbef21a5df73bc7faf1f0dc46a5145ba6243a82a0f0e + languageName: node + linkType: hard + +"d3-path@npm:1 - 3, d3-path@npm:3, d3-path@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-path@npm:3.1.0" + checksum: 10/8e97a9ab4930a05b18adda64cf4929219bac913a5506cf8585631020253b39309549632a5cbeac778c0077994442ddaaee8316ee3f380e7baf7566321b84e76a + languageName: node + linkType: hard + +"d3-polygon@npm:3": + version: 3.0.1 + resolution: "d3-polygon@npm:3.0.1" + checksum: 10/c4fa2ed19dcba13fd341815361d27e64597aa0d38d377e401e1353c4acbe8bd73c0afb3e49a1cf4119fadc3651ec8073d06aa6d0e34e664c868d071e58912cd1 + languageName: node + linkType: hard + +"d3-quadtree@npm:1 - 3, d3-quadtree@npm:3": + version: 3.0.1 + resolution: "d3-quadtree@npm:3.0.1" + checksum: 10/1915b6a7b031fc312f9af61947072db9468c5a2b03837f6a90b38fdaebcd0ea17a883bffd94d16b8a6848e81711a06222f7d39f129386ef1850297219b8d32ba + languageName: node + linkType: hard + +"d3-random@npm:3": + version: 3.0.1 + resolution: "d3-random@npm:3.0.1" + checksum: 10/9f41d6ca3a1826cea8d88392917b5039504337d442a4d1357c870fa3031701e60209a2689a6ddae7df8fca824383d038c957eb545bc49a7428c71aaf3b11f56f + languageName: node + linkType: hard + +"d3-scale-chromatic@npm:3": + version: 3.1.0 + resolution: "d3-scale-chromatic@npm:3.1.0" + dependencies: + d3-color: "npm:1 - 3" + d3-interpolate: "npm:1 - 3" + checksum: 10/25df6a7c621b9171df8b2225e98e41c0a6bcac4de02deb4807280b31116e8f495c5ac93301796098ee5b698cb690154e8138d90d72fd1fe36744c60e02a3d8c4 + languageName: node + linkType: hard + +"d3-scale@npm:4": + version: 4.0.2 + resolution: "d3-scale@npm:4.0.2" + dependencies: + d3-array: "npm:2.10.0 - 3" + d3-format: "npm:1 - 3" + d3-interpolate: "npm:1.2.0 - 3" + d3-time: "npm:2.1.1 - 3" + d3-time-format: "npm:2 - 4" + checksum: 10/e2dc4243586eae2a0fdf91de1df1a90d51dfacb295933f0ca7e9184c31203b01436bef69906ad40f1100173a5e6197ae753cb7b8a1a8fcfda43194ea9cad6493 + languageName: node + linkType: hard + +"d3-selection@npm:2 - 3, d3-selection@npm:3": + version: 3.0.0 + resolution: "d3-selection@npm:3.0.0" + checksum: 10/0e5acfd305b31628b7be5009ba7303d84bb34817a88ed4dde9c8bd9c23528573fc5272f89fc04e5be03d2cbf5441a248d7274aaf55a8ef3dad46e16333d72298 + languageName: node + linkType: hard + +"d3-shape@npm:3": + version: 3.2.0 + resolution: "d3-shape@npm:3.2.0" + dependencies: + d3-path: "npm:^3.1.0" + checksum: 10/2e861f4d4781ee8abd85d2b435f848d667479dcf01a4e0db3a06600a5bdeddedb240f88229ec7b3bf7fa300c2b3526faeaf7e75f9a24dbf4396d3cc5358ff39d + languageName: node + linkType: hard + +"d3-time-format@npm:2 - 4, d3-time-format@npm:4": + version: 4.1.0 + resolution: "d3-time-format@npm:4.1.0" + dependencies: + d3-time: "npm:1 - 3" + checksum: 10/ffc0959258fbb90e3890bfb31b43b764f51502b575e87d0af2c85b85ac379120d246914d07fca9f533d1bcedc27b2841d308a00fd64848c3e2cad9eff5c9a0aa + languageName: node + linkType: hard + +"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:3": + version: 3.1.0 + resolution: "d3-time@npm:3.1.0" + dependencies: + d3-array: "npm:2 - 3" + checksum: 10/c110bed295ce63e8180e45b82a9b0ba114d5f33ff315871878f209c1a6d821caa505739a2b07f38d1396637155b8e7372632dacc018e11fbe8ceef58f6af806d + languageName: node + linkType: hard + +"d3-timer@npm:1 - 3, d3-timer@npm:3": + version: 3.0.1 + resolution: "d3-timer@npm:3.0.1" + checksum: 10/004128602bb187948d72c7dc153f0f063f38ac7a584171de0b45e3a841ad2e17f1e40ad396a4af9cce5551b6ab4a838d5246d23492553843d9da4a4050a911e2 + languageName: node + linkType: hard + +"d3-transition@npm:2 - 3, d3-transition@npm:3": + version: 3.0.1 + resolution: "d3-transition@npm:3.0.1" + dependencies: + d3-color: "npm:1 - 3" + d3-dispatch: "npm:1 - 3" + d3-ease: "npm:1 - 3" + d3-interpolate: "npm:1 - 3" + d3-timer: "npm:1 - 3" + peerDependencies: + d3-selection: 2 - 3 + checksum: 10/02571636acb82f5532117928a87fe25de68f088c38ab4a8b16e495f0f2d08a3fd2937eaebdefdfcf7f1461545524927d2632d795839b88d2e4c71e387aaaffac + languageName: node + linkType: hard + +"d3-zoom@npm:3": + version: 3.0.0 + resolution: "d3-zoom@npm:3.0.0" + dependencies: + d3-dispatch: "npm:1 - 3" + d3-drag: "npm:2 - 3" + d3-interpolate: "npm:1 - 3" + d3-selection: "npm:2 - 3" + d3-transition: "npm:2 - 3" + checksum: 10/0e6e5c14e33c4ecdff311a900dd037dea407734f2dd2818988ed6eae342c1799e8605824523678bd404f81e37824cc588f62dbde46912444c89acc7888036c6b + languageName: node + linkType: hard + +"d3@npm:^7.4.0, d3@npm:^7.8.2": + version: 7.9.0 + resolution: "d3@npm:7.9.0" + dependencies: + d3-array: "npm:3" + d3-axis: "npm:3" + d3-brush: "npm:3" + d3-chord: "npm:3" + d3-color: "npm:3" + d3-contour: "npm:4" + d3-delaunay: "npm:6" + d3-dispatch: "npm:3" + d3-drag: "npm:3" + d3-dsv: "npm:3" + d3-ease: "npm:3" + d3-fetch: "npm:3" + d3-force: "npm:3" + d3-format: "npm:3" + d3-geo: "npm:3" + d3-hierarchy: "npm:3" + d3-interpolate: "npm:3" + d3-path: "npm:3" + d3-polygon: "npm:3" + d3-quadtree: "npm:3" + d3-random: "npm:3" + d3-scale: "npm:4" + d3-scale-chromatic: "npm:3" + d3-selection: "npm:3" + d3-shape: "npm:3" + d3-time: "npm:3" + d3-time-format: "npm:4" + d3-timer: "npm:3" + d3-transition: "npm:3" + d3-zoom: "npm:3" + checksum: 10/b0b418996bdf279b01f5c7a0117927f9ad3e833c9ce4657550ce6f6ace70b70cf829c4144b01df0be5a0f716d4e5f15ab0cadc5ff1ce1561d7be29ac86493d83 + languageName: node + linkType: hard + +"dagre-d3-es@npm:7.0.9": + version: 7.0.9 + resolution: "dagre-d3-es@npm:7.0.9" + dependencies: + d3: "npm:^7.8.2" + lodash-es: "npm:^4.17.21" + checksum: 10/2693dd5f8cb2b83a7950f1aec70bdd9314b0fd906be05828f5ba273cfb996ae3acc377d0072b3a7ab1d518ad049e02a5133aabdb7492bce157c86dc034afa90f languageName: node linkType: hard @@ -6959,6 +7903,39 @@ __metadata: languageName: node linkType: hard +"data-view-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-buffer@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10/c10b155a4e93999d3a215d08c23eea95f865e1f510b2e7748fcae1882b776df1afe8c99f483ace7fc0e5a3193ab08da138abebc9829d12003746c5a338c4d644 + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10/2a47055fcf1ab3ec41b00b6f738c6461a841391a643c9ed9befec1117c1765b4d492661d97fb7cc899200c328949dca6ff189d2c6537d96d60e8a02dfe3c95f7 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-offset@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10/fa3bdfa0968bea6711ee50375094b39f561bce3f15f9e558df59de9c25f0bdd4cddc002d9c1d70ac7772ebd36854a7e22d1761e7302a934e6f1c2263bcf44aa2 + languageName: node + linkType: hard + "date-fns@npm:2.x, date-fns@npm:^2.29.1": version: 2.30.0 resolution: "date-fns@npm:2.30.0" @@ -6968,10 +7945,17 @@ __metadata: languageName: node linkType: hard -"dayjs@npm:1.x": - version: 1.11.9 - resolution: "dayjs@npm:1.11.9" - checksum: 10/7bee5a13653049ae166d4ee7f17fd1b3cd31ec8699b2bae1dee6262431d8d5815a4a9f12eaf48d1879a98d993c014a9a9098ed75aa6a041efe9bccc080a687cd +"dayjs@npm:1.x, dayjs@npm:^1.11.7": + version: 1.11.19 + resolution: "dayjs@npm:1.11.19" + checksum: 10/185b820d68492b83a3ce2b8ddc7543034edc1dfd1423183f6ae4707b29929a3cc56503a81826309279f9084680c15966b99456e74cf41f7d1f6a2f98f9c7196f + languageName: node + linkType: hard + +"debounce@npm:^1.2.1": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 10/0b95b2a9d80ed69117d890f8dab8c0f2d6066f8d20edd1d810ae51f8f366a6d4c8b1d56e97dcb9304e93d57de4d5db440d34a03def7dad50403fc3f22bf16808 languageName: node linkType: hard @@ -6984,15 +7968,15 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" +"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.4.0, debug@npm:^4.4.3": + version: 4.4.3 + resolution: "debug@npm:4.4.3" dependencies: - ms: "npm:2.1.2" + ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10/0073c3bcbd9cb7d71dd5f6b55be8701af42df3e56e911186dfa46fac3a5b9eb7ce7f377dd1d3be6db8977221f8eb333d945216f645cf56f6b688cd484837d255 + checksum: 10/9ada3434ea2993800bd9a1e320bd4aa7af69659fb51cca685d390949434bc0a8873c21ed7c9b852af6f2455a55c6d050aa3937d52b3c69f796dab666f762acad languageName: node linkType: hard @@ -7006,9 +7990,9 @@ __metadata: linkType: hard "decimal.js@npm:^10.3.1": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 10/de663a7bc4d368e3877db95fcd5c87b965569b58d16cdc4258c063d231ca7118748738df17cd638f7e9dd0be8e34cec08d7234b20f1f2a756a52fc5a38b188d0 + version: 10.6.0 + resolution: "decimal.js@npm:10.6.0" + checksum: 10/c0d45842d47c311d11b38ce7ccc911121953d4df3ebb1465d92b31970eb4f6738a065426a06094af59bee4b0d64e42e7c8984abd57b6767c64ea90cf90bb4a69 languageName: node linkType: hard @@ -7029,13 +8013,13 @@ __metadata: linkType: hard "deep-equal@npm:^2.0.5": - version: 2.2.2 - resolution: "deep-equal@npm:2.2.2" + version: 2.2.3 + resolution: "deep-equal@npm:2.2.3" dependencies: array-buffer-byte-length: "npm:^1.0.0" - call-bind: "npm:^1.0.2" + call-bind: "npm:^1.0.5" es-get-iterator: "npm:^1.1.3" - get-intrinsic: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.2" is-arguments: "npm:^1.1.1" is-array-buffer: "npm:^3.0.2" is-date-object: "npm:^1.0.5" @@ -7045,12 +8029,12 @@ __metadata: object-is: "npm:^1.1.5" object-keys: "npm:^1.1.1" object.assign: "npm:^4.1.4" - regexp.prototype.flags: "npm:^1.5.0" + regexp.prototype.flags: "npm:^1.5.1" side-channel: "npm:^1.0.4" which-boxed-primitive: "npm:^1.0.2" which-collection: "npm:^1.0.1" - which-typed-array: "npm:^1.1.9" - checksum: 10/883cb8b3cf10d387ce8fb191f7d7b46b48022e00810074c5629053953aa3be5c5890dd40d30d31d27fb140af9a541c06c852ab5d28f76b07095c9d28e3c4b04f + which-typed-array: "npm:^1.1.13" + checksum: 10/1ce49d0b71d0f14d8ef991a742665eccd488dfc9b3cada069d4d7a86291e591c92d2589c832811dea182b4015736b210acaaebce6184be356c1060d176f5a05f languageName: node linkType: hard @@ -7091,6 +8075,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10/abdcb2505d80a53524ba871273e5da75e77e52af9e15b3aa65d8aad82b8a3a424dad7aee2cc0b71470ac7acf501e08defac362e8b6a73cdb4309f028061df4ae + languageName: node + linkType: hard + "define-lazy-prop@npm:^2.0.0": version: 2.0.0 resolution: "define-lazy-prop@npm:2.0.0" @@ -7098,13 +8093,14 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": - version: 1.2.0 - resolution: "define-properties@npm:1.2.0" +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" dependencies: + define-data-property: "npm:^1.0.1" has-property-descriptors: "npm:^1.0.0" object-keys: "npm:^1.1.1" - checksum: 10/e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 + checksum: 10/b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 languageName: node linkType: hard @@ -7124,6 +8120,15 @@ __metadata: languageName: node linkType: hard +"delaunator@npm:5": + version: 5.0.1 + resolution: "delaunator@npm:5.0.1" + dependencies: + robust-predicates: "npm:^3.0.2" + checksum: 10/c378a55138d81d471a7214635b1a2c5e74f8ee06582f558df72f0c7c82c25868599ce9a18fb25a245c6c03cab886d17fb574681c78371b539dd069818703f53a + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -7131,7 +8136,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0": +"depd@npm:2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: 10/c0c8ff36079ce5ada64f46cc9d6fd47ebcf38241105b6e0c98f412e8ad91f084bcf906ff644cc3a4bd876ca27a62accb8b0fff72ea6ed1a414b89d8506f4a5ca @@ -7145,14 +8150,7 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.3": - version: 2.0.3 - resolution: "dequal@npm:2.0.3" - checksum: 10/6ff05a7561f33603df87c45e389c9ac0a95e3c056be3da1a0c4702149e3a7f6fe5ffbb294478687ba51a9e95f3a60e8b6b9005993acd79c292c7d15f71964b6b - languageName: node - linkType: hard - -"destroy@npm:1.2.0": +"destroy@npm:1.2.0, destroy@npm:~1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" checksum: 10/0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 @@ -7168,6 +8166,13 @@ __metadata: languageName: node linkType: hard +"detect-libc@npm:^2.0.3": + version: 2.1.2 + resolution: "detect-libc@npm:2.1.2" + checksum: 10/b736c8d97d5d46164c0d1bed53eb4e6a3b1d8530d460211e2d52f1c552875e706c58a5376854e4e54f8b828c9cada58c855288c968522eb93ac7696d65970766 + languageName: node + linkType: hard + "detect-newline@npm:^3.0.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -7196,15 +8201,15 @@ __metadata: linkType: hard "detect-port@npm:^1.3.0": - version: 1.5.1 - resolution: "detect-port@npm:1.5.1" + version: 1.6.1 + resolution: "detect-port@npm:1.6.1" dependencies: address: "npm:^1.0.1" debug: "npm:4" bin: detect: bin/detect-port.js detect-port: bin/detect-port.js - checksum: 10/b48da9340481742547263d5d985e65d078592557863402ecf538511735e83575867e94f91fe74405ea19b61351feb99efccae7e55de9a151d5654e3417cea05b + checksum: 10/0429fa423abb15fc453face64e6ffa406e375f51f5b4421a7886962e680dc05824eae9b6ee4594ba273685c3add415ad00982b5da54802ac3de6f846173284c3 languageName: node linkType: hard @@ -7245,19 +8250,12 @@ __metadata: languageName: node linkType: hard -"dns-equal@npm:^1.0.0": - version: 1.0.0 - resolution: "dns-equal@npm:1.0.0" - checksum: 10/c4f55af6f13536de39ebcfa15f504a5678d4fc2cf37b76fd41e73aa46dbd1fa596c9468c0c929aeb248ec443cb217fde949942c513312acf93c76cf783276617 - languageName: node - linkType: hard - "dns-packet@npm:^5.2.2": - version: 5.6.0 - resolution: "dns-packet@npm:5.6.0" + version: 5.6.1 + resolution: "dns-packet@npm:5.6.1" dependencies: "@leichtgewicht/ip-codec": "npm:^2.0.1" - checksum: 10/1643bf648fe63c44f21f28dff2174f6de45034b55e47a6e9b427a179701fc8a5b15019f7f84b300b537637c69ab3d03553333c566c99cc905ba97652ea388ee8 + checksum: 10/ef5496dd5a906e22ed262cbe1a6f5d532c0893c4f1884a7aa37d4d0d8b8376a2b43f749aab087c8bb1354d67b40444f7fca8de4017b161a4cea468543061aed3 languageName: node linkType: hard @@ -7287,14 +8285,14 @@ __metadata: linkType: hard "docusaurus-plugin-sass@npm:^0.2.5": - version: 0.2.5 - resolution: "docusaurus-plugin-sass@npm:0.2.5" + version: 0.2.6 + resolution: "docusaurus-plugin-sass@npm:0.2.6" dependencies: - sass-loader: "npm:^10.1.1" + sass-loader: "npm:^16.0.2" peerDependencies: "@docusaurus/core": ^2.0.0-beta || ^3.0.0-alpha sass: ^1.30.0 - checksum: 10/bcf9627c0491ab6f6a6d8387c2b72b9aac9bf31575f3affb6441516c8c60512cd9c68444f7b5be6167cfd86379b9beffa8a97f297d77c6ad3ee9e4cc882fa4db + checksum: 10/2baff278140a77f3d848e90014c1a975391f87f723bcdc860df3d70c34f92fb4f1da1777384af17cf6c515a4371a818a0d0fd321937890d8c86c183fdfc60f18 languageName: node linkType: hard @@ -7384,6 +8382,13 @@ __metadata: languageName: node linkType: hard +"dompurify@npm:2.4.3": + version: 2.4.3 + resolution: "dompurify@npm:2.4.3" + checksum: 10/4e65b481e9ecc6965bc7bb4747571ddc1373167112c639851bdf3d567c682b8b356f0a6bded4af54adaa6ff7582f619792321d68a15759ef9acbe2d4910bc070 + languageName: node + linkType: hard + "domutils@npm:^2.5.2, domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" @@ -7395,14 +8400,14 @@ __metadata: languageName: node linkType: hard -"domutils@npm:^3.0.1": - version: 3.1.0 - resolution: "domutils@npm:3.1.0" +"domutils@npm:^3.0.1, domutils@npm:^3.2.2": + version: 3.2.2 + resolution: "domutils@npm:3.2.2" dependencies: dom-serializer: "npm:^2.0.0" domelementtype: "npm:^2.3.0" domhandler: "npm:^5.0.3" - checksum: 10/9a169a6e57ac4c738269a73ab4caf785114ed70e46254139c1bbc8144ac3102aacb28a6149508395ae34aa5d6a40081f4fa5313855dc8319c6d8359866b6dfea + checksum: 10/2e08842151aa406f50fe5e6d494f4ec73c2373199fa00d1f77b56ec604e566b7f226312ae35ab8160bb7f27a27c7285d574c8044779053e499282ca9198be210 languageName: node linkType: hard @@ -7425,6 +8430,17 @@ __metadata: languageName: node linkType: hard +"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10/5add88a3d68d42d6e6130a0cac450b7c2edbe73364bbd2fc334564418569bea97c6943a8fcd70e27130bf32afc236f30982fc4905039b703f23e9e0433c29934 + languageName: node + linkType: hard + "duplexer3@npm:^0.1.4": version: 0.1.5 resolution: "duplexer3@npm:0.1.5" @@ -7453,10 +8469,17 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.477": - version: 1.4.492 - resolution: "electron-to-chromium@npm:1.4.492" - checksum: 10/df8d3c989ecd7db868bb58b58d29f2b43886eca380a8302c9e97930c7acf8a2a585e5c6c62bd5244bb0be21b2c75d7656b164758be07d5853b8e2b36224a33bc +"electron-to-chromium@npm:^1.5.263": + version: 1.5.307 + resolution: "electron-to-chromium@npm:1.5.307" + checksum: 10/a72af3f89b83d81d151872c28a0886817b1da973e00629c0189c928ed46efa3e975c856969727bf6ebb32ec5ea8362c96e765f307260beaef3003d50fa5fbc11 + languageName: node + linkType: hard + +"elkjs@npm:^0.8.2": + version: 0.8.2 + resolution: "elkjs@npm:0.8.2" + checksum: 10/0076f3b41ab874144eaab5e9edd3a592006cff154425d9d9adc8201614caa6673babc0ca9bd0ea2e8bae2a16ac87c07c2d4d4cc04f22d660928e50886481143e languageName: node linkType: hard @@ -7495,38 +8518,39 @@ __metadata: languageName: node linkType: hard -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: 10/e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10/abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe languageName: node linkType: hard -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" +"encoding-sniffer@npm:^0.2.1": + version: 0.2.1 + resolution: "encoding-sniffer@npm:0.2.1" dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10/bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + iconv-lite: "npm:^0.6.3" + whatwg-encoding: "npm:^3.1.1" + checksum: 10/7d747238239408d52e8bceee22fcdc47546049866d19d601e7dc89e55d226922c51912ef046d7b38951970e8fd17e1e761cef3de98a4b2f46fc91c8a1ac143c9 languageName: node linkType: hard "end-of-stream@npm:^1.1.0": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" dependencies: once: "npm:^1.4.0" - checksum: 10/530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + checksum: 10/1e0cfa6e7f49887544e03314f9dfc56a8cb6dde910cbb445983ecc2ff426fc05946df9d75d8a21a3a64f2cecfe1bf88f773952029f46756b2ed64a24e95b1fb8 languageName: node linkType: hard -"enhanced-resolve@npm:^5.12.0, enhanced-resolve@npm:^5.15.0": - version: 5.15.0 - resolution: "enhanced-resolve@npm:5.15.0" +"enhanced-resolve@npm:^5.20.0": + version: 5.20.0 + resolution: "enhanced-resolve@npm:5.20.0" dependencies: graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10/180c3f2706f9117bf4dc7982e1df811dad83a8db075723f299245ef4488e0cad7e96859c5f0e410682d28a4ecd4da021ec7d06265f7e4eb6eed30c69ca5f7d3e + tapable: "npm:^2.3.0" + checksum: 10/ba22699e4b46dc1be6441c359636ebcdd5028229219a7d6ba10f39996401f950967f8297ddf3284d0ee8e33c8133a8742696154e383cc08d8bd2bf80ba87df97 languageName: node linkType: hard @@ -7554,6 +8578,20 @@ __metadata: languageName: node linkType: hard +"entities@npm:^6.0.0": + version: 6.0.1 + resolution: "entities@npm:6.0.1" + checksum: 10/62af1307202884349d2867f0aac5c60d8b57102ea0b0e768b16246099512c28e239254ad772d6834e7e14cb1b6f153fc3d0c031934e3183b086c86d3838d874a + languageName: node + linkType: hard + +"entities@npm:^7.0.1": + version: 7.0.1 + resolution: "entities@npm:7.0.1" + checksum: 10/3c0c58d869c45148463e96d21dee2d1b801bd3fe4cf47aa470cd26dfe81d59e9e0a9be92ae083fa02fa441283c883a471486e94538dcfb8544428aa80a55271b + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -7561,66 +8599,88 @@ __metadata: languageName: node linkType: hard -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10/1d20d825cdcce8d811bfbe86340f4755c02655a7feb2f13f8c880566d9d72a3f6c92c192a6867632e490d6da67b678271f46e01044996a6443e870331100dfdd - languageName: node - linkType: hard - "error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" + version: 1.3.4 + resolution: "error-ex@npm:1.3.4" dependencies: is-arrayish: "npm:^0.2.1" - checksum: 10/d547740aa29c34e753fb6fed2c5de81802438529c12b3673bd37b6bb1fe49b9b7abdc3c11e6062fe625d8a296b3cf769a80f878865e25e685f787763eede3ffb + checksum: 10/ae3939fd4a55b1404e877df2080c6b59acc516d5b7f08a181040f78f38b4e2399633bfed2d9a21b91c803713fff7295ac70bebd8f3657ef352a95c2cd9aa2e4b + languageName: node + linkType: hard + +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0, es-abstract@npm:^1.24.1": + version: 1.24.1 + resolution: "es-abstract@npm:1.24.1" + dependencies: + array-buffer-byte-length: "npm:^1.0.2" + arraybuffer.prototype.slice: "npm:^1.0.4" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + data-view-buffer: "npm:^1.0.2" + data-view-byte-length: "npm:^1.0.2" + data-view-byte-offset: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + es-set-tostringtag: "npm:^2.1.0" + es-to-primitive: "npm:^1.3.0" + function.prototype.name: "npm:^1.1.8" + get-intrinsic: "npm:^1.3.0" + get-proto: "npm:^1.0.1" + get-symbol-description: "npm:^1.1.0" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.1.0" + is-array-buffer: "npm:^3.0.5" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.2" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.2.1" + is-set: "npm:^2.0.3" + is-shared-array-buffer: "npm:^1.0.4" + is-string: "npm:^1.1.1" + is-typed-array: "npm:^1.1.15" + is-weakref: "npm:^1.1.1" + math-intrinsics: "npm:^1.1.0" + object-inspect: "npm:^1.13.4" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.7" + own-keys: "npm:^1.0.1" + regexp.prototype.flags: "npm:^1.5.4" + safe-array-concat: "npm:^1.1.3" + safe-push-apply: "npm:^1.0.0" + safe-regex-test: "npm:^1.1.0" + set-proto: "npm:^1.0.0" + stop-iteration-iterator: "npm:^1.1.0" + string.prototype.trim: "npm:^1.2.10" + string.prototype.trimend: "npm:^1.0.9" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.3" + typed-array-byte-length: "npm:^1.0.3" + typed-array-byte-offset: "npm:^1.0.4" + typed-array-length: "npm:^1.0.7" + unbox-primitive: "npm:^1.1.0" + which-typed-array: "npm:^1.1.19" + checksum: 10/c84cb69ebae36781309a3ed70ff40b4767a921d3b3518060fac4e08f14ede04491b68e9f318aedf186e349d4af4a40f5d0e4111e46513800e8368551fd09de8c + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10/f8dc9e660d90919f11084db0a893128f3592b781ce967e4fccfb8f3106cb83e400a4032c559184ec52ee1dbd4b01e7776c7cd0b3327b1961b1a4a7008920fe78 languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.21.3": - version: 1.22.1 - resolution: "es-abstract@npm:1.22.1" - dependencies: - array-buffer-byte-length: "npm:^1.0.0" - arraybuffer.prototype.slice: "npm:^1.0.1" - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.2" - es-set-tostringtag: "npm:^2.0.1" - es-to-primitive: "npm:^1.2.1" - function.prototype.name: "npm:^1.1.5" - get-intrinsic: "npm:^1.2.1" - get-symbol-description: "npm:^1.0.0" - globalthis: "npm:^1.0.3" - gopd: "npm:^1.0.1" - has: "npm:^1.0.3" - has-property-descriptors: "npm:^1.0.0" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.5" - is-array-buffer: "npm:^3.0.2" - is-callable: "npm:^1.2.7" - is-negative-zero: "npm:^2.0.2" - is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.2" - is-string: "npm:^1.0.7" - is-typed-array: "npm:^1.1.10" - is-weakref: "npm:^1.0.2" - object-inspect: "npm:^1.12.3" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.4" - regexp.prototype.flags: "npm:^1.5.0" - safe-array-concat: "npm:^1.0.0" - safe-regex-test: "npm:^1.0.0" - string.prototype.trim: "npm:^1.2.7" - string.prototype.trimend: "npm:^1.0.6" - string.prototype.trimstart: "npm:^1.0.6" - typed-array-buffer: "npm:^1.0.0" - typed-array-byte-length: "npm:^1.0.0" - typed-array-byte-offset: "npm:^1.0.0" - typed-array-length: "npm:^1.0.4" - unbox-primitive: "npm:^1.0.2" - which-typed-array: "npm:^1.1.10" - checksum: 10/bd6c243a128ea1cb97cdd11c433a1f712b607b66bb2d40b42e4a4e4c746e679d3c168b59614fefed4bc3b0d7abc106ad202e8f417739371a151b9189d75af72a +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10/96e65d640156f91b707517e8cdc454dd7d47c32833aa3e85d79f24f9eb7ea85f39b63e36216ef0114996581969b59fe609a94e30316b08f5f4df1d44134cf8d5 languageName: node linkType: hard @@ -7641,66 +8701,82 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.12": - version: 1.0.12 - resolution: "es-iterator-helpers@npm:1.0.12" - dependencies: - asynciterator.prototype: "npm:^1.0.0" - es-abstract: "npm:^1.21.3" - es-set-tostringtag: "npm:^2.0.1" - function-bind: "npm:^1.1.1" - globalthis: "npm:^1.0.3" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.5" - iterator.prototype: "npm:^1.1.0" - safe-array-concat: "npm:^1.0.0" - checksum: 10/481f3385e7a4a78e446e53e03dfa725b66d8c774ae924ecfe842a9ba000a353f654aa73a9b92e0230d068d0d284267e580fc949810088487f68efa29b168f4c7 +"es-iterator-helpers@npm:^1.2.1": + version: 1.2.2 + resolution: "es-iterator-helpers@npm:1.2.2" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.24.1" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.1.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.3.0" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + internal-slot: "npm:^1.1.0" + iterator.prototype: "npm:^1.1.5" + safe-array-concat: "npm:^1.1.3" + checksum: 10/17b5b2834c4f5719d6ce0e837a4d11c6ba4640bee28290d22ec4daf7106ec3d5fe0ff4f7e5dbaa2b4612e8335934360e964a8f08608d43f2889da106b25481ee languageName: node linkType: hard -"es-module-lexer@npm:^1.2.1": - version: 1.3.0 - resolution: "es-module-lexer@npm:1.3.0" - checksum: 10/dee2af09669d05282db987839681ea1917ce31ce4a2364cc9eb598675344c5c709895e7e782db87794065a6f3af054552e2cf42ccadcaec4c9fc0cbc4898f193 +"es-module-lexer@npm:^2.0.0": + version: 2.0.0 + resolution: "es-module-lexer@npm:2.0.0" + checksum: 10/b075855289b5f40ee496f3d7525c5c501d029c3da15c22298a0030d625bf36d1da0768b26278f7f4bada2a602459b505888e20b77c414fba5da5619b0e84dbd1 languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" dependencies: - get-intrinsic: "npm:^1.1.3" - has: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.0" - checksum: 10/ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + es-errors: "npm:^1.3.0" + checksum: 10/54fe77de288451dae51c37bfbfe3ec86732dc3778f98f3eb3bdb4bf48063b2c0b8f9c93542656986149d08aa5be3204286e2276053d19582b76753f1a2728867 languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.0": - version: 1.0.0 - resolution: "es-shim-unscopables@npm:1.0.0" +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" dependencies: - has: "npm:^1.0.3" - checksum: 10/ac2db2c70d253cf83bebcdc974d185239e205ca18af743efd3b656bac00cabfee2358a050b18b63b46972dab5cfa10ef3f2597eb3a8d4d6d9417689793665da6 + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10/86814bf8afbcd8966653f731415888019d4bc4aca6b6c354132a7a75bb87566751e320369654a101d23a91c87a85c79b178bcf40332839bd347aff437c4fb65f languageName: node linkType: hard -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" +"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0": + version: 1.1.0 + resolution: "es-shim-unscopables@npm:1.1.0" dependencies: - is-callable: "npm:^1.1.4" - is-date-object: "npm:^1.0.1" - is-symbol: "npm:^1.0.2" - checksum: 10/74aeeefe2714cf99bb40cab7ce3012d74e1e2c1bd60d0a913b467b269edde6e176ca644b5ba03a5b865fb044a29bca05671cd445c85ca2cdc2de155d7fc8fe9b + hasown: "npm:^2.0.2" + checksum: 10/c351f586c30bbabc62355be49564b2435468b52c3532b8a1663672e3d10dc300197e69c247869dd173e56d86423ab95fc0c10b0939cdae597094e0fdca078cba languageName: node linkType: hard -"escalade@npm:^3.1.1": - version: 3.1.1 - resolution: "escalade@npm:3.1.1" - checksum: 10/afa618e73362576b63f6ca83c975456621095a1ed42ff068174e3f5cea48afc422814dda548c96e6ebb5333e7265140c7292abcc81bbd6ccb1757d50d3a4e182 +"es-to-primitive@npm:^1.3.0": + version: 1.3.0 + resolution: "es-to-primitive@npm:1.3.0" + dependencies: + is-callable: "npm:^1.2.7" + is-date-object: "npm:^1.0.5" + is-symbol: "npm:^1.0.4" + checksum: 10/17faf35c221aad59a16286cbf58ef6f080bf3c485dff202c490d074d8e74da07884e29b852c245d894eac84f73c58330ec956dfd6d02c0b449d75eb1012a3f9b + languageName: node + linkType: hard + +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10/9d7169e3965b2f9ae46971afa392f6e5a25545ea30f2e2dd99c9b0a95a3f52b5653681a84f5b2911a413ddad2d7a93d3514165072f349b5ffc59c75a899970d6 languageName: node linkType: hard @@ -7810,7 +8886,7 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-node@npm:^0.3.7": +"eslint-import-resolver-node@npm:^0.3.9": version: 0.3.9 resolution: "eslint-import-resolver-node@npm:0.3.9" dependencies: @@ -7822,32 +8898,38 @@ __metadata: linkType: hard "eslint-import-resolver-typescript@npm:^3.6.0": - version: 3.6.0 - resolution: "eslint-import-resolver-typescript@npm:3.6.0" + version: 3.10.1 + resolution: "eslint-import-resolver-typescript@npm:3.10.1" dependencies: - debug: "npm:^4.3.4" - enhanced-resolve: "npm:^5.12.0" - eslint-module-utils: "npm:^2.7.4" - fast-glob: "npm:^3.3.1" - get-tsconfig: "npm:^4.5.0" - is-core-module: "npm:^2.11.0" - is-glob: "npm:^4.0.3" + "@nolyfill/is-core-module": "npm:1.0.39" + debug: "npm:^4.4.0" + get-tsconfig: "npm:^4.10.0" + is-bun-module: "npm:^2.0.0" + stable-hash: "npm:^0.0.5" + tinyglobby: "npm:^0.2.13" + unrs-resolver: "npm:^1.6.2" peerDependencies: eslint: "*" eslint-plugin-import: "*" - checksum: 10/37ba363dd66631033a729c2ab54256ad071bc5b1e903c96665d26ff5a8d598661c2e7984f445c5972164dbca44d70d374d592bfe45d2a2f40a155a1a91cc3908 + eslint-plugin-import-x: "*" + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + checksum: 10/b8d6a9b2045c70f043f722f78c9e65bc0283126f0ad92c8f07473f7647d77f7b1562f765a472f17e06b81897b407091c0ec9f2e4592b158c9fd92d0b0c33de89 languageName: node linkType: hard -"eslint-module-utils@npm:^2.7.4, eslint-module-utils@npm:^2.8.0": - version: 2.8.0 - resolution: "eslint-module-utils@npm:2.8.0" +"eslint-module-utils@npm:^2.12.1": + version: 2.12.1 + resolution: "eslint-module-utils@npm:2.12.1" dependencies: debug: "npm:^3.2.7" peerDependenciesMeta: eslint: optional: true - checksum: 10/a9a7ed93eb858092e3cdc797357d4ead2b3ea06959b0eada31ab13862d46a59eb064b9cb82302214232e547980ce33618c2992f6821138a4934e65710ed9cc29 + checksum: 10/bd25d6610ec3abaa50e8f1beb0119541562bbb8dd02c035c7e887976fe1e0c5dd8175f4607ca8d86d1146df24d52a071bd3d1dd329f6902bd58df805a8ca16d3 languageName: node linkType: hard @@ -7864,30 +8946,31 @@ __metadata: linkType: hard "eslint-plugin-import@npm:^2.28.0": - version: 2.28.0 - resolution: "eslint-plugin-import@npm:2.28.0" - dependencies: - array-includes: "npm:^3.1.6" - array.prototype.findlastindex: "npm:^1.2.2" - array.prototype.flat: "npm:^1.3.1" - array.prototype.flatmap: "npm:^1.3.1" + version: 2.32.0 + resolution: "eslint-plugin-import@npm:2.32.0" + dependencies: + "@rtsao/scc": "npm:^1.1.0" + array-includes: "npm:^3.1.9" + array.prototype.findlastindex: "npm:^1.2.6" + array.prototype.flat: "npm:^1.3.3" + array.prototype.flatmap: "npm:^1.3.3" debug: "npm:^3.2.7" doctrine: "npm:^2.1.0" - eslint-import-resolver-node: "npm:^0.3.7" - eslint-module-utils: "npm:^2.8.0" - has: "npm:^1.0.3" - is-core-module: "npm:^2.12.1" + eslint-import-resolver-node: "npm:^0.3.9" + eslint-module-utils: "npm:^2.12.1" + hasown: "npm:^2.0.2" + is-core-module: "npm:^2.16.1" is-glob: "npm:^4.0.3" minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.6" - object.groupby: "npm:^1.0.0" - object.values: "npm:^1.1.6" - resolve: "npm:^1.22.3" + object.fromentries: "npm:^2.0.8" + object.groupby: "npm:^1.0.3" + object.values: "npm:^1.2.1" semver: "npm:^6.3.1" - tsconfig-paths: "npm:^3.14.2" + string.prototype.trimend: "npm:^1.0.9" + tsconfig-paths: "npm:^3.15.0" peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 10/6d6e983da572e053102e56a2c093545e30119ac777b083b1d535ddfc6112043bbf34a4389549f4eb316adb56630a7b2ee3ce0d8763aadc4dbf1eb68e0a8ca7a1 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + checksum: 10/1bacf4967e9ebf99e12176a795f0d6d3a87d1c9a030c2207f27b267e10d96a1220be2647504c7fc13ab543cdf13ffef4b8f5620e0447032dba4ff0d3922f7c9e languageName: node linkType: hard @@ -7909,28 +8992,27 @@ __metadata: linkType: hard "eslint-plugin-jsx-a11y@npm:^6.4.1": - version: 6.7.1 - resolution: "eslint-plugin-jsx-a11y@npm:6.7.1" - dependencies: - "@babel/runtime": "npm:^7.20.7" - aria-query: "npm:^5.1.3" - array-includes: "npm:^3.1.6" - array.prototype.flatmap: "npm:^1.3.1" - ast-types-flow: "npm:^0.0.7" - axe-core: "npm:^4.6.2" - axobject-query: "npm:^3.1.1" + version: 6.10.2 + resolution: "eslint-plugin-jsx-a11y@npm:6.10.2" + dependencies: + aria-query: "npm:^5.3.2" + array-includes: "npm:^3.1.8" + array.prototype.flatmap: "npm:^1.3.2" + ast-types-flow: "npm:^0.0.8" + axe-core: "npm:^4.10.0" + axobject-query: "npm:^4.1.0" damerau-levenshtein: "npm:^1.0.8" emoji-regex: "npm:^9.2.2" - has: "npm:^1.0.3" - jsx-ast-utils: "npm:^3.3.3" - language-tags: "npm:=1.0.5" + hasown: "npm:^2.0.2" + jsx-ast-utils: "npm:^3.3.5" + language-tags: "npm:^1.0.9" minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.6" - object.fromentries: "npm:^2.0.6" - semver: "npm:^6.3.0" + object.fromentries: "npm:^2.0.8" + safe-regex-test: "npm:^1.0.3" + string.prototype.includes: "npm:^2.0.1" peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10/b7eb451304dc27c9552649a716be1de3b5d577f39e53f6da6a2dac084b84b349b0224be3020439f99c2b3bf417a13c5591326f1ce6af8d74f1cb5d5d95c4222b + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + checksum: 10/388550798548d911e2286d530a29153ca00434a06fcfc0e31e0dda46a5e7960005e532fb29ce1ccbf1e394a3af3e5cf70c47ca43778861eacc5e3ed799adb79c languageName: node linkType: hard @@ -7950,37 +9032,39 @@ __metadata: linkType: hard "eslint-plugin-react-hooks@npm:^4.2.0": - version: 4.6.0 - resolution: "eslint-plugin-react-hooks@npm:4.6.0" + version: 4.6.2 + resolution: "eslint-plugin-react-hooks@npm:4.6.2" peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 10/3c63134e056a6d98d66e2c475c81f904169db817e89316d14e36269919e31f4876a2588aa0e466ec8ef160465169c627fe823bfdaae7e213946584e4a165a3ac + checksum: 10/5a0680941f34e70cf505bcb6082df31a3e445d193ee95a88ff3483041eb944f4cefdaf7e81b0eb1feb4eeceee8c7c6ddb8a2a6e8c4c0388514a42e16ac7b7a69 languageName: node linkType: hard "eslint-plugin-react@npm:^7.22.0": - version: 7.33.2 - resolution: "eslint-plugin-react@npm:7.33.2" + version: 7.37.5 + resolution: "eslint-plugin-react@npm:7.37.5" dependencies: - array-includes: "npm:^3.1.6" - array.prototype.flatmap: "npm:^1.3.1" - array.prototype.tosorted: "npm:^1.1.1" + array-includes: "npm:^3.1.8" + array.prototype.findlast: "npm:^1.2.5" + array.prototype.flatmap: "npm:^1.3.3" + array.prototype.tosorted: "npm:^1.1.4" doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.0.12" + es-iterator-helpers: "npm:^1.2.1" estraverse: "npm:^5.3.0" + hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.6" - object.fromentries: "npm:^2.0.6" - object.hasown: "npm:^1.1.2" - object.values: "npm:^1.1.6" + object.entries: "npm:^1.1.9" + object.fromentries: "npm:^2.0.8" + object.values: "npm:^1.2.1" prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.4" + resolve: "npm:^2.0.0-next.5" semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.8" + string.prototype.matchall: "npm:^4.0.12" + string.prototype.repeat: "npm:^1.0.0" peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10/cb8c5dd5859cace330e24b7d74b9c652c0d93ef1d87957261fe1ac2975c27c918d0d5dc607f25aba4972ce74d04456f4f93883a16ac10cd598680d047fc3495d + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + checksum: 10/ee1bd4e0ec64f29109d5a625bb703d179c82e0159c86c3f1b52fc1209d2994625a137dae303c333fb308a2e38315e44066d5204998177e31974382f9fda25d5c languageName: node linkType: hard @@ -8054,7 +9138,7 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 10/3f357c554a9ea794b094a09bd4187e5eacd1bc0d0653c3adeb87962c548e6a1ab8f982b86963ae1337f5d976004146536dcee5d0e2806665b193fbfbf1a9231b @@ -8133,11 +9217,11 @@ __metadata: linkType: hard "esquery@npm:^1.3.1, esquery@npm:^1.4.0": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" + version: 1.7.0 + resolution: "esquery@npm:1.7.0" dependencies: estraverse: "npm:^5.1.0" - checksum: 10/e65fcdfc1e0ff5effbf50fb4f31ea20143ae5df92bb2e4953653d8d40aa4bc148e0d06117a592ce4ea53eeab1dafdfded7ea7e22a5be87e82d73757329a1b01d + checksum: 10/4afaf3089367e1f5885caa116ef386dffd8bfd64da21fd3d0e56e938d2667cfb2e5400ab4a825aa70e799bb3741e5b5d63c0b94d86e2d4cf3095c9e64b2f5a15 languageName: node linkType: hard @@ -8254,41 +9338,41 @@ __metadata: linkType: hard "express@npm:^4.17.3": - version: 4.18.2 - resolution: "express@npm:4.18.2" + version: 4.22.1 + resolution: "express@npm:4.22.1" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" - body-parser: "npm:1.20.1" - content-disposition: "npm:0.5.4" + body-parser: "npm:~1.20.3" + content-disposition: "npm:~0.5.4" content-type: "npm:~1.0.4" - cookie: "npm:0.5.0" - cookie-signature: "npm:1.0.6" + cookie: "npm:~0.7.1" + cookie-signature: "npm:~1.0.6" debug: "npm:2.6.9" depd: "npm:2.0.0" - encodeurl: "npm:~1.0.2" + encodeurl: "npm:~2.0.0" escape-html: "npm:~1.0.3" etag: "npm:~1.8.1" - finalhandler: "npm:1.2.0" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - merge-descriptors: "npm:1.0.1" + finalhandler: "npm:~1.3.1" + fresh: "npm:~0.5.2" + http-errors: "npm:~2.0.0" + merge-descriptors: "npm:1.0.3" methods: "npm:~1.1.2" - on-finished: "npm:2.4.1" + on-finished: "npm:~2.4.1" parseurl: "npm:~1.3.3" - path-to-regexp: "npm:0.1.7" + path-to-regexp: "npm:~0.1.12" proxy-addr: "npm:~2.0.7" - qs: "npm:6.11.0" + qs: "npm:~6.14.0" range-parser: "npm:~1.2.1" safe-buffer: "npm:5.2.1" - send: "npm:0.18.0" - serve-static: "npm:1.15.0" + send: "npm:~0.19.0" + serve-static: "npm:~1.16.2" setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" + statuses: "npm:~2.0.1" type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10/869ae89ed6ff4bed7b373079dc58e5dddcf2915a2669b36037ff78c99d675ae930e5fe052b35c24f56557d28a023bb1cbe3e2f2fb87eaab96a1cedd7e597809d + checksum: 10/f33c1bd0c7d36e2a1f18de9cdc176469d32f68e20258d2941b8d296ab9a4fd9011872c246391bf87714f009fac5114c832ec5ac65cbee39421f1258801eb8470 languageName: node linkType: hard @@ -8322,16 +9406,16 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1": - version: 3.3.1 - resolution: "fast-glob@npm:3.3.1" +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.2": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" dependencies: "@nodelib/fs.stat": "npm:^2.0.2" "@nodelib/fs.walk": "npm:^1.2.3" glob-parent: "npm:^5.1.2" merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 10/51bcd15472879dfe51d4b01c5b70bbc7652724d39cdd082ba11276dbd7d84db0f6b33757e1938af8b2768a4bf485d9be0c89153beae24ee8331d6dcc7550379f + micromatch: "npm:^4.0.8" + checksum: 10/dcc6432b269762dd47381d8b8358bf964d8f4f60286ac6aa41c01ade70bda459ff2001b516690b96d5365f68a49242966112b5d5cc9cd82395fa8f9d017c90ad languageName: node linkType: hard @@ -8349,25 +9433,23 @@ __metadata: languageName: node linkType: hard -"fast-url-parser@npm:1.1.3": - version: 1.1.3 - resolution: "fast-url-parser@npm:1.1.3" - dependencies: - punycode: "npm:^1.3.2" - checksum: 10/6d33f46ce9776f7f3017576926207a950ca39bc5eb78fc794404f2288fe494720f9a119084b75569bd9eb09d2b46678bfaf39c191fb2c808ef3c833dc8982752 +"fast-uri@npm:^3.0.1": + version: 3.1.0 + resolution: "fast-uri@npm:3.1.0" + checksum: 10/818b2c96dc913bcf8511d844c3d2420e2c70b325c0653633f51821e4e29013c2015387944435cd0ef5322c36c9beecc31e44f71b257aeb8e0b333c1d62bb17c2 languageName: node linkType: hard "fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" + version: 1.20.1 + resolution: "fastq@npm:1.20.1" dependencies: reusify: "npm:^1.0.4" - checksum: 10/a443180068b527dd7b3a63dc7f2a47ceca2f3e97b9c00a1efe5538757e6cc4056a3526df94308075d7727561baf09ebaa5b67da8dcbddb913a021c5ae69d1f69 + checksum: 10/ab2fe3a7a108112e7752cfe7fc11683c21e595913a6a593ad0b4415f31dddbfc283775ab66f2c8ccea6ab7cfc116157cbddcfae9798d9de98d08fe0a2c3e97b2 languageName: node linkType: hard -"faye-websocket@npm:0.11.3": +"faye-websocket@npm:0.11.3, faye-websocket@npm:^0.11.3": version: 0.11.3 resolution: "faye-websocket@npm:0.11.3" dependencies: @@ -8376,15 +9458,6 @@ __metadata: languageName: node linkType: hard -"faye-websocket@npm:^0.11.3": - version: 0.11.4 - resolution: "faye-websocket@npm:0.11.4" - dependencies: - websocket-driver: "npm:>=0.5.1" - checksum: 10/22433c14c60925e424332d2794463a8da1c04848539b5f8db5fced62a7a7c71a25335a4a8b37334e3a32318835e2b87b1733d008561964121c4a0bd55f0878c3 - languageName: node - linkType: hard - "fb-watchman@npm:^2.0.0": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" @@ -8474,27 +9547,27 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" dependencies: to-regex-range: "npm:^5.0.1" - checksum: 10/e260f7592fd196b4421504d3597cc76f4a1ca7a9488260d533b611fc3cefd61e9a9be1417cb82d3b01ad9f9c0ff2dbf258e1026d2445e26b0cf5148ff4250429 + checksum: 10/a7095cb39e5bc32fada2aa7c7249d3f6b01bd1ce461a61b0adabacccabd9198500c6fb1f68a7c851a657e273fce2233ba869638897f3d7ed2e87a2d89b4436ea languageName: node linkType: hard -"finalhandler@npm:1.2.0": - version: 1.2.0 - resolution: "finalhandler@npm:1.2.0" +"finalhandler@npm:~1.3.1": + version: 1.3.2 + resolution: "finalhandler@npm:1.3.2" dependencies: debug: "npm:2.6.9" - encodeurl: "npm:~1.0.2" + encodeurl: "npm:~2.0.0" escape-html: "npm:~1.0.3" - on-finished: "npm:2.4.1" + on-finished: "npm:~2.4.1" parseurl: "npm:~1.3.3" - statuses: "npm:2.0.1" + statuses: "npm:~2.0.2" unpipe: "npm:~1.0.0" - checksum: 10/635718cb203c6d18e6b48dfbb6c54ccb08ea470e4f474ddcef38c47edcf3227feec316f886dd701235997d8af35240cae49856721ce18f539ad038665ebbf163 + checksum: 10/6cb4f9f80eaeb5a0fac4fdbd27a65d39271f040a0034df16556d896bfd855fd42f09da886781b3102117ea8fceba97b903c1f8b08df1fb5740576d5e0f481eed languageName: node linkType: hard @@ -8569,19 +9642,29 @@ __metadata: linkType: hard "flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" dependencies: - flatted: "npm:^3.1.0" + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" rimraf: "npm:^3.0.2" - checksum: 10/9fe5d0cb97c988e3b25242e71346965fae22757674db3fca14206850af2efa3ca3b04a3ba0eba8d5e20fd8a3be80a2e14b1c2917e70ffe1acb98a8c3327e4c9f + checksum: 10/02381c6ece5e9fa5b826c9bbea481d7fd77645d96e4b0b1395238124d581d10e56f17f723d897b6d133970f7a57f0fab9148cbbb67237a0a0ffe794ba60c0c70 languageName: node linkType: hard -"flatted@npm:^3.1.0": - version: 3.2.7 - resolution: "flatted@npm:3.2.7" - checksum: 10/427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 10/72479e651c15eab53e25ce04c31bab18cfaac0556505cac19221dbbe85bbb9686bc76e4d397e89e5bf516ce667dcf818f8b07e585568edba55abc2bf1f698fb5 + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.4.1 + resolution: "flatted@npm:3.4.1" + checksum: 10/39a308e2ef82d2d8c80ebc74b67d4ff3f668be168137b649440b6735eb9c115d1e0c13ab0d9958b3d2ea9c85087ab7e14c14aa6f625a22b2916d89bbd91bc4a0 languageName: node linkType: hard @@ -8598,31 +9681,21 @@ __metadata: linkType: hard "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.7": - version: 1.15.4 - resolution: "follow-redirects@npm:1.15.4" + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" peerDependenciesMeta: debug: optional: true - checksum: 10/2e8f5f259a6b02dfa8dc199e08431848a7c3beed32eb4c19945966164a52c89f07b86c3afcc32ebe4279cf0a960520e45a63013d6350309c5ec90133c5d9351a - languageName: node - linkType: hard - -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: "npm:^1.1.3" - checksum: 10/fdac0cde1be35610bd635ae958422e8ce0cc1313e8d32ea6d34cfda7b60850940c1fd07c36456ad76bd9c24aef6ff5e03b02beb58c83af5ef6c968a64eada676 + checksum: 10/07372fd74b98c78cf4d417d68d41fdaa0be4dcacafffb9e67b1e3cf090bc4771515e65020651528faab238f10f9b9c0d9707d6c1574a6c0387c5de1042cde9ba languageName: node linkType: hard -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" +"for-each@npm:^0.3.3, for-each@npm:^0.3.5": + version: 0.3.5 + resolution: "for-each@npm:0.3.5" dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^4.0.1" - checksum: 10/087edd44857d258c4f73ad84cb8df980826569656f2550c341b27adf5335354393eec24ea2fabd43a253233fb27cee177ebe46bd0b7ea129c77e87cb1e9936fb + is-callable: "npm:^1.2.7" + checksum: 10/330cc2439f85c94f4609de3ee1d32c5693ae15cdd7fe3d112c4fd9efd4ce7143f2c64ef6c2c9e0cfdb0058437f33ef05b5bdae5b98fcc903fb2143fbaf0fea0f languageName: node linkType: hard @@ -8658,13 +9731,15 @@ __metadata: linkType: hard "form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" + version: 4.0.5 + resolution: "form-data@npm:4.0.5" dependencies: asynckit: "npm:^0.4.0" combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" mime-types: "npm:^2.1.12" - checksum: 10/7264aa760a8cf09482816d8300f1b6e2423de1b02bba612a136857413fdc96d7178298ced106817655facc6b89036c6e12ae31c9eb5bdc16aabf502ae8a5d805 + checksum: 10/52ecd6e927c8c4e215e68a7ad5e0f7c1031397439672fd9741654b4a94722c4182e74cc815b225dcb5be3f4180f36428f67c6dd39eaa98af0dcfdd26c00c19cd languageName: node linkType: hard @@ -8675,14 +9750,14 @@ __metadata: languageName: node linkType: hard -"fraction.js@npm:^4.2.0": - version: 4.2.0 - resolution: "fraction.js@npm:4.2.0" - checksum: 10/8f8e3c02a4d10cd03bae5c036c02ef0bd1a50be69ac56e5b9b25025ff07466c1d2288f383fb613ecec583e77bcfd586dee2d932f40e588c910bf55c5103014ab +"fraction.js@npm:^5.3.4": + version: 5.3.4 + resolution: "fraction.js@npm:5.3.4" + checksum: 10/ef2c4bc81b2484065f8f7e4c2498f3fdfe6d233b8e7c7f75e3683ed10698536129b2c2dbd6c3f788ca4a020ec07116dd909a91036a364c98dc802b5003bfc613 languageName: node linkType: hard -"fresh@npm:0.5.2": +"fresh@npm:~0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" checksum: 10/64c88e489b5d08e2f29664eb3c79c705ff9a8eb15d3e597198ef76546d4ade295897a44abb0abd2700e7ef784b2e3cbf1161e4fbf16f59129193fd1030d16da1 @@ -8722,9 +9797,9 @@ __metadata: linkType: hard "fs-monkey@npm:^1.0.4": - version: 1.0.4 - resolution: "fs-monkey@npm:1.0.4" - checksum: 10/9944223c25e62e176cbb9b0f9e0ee1697a1676419529e948ec013b49156863411a09b45671b56267d3118c867d3a0d5c08225845160a6148861cc16fc1eec79e + version: 1.1.0 + resolution: "fs-monkey@npm:1.1.0" + checksum: 10/1c6da5d07f6c91e31fd9bcd68909666e18fa243c7af6697e9d2ded16d4ee87cc9c2b67889b19f98211006c228d1915e1beb0678b4080778fb52539ef3e4eab6c languageName: node linkType: hard @@ -8735,7 +9810,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:2.3.2, fsevents@npm:^2.3.2": +"fsevents@npm:2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -8745,7 +9820,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.3.2": +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -8755,7 +9830,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin": +"fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" dependencies: @@ -8764,7 +9839,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -8773,22 +9848,24 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": +"function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" checksum: 10/185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 languageName: node linkType: hard -"function.prototype.name@npm:^1.1.5": - version: 1.1.5 - resolution: "function.prototype.name@npm:1.1.5" +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": + version: 1.1.8 + resolution: "function.prototype.name@npm:1.1.8" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.19.0" - functions-have-names: "npm:^1.2.2" - checksum: 10/5d426e5a38ac41747bcfce6191e0ec818ed18678c16cfc36b5d1ca87f56ff98c4ce958ee2c1ea2a18dc3da989844a37b1065311e2d2ae4cf12da8f82418b686b + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + functions-have-names: "npm:^1.2.3" + hasown: "npm:^2.0.2" + is-callable: "npm:^1.2.7" + checksum: 10/25b9e5bea936732a6f0c0c08db58cc0d609ac1ed458c6a07ead46b32e7b9bf3fe5887796c3f83d35994efbc4fdde81c08ac64135b2c399b8f2113968d44082bc languageName: node linkType: hard @@ -8799,7 +9876,7 @@ __metadata: languageName: node linkType: hard -"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": +"functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: 10/0ddfd3ed1066a55984aaecebf5419fbd9344a5c38dd120ffb0739fac4496758dcf371297440528b115e4367fc46e3abc86a2cc0ff44612181b175ae967a11a05 @@ -8814,6 +9891,7 @@ __metadata: "@docusaurus/module-type-aliases": "npm:^2.4.1" "@docusaurus/preset-classic": "npm:^2.4.1" "@docusaurus/theme-common": "npm:^2.4.1" + "@docusaurus/theme-mermaid": "npm:^2.4.3" "@docusaurus/tsconfig": "npm:^3.0.0-alpha.0" "@mdx-js/react": "npm:^1.6.22" "@playwright/test": "npm:^1.58.2" @@ -8870,6 +9948,13 @@ __metadata: languageName: unknown linkType: soft +"generator-function@npm:^2.0.0": + version: 2.0.1 + resolution: "generator-function@npm:2.0.1" + checksum: 10/eb7e7eb896c5433f3d40982b2ccacdb3dd990dd3499f14040e002b5d54572476513be8a2e6f9609f6e41ab29f2c4469307611ddbfc37ff4e46b765c326663805 + languageName: node + linkType: hard + "gensync@npm:^1.0.0-beta.1, gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -8884,15 +9969,21 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1": - version: 1.2.1 - resolution: "get-intrinsic@npm:1.2.1" +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" dependencies: - function-bind: "npm:^1.1.1" - has: "npm:^1.0.3" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - checksum: 10/aee631852063f8ad0d4a374970694b5c17c2fb5c92bd1929476d7eb8798ce7aebafbf9a34022c05fd1adaa2ce846d5877a627ce1986f81fc65adf3b81824bd54 + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10/6e9dd920ff054147b6f44cb98104330e87caafae051b6d37b13384a45ba15e71af33c3baeac7cb630a0aaa23142718dcf25b45cfdd86c184c5dcb4e56d953a10 languageName: node linkType: hard @@ -8910,6 +10001,16 @@ __metadata: languageName: node linkType: hard +"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10/4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b + languageName: node + linkType: hard + "get-stream@npm:^4.1.0": version: 4.1.0 resolution: "get-stream@npm:4.1.0" @@ -8935,22 +10036,23 @@ __metadata: languageName: node linkType: hard -"get-symbol-description@npm:^1.0.0": - version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" +"get-symbol-description@npm:^1.1.0": + version: 1.1.0 + resolution: "get-symbol-description@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.1" - checksum: 10/7e5f298afe0f0872747dce4a949ce490ebc5d6dd6aefbbe5044543711c9b19a4dfaebdbc627aee99e1299d58a435b2fbfa083458c1d58be6dc03a3bada24d359 + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + checksum: 10/a353e3a9595a74720b40fb5bae3ba4a4f826e186e83814d93375182384265676f59e49998b9cdfac4a2225ce95a3d32a68f502a2c5619303987f1c183ab80494 languageName: node linkType: hard -"get-tsconfig@npm:^4.5.0": - version: 4.7.0 - resolution: "get-tsconfig@npm:4.7.0" +"get-tsconfig@npm:^4.10.0": + version: 4.13.6 + resolution: "get-tsconfig@npm:4.13.6" dependencies: resolve-pkg-maps: "npm:^1.0.0" - checksum: 10/acfa48078ab41728281adee0a2dde1d4f437998291af8f189f7c171a766f45ac5ca1cbc335baf8db118a54acf2eb01e7e075c22d3804990048bbf4b94563681a + checksum: 10/5cd1c1f273e9f1cd9f1ebeaaea281a3b7b71562fc9614ee0cf0575463b0435de68831354434a5a1a564e1049062d597d0dae8ef33f489a6d12afccee032f6784 languageName: node linkType: hard @@ -8986,21 +10088,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.3.10": - version: 10.3.10 - resolution: "glob@npm:10.3.10" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^2.3.5" - minimatch: "npm:^9.0.1" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry: "npm:^1.10.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10/38bdb2c9ce75eb5ed168f309d4ed05b0798f640b637034800a6bf306f39d35409bf278b0eaaffaec07591085d3acb7184a201eae791468f0f617771c2486a6a8 - languageName: node - linkType: hard - "glob@npm:^13.0.0": version: 13.0.6 resolution: "glob@npm:13.0.6" @@ -9055,28 +10142,22 @@ __metadata: languageName: node linkType: hard -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 10/9f054fa38ff8de8fa356502eb9d2dae0c928217b8b5c8de1f09f5c9b6c8a96d8b9bd3afc49acbcd384a98a81fea713c859e1b09e214c60509517bb8fc2bc13c2 - languageName: node - linkType: hard - "globals@npm:^13.6.0, globals@npm:^13.9.0": - version: 13.21.0 - resolution: "globals@npm:13.21.0" + version: 13.24.0 + resolution: "globals@npm:13.24.0" dependencies: type-fest: "npm:^0.20.2" - checksum: 10/98ce947dc413e6c8feed236f980dee4bc8d9f4b29790e27bccb277d385fac5d77146e1f9c244c6609aca1d109101642e663caf88c0ba6bff0b069ea82d571441 + checksum: 10/62c5b1997d06674fc7191d3e01e324d3eda4d65ac9cc4e78329fa3b5c4fd42a0e1c8722822497a6964eee075255ce21ccf1eec2d83f92ef3f06653af4d0ee28e languageName: node linkType: hard -"globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" +"globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" dependencies: - define-properties: "npm:^1.1.3" - checksum: 10/45ae2f3b40a186600d0368f2a880ae257e8278b4c7704f0417d6024105ad7f7a393661c5c2fa1334669cd485ea44bc883a08fdd4516df2428aec40c99f52aa89 + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10/1f1fd078fb2f7296306ef9dd51019491044ccf17a59ed49d375b576ca108ff37e47f3d29aead7add40763574a992f16a5367dd1e2173b8634ef18556ab719ac4 languageName: node linkType: hard @@ -9107,21 +10188,19 @@ __metadata: languageName: node linkType: hard -"goober@npm:^2.1.10": - version: 2.1.13 - resolution: "goober@npm:2.1.13" +"goober@npm:^2.1.16": + version: 2.1.18 + resolution: "goober@npm:2.1.18" peerDependencies: csstype: ^3.0.10 - checksum: 10/0f073d7271bf1b53ec0db3744a0596c40889b01cad2db0a73709d24e081d3f47585eb21e3f5dd873138c12c587469f9a73b25c94681d0a57533063e038bf00ed + checksum: 10/eca3db81a709a03f6ec9bb2624027e157c0b6fab6dccbe53b2ddd25a155a7e6e23a0b864574c33bdb0a05e0d0b865de8cc5151401e5a00d63f51be08fe7ccde6 languageName: node linkType: hard -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: "npm:^1.1.3" - checksum: 10/5fbc7ad57b368ae4cd2f41214bd947b045c1a4be2f194a7be1778d71f8af9dbf4004221f3b6f23e30820eb0d052b4f819fe6ebe8221e2a3c6f0ee4ef173421ca +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10/94e296d69f92dc1c0768fcfeecfb3855582ab59a7c75e969d5f96ce50c3d201fd86d5a2857c22565764d5bb8a816c7b1e58f133ec318cd56274da36c5e3fb1a1 languageName: node linkType: hard @@ -9144,7 +10223,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 @@ -9186,10 +10265,10 @@ __metadata: languageName: node linkType: hard -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 10/4e0426c900af034d12db14abfece02ce7dbf53f2022d28af1a97913ff4c07adb8799476d57dc44fbca0e07d1dbda2a042c2928b1f33d3f09c15de0640a7fb81b +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 10/90fb1b24d40d2472bcd1c8bd9dd479037ec240215869bdbff97b2be83acef57d28f7e96bdd003a21bed218d058b49097f4acc8821c05b1629cc5d48dd7bfcccd languageName: node linkType: hard @@ -9207,35 +10286,37 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0": - version: 1.0.0 - resolution: "has-property-descriptors@npm:1.0.0" +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" dependencies: - get-intrinsic: "npm:^1.1.1" - checksum: 10/a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + es-define-property: "npm:^1.0.0" + checksum: 10/2d8c9ab8cebb572e3362f7d06139a4592105983d4317e68f7adba320fe6ddfc8874581e0971e899e633fd5f72e262830edce36d5a0bc863dad17ad20572484b2 languageName: node linkType: hard -"has-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "has-proto@npm:1.0.1" - checksum: 10/eab2ab0ed1eae6d058b9bbc4c1d99d2751b29717be80d02fd03ead8b62675488de0c7359bc1fdd4b87ef6fd11e796a9631ad4d7452d9324fdada70158c2e5be7 +"has-proto@npm:^1.2.0": + version: 1.2.0 + resolution: "has-proto@npm:1.2.0" + dependencies: + dunder-proto: "npm:^1.0.0" + checksum: 10/7eaed07728eaa28b77fadccabce53f30de467ff186a766872669a833ac2e87d8922b76a22cc58339d7e0277aefe98d6d00762113b27a97cdf65adcf958970935 languageName: node linkType: hard -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: 10/464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10/959385c98696ebbca51e7534e0dc723ada325efa3475350951363cce216d27373e0259b63edb599f72eb94d6cde8577b4b2375f080b303947e560f85692834fa languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" dependencies: - has-symbols: "npm:^1.0.2" - checksum: 10/95546e7132efc895a9ae64a8a7cf52588601fc3d52e0304ed228f336992cdf0baaba6f3519d2655e560467db35a1ed79f6420c286cc91a13aa0647a31ed92570 + has-symbols: "npm:^1.0.3" + checksum: 10/c74c5f5ceee3c8a5b8bc37719840dc3749f5b0306d818974141dda2471a1a2ca6c8e46b9d6ac222c5345df7a901c9b6f350b1e6d62763fec877e26609a401bfe languageName: node linkType: hard @@ -9246,14 +10327,7 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.3": - version: 1.0.4 - resolution: "has@npm:1.0.4" - checksum: 10/c245f332fe78c7b6b8753857240ac12b3286f995f656a33c77e0f5baab7d0157e6ddb1c34940ffd2bffc51f75ede50cd8b29ff65c13e336376aca8cf3df58043 - languageName: node - linkType: hard - -"hasown@npm:^2.0.0": +"hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -9403,13 +10477,13 @@ __metadata: linkType: hard "html-entities@npm:^2.3.2": - version: 2.4.0 - resolution: "html-entities@npm:2.4.0" - checksum: 10/646f2f19214bad751e060ceef4df98520654a1d0cd631b55d45504df2f0aaf8a14d8c0a5a4f92b353be298774d856157ac2d04a031d78889c9011892078ca157 + version: 2.6.0 + resolution: "html-entities@npm:2.6.0" + checksum: 10/06d4e7a3ba6243bba558af176e56f85e09894b26d911bc1ef7b2b9b3f18b46604360805b32636f080e954778e9a34313d1982479a05a5aa49791afd6a4229346 languageName: node linkType: hard -"html-escaper@npm:^2.0.0": +"html-escaper@npm:^2.0.0, html-escaper@npm:^2.0.2": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" checksum: 10/034d74029dcca544a34fb6135e98d427acd73019796ffc17383eaa3ec2fe1c0471dcbbc8f8ed39e46e86d43ccd753a160631615e4048285e313569609b66d5b7 @@ -9448,8 +10522,8 @@ __metadata: linkType: hard "html-webpack-plugin@npm:^5.5.0": - version: 5.5.3 - resolution: "html-webpack-plugin@npm:5.5.3" + version: 5.6.6 + resolution: "html-webpack-plugin@npm:5.6.6" dependencies: "@types/html-minifier-terser": "npm:^6.0.0" html-minifier-terser: "npm:^6.0.2" @@ -9457,8 +10531,26 @@ __metadata: pretty-error: "npm:^4.0.0" tapable: "npm:^2.0.0" peerDependencies: + "@rspack/core": 0.x || 1.x webpack: ^5.20.0 - checksum: 10/01d302a434e3db9f0e2db370f06300fb613de0fb8bdcafd4693e44c2528b8608621e5e7ca5d8302446db3f20c5f8875f1f675926d469b13ebab139954d241055 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10/819ebee079466029a771236fdadcbcfe0aaf110eac1b74c0983a0318a7f99f3c69adcf1d617e218769a8c8e96ea17de2df30759bd950ec391d0c5676d480894e + languageName: node + linkType: hard + +"htmlparser2@npm:^10.1.0": + version: 10.1.0 + resolution: "htmlparser2@npm:10.1.0" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + domutils: "npm:^3.2.2" + entities: "npm:^7.0.1" + checksum: 10/660fb094a53fb77a3c771db969778b58af0e8a572a1bdc8e5952a4241e4b04e0a6063b16f6422e22c821441081c8de339e3f06ddda362ac2a42c8767d5e5ad53 languageName: node linkType: hard @@ -9474,26 +10566,7 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:^8.0.1": - version: 8.0.2 - resolution: "htmlparser2@npm:8.0.2" - dependencies: - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.3" - domutils: "npm:^3.0.1" - entities: "npm:^4.4.0" - checksum: 10/ea5512956eee06f5835add68b4291d313c745e8407efa63848f4b8a90a2dee45f498a698bca8614e436f1ee0cfdd609938b71d67c693794545982b76e53e6f11 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.0.0": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10/362d5ed66b12ceb9c0a328fb31200b590ab1b02f4a254a697dc796850cc4385603e75f53ec59f768b2dad3bfa1464bd229f7de278d2899a0e3beffc634b6683f - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": version: 4.2.0 resolution: "http-cache-semantics@npm:4.2.0" checksum: 10/4efd2dfcfeea9d5e88c84af450b9980be8a43c2c8179508b1c57c7b4421c855f3e8efe92fa53e0b3f4a43c85824ada930eabbc306d1b3beab750b6dcc5187693 @@ -9507,35 +10580,36 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" +"http-errors@npm:~1.8.0": + version: 1.8.1 + resolution: "http-errors@npm:1.8.1" dependencies: - depd: "npm:2.0.0" + depd: "npm:~1.1.2" inherits: "npm:2.0.4" setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" + statuses: "npm:>= 1.5.0 < 2" toidentifier: "npm:1.0.1" - checksum: 10/0e7f76ee8ff8a33e58a3281a469815b893c41357378f408be8f6d4aa7d1efafb0da064625518e7078381b6a92325949b119dc38fcb30bdbc4e3a35f78c44c439 + checksum: 10/76fc491bd8df2251e21978e080d5dae20d9736cfb29bb72b5b76ec1bcebb1c14f0f58a3a128dd89288934379d2173cfb0421c571d54103e93dd65ef6243d64d8 languageName: node linkType: hard -"http-errors@npm:~1.6.2": - version: 1.6.3 - resolution: "http-errors@npm:1.6.3" +"http-errors@npm:~2.0.0, http-errors@npm:~2.0.1": + version: 2.0.1 + resolution: "http-errors@npm:2.0.1" dependencies: - depd: "npm:~1.1.2" - inherits: "npm:2.0.3" - setprototypeof: "npm:1.1.0" - statuses: "npm:>= 1.4.0 < 2" - checksum: 10/e48732657ea0b4a09853d2696a584fa59fa2a8c1ba692af7af3137b5491a997d7f9723f824e7e08eb6a87098532c09ce066966ddf0f9f3dd30905e52301acadb + depd: "npm:~2.0.0" + inherits: "npm:~2.0.4" + setprototypeof: "npm:~1.2.0" + statuses: "npm:~2.0.2" + toidentifier: "npm:~1.0.1" + checksum: 10/9fe31bc0edf36566c87048aed1d3d0cbe03552564adc3541626a0613f542d753fbcb13bdfcec0a3a530dbe1714bb566c89d46244616b66bddd26ac413b06a207 languageName: node linkType: hard "http-parser-js@npm:>=0.5.1": - version: 0.5.8 - resolution: "http-parser-js@npm:0.5.8" - checksum: 10/2a78a567ee6366dae0129d819b799dce1f95ec9732c5ab164a78ee69804ffb984abfa0660274e94e890fc54af93546eb9f12b6d10edbaed017e2d41c29b7cf29 + version: 0.5.10 + resolution: "http-parser-js@npm:0.5.10" + checksum: 10/33c53b458cfdf7e43f1517f9bcb6bed1c614b1c7c5d65581a84304110eb9eb02a48f998c7504b8bee432ef4a8ec9318e7009406b506b28b5610fed516242b20a languageName: node linkType: hard @@ -9561,8 +10635,8 @@ __metadata: linkType: hard "http-proxy-middleware@npm:^2.0.3": - version: 2.0.6 - resolution: "http-proxy-middleware@npm:2.0.6" + version: 2.0.9 + resolution: "http-proxy-middleware@npm:2.0.9" dependencies: "@types/http-proxy": "npm:^1.17.8" http-proxy: "npm:^1.18.1" @@ -9574,7 +10648,7 @@ __metadata: peerDependenciesMeta: "@types/express": optional: true - checksum: 10/768e7ae5a422bbf4b866b64105b4c2d1f468916b7b0e9c96750551c7732383069b411aa7753eb7b34eab113e4f77fb770122cb7fb9c8ec87d138d5ddaafda891 + checksum: 10/4ece416a91d52e96f8136c5f4abfbf7ac2f39becbad21fa8b158a12d7e7d8f808287ff1ae342b903fd1f15f2249dee87fabc09e1f0e73106b83331c496d67660 languageName: node linkType: hard @@ -9616,21 +10690,30 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" +"iconv-lite@npm:0.6, iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.3": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10/6d3a2dac6e5d1fb126d25645c25c3a1209f70cceecc68b8ef51ae0da3cdc078c151fade7524a30b12a3094926336831fca09c666ef55b37e2c69638b5d6bd2e3 + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10/24e3292dd3dadaa81d065c6f8c41b274a47098150d444b96e5f53b4638a9a71482921ea6a91a1f59bb71d9796de25e04afd05919fa64c360347ba65d3766f10f languageName: node linkType: hard -"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" +"iconv-lite@npm:^0.7.2": + version: 0.7.2 + resolution: "iconv-lite@npm:0.7.2" dependencies: safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10/24e3292dd3dadaa81d065c6f8c41b274a47098150d444b96e5f53b4638a9a71482921ea6a91a1f59bb71d9796de25e04afd05919fa64c360347ba65d3766f10f + checksum: 10/24c937b532f868e938386b62410b303b7c767ce3d08dc2829cbe59464d5a26ef86ae5ad1af6b34eec43ddfea39e7d101638644b0178d67262fa87015d59f983a + languageName: node + linkType: hard + +"iconv-lite@npm:~0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10/6d3a2dac6e5d1fb126d25645c25c3a1209f70cceecc68b8ef51ae0da3cdc078c151fade7524a30b12a3094926336831fca09c666ef55b37e2c69638b5d6bd2e3 languageName: node linkType: hard @@ -9658,20 +10741,20 @@ __metadata: linkType: hard "ignore@npm:^5.2.0, ignore@npm:^5.2.4": - version: 5.2.4 - resolution: "ignore@npm:5.2.4" - checksum: 10/4f7caf5d2005da21a382d4bd1d2aa741a3bed51de185c8562dd7f899a81a620ac4fd0619b06f7029a38ae79e4e4c134399db3bd0192c703c3ef54bb82df3086c + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 languageName: node linkType: hard "image-size@npm:^1.0.1": - version: 1.0.2 - resolution: "image-size@npm:1.0.2" + version: 1.2.1 + resolution: "image-size@npm:1.2.1" dependencies: queue: "npm:6.0.2" bin: image-size: bin/image-size.js - checksum: 10/693dfb2f8bfda2aacd087ef7130fd997fd0aceca838291bae400646db1826b80108185d0062ea3c0365b12c3ab5145bb923fdc777fd94c4991840d47fe44ade3 + checksum: 10/b290c6cc5635565b1da51991472eb6522808430dbe3415823649723dc5f5fd8263f0f98f9bdec46184274ea24fe4f3f7a297c84b647b412e14d2208703dd8a19 languageName: node linkType: hard @@ -9682,20 +10765,20 @@ __metadata: languageName: node linkType: hard -"immutable@npm:^4.0.0": - version: 4.3.2 - resolution: "immutable@npm:4.3.2" - checksum: 10/85176b8f3124e04479cfc1f682e3aea9c3665030cf2e7c22e64b53fe8052b42323088208ae0108cf37ac6ce569784858bc5c02b3c8187fa2d363f6977de0e5c0 +"immutable@npm:^5.0.2": + version: 5.1.5 + resolution: "immutable@npm:5.1.5" + checksum: 10/7aec2740239772ec8e92e793c991bd809203a97694f4ff3a18e50e28f9a6b02393ad033d87b458037bdf8c0ea37d4446d640e825f6171df3405cf6cf300ce028 languageName: node linkType: hard "import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" dependencies: parent-module: "npm:^1.0.0" resolve-from: "npm:^4.0.0" - checksum: 10/2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + checksum: 10/a06b19461b4879cc654d46f8a6244eb55eb053437afd4cbb6613cad6be203811849ed3e4ea038783092879487299fda24af932b86bdfff67c9055ba3612b8c87 languageName: node linkType: hard @@ -9707,14 +10790,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" + version: 3.2.0 + resolution: "import-local@npm:3.2.0" dependencies: pkg-dir: "npm:^4.2.0" resolve-cwd: "npm:^3.0.0" bin: import-local-fixture: fixtures/cli.js - checksum: 10/bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + checksum: 10/0b0b0b412b2521739fbb85eeed834a3c34de9bc67e670b3d0b86248fc460d990a7b116ad056c084b87a693ef73d1f17268d6a5be626bb43c998a8b1c8a230004 languageName: node linkType: hard @@ -9756,20 +10839,13 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 languageName: node linkType: hard -"inherits@npm:2.0.3": - version: 2.0.3 - resolution: "inherits@npm:2.0.3" - checksum: 10/8771303d66c51be433b564427c16011a8e3fbc3449f1f11ea50efb30a4369495f1d0e89f0fc12bdec0bd7e49102ced5d137e031d39ea09821cb3c717fcf21e69 - languageName: node - linkType: hard - "ini@npm:2.0.0": version: 2.0.0 resolution: "ini@npm:2.0.0" @@ -9791,14 +10867,21 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": - version: 1.0.5 - resolution: "internal-slot@npm:1.0.5" +"internal-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "internal-slot@npm:1.1.0" dependencies: - get-intrinsic: "npm:^1.2.0" - has: "npm:^1.0.3" - side-channel: "npm:^1.0.4" - checksum: 10/e2eb5b348e427957dd4092cb57b9374a2cbcabbf61e5e5b4d99cb68eeaae29394e8efd79f23dc2b1831253346f3c16b82010737b84841225e934d80d04d68643 + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.2" + side-channel: "npm:^1.1.0" + checksum: 10/1d5219273a3dab61b165eddf358815eefc463207db33c20fcfca54717da02e3f492003757721f972fd0bf21e4b426cab389c5427b99ceea4b8b670dc88ee6d4a + languageName: node + linkType: hard + +"internmap@npm:1 - 2": + version: 2.0.3 + resolution: "internmap@npm:2.0.3" + checksum: 10/873e0e7fcfe32f999aa0997a0b648b1244508e56e3ea6b8259b5245b50b5eeb3853fba221f96692bd6d1def501da76c32d64a5cb22a0b26cdd9b445664f805e0 languageName: node linkType: hard @@ -9833,9 +10916,9 @@ __metadata: linkType: hard "ipaddr.js@npm:^2.0.1": - version: 2.1.0 - resolution: "ipaddr.js@npm:2.1.0" - checksum: 10/42c16d95cf451399707c2c46e605b88db1ea2b1477b25774b5a7ee96852b0bb1efdc01adbff01fedbe702ff246e1aca5c5e915a6f5a1f1485233a5f7c2eb73c2 + version: 2.3.0 + resolution: "ipaddr.js@npm:2.3.0" + checksum: 10/be3d01bc2e20fc2dc5349b489ea40883954b816ce3e57aa48ad943d4e7c4ace501f28a7a15bde4b96b6b97d0fbb28d599ff2f87399f3cda7bd728889402eed3b languageName: node linkType: hard @@ -9857,23 +10940,23 @@ __metadata: linkType: hard "is-arguments@npm:^1.1.1": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" + version: 1.2.0 + resolution: "is-arguments@npm:1.2.0" dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10/a170c7e26082e10de9be6e96d32ae3db4d5906194051b792e85fae3393b53cf2cb5b3557863e5c8ccbab55e2fd8f2f75aa643d437613f72052cf0356615c34be + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10/471a8ef631b8ee8829c43a8ab05c081700c0e25180c73d19f3bf819c1a8448c426a9e8e601f278973eca68966384b16ceb78b8c63af795b099cd199ea5afc457 languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": - version: 3.0.2 - resolution: "is-array-buffer@npm:3.0.2" +"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": + version: 3.0.5 + resolution: "is-array-buffer@npm:3.0.5" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.0" - is-typed-array: "npm:^1.1.10" - checksum: 10/dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10/ef1095c55b963cd0dcf6f88a113e44a0aeca91e30d767c475e7d746d28d1195b10c5076b94491a7a0cd85020ca6a4923070021d74651d093dc909e9932cf689b languageName: node linkType: hard @@ -9885,20 +10968,24 @@ __metadata: linkType: hard "is-async-function@npm:^2.0.0": - version: 2.0.0 - resolution: "is-async-function@npm:2.0.0" + version: 2.1.1 + resolution: "is-async-function@npm:2.1.1" dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/2cf336fbf8cba3badcf526aa3d10384c30bab32615ac4831b74492eb4e843ccb7d8439a119c27f84bcf217d72024e611b1373f870f433b48f3fa57d3d1b863f1 + async-function: "npm:^1.0.0" + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10/7c2ac7efdf671e03265e74a043bcb1c0a32e226bc2a42dfc5ec8644667df668bbe14b91c08e6c1414f392f8cf86cd1d489b3af97756e2c7a49dd1ba63fd40ca6 languageName: node linkType: hard -"is-bigint@npm:^1.0.1": - version: 1.0.4 - resolution: "is-bigint@npm:1.0.4" +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" dependencies: - has-bigints: "npm:^1.0.1" - checksum: 10/cc981cf0564c503aaccc1e5f39e994ae16ae2d1a8fcd14721f14ad431809071f39ec568cfceef901cff408045f1a6d6bac90d1b43eeb0b8e3bc34c8eb1bdb4c4 + has-bigints: "npm:^1.0.2" + checksum: 10/10cf327310d712fe227cfaa32d8b11814c214392b6ac18c827f157e1e85363cf9c8e2a22df526689bd5d25e53b58cc110894787afb54e138e7c504174dba15fd languageName: node linkType: hard @@ -9911,13 +10998,13 @@ __metadata: languageName: node linkType: hard -"is-boolean-object@npm:^1.1.0": - version: 1.1.2 - resolution: "is-boolean-object@npm:1.1.2" +"is-boolean-object@npm:^1.2.1": + version: 1.2.2 + resolution: "is-boolean-object@npm:1.2.2" dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10/ba794223b56a49a9f185e945eeeb6b7833b8ea52a335cec087d08196cf27b538940001615d3bb976511287cefe94e5907d55f00bb49580533f9ca9b4515fcc2e + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10/051fa95fdb99d7fbf653165a7e6b2cba5d2eb62f7ffa81e793a790f3fb5366c91c1b7b6af6820aa2937dd86c73aa3ca9d9ca98f500988457b1c59692c52ba911 languageName: node linkType: hard @@ -9928,7 +11015,16 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": +"is-bun-module@npm:^2.0.0": + version: 2.0.0 + resolution: "is-bun-module@npm:2.0.0" + dependencies: + semver: "npm:^7.7.1" + checksum: 10/cded5a1a58368b847872d08617975d620ad94426d76a932f3e08d55b4574d199e0a62a4fb024fa2dc444200b71719eb0bffc5d3d1e1cc82e29b293bb8d66a990 + languageName: node + linkType: hard + +"is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 10/48a9297fb92c99e9df48706241a189da362bff3003354aea4048bd5f7b2eb0d823cd16d0a383cece3d76166ba16d85d9659165ac6fcce1ac12e6c649d66dbdb9 @@ -9946,30 +11042,33 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.12.1, is-core-module@npm:^2.9.0": - version: 2.13.0 - resolution: "is-core-module@npm:2.13.0" +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.1": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" dependencies: - has: "npm:^1.0.3" - checksum: 10/55ccb5ccd208a1e088027065ee6438a99367e4c31c366b52fbaeac8fa23111cd17852111836d904da604801b3286d38d3d1ffa6cd7400231af8587f021099dc6 + hasown: "npm:^2.0.2" + checksum: 10/452b2c2fb7f889cbbf7e54609ef92cf6c24637c568acc7e63d166812a0fb365ae8a504c333a29add8bdb1686704068caa7f4e4b639b650dde4f00a038b8941fb languageName: node linkType: hard -"is-core-module@npm:^2.13.0": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" +"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" dependencies: - hasown: "npm:^2.0.0" - checksum: 10/d53bd0cc24b0a0351fb4b206ee3908f71b9bbf1c47e9c9e14e5f06d292af1663704d2abd7e67700d6487b2b7864e0d0f6f10a1edf1892864bdffcb197d1845a2 + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + is-typed-array: "npm:^1.1.13" + checksum: 10/357e9a48fa38f369fd6c4c3b632a3ab2b8adca14997db2e4b3fe94c4cd0a709af48e0fb61b02c64a90c0dd542fd489d49c2d03157b05ae6c07f5e4dec9e730a8 languageName: node linkType: hard -"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": - version: 1.0.5 - resolution: "is-date-object@npm:1.0.5" +"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/cc80b3a4b42238fa0d358b9a6230dae40548b349e64a477cb7c5eff9b176ba194c11f8321daaf6dd157e44073e9b7fd01f87db1f14952a88d5657acdcd3a56e2 + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10/3a811b2c3176fb31abee1d23d3dc78b6c65fd9c07d591fcb67553cab9e7f272728c3dd077d2d738b53f9a2103255b0a6e8dfc9568a7805c56a78b2563e8d1dec languageName: node linkType: hard @@ -10003,12 +11102,12 @@ __metadata: languageName: node linkType: hard -"is-finalizationregistry@npm:^1.0.2": - version: 1.0.2 - resolution: "is-finalizationregistry@npm:1.0.2" +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.1 + resolution: "is-finalizationregistry@npm:1.1.1" dependencies: - call-bind: "npm:^1.0.2" - checksum: 10/1b8e9e1bf2075e862315ef9d38ce6d39c43ca9d81d46f73b34473506992f4b0fbaadb47ec9b420a5e76afe3f564d9f1f0d9b552ef272cc2395e0f21d743c9c29 + call-bound: "npm:^1.0.3" + checksum: 10/0bfb145e9a1ba852ddde423b0926d2169ae5fe9e37882cde9e8f69031281a986308df4d982283e152396e88b86562ed2256cbaa5e6390fb840a4c25ab54b8a80 languageName: node linkType: hard @@ -10027,11 +11126,15 @@ __metadata: linkType: hard "is-generator-function@npm:^1.0.10": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" + version: 1.1.2 + resolution: "is-generator-function@npm:1.1.2" dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/499a3ce6361064c3bd27fbff5c8000212d48506ebe1977842bbd7b3e708832d0deb1f4cc69186ece3640770e8c4f1287b24d99588a0b8058b2dbdd344bc1f47f + call-bound: "npm:^1.0.4" + generator-function: "npm:^2.0.0" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10/cc50fa01034356bdfda26983c5457103240f201f4663c0de1257802714e40d36bcff7aee21091d37bbba4be962fa5c6475ce7ddbc0abfa86d6bef466e41e50a5 languageName: node linkType: hard @@ -10061,17 +11164,17 @@ __metadata: languageName: node linkType: hard -"is-map@npm:^2.0.1, is-map@npm:^2.0.2": - version: 2.0.2 - resolution: "is-map@npm:2.0.2" - checksum: 10/60ba910f835f2eacb1fdf5b5a6c60fe1c702d012a7673e6546992bcc0c873f62ada6e13d327f9e48f1720d49c152d6cdecae1fa47a261ef3d247c3ce6f0e1d39 +"is-map@npm:^2.0.2, is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: 10/8de7b41715b08bcb0e5edb0fb9384b80d2d5bcd10e142188f33247d19ff078abaf8e9b6f858e2302d8d05376a26a55cd23a3c9f8ab93292b02fcd2cc9e4e92bb languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: 10/edbec1a9e6454d68bf595a114c3a72343d2d0be7761d8173dae46c0b73d05bb8fe9398c85d121e7794a66467d2f40b4a610b0be84cd804262d234fc634c86131 +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10/8fe5cffd8d4fb2ec7b49d657e1691889778d037494c6f40f4d1a524cadd658b4b53ad7b6b73a59bcb4b143ae9a3d15829af864b2c0f9d65ac1e678c4c80f17e5 languageName: node linkType: hard @@ -10082,12 +11185,13 @@ __metadata: languageName: node linkType: hard -"is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" +"is-number-object@npm:^1.1.1": + version: 1.1.1 + resolution: "is-number-object@npm:1.1.1" dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/8700dcf7f602e0a9625830541345b8615d04953655acbf5c6d379c58eb1af1465e71227e95d501343346e1d49b6f2d53cbc166b1fc686a7ec19151272df582f9 + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10/a5922fb8779ab1ea3b8a9c144522b3d0bea5d9f8f23f7a72470e61e1e4df47714e28e0154ac011998b709cce260c3c9447ad3cd24a96c2f2a0abfdb2cbdc76c8 languageName: node linkType: hard @@ -10156,13 +11260,15 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.1.4": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" +"is-regex@npm:^1.1.4, is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10/36d9174d16d520b489a5e9001d7d8d8624103b387be300c50f860d9414556d0485d74a612fdafc6ebbd5c89213d947dcc6b6bff6b2312093f71ea03cbb19e564 + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10/c42b7efc5868a5c9a4d8e6d3e9816e8815c611b09535c00fead18a1138455c5cb5e1887f0023a467ad3f9c419d62ba4dc3d9ba8bafe55053914d6d6454a945d2 languageName: node linkType: hard @@ -10180,19 +11286,19 @@ __metadata: languageName: node linkType: hard -"is-set@npm:^2.0.1, is-set@npm:^2.0.2": - version: 2.0.2 - resolution: "is-set@npm:2.0.2" - checksum: 10/d89e82acdc7760993474f529e043f9c4a1d63ed4774d21cc2e331d0e401e5c91c27743cd7c889137028f6a742234759a4bd602368fbdbf0b0321994aefd5603f +"is-set@npm:^2.0.2, is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 10/5685df33f0a4a6098a98c72d94d67cad81b2bc72f1fb2091f3d9283c4a1c582123cd709145b02a9745f0ce6b41e3e43f1c944496d1d74d4ea43358be61308669 languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "is-shared-array-buffer@npm:1.0.2" +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.4": + version: 1.0.4 + resolution: "is-shared-array-buffer@npm:1.0.4" dependencies: - call-bind: "npm:^1.0.2" - checksum: 10/23d82259d6cd6dbb7c4ff3e4efeff0c30dbc6b7f88698498c17f9821cb3278d17d2b6303a5341cbd638ab925a28f3f086a6c79b3df70ac986cc526c725d43b4f + call-bound: "npm:^1.0.3" + checksum: 10/0380d7c60cc692856871526ffcd38a8133818a2ee42d47bb8008248a0cd2121d8c8b5f66b6da3cac24bc5784553cacb6faaf678f66bc88c6615b42af2825230e languageName: node linkType: hard @@ -10203,30 +11309,33 @@ __metadata: languageName: node linkType: hard -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": - version: 1.0.7 - resolution: "is-string@npm:1.0.7" +"is-string@npm:^1.0.7, is-string@npm:^1.1.1": + version: 1.1.1 + resolution: "is-string@npm:1.1.1" dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/2bc292fe927493fb6dfc3338c099c3efdc41f635727c6ebccf704aeb2a27bca7acb9ce6fd34d103db78692b10b22111a8891de26e12bfa1c5e11e263c99d1fef + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10/5277cb9e225a7cc8a368a72623b44a99f2cfa139659c6b203553540681ad4276bfc078420767aad0e73eef5f0bd07d4abf39a35d37ec216917879d11cebc1f8b languageName: node linkType: hard -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" +"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" dependencies: - has-symbols: "npm:^1.0.2" - checksum: 10/a47dd899a84322528b71318a89db25c7ecdec73197182dad291df15ffea501e17e3c92c8de0bfb50e63402747399981a687b31c519971b1fa1a27413612be929 + call-bound: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + safe-regex-test: "npm:^1.1.0" + checksum: 10/db495c0d8cd0a7a66b4f4ef7fccee3ab5bd954cb63396e8ac4d32efe0e9b12fdfceb851d6c501216a71f4f21e5ff20fc2ee845a3d52d455e021c466ac5eb2db2 languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.9": - version: 1.1.12 - resolution: "is-typed-array@npm:1.1.12" +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" dependencies: - which-typed-array: "npm:^1.1.11" - checksum: 10/d953adfd3c41618d5e01b2a10f21817e4cdc9572772fa17211100aebb3811b6e3c2e308a0558cc87d218a30504cb90154b833013437776551bfb70606fb088ca + which-typed-array: "npm:^1.1.16" + checksum: 10/e8cf60b9ea85667097a6ad68c209c9722cfe8c8edf04d6218366469e51944c5cc25bae45ffb845c23f811d262e4314d3b0168748eb16711aa34d12724cdf0735 languageName: node linkType: hard @@ -10237,29 +11346,29 @@ __metadata: languageName: node linkType: hard -"is-weakmap@npm:^2.0.1": - version: 2.0.1 - resolution: "is-weakmap@npm:2.0.1" - checksum: 10/289fa4e8ba1bdda40ca78481266f6925b7c46a85599e6a41a77010bf91e5a24dfb660db96863bbf655ecdbda0ab517204d6a4e0c151dbec9d022c556321f3776 +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: 10/a7b7e23206c542dcf2fa0abc483142731788771527e90e7e24f658c0833a0d91948a4f7b30d78f7a65255a48512e41a0288b778ba7fc396137515c12e201fd11 languageName: node linkType: hard -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.1": + version: 1.1.1 + resolution: "is-weakref@npm:1.1.1" dependencies: - call-bind: "npm:^1.0.2" - checksum: 10/0023fd0e4bdf9c338438ffbe1eed7ebbbff7e7e18fb7cdc227caaf9d4bd024a2dcdf6a8c9f40c92192022eac8391243bb9e66cccebecbf6fe1d8a366108f8513 + call-bound: "npm:^1.0.3" + checksum: 10/543506fd8259038b371bb083aac25b16cb4fd8b12fc58053aa3d45ac28dfd001cd5c6dffbba7aeea4213c74732d46b6cb2cfb5b412eed11f2db524f3f97d09a0 languageName: node linkType: hard -"is-weakset@npm:^2.0.1": - version: 2.0.2 - resolution: "is-weakset@npm:2.0.2" +"is-weakset@npm:^2.0.3": + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.1" - checksum: 10/8f2ddb9639716fd7936784e175ea1183c5c4c05274c34f34f6a53175313cb1c9c35a8b795623306995e2f7cc8f25aa46302f15a2113e51c5052d447be427195c + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10/1d5e1d0179beeed3661125a6faa2e59bfb48afda06fc70db807f178aa0ebebc3758fb6358d76b3d528090d5ef85148c345dcfbf90839592fe293e3e5e82f2134 languageName: node linkType: hard @@ -10336,9 +11445,9 @@ __metadata: linkType: hard "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: 10/31621b84ad29339242b63d454243f558a7958ee0b5177749bacf1f74be7d95d3fd93853738ef7eebcddfaf3eab014716e51392a8dbd5aa1bdc1b15c2ebc53c24 + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10/40bbdd1e937dfd8c830fa286d0f665e81b7a78bdabcd4565f6d5667c99828bda3db7fb7ac6b96a3e2e8a2461ddbc5452d9f8bc7d00cb00075fa6a3e99f5b6a81 languageName: node linkType: hard @@ -10378,38 +11487,26 @@ __metadata: linkType: hard "istanbul-reports@npm:^3.1.3": - version: 3.1.6 - resolution: "istanbul-reports@npm:3.1.6" + version: 3.2.0 + resolution: "istanbul-reports@npm:3.2.0" dependencies: html-escaper: "npm:^2.0.0" istanbul-lib-report: "npm:^3.0.0" - checksum: 10/135c178e509b21af5c446a6951fc01c331331bb0fdb1ed1dd7f68a8c875603c2e2ee5c82801db5feb868e5cc35e9babe2d972d322afc50f6de6cce6431b9b2ff - languageName: node - linkType: hard - -"iterator.prototype@npm:^1.1.0": - version: 1.1.0 - resolution: "iterator.prototype@npm:1.1.0" - dependencies: - define-properties: "npm:^1.1.4" - get-intrinsic: "npm:^1.1.3" - has-symbols: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.0" - reflect.getprototypeof: "npm:^1.0.3" - checksum: 10/462fe16c770affeb9c08620b13fc98d38307335821f4fabd489f491d38c79855c6a93d4b56f6146eaa56711f61690aa5c7eb0ce8586c95145d2f665a3834d916 + checksum: 10/6773a1d5c7d47eeec75b317144fe2a3b1da84a44b6282bebdc856e09667865e58c9b025b75b3d87f5bc62939126cbba4c871ee84254537d934ba5da5d4c4ec4e languageName: node linkType: hard -"jackspeak@npm:^2.3.5": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" +"iterator.prototype@npm:^1.1.5": + version: 1.1.5 + resolution: "iterator.prototype@npm:1.1.5" dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10/6e6490d676af8c94a7b5b29b8fd5629f21346911ebe2e32931c2a54210134408171c24cee1a109df2ec19894ad04a429402a8438cbf5cc2794585d35428ace76 + define-data-property: "npm:^1.1.4" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.6" + get-proto: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + set-function-name: "npm:^2.0.2" + checksum: 10/352bcf333f42189e65cc8cb2dcb94a5c47cf0a9110ce12aba788d405a980b5f5f3a06c79bf915377e1d480647169babd842ded0d898bed181bf6686e8e6823f6 languageName: node linkType: hard @@ -10839,17 +11936,17 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.6.2": - version: 29.6.2 - resolution: "jest-util@npm:29.6.2" +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" dependencies: - "@jest/types": "npm:^29.6.1" + "@jest/types": "npm:^29.6.3" "@types/node": "npm:*" chalk: "npm:^4.0.0" ci-info: "npm:^3.2.0" graceful-fs: "npm:^4.2.9" picomatch: "npm:^2.2.3" - checksum: 10/95d510b7bbac6976c71bf9c8f2e861cdc6c47dca0a70c470ebce6fa2afef3fecd73772efdffc04e7aad89602ab388c2f1ee1cb27c505210d767f0731da65c13b + checksum: 10/30d58af6967e7d42bd903ccc098f3b4d3859ed46238fbc88d4add6a3f10bea00c226b93660285f058bc7a65f6f9529cf4eb80f8d4707f79f9e3a23686b4ab8f3 languageName: node linkType: hard @@ -10906,14 +12003,14 @@ __metadata: linkType: hard "jest-worker@npm:^29.1.2": - version: 29.6.2 - resolution: "jest-worker@npm:29.6.2" + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" dependencies: "@types/node": "npm:*" - jest-util: "npm:^29.6.2" + jest-util: "npm:^29.7.0" merge-stream: "npm:^2.0.0" supports-color: "npm:^8.0.0" - checksum: 10/7564896d0e61fdd202652c1ce17e1c20ef01dcbf313471dd83e687efa424e82745cc4d7ebf19ba8342327fa62971107c0e507a654e0041f310b4d53bee82584f + checksum: 10/364cbaef00d8a2729fc760227ad34b5e60829e0869bd84976bdfbd8c0d0f9c2f22677b3e6dd8afa76ed174765351cd12bae3d4530c62eefb3791055127ca9745 languageName: node linkType: hard @@ -10936,25 +12033,25 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^1.18.2, jiti@npm:^1.19.1": - version: 1.21.0 - resolution: "jiti@npm:1.21.0" +"jiti@npm:^1.20.0, jiti@npm:^1.21.7": + version: 1.21.7 + resolution: "jiti@npm:1.21.7" bin: jiti: bin/jiti.js - checksum: 10/005a0239e50381b5c9919f59dbab86128367bd64872f3376dbbde54b6523f41bd134bf22909e2a509e38fd87e1c22125ca255b9b6b53e7df0fedd23f737334cc + checksum: 10/6a182521532126e4b7b5ad64b64fb2e162718fc03bc6019c21aa2222aacde6c6dfce4fc3bce9f69561a73b24ab5f79750ad353c37c3487a220d5869a39eae3a2 languageName: node linkType: hard "joi@npm:^17.6.0": - version: 17.9.2 - resolution: "joi@npm:17.9.2" + version: 17.13.3 + resolution: "joi@npm:17.13.3" dependencies: - "@hapi/hoek": "npm:^9.0.0" - "@hapi/topo": "npm:^5.0.0" - "@sideway/address": "npm:^4.1.3" + "@hapi/hoek": "npm:^9.3.0" + "@hapi/topo": "npm:^5.1.0" + "@sideway/address": "npm:^4.1.5" "@sideway/formula": "npm:^3.0.1" "@sideway/pinpoint": "npm:^2.0.0" - checksum: 10/c6c679643195c7c7eaada2ac51bef84032d4de8f9ebf3ead66079d07eccae6639b658f336358d5b9c70537cc7f3669ae8ac2a290ba832f944e4f85264c38d9e6 + checksum: 10/4c150db0c820c3a52f4a55c82c1fc5e144a5b5f4da9ffebc7339a15469d1a447ebb427ced446efcb9709ab56bd71a06c4c67c9381bc1b9f9ae63fc7c89209bdf languageName: node linkType: hard @@ -10966,25 +12063,25 @@ __metadata: linkType: hard "js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" + version: 3.14.2 + resolution: "js-yaml@npm:3.14.2" dependencies: argparse: "npm:^1.0.7" esprima: "npm:^4.0.0" bin: js-yaml: bin/js-yaml.js - checksum: 10/9e22d80b4d0105b9899135365f746d47466ed53ef4223c529b3c0f7a39907743fdbd3c4379f94f1106f02755b5e90b2faaf84801a891135544e1ea475d1a1379 + checksum: 10/172e0b6007b0bf0fc8d2469c94424f7dd765c64a047d2b790831fecef2204a4054eabf4d911eb73ab8c9a3256ab8ba1ee8d655b789bf24bf059c772acc2075a1 languageName: node linkType: hard "js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" + version: 4.1.1 + resolution: "js-yaml@npm:4.1.1" dependencies: argparse: "npm:^2.0.1" bin: js-yaml: bin/js-yaml.js - checksum: 10/c138a34a3fd0d08ebaf71273ad4465569a483b8a639e0b118ff65698d257c2791d3199e3f303631f2cb98213fa7b5f5d6a4621fd0fff819421b990d30d967140 + checksum: 10/a52d0519f0f4ef5b4adc1cde466cb54c50d56e2b4a983b9d5c9c0f2f99462047007a6274d7e95617a21d3c91fde3ee6115536ed70991cd645ba8521058b78f77 languageName: node linkType: hard @@ -11028,21 +12125,12 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 10/d2096abdcdec56969764b40ffc91d4a23408aa2f351b4d1c13f736f25476643238c43fdbaf38a191c26b1b78fd856d965f5d4d0dde7b89459cd94025190cdf13 - languageName: node - linkType: hard - -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" +"jsesc@npm:^3.0.2, jsesc@npm:~3.1.0": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" bin: jsesc: bin/jsesc - checksum: 10/fab949f585c71e169c5cbe00f049f20de74f067081bbd64a55443bad1c71e1b5a5b448f2359bf2fe06f5ed7c07e2e4a9101843b01c823c30b6afc11f5bfaf724 + checksum: 10/20bd37a142eca5d1794f354db8f1c9aeb54d85e1f5c247b371de05d23a9751ecd7bd3a9c4fc5298ea6fa09a100dafb4190fa5c98c6610b75952c3487f3ce7967 languageName: node linkType: hard @@ -11053,6 +12141,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10/82876154521b7b68ba71c4f969b91572d1beabadd87bd3a6b236f85fbc7dc4695089191ed60bb59f9340993c51b33d479f45b6ba9f3548beb519705281c32c3c + languageName: node + linkType: hard + "json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -11101,7 +12196,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.2.2": +"json5@npm:^2.1.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -11111,19 +12206,19 @@ __metadata: linkType: hard "jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" + version: 6.2.0 + resolution: "jsonfile@npm:6.2.0" dependencies: graceful-fs: "npm:^4.1.6" universalify: "npm:^2.0.0" dependenciesMeta: graceful-fs: optional: true - checksum: 10/03014769e7dc77d4cf05fa0b534907270b60890085dd5e4d60a382ff09328580651da0b8b4cdf44d91e4c8ae64d91791d965f05707beff000ed494a38b6fec85 + checksum: 10/513aac94a6eff070767cafc8eb4424b35d523eec0fcd8019fe5b975f4de5b10a54640c8d5961491ddd8e6f562588cf62435c5ddaf83aaf0986cd2ee789e0d7b9 languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" dependencies: @@ -11144,6 +12239,22 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10/167eb6ef64cc84b6fa0780ee50c9de456b422a1e18802209234f7c2cf7eae648c7741f32e50d7e24ccb22b24c13154070b01563d642755b156c357431a191e75 + languageName: node + linkType: hard + +"khroma@npm:^2.0.0": + version: 2.1.0 + resolution: "khroma@npm:2.1.0" + checksum: 10/a195e317bf6f3a1cba98df2677bf9bf6d14195ee0b1c3e5bc20a542cd99652682f290c196a8963956d87aed4ad65ac0bc8a15d75cddf00801fdafd148e01a5d2 + languageName: node + linkType: hard + "kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -11158,26 +12269,19 @@ __metadata: languageName: node linkType: hard -"klona@npm:^2.0.4": - version: 2.0.6 - resolution: "klona@npm:2.0.6" - checksum: 10/ed7e2c9af58cb646e758e60b75dec24bf72466066290f78c515a2bae23a06fa280f11ff3210c43b94a18744954aa5358f9d46583d5e4c36da073ecc3606355c4 - languageName: node - linkType: hard - -"language-subtag-registry@npm:~0.3.2": - version: 0.3.22 - resolution: "language-subtag-registry@npm:0.3.22" - checksum: 10/5591f4abd775d1ab5945355a5ba894327d2d94c900607bdb69aac1bc5bb921dbeeeb5f616df95e8c0ae875501d19c1cfa0e852ece822121e95048deb34f2b4d2 +"language-subtag-registry@npm:^0.3.20": + version: 0.3.23 + resolution: "language-subtag-registry@npm:0.3.23" + checksum: 10/fe13ed74ab9f862db8e5747b98cc9aa08d52a19f85b5cdb4975cd364c8539bd2da3380e4560d2dbbd728ec33dff8a4b4421fcb2e5b1b1bdaa21d16f91a54d0d4 languageName: node linkType: hard -"language-tags@npm:=1.0.5": - version: 1.0.5 - resolution: "language-tags@npm:1.0.5" +"language-tags@npm:^1.0.9": + version: 1.0.9 + resolution: "language-tags@npm:1.0.9" dependencies: - language-subtag-registry: "npm:~0.3.2" - checksum: 10/2161292ddae73ff2f5a15fd2d753b21096b81324337dff4ad78d702c63210d5beb18892cd53a3455ee6e88065807c8e285e82c40503678951d2071d101a473b4 + language-subtag-registry: "npm:^0.3.20" + checksum: 10/d3a7c14b694e67f519153d6df6cb200681648d38d623c3bfa9d6a66a5ec5493628acb88e9df5aceef3cf1902ab263a205e7d59ee4cf1d6bb67e707b83538bd6d languageName: node linkType: hard @@ -11191,83 +12295,113 @@ __metadata: linkType: hard "launch-editor@npm:^2.6.0": - version: 2.6.0 - resolution: "launch-editor@npm:2.6.0" + version: 2.13.1 + resolution: "launch-editor@npm:2.13.1" dependencies: - picocolors: "npm:^1.0.0" - shell-quote: "npm:^1.7.3" - checksum: 10/48e4230643e8fdb5c14c11314706d58d9f3fbafe2606be3d6e37da1918ad8bfe39dd87875c726a1b59b9f4da99d87ec3e36d4c528464f0b820f9e91e5cb1c02d + picocolors: "npm:^1.1.1" + shell-quote: "npm:^1.8.3" + checksum: 10/641aafaad6bafe5d33a13d89eff29082b032c1c5c1aa19fb9fa3b54ffcf26a3419f461a7583f6450bd5b11863b061b60049e38c2d5135492bf46f2ed3a2cbc0e languageName: node linkType: hard -"lefthook-darwin-arm64@npm:1.6.1": - version: 1.6.1 - resolution: "lefthook-darwin-arm64@npm:1.6.1" +"layout-base@npm:^1.0.0": + version: 1.0.2 + resolution: "layout-base@npm:1.0.2" + checksum: 10/34504e61e4770e563cf49d4a56c8c10f1da0fb452cff89a652118783189c642ebc86a300d97cbc247e59a9c1eb06a2d419982f7dd10e8eedcab2414bc46d32f8 + languageName: node + linkType: hard + +"layout-base@npm:^2.0.0": + version: 2.0.1 + resolution: "layout-base@npm:2.0.1" + checksum: 10/b5cca04a2e327ea16374a0058f73544291aeb0026972677a128594aca3b627d26949140ab7d275798c7d39193a33b41c5a856d4509c1518f49c9a5f1dad39a20 + languageName: node + linkType: hard + +"lefthook-darwin-arm64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-darwin-arm64@npm:1.13.6" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"lefthook-darwin-x64@npm:1.6.1": - version: 1.6.1 - resolution: "lefthook-darwin-x64@npm:1.6.1" +"lefthook-darwin-x64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-darwin-x64@npm:1.13.6" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"lefthook-freebsd-arm64@npm:1.6.1": - version: 1.6.1 - resolution: "lefthook-freebsd-arm64@npm:1.6.1" +"lefthook-freebsd-arm64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-freebsd-arm64@npm:1.13.6" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"lefthook-freebsd-x64@npm:1.6.1": - version: 1.6.1 - resolution: "lefthook-freebsd-x64@npm:1.6.1" +"lefthook-freebsd-x64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-freebsd-x64@npm:1.13.6" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"lefthook-linux-arm64@npm:1.6.1": - version: 1.6.1 - resolution: "lefthook-linux-arm64@npm:1.6.1" +"lefthook-linux-arm64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-linux-arm64@npm:1.13.6" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"lefthook-linux-x64@npm:1.6.1": - version: 1.6.1 - resolution: "lefthook-linux-x64@npm:1.6.1" +"lefthook-linux-x64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-linux-x64@npm:1.13.6" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"lefthook-windows-arm64@npm:1.6.1": - version: 1.6.1 - resolution: "lefthook-windows-arm64@npm:1.6.1" +"lefthook-openbsd-arm64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-openbsd-arm64@npm:1.13.6" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"lefthook-openbsd-x64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-openbsd-x64@npm:1.13.6" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"lefthook-windows-arm64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-windows-arm64@npm:1.13.6" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"lefthook-windows-x64@npm:1.6.1": - version: 1.6.1 - resolution: "lefthook-windows-x64@npm:1.6.1" +"lefthook-windows-x64@npm:1.13.6": + version: 1.13.6 + resolution: "lefthook-windows-x64@npm:1.13.6" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "lefthook@npm:^1.6.1": - version: 1.6.1 - resolution: "lefthook@npm:1.6.1" - dependencies: - lefthook-darwin-arm64: "npm:1.6.1" - lefthook-darwin-x64: "npm:1.6.1" - lefthook-freebsd-arm64: "npm:1.6.1" - lefthook-freebsd-x64: "npm:1.6.1" - lefthook-linux-arm64: "npm:1.6.1" - lefthook-linux-x64: "npm:1.6.1" - lefthook-windows-arm64: "npm:1.6.1" - lefthook-windows-x64: "npm:1.6.1" + version: 1.13.6 + resolution: "lefthook@npm:1.13.6" + dependencies: + lefthook-darwin-arm64: "npm:1.13.6" + lefthook-darwin-x64: "npm:1.13.6" + lefthook-freebsd-arm64: "npm:1.13.6" + lefthook-freebsd-x64: "npm:1.13.6" + lefthook-linux-arm64: "npm:1.13.6" + lefthook-linux-x64: "npm:1.13.6" + lefthook-openbsd-arm64: "npm:1.13.6" + lefthook-openbsd-x64: "npm:1.13.6" + lefthook-windows-arm64: "npm:1.13.6" + lefthook-windows-x64: "npm:1.13.6" dependenciesMeta: lefthook-darwin-arm64: optional: true @@ -11281,13 +12415,17 @@ __metadata: optional: true lefthook-linux-x64: optional: true + lefthook-openbsd-arm64: + optional: true + lefthook-openbsd-x64: + optional: true lefthook-windows-arm64: optional: true lefthook-windows-x64: optional: true bin: lefthook: bin/index.js - checksum: 10/3efc09b1a472edc306ba74ea385c2deaef77342adada831cacfd6cc96ee0e86901856598b1255d8bc715c7c41fe3fa79ca505f5a95c084d6a422952d4987152f + checksum: 10/ba8d92d26e109d027cfd7577007ca5091e983158da6d72e9d01a5c7f9986ebf8de9728318e9a16d6fb740e0c57619d297727fca88cf727d6218cd150c4738380 languageName: node linkType: hard @@ -11308,17 +12446,17 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:^2.0.3, lilconfig@npm:^2.1.0": +"lilconfig@npm:^2.0.3": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" checksum: 10/b1314a2e55319013d5e7d7d08be39015829d2764a1eaee130129545d40388499d81b1c31b0f9b3417d4db12775a88008b72ec33dd06e0184cf7503b32ca7cc0b languageName: node linkType: hard -"lilconfig@npm:^3.0.0": - version: 3.1.1 - resolution: "lilconfig@npm:3.1.1" - checksum: 10/c80fbf98ae7d1daf435e16a83fe3c63743b9d92804cac6dc53ee081c7c265663645c3162d8a0d04ff1874f9c07df145519743317dee67843234c6ed279300f83 +"lilconfig@npm:^3.1.1, lilconfig@npm:^3.1.3": + version: 3.1.3 + resolution: "lilconfig@npm:3.1.3" + checksum: 10/b932ce1af94985f0efbe8896e57b1f814a48c8dbd7fc0ef8469785c6303ed29d0090af3ccad7e36b626bfca3a4dc56cc262697e9a8dd867623cf09a39d54e4c3 languageName: node linkType: hard @@ -11336,14 +12474,14 @@ __metadata: languageName: node linkType: hard -"loader-runner@npm:^4.2.0": - version: 4.3.0 - resolution: "loader-runner@npm:4.3.0" - checksum: 10/555ae002869c1e8942a0efd29a99b50a0ce6c3296efea95caf48f00d7f6f7f659203ed6613688b6181aa81dc76de3e65ece43094c6dffef3127fe1a84d973cd3 +"loader-runner@npm:^4.3.1": + version: 4.3.1 + resolution: "loader-runner@npm:4.3.1" + checksum: 10/d77127497c3f91fdba351e3e91156034e6e590e9f050b40df6c38ac16c54b5c903f7e2e141e09fefd046ee96b26fb50773c695ebc0aa205a4918683b124b04ba languageName: node linkType: hard -"loader-utils@npm:^2.0.0": +"loader-utils@npm:^2.0.0, loader-utils@npm:^2.0.4": version: 2.0.4 resolution: "loader-utils@npm:2.0.4" dependencies: @@ -11355,9 +12493,9 @@ __metadata: linkType: hard "loader-utils@npm:^3.2.0": - version: 3.2.1 - resolution: "loader-utils@npm:3.2.1" - checksum: 10/177f5bb9b4c651263714fcd1b50682c1367b06893462529f510287775f9e461ca27a41bf364c8dffa9cd74ed9e8b1fdb30c03a526f6bcf12573bdc1a1644d086 + version: 3.3.1 + resolution: "loader-utils@npm:3.3.1" + checksum: 10/3f994a948ded4248569773f065b1f6d7c95da059888c8429153e203f9bdadfb1691ca517f9eac6548a8af2fe5c724a8e09cbb79f665db4209426606a57ec7650 languageName: node linkType: hard @@ -11389,6 +12527,13 @@ __metadata: languageName: node linkType: hard +"lodash-es@npm:^4.17.21": + version: 4.17.23 + resolution: "lodash-es@npm:4.17.23" + checksum: 10/1feae200df22eb0bd93ca86d485e77784b8a9fb1d13e91b66e9baa7a7e5e04be088c12a7e20c2250fc0bd3db1bc0ef0affc7d9e3810b6af2455a3c6bf6dde59e + languageName: node + linkType: hard + "lodash.camelcase@npm:^4.3.0": version: 4.3.0 resolution: "lodash.camelcase@npm:4.3.0" @@ -11446,9 +12591,9 @@ __metadata: linkType: hard "lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 + version: 4.17.23 + resolution: "lodash@npm:4.17.23" + checksum: 10/82504c88250f58da7a5a4289f57a4f759c44946c005dd232821c7688b5fcfbf4a6268f6a6cdde4b792c91edd2f3b5398c1d2a0998274432cff76def48735e233 languageName: node linkType: hard @@ -11460,9 +12605,9 @@ __metadata: linkType: hard "long@npm:^5.0.0": - version: 5.2.3 - resolution: "long@npm:5.2.3" - checksum: 10/9167ec6947a825b827c30da169a7384eec6c0c9ec2f0b9c74da2e93d81159bbe39fb09c3f13dae9721d4b807ccfa09797a7dd1012f5d478e3e33ca3c78b608e6 + version: 5.3.2 + resolution: "long@npm:5.3.2" + checksum: 10/b6b55ddae56fcce2864d37119d6b02fe28f6dd6d9e44fd22705f86a9254b9321bd69e9ffe35263b4846d54aba197c64882adcb8c543f2383c1e41284b321ea64 languageName: node linkType: hard @@ -11516,22 +12661,6 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10/fc1fe2ee205f7c8855fa0f34c1ab0bcf14b6229e35579ec1fd1079f31d6fc8ef8eb6fd17f2f4d99788d7e339f50e047555551ebd5e434dda503696e7c6591825 - languageName: node - linkType: hard - -"lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.2.0 - resolution: "lru-cache@npm:10.2.0" - checksum: 10/502ec42c3309c0eae1ce41afca471f831c278566d45a5273a0c51102dee31e0e250a62fa9029c3370988df33a14188a38e682c16143b794de78668de3643e302 - languageName: node - linkType: hard - "lz-string@npm:^1.5.0": version: 1.5.0 resolution: "lz-string@npm:1.5.0" @@ -11560,9 +12689,10 @@ __metadata: linkType: hard "make-fetch-happen@npm:^15.0.0": - version: 15.0.3 - resolution: "make-fetch-happen@npm:15.0.3" + version: 15.0.4 + resolution: "make-fetch-happen@npm:15.0.4" dependencies: + "@gar/promise-retry": "npm:^1.0.0" "@npmcli/agent": "npm:^4.0.0" cacache: "npm:^20.0.1" http-cache-semantics: "npm:^4.1.1" @@ -11572,9 +12702,8 @@ __metadata: minipass-pipeline: "npm:^1.2.4" negotiator: "npm:^1.0.0" proc-log: "npm:^6.0.0" - promise-retry: "npm:^2.0.1" ssri: "npm:^13.0.0" - checksum: 10/78da4fc1df83cb596e2bae25aa0653b8a9c6cbdd6674a104894e03be3acfcd08c70b78f06ef6407fbd6b173f6a60672480d78641e693d05eb71c09c13ee35278 + checksum: 10/4aa75baab500eff4259f2e1a3e76cf01ab3a3cd750037e4bd7b5e22bc5a60f12cc766b3c45e6288accb5ab609e88de5019a8014e0f96f6594b7b03cb504f4b81 languageName: node linkType: hard @@ -11594,6 +12723,13 @@ __metadata: languageName: node linkType: hard +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10/11df2eda46d092a6035479632e1ec865b8134bdfc4bd9e571a656f4191525404f13a283a515938c3a8de934dbfd9c09674d9da9fa831e6eb7e22b50b197d2edd + languageName: node + linkType: hard + "mdast-squeeze-paragraphs@npm:^4.0.0": version: 4.0.0 resolution: "mdast-squeeze-paragraphs@npm:4.0.0" @@ -11657,11 +12793,11 @@ __metadata: linkType: hard "memfs@npm:^3.1.2, memfs@npm:^3.4.3": - version: 3.6.0 - resolution: "memfs@npm:3.6.0" + version: 3.5.3 + resolution: "memfs@npm:3.5.3" dependencies: fs-monkey: "npm:^1.0.4" - checksum: 10/9c0d5dac636ed933e39df95e4ecf5b503c01f234da87550530381b16e3999c938c76f5e85a2410cb07a75a9d2c4b7dd405ef73b004d3e78ed686c044f96f5c00 + checksum: 10/7c9cdb453a6b06e87f11e2dbe6c518fd3c1c1581b370ffa24f42f3fd5b1db8c2203f596e43321a0032963f3e9b66400f2c3cf043904ac496d6ae33eafd0878fe languageName: node linkType: hard @@ -11672,10 +12808,10 @@ __metadata: languageName: node linkType: hard -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: 10/5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 +"merge-descriptors@npm:1.0.3": + version: 1.0.3 + resolution: "merge-descriptors@npm:1.0.3" + checksum: 10/52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1 languageName: node linkType: hard @@ -11693,6 +12829,30 @@ __metadata: languageName: node linkType: hard +"mermaid@npm:^9.2.2": + version: 9.4.3 + resolution: "mermaid@npm:9.4.3" + dependencies: + "@braintree/sanitize-url": "npm:^6.0.0" + cytoscape: "npm:^3.23.0" + cytoscape-cose-bilkent: "npm:^4.1.0" + cytoscape-fcose: "npm:^2.1.0" + d3: "npm:^7.4.0" + dagre-d3-es: "npm:7.0.9" + dayjs: "npm:^1.11.7" + dompurify: "npm:2.4.3" + elkjs: "npm:^0.8.2" + khroma: "npm:^2.0.0" + lodash-es: "npm:^4.17.21" + non-layered-tidy-tree-layout: "npm:^2.0.2" + stylis: "npm:^4.1.2" + ts-dedent: "npm:^2.2.0" + uuid: "npm:^9.0.0" + web-worker: "npm:^1.2.0" + checksum: 10/486a1c0257ced3307d11a421f64001da20fabd79fa6b91f89fa54ad44ffe17e8c741a7d142044c776392579ff52e7de778a671215500f5df44519ae963279092 + languageName: node + linkType: hard + "methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" @@ -11700,13 +12860,13 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" dependencies: - braces: "npm:^3.0.2" + braces: "npm:^3.0.3" picomatch: "npm:^2.3.1" - checksum: 10/a749888789fc15cac0e03273844dbd749f9f8e8d64e70c564bcf06a033129554c789bb9e30d7566d7ff6596611a08e58ac12cf2a05f6e3c9c47c50c4c7e12fa2 + checksum: 10/6bf2a01672e7965eb9941d1f02044fad2bd12486b5553dc1116ff24c09a8723157601dc992e74c911d896175918448762df3b3fd0a6b61037dd1a9766ddfbf58 languageName: node linkType: hard @@ -11733,7 +12893,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34, mime-types@npm:~2.1.35": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -11766,13 +12926,14 @@ __metadata: linkType: hard "mini-css-extract-plugin@npm:^2.6.1": - version: 2.7.6 - resolution: "mini-css-extract-plugin@npm:2.7.6" + version: 2.10.1 + resolution: "mini-css-extract-plugin@npm:2.10.1" dependencies: schema-utils: "npm:^4.0.0" + tapable: "npm:^2.2.1" peerDependencies: webpack: ^5.0.0 - checksum: 10/1f718bfdcb7c2bf5e4336f694e5576432149d63f9dacaf94eae38ad046534050471a712a2d1bedf95e1722a2d3b56c3361d7352849e802e4875e716885e952c3 + checksum: 10/2d0cecc3bea85cd7f9b1ce0974f1672976d610a9267e2988ff19f5d03b017bff12b32151a412de0f519a70be7d3b050b499b20101445fb21728cc2d35dd4041a languageName: node linkType: hard @@ -11783,25 +12944,16 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:3.1.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" +"minimatch@npm:3.1.5, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.5 + resolution: "minimatch@npm:3.1.5" dependencies: brace-expansion: "npm:^1.1.7" - checksum: 10/e0b25b04cd4ec6732830344e5739b13f8690f8a012d73445a4a19fbc623f5dd481ef7a5827fde25954cd6026fede7574cc54dc4643c99d6c6b653d6203f94634 - languageName: node - linkType: hard - -"minimatch@npm:^10.2.2": - version: 10.2.2 - resolution: "minimatch@npm:10.2.2" - dependencies: - brace-expansion: "npm:^5.0.2" - checksum: 10/e135be7b502ac97c02bcee42ccc1c55dc26dbac036c0f4acde69e42fe339d7fb53fae711e57b3546cb533426382ea492c73a073c7f78832e0453d120d48dd015 + checksum: 10/b11a7ee5773cd34c1a0c8436cdbe910901018fb4b6cb47aa508a18d567f6efd2148507959e35fba798389b161b8604a2d704ccef751ea36bd4582f9852b7d63f languageName: node linkType: hard -"minimatch@npm:^9.0.1": +"minimatch@npm:9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -11810,6 +12962,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^10.2.2": + version: 10.2.4 + resolution: "minimatch@npm:10.2.4" + dependencies: + brace-expansion: "npm:^5.0.2" + checksum: 10/aea4874e521c55bb60744685bbffe3d152e5460f84efac3ea936e6bbe2ceba7deb93345fec3f9bb17f7b6946776073a64d40ae32bf5f298ad690308121068a1f + languageName: node + linkType: hard + "minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -11827,17 +12988,17 @@ __metadata: linkType: hard "minipass-fetch@npm:^5.0.0": - version: 5.0.1 - resolution: "minipass-fetch@npm:5.0.1" + version: 5.0.2 + resolution: "minipass-fetch@npm:5.0.2" dependencies: - encoding: "npm:^0.1.13" + iconv-lite: "npm:^0.7.2" minipass: "npm:^7.0.3" minipass-sized: "npm:^2.0.0" minizlib: "npm:^3.0.1" dependenciesMeta: - encoding: + iconv-lite: optional: true - checksum: 10/08bf0c9866e7f344bf1863ce0d99c0a6fe96b43ef5a4119e23d84a21e613a3f55ecf302adf28d9e228b4ebd50e81d5e84c397e0535089090427319379f478d94 + checksum: 10/4f3f65ea5b20a3a287765ebf21cc73e62031f754944272df2a3039296cc75a8fc2dc50b8a3c4f39ce3ac6e5cc583e8dc664d12c6ab98e0883d263e49f344bc86 languageName: node linkType: hard @@ -11877,13 +13038,6 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0": - version: 7.0.4 - resolution: "minipass@npm:7.0.4" - checksum: 10/e864bd02ceb5e0707696d58f7ce3a0b89233f0d686ef0d447a66db705c0846a8dc6f34865cd85256c1472ff623665f616b90b8ff58058b2ad996c5de747d2d18 - languageName: node - linkType: hard - "minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2, minipass@npm:^7.1.3": version: 7.1.3 resolution: "minipass@npm:7.1.3" @@ -11901,16 +13055,16 @@ __metadata: linkType: hard "moment@npm:^2.24.0, moment@npm:^2.29.2": - version: 2.29.4 - resolution: "moment@npm:2.29.4" - checksum: 10/157c5af5a0ba8196e577bc67feb583303191d21ba1f7f2af30b3b40d4c63a64d505ba402be2a1454832082fac6be69db1e0d186c3279dae191e6634b0c33705c + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 10/ae42d876d4ec831ef66110bdc302c0657c664991e45cf2afffc4b0f6cd6d251dde11375c982a5c0564ccc0fa593fc564576ddceb8c8845e87c15f58aa6baca69 languageName: node linkType: hard -"mrmime@npm:^1.0.0": - version: 1.0.1 - resolution: "mrmime@npm:1.0.1" - checksum: 10/a157e833ffe76648ab2107319deeff024b80b136ec66c60fae9d339009a1bb72c57ec1feecfd6a905dfd3df29e2299e850bff84b69cad790cc9bd9ab075834d1 +"mrmime@npm:^2.0.0": + version: 2.0.1 + resolution: "mrmime@npm:2.0.1" + checksum: 10/1f966e2c05b7264209c4149ae50e8e830908eb64dd903535196f6ad72681fa109b794007288a3c2814f7a1ecf9ca192769909c0c374d974d604a8de5fc095d4a languageName: node linkType: hard @@ -11921,14 +13075,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10/673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -11965,12 +13112,21 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.6, nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" +"nanoid@npm:^3.3.11": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" bin: nanoid: bin/nanoid.cjs - checksum: 10/ac1eb60f615b272bccb0e2b9cd933720dad30bf9708424f691b8113826bb91aca7e9d14ef5d9415a6ba15c266b37817256f58d8ce980c82b0ba3185352565679 + checksum: 10/73b5afe5975a307aaa3c95dfe3334c52cdf9ae71518176895229b8d65ab0d1c0417dd081426134eb7571c055720428ea5d57c645138161e7d10df80815527c48 + languageName: node + linkType: hard + +"napi-postinstall@npm:^0.3.0": + version: 0.3.4 + resolution: "napi-postinstall@npm:0.3.4" + bin: + napi-postinstall: lib/cli.js + checksum: 10/5541381508f9e1051ff3518701c7130ebac779abb3a1ffe9391fcc3cab4cc0569b0ba0952357db3f6b12909c3bb508359a7a60261ffd795feebbdab967175832 languageName: node linkType: hard @@ -11995,6 +13151,13 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:~0.6.4": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 10/d98c04a136583afd055746168f1067d58ce4bfe6e4c73ca1d339567f81ea1f7e665b5bd1e81f4771c67b6c2ea89b21cb2adaea2b16058c7dc31317778f931dab + languageName: node + linkType: hard + "neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" @@ -12012,6 +13175,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^7.0.0": + version: 7.1.1 + resolution: "node-addon-api@npm:7.1.1" + dependencies: + node-gyp: "npm:latest" + checksum: 10/ee1e1ed6284a2f8cd1d59ac6175ecbabf8978dcf570345e9a8095a9d0a2b9ced591074ae77f9009287b00c402352b38aa9322a34f2199cdc9f567b842a636b94 + languageName: node + linkType: hard + "node-emoji@npm:^1.10.0": version: 1.11.0 resolution: "node-emoji@npm:1.11.0" @@ -12021,6 +13193,18 @@ __metadata: languageName: node linkType: hard +"node-exports-info@npm:^1.6.0": + version: 1.6.0 + resolution: "node-exports-info@npm:1.6.0" + dependencies: + array.prototype.flatmap: "npm:^1.3.3" + es-errors: "npm:^1.3.0" + object.entries: "npm:^1.1.9" + semver: "npm:^6.3.1" + checksum: 10/0a1667d535f499ac1fe6c6d22f8146bc8b68abc76fa355856219202f6cf5f386027e0ff054e66a22d08be02acbc63fcdc9f98d0fbc97993f5eabc66408fdadad + languageName: node + linkType: hard + "node-fetch@npm:2.6.7": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" @@ -12035,9 +13219,9 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.12": - version: 2.6.12 - resolution: "node-fetch@npm:2.6.12" +"node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" dependencies: whatwg-url: "npm:^5.0.0" peerDependencies: @@ -12045,14 +13229,14 @@ __metadata: peerDependenciesMeta: encoding: optional: true - checksum: 10/370ed4d906edad9709a81b54a0141d37d2973a27dc80c723d8ac14afcec6dc67bc6c70986a96992b64ec75d08159cc4b65ce6aa9063941168ea5ac73b24df9f8 + checksum: 10/b24f8a3dc937f388192e59bcf9d0857d7b6940a2496f328381641cb616efccc9866e89ec43f2ec956bbd6c3d3ee05524ce77fe7b29ccd34692b3a16f237d6676 languageName: node linkType: hard "node-forge@npm:^1": - version: 1.3.1 - resolution: "node-forge@npm:1.3.1" - checksum: 10/05bab6868633bf9ad4c3b1dd50ec501c22ffd69f556cdf169a00998ca1d03e8107a6032ba013852f202035372021b845603aeccd7dfcb58cdb7430013b3daa8d + version: 1.3.3 + resolution: "node-forge@npm:1.3.3" + checksum: 10/f41c31b9296771a4b8c955d58417471712f54f324603a35f8e6cbac19d5e6eaaf5fd5fd14584dfedecbf46a05438ded6eee60a5f2f0822fc5061aaa073cfc75d languageName: node linkType: hard @@ -12083,10 +13267,17 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.13": - version: 2.0.13 - resolution: "node-releases@npm:2.0.13" - checksum: 10/c9bb813aab2717ff8b3015ecd4c7c5670a5546e9577699a7c84e8d69230cd3b1ce8f863f8e9b50f18b19a5ffa4b9c1a706bbbfe4c378de955fedbab04488a338 +"node-releases@npm:^2.0.27": + version: 2.0.36 + resolution: "node-releases@npm:2.0.36" + checksum: 10/b31ead96e328b1775f07cad80c17b0601d0ee2894650b737e7ab5cbeb14e284e82dbc37ef38f1d915fa46dd7909781bd933d19b79cfe31b352573fac6da377aa + languageName: node + linkType: hard + +"non-layered-tidy-tree-layout@npm:^2.0.2": + version: 2.0.2 + resolution: "non-layered-tidy-tree-layout@npm:2.0.2" + checksum: 10/615b4da455a4ed761cc1563b126450c92f14d2d92c75cfd861fec495557a48768c5bf3012f080c8e58ecb093bfd2268a636515963a1e769f5a7029d057fa169a languageName: node linkType: hard @@ -12120,13 +13311,6 @@ __metadata: languageName: node linkType: hard -"normalize-range@npm:^0.1.2": - version: 0.1.2 - resolution: "normalize-range@npm:0.1.2" - checksum: 10/9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 - languageName: node - linkType: hard - "normalize-url@npm:^4.1.0": version: 4.5.1 resolution: "normalize-url@npm:4.5.1" @@ -12167,9 +13351,9 @@ __metadata: linkType: hard "nwsapi@npm:^2.2.0": - version: 2.2.7 - resolution: "nwsapi@npm:2.2.7" - checksum: 10/22c002080f0297121ad138aba5a6509e724774d6701fe2c4777627bd939064ecd9e1b6dc1c2c716bb7ca0b9f16247892ff2f664285202ac7eff6ec9543725320 + version: 2.2.23 + resolution: "nwsapi@npm:2.2.23" + checksum: 10/aa4a570039c33d70b51436d1bb533f3e2c33c488ccbe9b09285c46a6cee5ef266fd60103461085c6954ba52460786a8138f042958328c7c1b4763898eb3dadfa languageName: node linkType: hard @@ -12187,20 +13371,20 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": - version: 1.12.3 - resolution: "object-inspect@npm:1.12.3" - checksum: 10/532b0036f0472f561180fac0d04fe328ee01f57637624c83fb054f81b5bfe966cdf4200612a499ed391a7ca3c46b20a0bc3a55fc8241d944abe687c556a32b39 +"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10/aa13b1190ad3e366f6c83ad8a16ed37a19ed57d267385aa4bfdccda833d7b90465c057ff6c55d035a6b2e52c1a2295582b294217a0a3a1ae7abdd6877ef781fb languageName: node linkType: hard "object-is@npm:^1.1.5": - version: 1.1.5 - resolution: "object-is@npm:1.1.5" + version: 1.1.6 + resolution: "object-is@npm:1.1.6" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - checksum: 10/75365aff5da4bebad5d20efd9f9a7a13597e603f5eb03d89da8f578c3f3937fe01c6cb5fce86c0611c48795c0841401fd37c943821db0de703c7b30a290576ad + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + checksum: 10/4f6f544773a595da21c69a7531e0e1d6250670f4e09c55f47eb02c516035cfcb1b46ceb744edfd3ecb362309dbccb6d7f88e43bf42e4d4595ac10a329061053a languageName: node linkType: hard @@ -12211,70 +13395,64 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.4": - version: 4.1.4 - resolution: "object.assign@npm:4.1.4" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - has-symbols: "npm:^1.0.3" - object-keys: "npm:^1.1.1" - checksum: 10/fd82d45289df0a952d772817622ecbaeb4ec933d3abb53267aede083ee38f6a395af8fadfbc569ee575115b0b7c9b286e7cfb2b7a2557b1055f7acbce513bc29 - languageName: node - linkType: hard - -"object.entries@npm:^1.1.2, object.entries@npm:^1.1.6": - version: 1.1.6 - resolution: "object.entries@npm:1.1.6" +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.4, object.assign@npm:^4.1.7": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10/08a09ff839fd541e8af90a47c67a3dd71721683cdc28e55470e191a8afd8b61188fb9a429fd1d1805808097d8d5950b47c0c2862157dad891226112d8321401b + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + object-keys: "npm:^1.1.1" + checksum: 10/3fe28cdd779f2a728a9a66bd688679ba231a2b16646cd1e46b528fe7c947494387dda4bc189eff3417f3717ef4f0a8f2439347cf9a9aa3cef722fbfd9f615587 languageName: node linkType: hard -"object.fromentries@npm:^2.0.6": - version: 2.0.6 - resolution: "object.fromentries@npm:2.0.6" +"object.entries@npm:^1.1.2, object.entries@npm:^1.1.9": + version: 1.1.9 + resolution: "object.entries@npm:1.1.9" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10/e8b813647cbc6505750cdff8b3978bb341492707a5f1df4129e2d8a904b31692e225eff92481ae5916be3bde3c2eff1d0e8a6730921ca7f4eed60bc15a70cb35 + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.1.1" + checksum: 10/24163ab1e1e013796693fc5f5d349e8b3ac0b6a34a7edb6c17d3dd45c6a8854145780c57d302a82512c1582f63720f4b4779d6c1cfba12cbb1420b978802d8a3 languageName: node linkType: hard -"object.groupby@npm:^1.0.0": - version: 1.0.0 - resolution: "object.groupby@npm:1.0.0" +"object.fromentries@npm:^2.0.8": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.21.2" - get-intrinsic: "npm:^1.2.1" - checksum: 10/8233fa5288744dd6ea22050d96bb3f59c5acf85ab32ed758821ff82f276dda76b1bb1b9220a52432673476dff361a06ddcfff6d7d859135ff3c1c89b8c844b3e + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10/5b2e80f7af1778b885e3d06aeb335dcc86965e39464671adb7167ab06ac3b0f5dd2e637a90d8ebd7426d69c6f135a4753ba3dd7d0fe2a7030cf718dcb910fd92 languageName: node linkType: hard -"object.hasown@npm:^1.1.2": - version: 1.1.2 - resolution: "object.hasown@npm:1.1.2" +"object.groupby@npm:^1.0.3": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" dependencies: - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10/94031022a2ba6006c15c6f1e0c4f51a7fa5b36aee64800192335b979fcc8bd823b18c35cb1a728af68fdfdbbe6d765f77a3c5437306c031f63654b8a34b9e639 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + checksum: 10/44cb86dd2c660434be65f7585c54b62f0425b0c96b5c948d2756be253ef06737da7e68d7106e35506ce4a44d16aa85a413d11c5034eb7ce5579ec28752eb42d0 languageName: node linkType: hard -"object.values@npm:^1.1.6": - version: 1.1.6 - resolution: "object.values@npm:1.1.6" +"object.values@npm:^1.1.6, object.values@npm:^1.2.1": + version: 1.2.1 + resolution: "object.values@npm:1.2.1" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10/adea807c90951df34eb2f5c6a90ab5624e15c71f0b3a3e422db16933c9f4e19551d10649fffcb4adcac01d86d7c14a64bfb500d8f058db5a52976150a917f6eb + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10/f5ec9eccdefeaaa834b089c525663436812a65ff13de7964a1c3a9110f32054f2d58aa476a645bb14f75a79f3fe1154fb3e7bfdae7ac1e80affe171b2ef74bce languageName: node linkType: hard @@ -12285,7 +13463,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1": +"on-finished@npm:~2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -12294,10 +13472,10 @@ __metadata: languageName: node linkType: hard -"on-headers@npm:~1.0.2": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: 10/870766c16345855e2012e9422ba1ab110c7e44ad5891a67790f84610bd70a72b67fdd71baf497295f1d1bf38dd4c92248f825d48729c53c0eae5262fb69fa171 +"on-headers@npm:~1.1.0": + version: 1.1.0 + resolution: "on-headers@npm:1.1.0" + checksum: 10/98aa64629f986fb8cc4517dd8bede73c980e31208cba97f4442c330959f60ced3dc6214b83420491f5111fc7c4f4343abe2ea62c85f505cf041d67850f238776 languageName: node linkType: hard @@ -12340,16 +13518,27 @@ __metadata: linkType: hard "optionator@npm:^0.9.1": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" + version: 0.9.4 + resolution: "optionator@npm:0.9.4" dependencies: - "@aashutoshrathi/word-wrap": "npm:^1.2.3" deep-is: "npm:^0.1.3" fast-levenshtein: "npm:^2.0.6" levn: "npm:^0.4.1" prelude-ls: "npm:^1.2.1" type-check: "npm:^0.4.0" - checksum: 10/fa28d3016395974f7fc087d6bbf0ac7f58ac3489f4f202a377e9c194969f329a7b88c75f8152b33fb08794a30dcd5c079db6bb465c28151357f113d80bbf67da + word-wrap: "npm:^1.2.5" + checksum: 10/a8398559c60aef88d7f353a4f98dcdff6090a4e70f874c827302bf1213d9106a1c4d5fcb68dacb1feb3c30a04c4102f41047aa55d4c576b863d6fc876e001af6 + languageName: node + linkType: hard + +"own-keys@npm:^1.0.1": + version: 1.0.1 + resolution: "own-keys@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.2.6" + object-keys: "npm:^1.1.1" + safe-push-apply: "npm:^1.0.0" + checksum: 10/ab4bb3b8636908554fc19bf899e225444195092864cb61503a0d048fdaf662b04be2605b636a4ffeaf6e8811f6fcfa8cbb210ec964c0eb1a41eb853e1d5d2f41 languageName: node linkType: hard @@ -12502,13 +13691,22 @@ __metadata: languageName: node linkType: hard -"parse5-htmlparser2-tree-adapter@npm:^7.0.0": - version: 7.0.0 - resolution: "parse5-htmlparser2-tree-adapter@npm:7.0.0" +"parse5-htmlparser2-tree-adapter@npm:^7.1.0": + version: 7.1.0 + resolution: "parse5-htmlparser2-tree-adapter@npm:7.1.0" dependencies: - domhandler: "npm:^5.0.2" + domhandler: "npm:^5.0.3" parse5: "npm:^7.0.0" - checksum: 10/23dbe45fdd338fe726cf5c55b236e1f403aeb0c1b926e18ab8ef0aa580980a25f8492d160fe2ed0ec906c3c8e38b51e68ef5620a3b9460d9458ea78946a3f7c0 + checksum: 10/75910af9137451e9c53e1e0d712f7393f484e89e592b1809ee62ad6cedd61b98daeaa5206ff5d9f06778002c91fac311afedde4880e1916fdb44fa71199dae73 + languageName: node + linkType: hard + +"parse5-parser-stream@npm:^7.1.2": + version: 7.1.2 + resolution: "parse5-parser-stream@npm:7.1.2" + dependencies: + parse5: "npm:^7.0.0" + checksum: 10/75b232d460bce6bd0e35012750a78ef034f40ccf550b7c6cec3122395af6b4553202ad3663ad468cf537ead5a2e13b6727670395fd0ff548faccad1dc2dc93cf languageName: node linkType: hard @@ -12519,16 +13717,16 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.0.0": - version: 7.1.2 - resolution: "parse5@npm:7.1.2" +"parse5@npm:^7.0.0, parse5@npm:^7.3.0": + version: 7.3.0 + resolution: "parse5@npm:7.3.0" dependencies: - entities: "npm:^4.4.0" - checksum: 10/3c86806bb0fb1e9a999ff3a4c883b1ca243d99f45a619a0898dbf021a95a0189ed955c31b07fe49d342b54e814f33f2c9d7489198e8630dacd5477d413ec5782 + entities: "npm:^6.0.0" + checksum: 10/b0e48be20b820c655b138b86fa6fb3a790de6c891aa2aba536524f8027b4dca4fe538f11a0e5cf2f6f847d120dbb9e4822dcaeb933ff1e10850a2ef0154d1d88 languageName: node linkType: hard -"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": +"parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 10/407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 @@ -12587,16 +13785,6 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.10.1": - version: 1.10.1 - resolution: "path-scurry@npm:1.10.1" - dependencies: - lru-cache: "npm:^9.1.1 || ^10.0.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10/eebfb8304fef1d4f7e1486df987e4fd77413de4fce16508dea69fcf8eb318c09a6b15a7a2f4c22877cec1cb7ecbd3071d18ca9de79eeece0df874a00f1f0bdc8 - languageName: node - linkType: hard - "path-scurry@npm:^2.0.2": version: 2.0.2 resolution: "path-scurry@npm:2.0.2" @@ -12607,26 +13795,26 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 10/701c99e1f08e3400bea4d701cf6f03517474bb1b608da71c78b1eb261415b645c5670dfae49808c89e12cea2dccd113b069f040a80de012da0400191c6dbd1c8 - languageName: node - linkType: hard - -"path-to-regexp@npm:2.2.1": - version: 2.2.1 - resolution: "path-to-regexp@npm:2.2.1" - checksum: 10/1a7125f8c1b5904d556a29722333219df4aa779039e903efe2fbfe0cc3ae9246672846fc8ad285664020b70e434347e0bc9af691fd7d61df8eaa7b018dcd56fb +"path-to-regexp@npm:3.3.0": + version: 3.3.0 + resolution: "path-to-regexp@npm:3.3.0" + checksum: 10/8d256383af8db66233ee9027cfcbf8f5a68155efbb4f55e784279d3ab206dcaee554ddb72ff0dae97dd2882af9f7fa802634bb7cffa2e796927977e31b829259 languageName: node linkType: hard "path-to-regexp@npm:^1.7.0": - version: 1.8.0 - resolution: "path-to-regexp@npm:1.8.0" + version: 1.9.0 + resolution: "path-to-regexp@npm:1.9.0" dependencies: isarray: "npm:0.0.1" - checksum: 10/45a01690f72919163cf89714e31a285937b14ad54c53734c826363fcf7beba9d9d0f2de802b4986b1264374562d6a3398a2e5289753a764e3a256494f1e52add + checksum: 10/67f0f4823f7aab356523d93a83f9f8222bdd119fa0b27a8f8b587e8e6c9825294bb4ccd16ae619def111ff3fe5d15ff8f658cdd3b0d58b9c882de6fd15bc1b76 + languageName: node + linkType: hard + +"path-to-regexp@npm:~0.1.12": + version: 0.1.12 + resolution: "path-to-regexp@npm:0.1.12" + checksum: 10/2e30f6a0144679c1f95c98e166b96e6acd1e72be9417830fefc8de7ac1992147eb9a4c7acaa59119fb1b3c34eec393b2129ef27e24b2054a3906fc4fb0d1398e languageName: node linkType: hard @@ -12637,10 +13825,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: 10/a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 languageName: node linkType: hard @@ -12666,9 +13854,9 @@ __metadata: linkType: hard "pirates@npm:^4.0.1, pirates@npm:^4.0.4": - version: 4.0.6 - resolution: "pirates@npm:4.0.6" - checksum: 10/d02dda76f4fec1cbdf395c36c11cf26f76a644f9f9a1bfa84d3167d0d3154d5289aacc72677aa20d599bb4a6937a471de1b65c995e2aea2d8687cbcd7e43ea5f + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 10/2427f371366081ae42feb58214f04805d6b41d6b84d74480ebcc9e0ddbd7105a139f7c653daeaf83ad8a1a77214cf07f64178e76de048128fec501eab3305a96 languageName: node linkType: hard @@ -12721,6 +13909,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.1.0 + resolution: "possible-typed-array-names@npm:1.1.0" + checksum: 10/2f44137b8d3dd35f4a7ba7469eec1cd9cfbb46ec164b93a5bc1f4c3d68599c9910ee3b91da1d28b4560e9cc8414c3cd56fedc07259c67e52cc774476270d3302 + languageName: node + linkType: hard + "postcss-calc@npm:^8.2.3": version: 8.2.4 resolution: "postcss-calc@npm:8.2.4" @@ -12820,45 +14015,50 @@ __metadata: linkType: hard "postcss-js@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-js@npm:4.0.1" + version: 4.1.0 + resolution: "postcss-js@npm:4.1.0" dependencies: camelcase-css: "npm:^2.0.1" peerDependencies: postcss: ^8.4.21 - checksum: 10/ef2cfe8554daab4166cfcb290f376e7387964c36503f5bd42008778dba735685af8d4f5e0aba67cae999f47c855df40a1cd31ae840e0df320ded36352581045e + checksum: 10/32f5422478e60086e5d70b4ea6f4bcdb15baae16e9e311497fbbf5e6d07dfb5916e7fd61957e8664b923c8c68a5bd364cb0517d8e263cfd12cc601a1c1ab9ad2 languageName: node linkType: hard -"postcss-load-config@npm:^4.0.1": - version: 4.0.2 - resolution: "postcss-load-config@npm:4.0.2" +"postcss-load-config@npm:^4.0.2 || ^5.0 || ^6.0": + version: 6.0.1 + resolution: "postcss-load-config@npm:6.0.1" dependencies: - lilconfig: "npm:^3.0.0" - yaml: "npm:^2.3.4" + lilconfig: "npm:^3.1.1" peerDependencies: + jiti: ">=1.21.0" postcss: ">=8.0.9" - ts-node: ">=9.0.0" + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: + jiti: + optional: true postcss: optional: true - ts-node: + tsx: + optional: true + yaml: optional: true - checksum: 10/e2c2ed9b7998a5b123e1ce0c124daf6504b1454c67dcc1c8fdbcc5ffb2597b7de245e3ac34f63afc928d3fd3260b1e36492ebbdb01a9ff63f16b3c8b7b925d1b + checksum: 10/1691cfc94948a9373d4f7b3b7a8500cfaf8cb2dcc2107c14f90f2a711a9892a362b0866894ac5bb723455fa685a15116d9ed3252188689c4502b137c19d6bdc4 languageName: node linkType: hard "postcss-loader@npm:^7.0.0": - version: 7.3.3 - resolution: "postcss-loader@npm:7.3.3" + version: 7.3.4 + resolution: "postcss-loader@npm:7.3.4" dependencies: - cosmiconfig: "npm:^8.2.0" - jiti: "npm:^1.18.2" - semver: "npm:^7.3.8" + cosmiconfig: "npm:^8.3.5" + jiti: "npm:^1.20.0" + semver: "npm:^7.5.4" peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 - checksum: 10/743a4286db68169d271bef31e6e9351874bcf2dfa408b82c648c2d5bfba9c862cbfe3004494d927469654d6ac8b82fe647f2b80a186c1dbd44d81632eec1e838 + checksum: 10/234b01149a966a6190290c6d265b8e3df10f43262dd679451c1e7370bae74e27b746b02e660d204b901e3cf1ad28759c2679a93c64a3eb499169d8dec39df1c1 languageName: node linkType: hard @@ -12948,36 +14148,36 @@ __metadata: languageName: node linkType: hard -"postcss-modules-extract-imports@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-modules-extract-imports@npm:3.0.0" +"postcss-modules-extract-imports@npm:^3.1.0": + version: 3.1.0 + resolution: "postcss-modules-extract-imports@npm:3.1.0" peerDependencies: postcss: ^8.1.0 - checksum: 10/8d68bb735cef4d43f9cdc1053581e6c1c864860b77fcfb670372b39c5feeee018dc5ddb2be4b07fef9bcd601edded4262418bbaeaf1bd4af744446300cebe358 + checksum: 10/00bfd3aff045fc13ded8e3bbfd8dfc73eff9a9708db1b2a132266aef6544c8d2aee7a5d7e021885f6f9bbd5565a9a9ab52990316e21ad9468a2534f87df8e849 languageName: node linkType: hard -"postcss-modules-local-by-default@npm:^4.0.3": - version: 4.0.3 - resolution: "postcss-modules-local-by-default@npm:4.0.3" +"postcss-modules-local-by-default@npm:^4.0.5": + version: 4.2.0 + resolution: "postcss-modules-local-by-default@npm:4.2.0" dependencies: icss-utils: "npm:^5.0.0" - postcss-selector-parser: "npm:^6.0.2" + postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.1.0" peerDependencies: postcss: ^8.1.0 - checksum: 10/4f671d77cb6a025c8be09540fea00ce2d3dbf3375a3a15b48f927325c7418d7c3c87a83bacbf81c5de6ef8bd1660d5f6f2542b98de5877355a23b739379f8c79 + checksum: 10/552329aa39fbf229b8ac5a04f8aed0b1553e7a3c10b165ee700d1deb020c071875b3df7ab5e3591f6af33d461df66d330ec9c1256229e45fc618a47c60f41536 languageName: node linkType: hard -"postcss-modules-scope@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-modules-scope@npm:3.0.0" +"postcss-modules-scope@npm:^3.2.0": + version: 3.2.1 + resolution: "postcss-modules-scope@npm:3.2.1" dependencies: - postcss-selector-parser: "npm:^6.0.4" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.1.0 - checksum: 10/cc36b8111c6160a1c21ca0e82de9daf0147be95f3b5403aedd83bcaee44ee425cb62b77f677fc53d0c8d51f7981018c1c8f0a4ad3d6f0138b09326ac48c2b297 + checksum: 10/51c747fa15cedf1b2856da472985ea7a7bb510a63daf30f95f250f34fce9e28ef69b802e6cc03f9c01f69043d171bc33279109a9235847c2d3a75c44eac67334 languageName: node linkType: hard @@ -12992,14 +14192,14 @@ __metadata: languageName: node linkType: hard -"postcss-nested@npm:^6.0.1": - version: 6.0.1 - resolution: "postcss-nested@npm:6.0.1" +"postcss-nested@npm:^6.2.0": + version: 6.2.0 + resolution: "postcss-nested@npm:6.2.0" dependencies: - postcss-selector-parser: "npm:^6.0.11" + postcss-selector-parser: "npm:^6.1.1" peerDependencies: postcss: ^8.2.14 - checksum: 10/02aaac682f599879fae6aab3210aee59b8b5bde3ba242527f6fd103726955b74ffa05c2b765920be5f403e758045582534d11b1e19add01586c19743ed99e3fe + checksum: 10/d7f6ba6bfd03d42f84689a0630d4e393c421bb53723f16fe179a840f03ed17763b0fe494458577d2a015e857e0ec27c7e194909ffe209ee5f0676aec39737317 languageName: node linkType: hard @@ -13148,23 +14348,23 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.11": - version: 6.0.16 - resolution: "postcss-selector-parser@npm:6.0.16" +"postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9, postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" dependencies: cssesc: "npm:^3.0.0" util-deprecate: "npm:^1.0.2" - checksum: 10/9324f63992c6564d392f9f6b16c56c05f157256e3be2d55d1234f7728252257dfd6b870a65a5d04ee3ceb9d9e7b78c043f630a58c9869b4b0481d6e064edc2cf + checksum: 10/190034c94d809c115cd2f32ee6aade84e933450a43ec3899c3e78e7d7b33efd3a2a975bb45d7700b6c5b196c06a7d9acf3f1ba6f1d87032d9675a29d8bca1dd3 languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": - version: 6.0.13 - resolution: "postcss-selector-parser@npm:6.0.13" +"postcss-selector-parser@npm:^7.0.0": + version: 7.1.1 + resolution: "postcss-selector-parser@npm:7.1.1" dependencies: cssesc: "npm:^3.0.0" util-deprecate: "npm:^1.0.2" - checksum: 10/e779aa1f8ca9ee45d562400aac6109a2bccc59559b6e15adec8bc2a71d395ca563a378fd68f6a61963b4ef2ca190e0c0486e6dc6c41d755f3b82dd6e480e6941 + checksum: 10/bb3c6455b20af26a556e3021e21101d8470252644e673c1612f7348ff8dd41b11321329f0694cf299b5b94863f823480b72d3e2f4bd3a89dc43e2d8c0dbad341 languageName: node linkType: hard @@ -13218,25 +14418,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.3.11, postcss@npm:^8.4.14, postcss@npm:^8.4.17, postcss@npm:^8.4.18, postcss@npm:^8.4.21": - version: 8.4.28 - resolution: "postcss@npm:8.4.28" - dependencies: - nanoid: "npm:^3.3.6" - picocolors: "npm:^1.0.0" - source-map-js: "npm:^1.0.2" - checksum: 10/4fb058665f1a195fdff1ecb395491b88a8e989eb2888c4338ef366774269df29cd8893d042915aa5782faf1480137b6fd261f1d0f7cc4c883c5b1efbcf84e010 - languageName: node - linkType: hard - -"postcss@npm:^8.4.23": - version: 8.4.38 - resolution: "postcss@npm:8.4.38" +"postcss@npm:^8.3.11, postcss@npm:^8.4.14, postcss@npm:^8.4.17, postcss@npm:^8.4.18, postcss@npm:^8.4.33, postcss@npm:^8.4.47": + version: 8.5.8 + resolution: "postcss@npm:8.5.8" dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.0" - source-map-js: "npm:^1.2.0" - checksum: 10/6e44a7ed835ffa9a2b096e8d3e5dfc6bcf331a25c48aeb862dd54e3aaecadf814fa22be224fd308f87d08adf2299164f88c5fd5ab1c4ef6cbd693ceb295377f4 + nanoid: "npm:^3.3.11" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10/cbacbfd7f767e2c820d4bf09a3a744834dd7d14f69ff08d1f57b1a7defce9ae5efcf31981890d9697a972a64e9965de677932ef28e4c8ba23a87aad45b82c459 languageName: node linkType: hard @@ -13255,11 +14444,11 @@ __metadata: linkType: hard "prettier-linter-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "prettier-linter-helpers@npm:1.0.0" + version: 1.0.1 + resolution: "prettier-linter-helpers@npm:1.0.1" dependencies: fast-diff: "npm:^1.1.2" - checksum: 10/00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 + checksum: 10/2dc35f5036a35f4c4f5e645887edda1436acb63687a7f12b2383e0a6f3c1f76b8a0a4709fe4d82e19157210feb5984b159bb714d43290022911ab53d606474ec languageName: node linkType: hard @@ -13322,9 +14511,9 @@ __metadata: linkType: hard "prismjs@npm:^1.28.0": - version: 1.29.0 - resolution: "prismjs@npm:1.29.0" - checksum: 10/2080db382c2dde0cfc7693769e89b501ef1bfc8ff4f8d25c07fd4c37ca31bc443f6133d5b7c145a73309dc396e829ddb7cc18560026d862a887ae08864ef6b07 + version: 1.30.0 + resolution: "prismjs@npm:1.30.0" + checksum: 10/6b48a2439a82e5c6882f48ebc1564c3890e16463ba17ac10c3ad4f62d98dea5b5c915b172b63b83023a70ad4f5d7be3e8a60304420db34a161fae69dd4e3e2da languageName: node linkType: hard @@ -13356,16 +14545,6 @@ __metadata: languageName: node linkType: hard -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10/96e1a82453c6c96eef53a37a1d6134c9f2482f94068f98a59145d0986ca4e497bf110a410adf73857e588165eab3899f0ebcf7b3890c1b3ce802abc0d65967d4 - languageName: node - linkType: hard - "promise@npm:^7.1.1": version: 7.3.1 resolution: "promise@npm:7.3.1" @@ -13429,9 +14608,9 @@ __metadata: languageName: node linkType: hard -"protobufjs@npm:^7.2.4": - version: 7.2.4 - resolution: "protobufjs@npm:7.2.4" +"protobufjs@npm:^7.5.3": + version: 7.5.4 + resolution: "protobufjs@npm:7.5.4" dependencies: "@protobufjs/aspromise": "npm:^1.1.2" "@protobufjs/base64": "npm:^1.1.2" @@ -13445,7 +14624,7 @@ __metadata: "@protobufjs/utf8": "npm:^1.1.0" "@types/node": "npm:>=13.7.0" long: "npm:^5.0.0" - checksum: 10/6972bd0a372abdbd43e20e14e9692695b92adcd0b746e73e8deb8880ce78abe4a30303a05160f5d0a5fc3dd0b7b6157cc8a06418da364fc7091f965724ca0443 + checksum: 10/88d677bb6f11a2ecec63fdd053dfe6d31120844d04e865efa9c8fbe0674cd077d6624ecfdf014018a20dcb114ae2a59c1b21966dd8073e920650c71370966439 languageName: node linkType: hard @@ -13460,33 +14639,28 @@ __metadata: linkType: hard "psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 10/d07879d4bfd0ac74796306a8e5a36a93cfb9c4f4e8ee8e63fbb909066c192fe1008cd8f12abd8ba2f62ca28247949a20c8fb32e1d18831d9e71285a1569720f9 + version: 1.15.0 + resolution: "psl@npm:1.15.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10/5e7467eb5196eb7900d156783d12907d445c0122f76c73203ce96b148a6ccf8c5450cc805887ffada38ff92d634afcf33720c24053cb01d5b6598d1c913c5caf languageName: node linkType: hard "pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" + version: 3.0.4 + resolution: "pump@npm:3.0.4" dependencies: end-of-stream: "npm:^1.1.0" once: "npm:^1.3.1" - checksum: 10/e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 - languageName: node - linkType: hard - -"punycode@npm:^1.3.2": - version: 1.4.1 - resolution: "punycode@npm:1.4.1" - checksum: 10/af2700dde1a116791ff8301348ff344c47d6c224e875057237d1b5112035655fb07a6175cfdb8bf0e3a8cdfd2dc82b3a622e0aefd605566c0e949a6d0d1256a4 + checksum: 10/d043c3e710c56ffd280711e98a94e863ab334f79ea43cee0fb70e1349b2355ffd2ff287c7522e4c960a247699d5b7825f00fa090b85d6179c973be13f78a6c49 languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 10/d4e7fbb96f570c57d64b09a35a1182c879ac32833de7c6926a2c10619632c1377865af3dab5479f59d51da18bcd5035a20a5ef6ceb74020082a3e78025d9a9ca +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10/febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059 languageName: node linkType: hard @@ -13506,12 +14680,12 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" +"qs@npm:~6.14.0": + version: 6.14.2 + resolution: "qs@npm:6.14.2" dependencies: - side-channel: "npm:^1.0.4" - checksum: 10/5a3bfea3e2f359ede1bfa5d2f0dbe54001aa55e40e27dc3e60fab814362d83a9b30758db057c2011b6f53a2d4e4e5150194b5bac45372652aecb3e3c0d4b256e + side-channel: "npm:^1.1.0" + checksum: 10/682933a85bb4b7bd0d66e13c0a40d9e612b5e4bcc2cb9238f711a9368cd22d91654097a74fff93551e58146db282c56ac094957dfdc60ce64ea72c3c9d7779ac languageName: node linkType: hard @@ -13561,15 +14735,15 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.5.1": - version: 2.5.1 - resolution: "raw-body@npm:2.5.1" +"raw-body@npm:~2.5.3": + version: 2.5.3 + resolution: "raw-body@npm:2.5.3" dependencies: - bytes: "npm:3.1.2" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - unpipe: "npm:1.0.0" - checksum: 10/280bedc12db3490ecd06f740bdcf66093a07535374b51331242382c0e130bb273ebb611b7bc4cba1b4b4e016cc7b1f4b05a6df885a6af39c2bc3b94c02291c84 + bytes: "npm:~3.1.2" + http-errors: "npm:~2.0.1" + iconv-lite: "npm:~0.4.24" + unpipe: "npm:~1.0.0" + checksum: 10/f35759fe5a6548e7c529121ead1de4dd163f899749a5896c42e278479df2d9d7f98b5bb17312737c03617765e5a1433e586f717616e5cfbebc13b4738b820601 languageName: node linkType: hard @@ -13589,7 +14763,7 @@ __metadata: languageName: node linkType: hard -"rc-cascader@npm:~3.7.0": +"rc-cascader@npm:~3.7.3": version: 3.7.3 resolution: "rc-cascader@npm:3.7.3" dependencies: @@ -13606,7 +14780,7 @@ __metadata: languageName: node linkType: hard -"rc-checkbox@npm:~3.0.0": +"rc-checkbox@npm:~3.0.1": version: 3.0.1 resolution: "rc-checkbox@npm:3.0.1" dependencies: @@ -13637,8 +14811,8 @@ __metadata: linkType: hard "rc-dialog@npm:~9.0.0, rc-dialog@npm:~9.0.2": - version: 9.0.2 - resolution: "rc-dialog@npm:9.0.2" + version: 9.0.4 + resolution: "rc-dialog@npm:9.0.4" dependencies: "@babel/runtime": "npm:^7.10.1" "@rc-component/portal": "npm:^1.0.0-8" @@ -13648,7 +14822,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/25cdc3dedbe7102a4409b219190641ec0e6754b645293b71e6fd7f7d0530d0ddf32f6bd27b507e047a3c6f302609d9b2b2a5968bb473933cd48aeccb2f5c3c25 + checksum: 10/1983be2c6bd1792c27bfbca39f0b4525aec122488cd08b7eedc5ad16fcd09d8bd26ad4f8a9d02201f2aa96586ada7319588221cb84722a1a0eef3c3294903e9e languageName: node linkType: hard @@ -13668,7 +14842,7 @@ __metadata: languageName: node linkType: hard -"rc-dropdown@npm:~4.0.0": +"rc-dropdown@npm:~4.0.0, rc-dropdown@npm:~4.0.1": version: 4.0.1 resolution: "rc-dropdown@npm:4.0.1" dependencies: @@ -13683,9 +14857,9 @@ __metadata: languageName: node linkType: hard -"rc-field-form@npm:~1.34.0": - version: 1.34.2 - resolution: "rc-field-form@npm:1.34.2" +"rc-field-form@npm:~1.38.2": + version: 1.38.2 + resolution: "rc-field-form@npm:1.38.2" dependencies: "@babel/runtime": "npm:^7.18.0" async-validator: "npm:^4.1.0" @@ -13693,7 +14867,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/ecd2ba5091240ca16f47417fb69b7f2e4f66661d3980d2b0a08de294a37b1134a6ab89a7bbaa166c4d68d6a9e2117693ba5b1474c83b5aaf022752d3dad3cdc7 + checksum: 10/48ae5f4f18892f3592a428dbf7a0c671517b2b1674cb5f67da037cf687bd8761db17c4219d42e1aea1d276afe804129549575ed2bfbb0895673f0d60a9b318d0 languageName: node linkType: hard @@ -13714,7 +14888,7 @@ __metadata: languageName: node linkType: hard -"rc-input-number@npm:~7.3.9": +"rc-input-number@npm:~7.3.11": version: 7.3.11 resolution: "rc-input-number@npm:7.3.11" dependencies: @@ -13759,7 +14933,7 @@ __metadata: languageName: node linkType: hard -"rc-menu@npm:~9.8.0": +"rc-menu@npm:~9.8.0, rc-menu@npm:~9.8.4": version: 9.8.4 resolution: "rc-menu@npm:9.8.4" dependencies: @@ -13776,21 +14950,21 @@ __metadata: languageName: node linkType: hard -"rc-motion@npm:^2.0.0, rc-motion@npm:^2.0.1, rc-motion@npm:^2.2.0, rc-motion@npm:^2.3.0, rc-motion@npm:^2.3.4, rc-motion@npm:^2.4.3, rc-motion@npm:^2.4.4, rc-motion@npm:^2.6.1, rc-motion@npm:^2.6.2": - version: 2.7.3 - resolution: "rc-motion@npm:2.7.3" +"rc-motion@npm:^2.0.0, rc-motion@npm:^2.0.1, rc-motion@npm:^2.2.0, rc-motion@npm:^2.3.0, rc-motion@npm:^2.3.4, rc-motion@npm:^2.4.3, rc-motion@npm:^2.4.4, rc-motion@npm:^2.6.1, rc-motion@npm:^2.6.2, rc-motion@npm:^2.9.0": + version: 2.9.5 + resolution: "rc-motion@npm:2.9.5" dependencies: "@babel/runtime": "npm:^7.11.1" classnames: "npm:^2.2.1" - rc-util: "npm:^5.21.0" + rc-util: "npm:^5.44.0" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/81766280ab39a0be91f18f2171bc005fcf8c58f0e5789459031bd11da26ad0d86fc4e86ed39dea6b7e0bcc4224fef60955615129a0ce5102aaa9b68e3266e57b + checksum: 10/81a60e49c2fa78e88654039523ef9043f1476bc26f80f38561604ec48c256c9e5897254cda62ceff3c8e898285ae085568d1cd4fe35e8b018016517e998e3d44 languageName: node linkType: hard -"rc-notification@npm:~4.6.0": +"rc-notification@npm:~4.6.1": version: 4.6.1 resolution: "rc-notification@npm:4.6.1" dependencies: @@ -13806,17 +14980,17 @@ __metadata: linkType: hard "rc-overflow@npm:^1.0.0, rc-overflow@npm:^1.2.8": - version: 1.3.1 - resolution: "rc-overflow@npm:1.3.1" + version: 1.5.0 + resolution: "rc-overflow@npm:1.5.0" dependencies: "@babel/runtime": "npm:^7.11.1" classnames: "npm:^2.2.1" rc-resize-observer: "npm:^1.0.0" - rc-util: "npm:^5.19.2" + rc-util: "npm:^5.37.0" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/f8e05ab9c0aeec5e2cd480001da20e74cfc497dbbfc44de90efd46e56b9ad6d6e939a53a73c48993561a18d70ab72bcd47c9f1e4fe7583331b9b724191151608 + checksum: 10/b1c80fcae119fc25e4837dcdc3c350aecdb82027a2587a2ef42a8972c8a9ecfc805eea3f1d4ff92b1739dc931b70a4429c1ea8973431071eb983821e80a1a020 languageName: node linkType: hard @@ -13833,9 +15007,9 @@ __metadata: languageName: node linkType: hard -"rc-picker@npm:~2.7.0": - version: 2.7.3 - resolution: "rc-picker@npm:2.7.3" +"rc-picker@npm:~2.7.6": + version: 2.7.6 + resolution: "rc-picker@npm:2.7.6" dependencies: "@babel/runtime": "npm:^7.10.1" classnames: "npm:^2.2.1" @@ -13843,16 +15017,16 @@ __metadata: dayjs: "npm:1.x" moment: "npm:^2.24.0" rc-trigger: "npm:^5.0.4" - rc-util: "npm:^5.4.0" + rc-util: "npm:^5.37.0" shallowequal: "npm:^1.1.0" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/5b98eeb8f77acdab249892f62578aa7eac16c03d2cfb41a73905f09000e1412d65e8e88242f280c1fec1e42a2d37d42a1f15cf76589b57fa301f79414f83b5e5 + checksum: 10/022d4cc143c8bedb9611db4712fe5d77f0d56043d0ccc9e3d2826708c6252b7277e109a3f6389e698960504273bd6dd95daf54337cc5088a0a764c3556a58177 languageName: node linkType: hard -"rc-progress@npm:~3.4.1": +"rc-progress@npm:~3.4.2": version: 3.4.2 resolution: "rc-progress@npm:3.4.2" dependencies: @@ -13866,9 +15040,9 @@ __metadata: languageName: node linkType: hard -"rc-rate@npm:~2.9.0": - version: 2.9.2 - resolution: "rc-rate@npm:2.9.2" +"rc-rate@npm:~2.9.3": + version: 2.9.3 + resolution: "rc-rate@npm:2.9.3" dependencies: "@babel/runtime": "npm:^7.10.1" classnames: "npm:^2.2.5" @@ -13876,28 +15050,28 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/d80cb8fb15d93e0fc533632a705cbe3f1c4f86b1ef4edefd824b5c72f864e3ca6b6afde74cc6334b5ddd51376e2ce468fc9f95ccfb08d0ff223de14f99777465 + checksum: 10/f24593ed4708ef35dc0bdb2a9e198684b915ec8bb48d0c23fac72eeae610b142fe1f95982787962f2abed9b6eaffa5ce48c8a79877005f1506b1c9cc42c97348 languageName: node linkType: hard -"rc-resize-observer@npm:^1.0.0, rc-resize-observer@npm:^1.1.0, rc-resize-observer@npm:^1.2.0": - version: 1.3.1 - resolution: "rc-resize-observer@npm:1.3.1" +"rc-resize-observer@npm:^1.0.0, rc-resize-observer@npm:^1.1.0, rc-resize-observer@npm:^1.3.1": + version: 1.4.3 + resolution: "rc-resize-observer@npm:1.4.3" dependencies: "@babel/runtime": "npm:^7.20.7" classnames: "npm:^2.2.1" - rc-util: "npm:^5.27.0" + rc-util: "npm:^5.44.1" resize-observer-polyfill: "npm:^1.5.1" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/71add2ac032464b8ef62a044559396728249fc01cffcd5084c4d9e3b69b22f4ad85308f90e2dea6fce8e23d6a72325f8ba9a2c96697e82d31d6c16453fb2642c + checksum: 10/aff63c93e811440617d0d2c628a8c1b5e2516e5a26e2d8fc99560fd822d06b9de56cd826fb64b094fc3dc8e926e60e2e38bf594134b17a5024c61cd5a406e4cd languageName: node linkType: hard -"rc-segmented@npm:~2.1.0": - version: 2.1.2 - resolution: "rc-segmented@npm:2.1.2" +"rc-segmented@npm:~2.3.0": + version: 2.3.0 + resolution: "rc-segmented@npm:2.3.0" dependencies: "@babel/runtime": "npm:^7.11.1" classnames: "npm:^2.2.1" @@ -13906,11 +15080,11 @@ __metadata: peerDependencies: react: ">=16.0.0" react-dom: ">=16.0.0" - checksum: 10/5df502a3f2a66b87a43fecf40f78de6ead586d6ee33e01bf2aae716d4594df27f7d7725608c2cb768ba48a28de1de08b6d7d4860eec4598caa3d019f12a70cd1 + checksum: 10/4cacfc629f547c6d2a159e91808c718f3bcf7dce1d5ebb05419766c72ea34de09b1ac8648e80dfc26fd8f3a8f760296f979723d8841f65dfa6fc20e930203449 languageName: node linkType: hard -"rc-select@npm:~14.1.0, rc-select@npm:~14.1.17": +"rc-select@npm:~14.1.0, rc-select@npm:~14.1.18": version: 14.1.18 resolution: "rc-select@npm:14.1.18" dependencies: @@ -13928,7 +15102,7 @@ __metadata: languageName: node linkType: hard -"rc-slider@npm:~10.0.0": +"rc-slider@npm:~10.0.1": version: 10.0.1 resolution: "rc-slider@npm:10.0.1" dependencies: @@ -13943,7 +15117,7 @@ __metadata: languageName: node linkType: hard -"rc-steps@npm:~5.0.0-alpha.2": +"rc-steps@npm:~5.0.0": version: 5.0.0 resolution: "rc-steps@npm:5.0.0" dependencies: @@ -13957,7 +15131,7 @@ __metadata: languageName: node linkType: hard -"rc-switch@npm:~3.2.0": +"rc-switch@npm:~3.2.2": version: 3.2.2 resolution: "rc-switch@npm:3.2.2" dependencies: @@ -13987,7 +15161,7 @@ __metadata: languageName: node linkType: hard -"rc-tabs@npm:~12.5.6": +"rc-tabs@npm:~12.5.10": version: 12.5.10 resolution: "rc-tabs@npm:12.5.10" dependencies: @@ -14005,7 +15179,7 @@ __metadata: languageName: node linkType: hard -"rc-textarea@npm:^0.4.0, rc-textarea@npm:~0.4.5": +"rc-textarea@npm:^0.4.0, rc-textarea@npm:~0.4.7": version: 0.4.7 resolution: "rc-textarea@npm:0.4.7" dependencies: @@ -14021,7 +15195,7 @@ __metadata: languageName: node linkType: hard -"rc-tooltip@npm:~5.2.0": +"rc-tooltip@npm:~5.2.2": version: 5.2.2 resolution: "rc-tooltip@npm:5.2.2" dependencies: @@ -14035,7 +15209,7 @@ __metadata: languageName: node linkType: hard -"rc-tree-select@npm:~5.5.0": +"rc-tree-select@npm:~5.5.5": version: 5.5.5 resolution: "rc-tree-select@npm:5.5.5" dependencies: @@ -14051,9 +15225,9 @@ __metadata: languageName: node linkType: hard -"rc-tree@npm:~5.7.0": - version: 5.7.9 - resolution: "rc-tree@npm:5.7.9" +"rc-tree@npm:~5.7.0, rc-tree@npm:~5.7.12": + version: 5.7.12 + resolution: "rc-tree@npm:5.7.12" dependencies: "@babel/runtime": "npm:^7.10.1" classnames: "npm:2.x" @@ -14063,11 +15237,11 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 10/ad82b7798cf292fd6f1e6a2d31d5b7b2d53463558ad9fa1449c7d04086edef5840af67fc2ce05e4e3019f5cc3780af3456de5b768a3060bc7b9d52a92a51eb90 + checksum: 10/5e82e7b4f8624b479f70873d8c49437aa2e6af83c1488ccf30221d1961e5c127aa1dafc2e0b933738dcfc85b325753b6049016698ee2559c0f9e0517eb8a11ca languageName: node linkType: hard -"rc-trigger@npm:^5.0.0, rc-trigger@npm:^5.0.4, rc-trigger@npm:^5.1.2, rc-trigger@npm:^5.2.10, rc-trigger@npm:^5.3.1": +"rc-trigger@npm:^5.0.0, rc-trigger@npm:^5.0.4, rc-trigger@npm:^5.1.2, rc-trigger@npm:^5.3.1, rc-trigger@npm:^5.3.4": version: 5.3.4 resolution: "rc-trigger@npm:5.3.4" dependencies: @@ -14083,9 +15257,9 @@ __metadata: languageName: node linkType: hard -"rc-upload@npm:~4.3.0": - version: 4.3.4 - resolution: "rc-upload@npm:4.3.4" +"rc-upload@npm:~4.3.6": + version: 4.3.6 + resolution: "rc-upload@npm:4.3.6" dependencies: "@babel/runtime": "npm:^7.18.3" classnames: "npm:^2.2.5" @@ -14093,35 +15267,35 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/4f87ae9b06a034a4e81adac919f3f4f2f2fd1fe95ede1049f3db70467a8381f2f7c7d032aa26c7fb52dd5bbd4c09b3dc0e60ccd5d394cb119d7079ffe08085f1 + checksum: 10/a196364f30bb5cbaa8702368c3e2bfe60fb41a1bacd467644a34f4234969d0a2115806cdc49b663ee13297537646fb3aa647a96130ed6f7fdb8be22075f00554 languageName: node linkType: hard -"rc-util@npm:^5.0.1, rc-util@npm:^5.0.6, rc-util@npm:^5.15.0, rc-util@npm:^5.16.0, rc-util@npm:^5.16.1, rc-util@npm:^5.17.0, rc-util@npm:^5.18.1, rc-util@npm:^5.19.2, rc-util@npm:^5.2.0, rc-util@npm:^5.2.1, rc-util@npm:^5.20.1, rc-util@npm:^5.21.0, rc-util@npm:^5.21.2, rc-util@npm:^5.22.5, rc-util@npm:^5.23.0, rc-util@npm:^5.24.4, rc-util@npm:^5.25.2, rc-util@npm:^5.26.0, rc-util@npm:^5.27.0, rc-util@npm:^5.32.2, rc-util@npm:^5.4.0, rc-util@npm:^5.6.1, rc-util@npm:^5.9.4": - version: 5.36.0 - resolution: "rc-util@npm:5.36.0" +"rc-util@npm:^5.0.1, rc-util@npm:^5.0.6, rc-util@npm:^5.16.0, rc-util@npm:^5.16.1, rc-util@npm:^5.17.0, rc-util@npm:^5.18.1, rc-util@npm:^5.19.2, rc-util@npm:^5.2.0, rc-util@npm:^5.2.1, rc-util@npm:^5.20.1, rc-util@npm:^5.21.0, rc-util@npm:^5.21.2, rc-util@npm:^5.22.5, rc-util@npm:^5.23.0, rc-util@npm:^5.24.4, rc-util@npm:^5.25.2, rc-util@npm:^5.26.0, rc-util@npm:^5.27.0, rc-util@npm:^5.32.2, rc-util@npm:^5.36.0, rc-util@npm:^5.37.0, rc-util@npm:^5.44.0, rc-util@npm:^5.44.1, rc-util@npm:^5.6.1, rc-util@npm:^5.9.4": + version: 5.44.4 + resolution: "rc-util@npm:5.44.4" dependencies: "@babel/runtime": "npm:^7.18.3" - react-is: "npm:^16.12.0" + react-is: "npm:^18.2.0" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10/8ce31865df1bbab47a02f03f28bd43c51dd3272cca869da870971e51433dd7b1adce15eeb9e9e9acad3c7d885dad6efe886eb13d71c043c9b52fedbb14bb503e + checksum: 10/c456b9899545625b6d856bef1218ce0ed87af13e2c9c328e302fd255b912ee2e4a0fd81603221736ed9b176ed79507abc2275dc1df488ea465d26b4807f4e99a languageName: node linkType: hard "rc-virtual-list@npm:^3.2.0, rc-virtual-list@npm:^3.5.1": - version: 3.5.3 - resolution: "rc-virtual-list@npm:3.5.3" + version: 3.19.2 + resolution: "rc-virtual-list@npm:3.19.2" dependencies: "@babel/runtime": "npm:^7.20.0" classnames: "npm:^2.2.6" rc-resize-observer: "npm:^1.0.0" - rc-util: "npm:^5.15.0" + rc-util: "npm:^5.36.0" peerDependencies: - react: "*" - react-dom: "*" - checksum: 10/592a4dc3ca0678c512c96ba4829b9bed945c1a0eb9e83fdfe57bb5fe2133c8adefeca38477edd88e79cb720fbfbe256a2000c4d631f7124b63c6cf7afd7bee60 + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: 10/b661de8299feea228d0e2adaad6d0b1d9fa6fd301a0d1debb21d4546508e20600827149f96d0a5a4aced75119fabc2fcc6b8d36d590b282e388b4e2b500a2bc7 languageName: node linkType: hard @@ -14197,9 +15371,9 @@ __metadata: linkType: hard "react-error-overlay@npm:^6.0.11": - version: 6.0.11 - resolution: "react-error-overlay@npm:6.0.11" - checksum: 10/b4ac746fc4fb50da733768aadbc638d34dd56d4e46ed4b2f2d1ac54dced0c5fa5fe47ebbbf90810ada44056ed0713bba5b9b930b69f4e45466e7f59fc806c44e + version: 6.1.0 + resolution: "react-error-overlay@npm:6.1.0" + checksum: 10/bb2b982461220e0868b0d3e0cfc006f9209a0e48b23a810e5548e76bb6c41e534a00ae328419256d76c8a2c1eae5e6ca3aa665bac21cd8d0b3bcb4fea616b2d2 languageName: node linkType: hard @@ -14227,23 +15401,24 @@ __metadata: linkType: hard "react-hot-toast@npm:^2.2.0": - version: 2.4.1 - resolution: "react-hot-toast@npm:2.4.1" + version: 2.6.0 + resolution: "react-hot-toast@npm:2.6.0" dependencies: - goober: "npm:^2.1.10" + csstype: "npm:^3.1.3" + goober: "npm:^2.1.16" peerDependencies: react: ">=16" react-dom: ">=16" - checksum: 10/9af91efdb98837e39a126aff084b54db0336c5f88a7dad7c42daf7ee873d06a79d6e59f398412cc250a35ddf1a73c25700fe90b3c3a2a0c394fd17d99b2bcf8b + checksum: 10/825ebbaa03c63dc2f22795ac8d535b40f1066c3ace5b792d0de740070693f195b910c98f46a00f7f6195f804ecf41b03201f6ff6950a540098dd2b7a0069df5b languageName: node linkType: hard "react-icons@npm:^4.10.1": - version: 4.10.1 - resolution: "react-icons@npm:4.10.1" + version: 4.12.0 + resolution: "react-icons@npm:4.12.0" peerDependencies: react: "*" - checksum: 10/727ad5d98da01615792f7e2052a4cd88438ee2eb7948e834930521219b31eef6d79cbd9acb889d0c870eb7c4b9f6e0c54afb456c47901bdcd6e62b566c2d948a + checksum: 10/5cc20509ca0b182f1e7bf42c271846c48f688c8922e2439f48728805adc93ba18476a13588cbe91ee43a2d03b2787e0dc0b5cc4b9c4e4ae3426f4464b3c1b734 languageName: node linkType: hard @@ -14280,7 +15455,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0": +"react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: 10/5aa564a1cde7d391ac980bedee21202fc90bdea3b399952117f54fb71a932af1e5902020144fb354b4690b2414a0c7aafe798eb617b76a3d441d956db7726fdf @@ -14294,10 +15469,10 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: 10/200cd65bf2e0be7ba6055f647091b725a45dd2a6abef03bf2380ce701fd5edccee40b49b9d15edab7ac08a762bf83cb4081e31ec2673a5bfb549a36ba21570df +"react-is@npm:^18.0.0, react-is@npm:^18.2.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22 languageName: node linkType: hard @@ -14336,8 +15511,8 @@ __metadata: linkType: hard "react-player@npm:^2.10.0": - version: 2.12.0 - resolution: "react-player@npm:2.12.0" + version: 2.16.1 + resolution: "react-player@npm:2.16.1" dependencies: deepmerge: "npm:^4.0.0" load-script: "npm:^1.0.0" @@ -14346,13 +15521,13 @@ __metadata: react-fast-compare: "npm:^3.0.1" peerDependencies: react: ">=16.6.0" - checksum: 10/47e23c334cc9a30d9b492f28e00c0b64dfaf0fac284e0fe2ba0018e14d0f8a0cd2934e7ec9db78f814740a1a04cc0a31e76b05a5ccac13cfc7e9a94866c9954b + checksum: 10/925b90107cc8817f20585e14cf817ac6ab4737cbfdecc17b92c1f93fbcf6a66a3adfe17ece5515daba256295f89c876d0fa64b19ef2716080e65e0863713cd6a languageName: node linkType: hard "react-redux@npm:^8.0.1": - version: 8.1.2 - resolution: "react-redux@npm:8.1.2" + version: 8.1.3 + resolution: "react-redux@npm:8.1.3" dependencies: "@babel/runtime": "npm:^7.12.1" "@types/hoist-non-react-statics": "npm:^3.3.1" @@ -14378,7 +15553,7 @@ __metadata: optional: true redux: optional: true - checksum: 10/4aa354e402f832776b21ba7a720806d8d42e2efec0c6fc1036db68fdacc7a1c136515fbd2e9ca84371bb0cc35c53dd71313a9a4ae252e1b8ca0c07d8c3a250ff + checksum: 10/c4c7586cff3abeb784e73598d330f5301116a4e9942fd36895f2bccd8990001709c6c3ea1817edb75ee477470d6c67c9113e05a7f86b2b68a3950c9c29fe20cb languageName: node linkType: hard @@ -14443,19 +15618,19 @@ __metadata: linkType: hard "react-spring@npm:^9.4.5": - version: 9.7.2 - resolution: "react-spring@npm:9.7.2" + version: 9.7.5 + resolution: "react-spring@npm:9.7.5" dependencies: - "@react-spring/core": "npm:~9.7.3" - "@react-spring/konva": "npm:~9.7.3" - "@react-spring/native": "npm:~9.7.3" - "@react-spring/three": "npm:~9.7.3" - "@react-spring/web": "npm:~9.7.3" - "@react-spring/zdog": "npm:~9.7.3" + "@react-spring/core": "npm:~9.7.5" + "@react-spring/konva": "npm:~9.7.5" + "@react-spring/native": "npm:~9.7.5" + "@react-spring/three": "npm:~9.7.5" + "@react-spring/web": "npm:~9.7.5" + "@react-spring/zdog": "npm:~9.7.5" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/c3cfe2091d1d0dcce34f5a400c379603664821be5a72f6f9815131c6777dd47aea5b6bccbd3ad2cb8e0194489349202e9592cd49595ef768a22c6eb69262c352 + checksum: 10/d46930f6e5cd0ec2d9af3e790ac90f85919d11c3f568f142d2b240e6aaa1c92b5766de834a05f07b3c89548919a4669be916c8727886ddefb9d8a41a03518a01 languageName: node linkType: hard @@ -14469,15 +15644,15 @@ __metadata: linkType: hard "react-textarea-autosize@npm:^8.3.2": - version: 8.5.2 - resolution: "react-textarea-autosize@npm:8.5.2" + version: 8.5.9 + resolution: "react-textarea-autosize@npm:8.5.9" dependencies: "@babel/runtime": "npm:^7.20.13" use-composed-ref: "npm:^1.3.0" use-latest: "npm:^1.2.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/2ae1bdcc23f56b604c2aec229132f8481b398c00a4278320b0bbca278d89040bd115ebc48f45aa0811e7919d5329a0abeb804572103317343aedc03bd1f34751 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10/9babf6d667e93ea4629c79dce837551634f2b3309d191013908d781a98cd4bf211ea8e529ea5eb4f0046f6ea1e3c985272c1309fe09390917eb2e5c86ba75b72 languageName: node linkType: hard @@ -14574,6 +15749,13 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10/7b817c265940dba90bb9c94d82920d76c3a35ea2d67f9f9d8bd936adcfe02d50c802b14be3dd2e725e002dddbe2cc1c7a0edfb1bc3a365c9dfd5a61e612eea1e + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -14626,26 +15808,28 @@ __metadata: languageName: node linkType: hard -"reflect.getprototypeof@npm:^1.0.3": - version: 1.0.3 - resolution: "reflect.getprototypeof@npm:1.0.3" +"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": + version: 1.0.10 + resolution: "reflect.getprototypeof@npm:1.0.10" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - get-intrinsic: "npm:^1.1.1" - globalthis: "npm:^1.0.3" - which-builtin-type: "npm:^1.1.3" - checksum: 10/62008eb5fe170b513faaf1c1a4d4fd1aaf87d644edbc4ad6228f71f39272e087deeb09a8ea4e17b95e3067bcb22662177ed38d0e7058d0b16ee4864e214c9cb4 + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.9" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.7" + get-proto: "npm:^1.0.1" + which-builtin-type: "npm:^1.2.1" + checksum: 10/80a4e2be716f4fe46a89a08ccad0863b47e8ce0f49616cab2d65dab0fbd53c6fdba0f52935fd41d37a2e4e22355c272004f920d63070de849f66eea7aeb4a081 languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.0 - resolution: "regenerate-unicode-properties@npm:10.1.0" +"regenerate-unicode-properties@npm:^10.2.2": + version: 10.2.2 + resolution: "regenerate-unicode-properties@npm:10.2.2" dependencies: regenerate: "npm:^1.4.2" - checksum: 10/25b268659898955ad105267b4efba20e361e27b233670694b683728a2800314bec3053918d3bf71b0604376fd76fe9bc9c6f80379cfb6d1e209a58de44101aac + checksum: 10/5041ee31185c4700de9dd76783fab9def51c412751190d523d621db5b8e35a6c2d91f1642c12247e7d94f84b8ae388d044baac1e88fc2ba0ac215ca8dc7bed38 languageName: node linkType: hard @@ -14656,22 +15840,6 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.14.0": - version: 0.14.0 - resolution: "regenerator-runtime@npm:0.14.0" - checksum: 10/6c19495baefcf5fbb18a281b56a97f0197b5f219f42e571e80877f095320afac0bdb31dab8f8186858e6126950068c3f17a1226437881e3e70446ea66751897c - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.15.2": - version: 0.15.2 - resolution: "regenerator-transform@npm:0.15.2" - dependencies: - "@babel/runtime": "npm:^7.8.4" - checksum: 10/c4fdcb46d11bbe32605b4b9ed76b21b8d3f241a45153e9dc6f5542fed4c7744fed459f42701f650d5d5956786bf7de57547329d1c05a9df2ed9e367b9d903302 - languageName: node - linkType: hard - "regexp-tree@npm:^0.1.22, regexp-tree@npm:~0.1.1": version: 0.1.27 resolution: "regexp-tree@npm:0.1.27" @@ -14681,14 +15849,17 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0": - version: 1.5.0 - resolution: "regexp.prototype.flags@npm:1.5.0" +"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": + version: 1.5.4 + resolution: "regexp.prototype.flags@npm:1.5.4" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - functions-have-names: "npm:^1.2.3" - checksum: 10/c8229ec3f59f8312248268009cb9bf9145a3982117f747499b994e8efb378ac8b62e812fd88df75225d53cb4879d2bb2fe47b2a50776cba076d8ff71fc0b1629 + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + set-function-name: "npm:^2.0.2" + checksum: 10/8ab897ca445968e0b96f6237641510f3243e59c180ee2ee8d83889c52ff735dd1bf3657fcd36db053e35e1d823dd53f2565d0b8021ea282c9fe62401c6c3bd6d languageName: node linkType: hard @@ -14699,17 +15870,17 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" +"regexpu-core@npm:^6.3.1": + version: 6.4.0 + resolution: "regexpu-core@npm:6.4.0" dependencies: - "@babel/regjsgen": "npm:^0.8.0" regenerate: "npm:^1.4.2" - regenerate-unicode-properties: "npm:^10.1.0" - regjsparser: "npm:^0.9.1" + regenerate-unicode-properties: "npm:^10.2.2" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.13.0" unicode-match-property-ecmascript: "npm:^2.0.0" - unicode-match-property-value-ecmascript: "npm:^2.1.0" - checksum: 10/ed0d7c66d84c633fbe8db4939d084c780190eca11f6920807dfb8ebac59e2676952cd8f2008d9c86ae8cf0463ea5fd12c5cff09ef2ce7d51ee6b420a5eb4d177 + unicode-match-property-value-ecmascript: "npm:^2.2.1" + checksum: 10/bf5f85a502a17f127a1f922270e2ecc1f0dd071ff76a3ec9afcd6b1c2bf7eae1486d1e3b1a6d621aee8960c8b15139e6b5058a84a68e518e1a92b52e9322faf9 languageName: node linkType: hard @@ -14731,14 +15902,21 @@ __metadata: languageName: node linkType: hard -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10/b930f03347e4123c917d7b40436b4f87f625b8dd3e705b447ddd44804e4616c3addb7453f0902d6e914ab0446c30e816e445089bb641a4714237fe8141a0ef9d + languageName: node + linkType: hard + +"regjsparser@npm:^0.13.0": + version: 0.13.0 + resolution: "regjsparser@npm:0.13.0" dependencies: - jsesc: "npm:~0.5.0" + jsesc: "npm:~3.1.0" bin: regjsparser: bin/parser - checksum: 10/be7757ef76e1db10bf6996001d1021048b5fb12f5cb470a99b8cf7f3ff943f0f0e2291c0dcdbb418b458ddc4ac10e48680a822b69ef487a0284c8b6b77beddc3 + checksum: 10/eeaabd3454f59394cbb3bfeb15fd789e638040f37d0bee9071a9b0b85524ddc52b5f7aaaaa4847304c36fa37429e53d109c4dbf6b878cb5ffa4f4198c1042fb7 languageName: node linkType: hard @@ -14929,81 +16107,61 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.3, resolve@npm:^1.22.4, resolve@npm:^1.3.2": - version: 1.22.4 - resolution: "resolve@npm:1.22.4" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/5634f87e72888b139a7cb544213504cc0c6dcd82c6f67ce810b4ca6b3367ddb2aeed5f21c9bb6cd8f3115f0b7e6c0980ef25eeb0dcbd188d9590bb5c84d2d253 - languageName: node - linkType: hard - -"resolve@npm:^1.1.7, resolve@npm:^1.22.2": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/c473506ee01eb45cbcfefb68652ae5759e092e6b0fb64547feadf9736a6394f258fbc6f88e00c5ca36d5477fbb65388b272432a3600fa223062e54333c156753 - languageName: node - linkType: hard - -"resolve@npm:^2.0.0-next.4": - version: 2.0.0-next.4 - resolution: "resolve@npm:2.0.0-next.4" +"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.11, resolve@npm:^1.22.4, resolve@npm:^1.22.8, resolve@npm:^1.3.2": + version: 1.22.11 + resolution: "resolve@npm:1.22.11" dependencies: - is-core-module: "npm:^2.9.0" + is-core-module: "npm:^2.16.1" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10/20d5293f5015aa0b65c488ee365f9dfc30b954b04f9074425a6fb738d78fa63825a82ba8574b7ee200af7ebd5e98c41786831d1d4c1612da3cd063980dfa06a3 + checksum: 10/e1b2e738884a08de03f97ee71494335eba8c2b0feb1de9ae065e82c48997f349f77a2b10e8817e147cf610bfabc4b1cb7891ee8eaf5bf80d4ad514a34c4fab0a languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.3#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.3.2#optional!builtin": - version: 1.22.4 - resolution: "resolve@patch:resolve@npm%3A1.22.4#optional!builtin::version=1.22.4&hash=c3c19d" +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.6 + resolution: "resolve@npm:2.0.0-next.6" dependencies: - is-core-module: "npm:^2.13.0" + es-errors: "npm:^1.3.0" + is-core-module: "npm:^2.16.1" + node-exports-info: "npm:^1.6.0" + object-keys: "npm:^1.1.1" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10/13262490c7b0ac54f6397f1d45ee139ebd2e431781e2ff0d9c27bf41648a349a90bc23a3ab2768f0f821efdd2cba08fb85f21288fc0cc01718c03557fbd285bc + checksum: 10/c95cb98b8d3f9e2a979e6eb8b7e0b0e13f08da62607a45207275f151d640152244568a9a9cd01662a21e3746792177cbf9be1dacb88f7355edf4db49d9ee27e5 languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" +"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.11#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.3.2#optional!builtin": + version: 1.22.11 + resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" dependencies: - is-core-module: "npm:^2.13.0" + is-core-module: "npm:^2.16.1" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10/f345cd37f56a2c0275e3fe062517c650bb673815d885e7507566df589375d165bbbf4bdb6aa95600a9bc55f4744b81f452b5a63f95b9f10a72787dba3c90890a + checksum: 10/fd342cad25e52cd6f4f3d1716e189717f2522bfd6641109fe7aa372f32b5714a296ed7c238ddbe7ebb0c1ddfe0b7f71c9984171024c97cf1b2073e3e40ff71a8 languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^2.0.0-next.4#optional!builtin": - version: 2.0.0-next.4 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#optional!builtin::version=2.0.0-next.4&hash=c3c19d" +"resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": + version: 2.0.0-next.6 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.6#optional!builtin::version=2.0.0-next.6&hash=c3c19d" dependencies: - is-core-module: "npm:^2.9.0" + es-errors: "npm:^1.3.0" + is-core-module: "npm:^2.16.1" + node-exports-info: "npm:^1.6.0" + object-keys: "npm:^1.1.1" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10/27bff19d8219385bb1e271066317e553cff18daa2a19db9598d94ae444417ef3f5aec19e86927872d6cb241d02649cfb35a4c0d9d10ef2afa6325bce8bc8d903 + checksum: 10/1b26738af76c80b341075e6bf4b202ef85f85f4a2cbf2934246c3b5f20c682cf352833fc6e32579c6967419226d3ab63e8d321328da052c87a31eaad91e3571a languageName: node linkType: hard @@ -15016,13 +16174,6 @@ __metadata: languageName: node linkType: hard -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10/1f914879f97e7ee931ad05fe3afa629bd55270fc6cf1c1e589b6a99fab96d15daad0fa1a52a00c729ec0078045fe3e399bd4fd0c93bcc906957bdc17f89cb8e6 - languageName: node - linkType: hard - "retry@npm:^0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" @@ -15031,9 +16182,9 @@ __metadata: linkType: hard "reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10/14222c9e1d3f9ae01480c50d96057228a8524706db79cdeb5a2ce5bb7070dd9f409a6f84a02cbef8cdc80d39aef86f2dd03d155188a1300c599b05437dcd2ffb + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10/af47851b547e8a8dc89af144fceee17b80d5beaf5e6f57ed086432d79943434ff67ca526e92275be6f54b6189f6920a24eace75c2657eed32d02c400312b21ec languageName: node linkType: hard @@ -15048,10 +16199,17 @@ __metadata: languageName: node linkType: hard +"robust-predicates@npm:^3.0.2": + version: 3.0.2 + resolution: "robust-predicates@npm:3.0.2" + checksum: 10/88bd7d45a6b89e88da2631d4c111aaaf0443de4d7078e9ab7f732245790a3645cf79bf91882a9740dbc959cf56ba75d5dced5bf2259410f8b6de19fd240cd08c + languageName: node + linkType: hard + "rtl-detect@npm:^1.0.4": - version: 1.0.4 - resolution: "rtl-detect@npm:1.0.4" - checksum: 10/92088ff8c66e283b8a730fe9542e0117e43e39b20f1294ba986a715deadb734c5b67db179943ad4f2acd0e23448038e9d49235e40fc3b999fd8ea3f75cdda69c + version: 1.1.2 + resolution: "rtl-detect@npm:1.1.2" + checksum: 10/d19089c3b5f7a6fbabfa2c4724fcdf8694f313d196d44c8eee3625ba2e46418afe65b4da38e3e92822985291efd0656d85daa4b2ef296a46a65a702d0b156876 languageName: node linkType: hard @@ -15078,6 +16236,13 @@ __metadata: languageName: node linkType: hard +"rw@npm:1": + version: 1.3.3 + resolution: "rw@npm:1.3.3" + checksum: 10/e90985d64777a00f4ab5f8c0bfea2fb5645c6bda5238840afa339c8a4f86f776e8ce83731155643a7425a0b27ce89077dab27b2f57519996ba4d2fe54cac1941 + languageName: node + linkType: hard + "rxfire@npm:5.0.0-rc.3": version: 5.0.0-rc.3 resolution: "rxfire@npm:5.0.0-rc.3" @@ -15091,48 +16256,59 @@ __metadata: linkType: hard "rxjs@npm:^6.6.3 || ^7.0.1, rxjs@npm:^7.0.0, rxjs@npm:^7.5.4": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" dependencies: tslib: "npm:^2.1.0" - checksum: 10/b10cac1a5258f885e9dd1b70d23c34daeb21b61222ee735d2ec40a8685bdca40429000703a44f0e638c27a684ac139e1c37e835d2a0dc16f6fc061a138ae3abb + checksum: 10/03dff09191356b2b87d94fbc1e97c4e9eb3c09d4452399dddd451b09c2f1ba8d56925a40af114282d7bc0c6fe7514a2236ca09f903cf70e4bbf156650dddb49d languageName: node linkType: hard -"safe-array-concat@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-array-concat@npm:1.0.0" +"safe-array-concat@npm:^1.1.3": + version: 1.1.3 + resolution: "safe-array-concat@npm:1.1.3" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.0" - has-symbols: "npm:^1.0.3" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" isarray: "npm:^2.0.5" - checksum: 10/f43cb98fe3b566327d0c09284de2b15fb85ae964a89495c1b1a5d50c7c8ed484190f4e5e71aacc167e16231940079b326f2c0807aea633d47cc7322f40a6b57f + checksum: 10/fac4f40f20a3f7da024b54792fcc61059e814566dcbb04586bfefef4d3b942b2408933f25b7b3dd024affd3f2a6bbc916bef04807855e4f192413941369db864 + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 languageName: node linkType: hard -"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" checksum: 10/7eb5b48f2ed9a594a4795677d5a150faa7eb54483b2318b568dc0c4fc94092a6cce5be02c7288a0500a156282f5276d5688bce7259299568d1053b2150ef374a languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 +"safe-push-apply@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-push-apply@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + isarray: "npm:^2.0.5" + checksum: 10/2bd4e53b6694f7134b9cf93631480e7fafc8637165f0ee91d5a4af5e7f33d37de9562d1af5021178dd4217d0230cde8d6530fa28cfa1ebff9a431bf8fff124b4 languageName: node linkType: hard -"safe-regex-test@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" +"safe-regex-test@npm:^1.0.3, safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.3" - is-regex: "npm:^1.1.4" - checksum: 10/c7248dfa07891aa634c8b9c55da696e246f8589ca50e7fd14b22b154a106e83209ddf061baf2fa45ebfbd485b094dc7297325acfc50724de6afe7138451b42a9 + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.2.1" + checksum: 10/ebdb61f305bf4756a5b023ad86067df5a11b26898573afe9e52a548a63c3bd594825d9b0e2dde2eb3c94e57e0e04ac9929d4107c394f7b8e56a4613bed46c69a languageName: node linkType: hard @@ -15152,48 +16328,53 @@ __metadata: languageName: node linkType: hard -"sass-loader@npm:^10.1.1": - version: 10.4.1 - resolution: "sass-loader@npm:10.4.1" +"sass-loader@npm:^16.0.2": + version: 16.0.7 + resolution: "sass-loader@npm:16.0.7" dependencies: - klona: "npm:^2.0.4" - loader-utils: "npm:^2.0.0" neo-async: "npm:^2.6.2" - schema-utils: "npm:^3.0.0" - semver: "npm:^7.3.2" peerDependencies: - fibers: ">= 3.1.0" - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + "@rspack/core": 0.x || ^1.0.0 || ^2.0.0-0 + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 sass: ^1.3.0 - webpack: ^4.36.0 || ^5.0.0 + sass-embedded: "*" + webpack: ^5.0.0 peerDependenciesMeta: - fibers: + "@rspack/core": optional: true node-sass: optional: true sass: optional: true - checksum: 10/cffe9f85a20c1a9cd486a032f05d74f9c50f4296735642d18eab25582c64afcd1e8a6038156b4ea2224e876b215089e93639fc99385c432da3be87254561b7a9 + sass-embedded: + optional: true + webpack: + optional: true + checksum: 10/074be7eadbbb2e14f581b06e9f1ec010807d76bd5cc5cd9c6a120fa377f1b94a7f8dc4b0eea5b12cf34511e9b00fe056093b7da02e849d3f2513bfe21e9f660f languageName: node linkType: hard "sass@npm:^1.51.0": - version: 1.65.1 - resolution: "sass@npm:1.65.1" + version: 1.97.3 + resolution: "sass@npm:1.97.3" dependencies: - chokidar: "npm:>=3.0.0 <4.0.0" - immutable: "npm:^4.0.0" + "@parcel/watcher": "npm:^2.4.1" + chokidar: "npm:^4.0.0" + immutable: "npm:^5.0.2" source-map-js: "npm:>=0.6.2 <2.0.0" + dependenciesMeta: + "@parcel/watcher": + optional: true bin: sass: sass.js - checksum: 10/c41e1da1abf851089584c3e2c898d1ec42b6b09b37027adfff44e8e511ffd705d3272edce44c659d0944ee9d866114c89f1a536079d98fe1b17e3889c4fe108b + checksum: 10/707ef8e525ed32d375e737346140d4b675f44de208df996c2df3407f5e62f3f38226ea1faf41a9fd4b068201e67b3a7e152b9e9c3b098daa847dd480c735f038 languageName: node linkType: hard -"sax@npm:^1.2.4": - version: 1.2.4 - resolution: "sax@npm:1.2.4" - checksum: 10/09b79ff6dc09689a24323352117c94593c69db348997b2af0edbd82fa08aba47d778055bf9616b57285bb73d25d790900c044bf631a8f10c8252412e3f3fe5dd +"sax@npm:^1.2.4, sax@npm:^1.5.0": + version: 1.5.0 + resolution: "sax@npm:1.5.0" + checksum: 10/9012ff37dda7a7ac5da45db2143b04036103e8bef8d586c3023afd5df6caf0ebd7f38017eee344ad2e2247eded7d38e9c42cf291d8dd91781352900ac0fd2d9f languageName: node linkType: hard @@ -15238,7 +16419,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": +"schema-utils@npm:^3.0.0": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" dependencies: @@ -15249,15 +16430,15 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^4.0.0": - version: 4.2.0 - resolution: "schema-utils@npm:4.2.0" +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.3": + version: 4.3.3 + resolution: "schema-utils@npm:4.3.3" dependencies: "@types/json-schema": "npm:^7.0.9" ajv: "npm:^8.9.0" ajv-formats: "npm:^2.1.1" ajv-keywords: "npm:^5.1.0" - checksum: 10/808784735eeb153ab7f3f787f840aa3bc63f423d2a5a7e96c9e70a0e53d0bc62d7b37ea396fc598ce19196e4fb86a72f897154b7c6ce2358bbc426166f205e14 + checksum: 10/dba77a46ad7ff0c906f7f09a1a61109e6cb56388f15a68070b93c47a691f516c6a3eb454f81a8cceb0a0e55b87f8b05770a02bfb1f4e0a3143b5887488b2f900 languageName: node linkType: hard @@ -15288,11 +16469,12 @@ __metadata: linkType: hard "selfsigned@npm:^2.1.1": - version: 2.1.1 - resolution: "selfsigned@npm:2.1.1" + version: 2.4.1 + resolution: "selfsigned@npm:2.4.1" dependencies: + "@types/node-forge": "npm:^1.3.0" node-forge: "npm:^1" - checksum: 10/6005206e0d005448274aceceaded5195b944f67a42b72d212a6169d2e5f4bdc87c15a3fe45732c544db8c7175702091aaf95403ad6632585294a6ec8cca63638 + checksum: 10/52536623f1cfdeb2f8b9198377f2ce7931c677ea69421238d1dc1ea2983bbe258e56c19e7d1af87035cad7270f19b7e996eaab1212e724d887722502f68e17f2 languageName: node linkType: hard @@ -15323,87 +16505,121 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: "npm:^6.0.0" +"semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.7.1": + version: 7.7.4 + resolution: "semver@npm:7.7.4" bin: semver: bin/semver.js - checksum: 10/985dec0d372370229a262c737063860fabd4a1c730662c1ea3200a2f649117761a42184c96df62a0e885e76fbd5dace41087d6c1ac0351b13c0df5d6bcb1b5ac + checksum: 10/26bdc6d58b29528f4142d29afb8526bc335f4fc04c4a10f2b98b217f277a031c66736bf82d3d3bb354a2f6a3ae50f18fd62b053c4ac3f294a3d10a61f5075b75 languageName: node linkType: hard -"send@npm:0.18.0": - version: 0.18.0 - resolution: "send@npm:0.18.0" +"send@npm:~0.19.0, send@npm:~0.19.1": + version: 0.19.2 + resolution: "send@npm:0.19.2" dependencies: debug: "npm:2.6.9" depd: "npm:2.0.0" destroy: "npm:1.2.0" - encodeurl: "npm:~1.0.2" + encodeurl: "npm:~2.0.0" escape-html: "npm:~1.0.3" etag: "npm:~1.8.1" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" + fresh: "npm:~0.5.2" + http-errors: "npm:~2.0.1" mime: "npm:1.6.0" ms: "npm:2.1.3" - on-finished: "npm:2.4.1" + on-finished: "npm:~2.4.1" range-parser: "npm:~1.2.1" - statuses: "npm:2.0.1" - checksum: 10/ec66c0ad109680ad8141d507677cfd8b4e40b9559de23191871803ed241718e99026faa46c398dcfb9250676076573bd6bfe5d0ec347f88f4b7b8533d1d391cb + statuses: "npm:~2.0.2" + checksum: 10/e932a592f62c58560b608a402d52333a8ae98a5ada076feb5db1d03adaa77c3ca32a7befa1c4fd6dedc186e88f342725b0cb4b3d86835eaf834688b259bef18d languageName: node linkType: hard -"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1": - version: 6.0.1 - resolution: "serialize-javascript@npm:6.0.1" +"serialize-javascript@npm:^6.0.0": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" dependencies: randombytes: "npm:^2.1.0" - checksum: 10/f756b1ff34b655b2183c64dd6683d28d4d9b9a80284b264cac9fd421c73890491eafd6c5c2bbe93f1f21bf78b572037c5a18d24b044c317ee1c9dc44d22db94c + checksum: 10/445a420a6fa2eaee4b70cbd884d538e259ab278200a2ededd73253ada17d5d48e91fb1f4cd224a236ab62ea7ba0a70c6af29fc93b4f3d3078bf7da1c031fde58 languageName: node linkType: hard "serve-handler@npm:^6.1.3": - version: 6.1.5 - resolution: "serve-handler@npm:6.1.5" + version: 6.1.7 + resolution: "serve-handler@npm:6.1.7" + dependencies: + bytes: "npm:3.0.0" + content-disposition: "npm:0.5.2" + mime-types: "npm:2.1.18" + minimatch: "npm:3.1.5" + path-is-inside: "npm:1.0.2" + path-to-regexp: "npm:3.3.0" + range-parser: "npm:1.2.0" + checksum: 10/2366e53cc8e8376d58abb289293b930111fa5da6d14bb31eafac5b1162f332c45c6f394c7d78fdcf6b5736e12caf9370b02d05c7e8a75291d2fc6a55b52b14ea + languageName: node + linkType: hard + +"serve-index@npm:^1.9.1": + version: 1.9.2 + resolution: "serve-index@npm:1.9.2" + dependencies: + accepts: "npm:~1.3.8" + batch: "npm:0.6.1" + debug: "npm:2.6.9" + escape-html: "npm:~1.0.3" + http-errors: "npm:~1.8.0" + mime-types: "npm:~2.1.35" + parseurl: "npm:~1.3.3" + checksum: 10/fdfada071e795da265845acca05be9b498443cb5b84f8c9fd4632f01ea107ecca110725a7963a2b4b3146ec01f41c5f95df4405ff61eda13e6f229474a9ed5a6 + languageName: node + linkType: hard + +"serve-static@npm:~1.16.2": + version: 1.16.3 + resolution: "serve-static@npm:1.16.3" + dependencies: + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:~0.19.1" + checksum: 10/149d6718dd9e53166784d0a65535e21a7c01249d9c51f57224b786a7306354c6807e7811a9f6c143b45c863b1524721fca2f52b5c81a8b5194e3dde034a03b9c + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" dependencies: - bytes: "npm:3.0.0" - content-disposition: "npm:0.5.2" - fast-url-parser: "npm:1.1.3" - mime-types: "npm:2.1.18" - minimatch: "npm:3.1.2" - path-is-inside: "npm:1.0.2" - path-to-regexp: "npm:2.2.1" - range-parser: "npm:1.2.0" - checksum: 10/cab6f381d380ae77ae6da017b5c7b1c25d8f0bed00cf509a18bc768c1830a0043ce53668390ad8a84366e47b353b3f1f7c9d10c7167886179f2e89cb95243a90 + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10/505d62b8e088468917ca4e3f8f39d0e29f9a563b97dbebf92f4bd2c3172ccfb3c5b8e4566d5fcd00784a00433900e7cb8fbc404e2dbd8c3818ba05bb9d4a8a6d languageName: node linkType: hard -"serve-index@npm:^1.9.1": - version: 1.9.1 - resolution: "serve-index@npm:1.9.1" +"set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" dependencies: - accepts: "npm:~1.3.4" - batch: "npm:0.6.1" - debug: "npm:2.6.9" - escape-html: "npm:~1.0.3" - http-errors: "npm:~1.6.2" - mime-types: "npm:~2.1.17" - parseurl: "npm:~1.3.2" - checksum: 10/2adce2878d7e30f197e66f30e39f4a404d9ae39295c0c13849bb25e7cf976b93e883204739efd1510559588bed56f8101e32191cbe75f374c6e1e803852194cb + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10/c7614154a53ebf8c0428a6c40a3b0b47dac30587c1a19703d1b75f003803f73cdfa6a93474a9ba678fa565ef5fbddc2fae79bca03b7d22ab5fd5163dbe571a74 languageName: node linkType: hard -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" +"set-proto@npm:^1.0.0": + version: 1.0.0 + resolution: "set-proto@npm:1.0.0" dependencies: - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - parseurl: "npm:~1.3.3" - send: "npm:0.18.0" - checksum: 10/699b2d4c29807a51d9b5e0f24955346911437aebb0178b3c4833ad30d3eca93385ff9927254f5c16da345903cad39d9cd4a532198c95a5129cc4ed43911b15a4 + dunder-proto: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10/b87f8187bca595ddc3c0721ece4635015fd9d7cb294e6dd2e394ce5186a71bbfa4dc8a35010958c65e43ad83cde09642660e61a952883c24fd6b45ead15f045c languageName: node linkType: hard @@ -15414,14 +16630,7 @@ __metadata: languageName: node linkType: hard -"setprototypeof@npm:1.1.0": - version: 1.1.0 - resolution: "setprototypeof@npm:1.1.0" - checksum: 10/02d2564e02a260551bab3ec95358dcfde775fe61272b1b7c488de3676a4bb79f280b5668a324aebe0ec73f0d8ba408bc2d816a609ee5d93b1a7936b9d4ba1208 - languageName: node - linkType: hard - -"setprototypeof@npm:1.2.0": +"setprototypeof@npm:1.2.0, setprototypeof@npm:~1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" checksum: 10/fde1630422502fbbc19e6844346778f99d449986b2f9cdcceb8326730d2f3d9964dbcb03c02aaadaefffecd0f2c063315ebea8b3ad895914bf1afc1747fc172e @@ -15460,10 +16669,10 @@ __metadata: languageName: node linkType: hard -"shell-quote@npm:^1.7.3": - version: 1.8.1 - resolution: "shell-quote@npm:1.8.1" - checksum: 10/af19ab5a1ec30cb4b2f91fd6df49a7442d5c4825a2e269b3712eded10eedd7f9efeaab96d57829880733fc55bcdd8e9b1d8589b4befb06667c731d08145e274d +"shell-quote@npm:^1.7.3, shell-quote@npm:^1.8.3": + version: 1.8.3 + resolution: "shell-quote@npm:1.8.3" + checksum: 10/5473e354637c2bd698911224129c9a8961697486cff1fb221f234d71c153fc377674029b0223d1d3c953a68d451d79366abfe53d1a0b46ee1f28eb9ade928f4c languageName: node linkType: hard @@ -15480,14 +16689,51 @@ __metadata: languageName: node linkType: hard -"side-channel@npm:^1.0.4": - version: 1.0.4 - resolution: "side-channel@npm:1.0.4" +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10/603b928997abd21c5a5f02ae6b9cc36b72e3176ad6827fab0417ead74580cc4fb4d5c7d0a8a2ff4ead34d0f9e35701ed7a41853dac8a6d1a664fcce1a044f86f + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10/5771861f77feefe44f6195ed077a9e4f389acc188f895f570d56445e251b861754b547ea9ef73ecee4e01fdada6568bfe9020d2ec2dfc5571e9fa1bbc4a10615 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10/a815c89bc78c5723c714ea1a77c938377ea710af20d4fb886d362b0d1f8ac73a17816a5f6640f354017d7e292a43da9c5e876c22145bac00b76cfb3468001736 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4, side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.0" - get-intrinsic: "npm:^1.0.2" - object-inspect: "npm:^1.9.0" - checksum: 10/c4998d9fc530b0e75a7fd791ad868fdc42846f072734f9080ff55cc8dc7d3899abcda24fd896aa6648c3ab7021b4bb478073eb4f44dfd55bce9714bc1a7c5d45 + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10/7d53b9db292c6262f326b6ff3bc1611db84ece36c2c7dc0e937954c13c73185b0406c56589e2bb8d071d6fee468e14c39fb5d203ee39be66b7b8174f179afaba languageName: node linkType: hard @@ -15498,21 +16744,14 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f - languageName: node - linkType: hard - -"sirv@npm:^1.0.7": - version: 1.0.19 - resolution: "sirv@npm:1.0.19" +"sirv@npm:^2.0.3": + version: 2.0.4 + resolution: "sirv@npm:2.0.4" dependencies: - "@polka/url": "npm:^1.0.0-next.20" - mrmime: "npm:^1.0.0" - totalist: "npm:^1.0.0" - checksum: 10/b6833ab4d41f5e449ffcb4d89caac45d97de4b246f984f9b9fa86a0107689562c22d24788b533a58a10cf2cfcebb7e6c678ffa84ac7d3392fca9d18b1bd7ee05 + "@polka/url": "npm:^1.0.0-next.24" + mrmime: "npm:^2.0.0" + totalist: "npm:^3.0.0" + checksum: 10/24f42cf06895017e589c9d16fc3f1c6c07fe8b0dbafce8a8b46322cfba67b7f2498610183954cb0e9d089c8cb60002a7ee7e8bca6a91a0d7042bfbc3473c95c3 languageName: node linkType: hard @@ -15524,8 +16763,8 @@ __metadata: linkType: hard "sitemap@npm:^7.1.1": - version: 7.1.1 - resolution: "sitemap@npm:7.1.1" + version: 7.1.3 + resolution: "sitemap@npm:7.1.3" dependencies: "@types/node": "npm:^17.0.5" "@types/sax": "npm:^1.2.1" @@ -15533,7 +16772,7 @@ __metadata: sax: "npm:^1.2.4" bin: sitemap: dist/cli.js - checksum: 10/b2b493630440713162e8637b0cd203c0dd3fe1b862af3e75542df883cdb5e63aef03aa0bd7eaeef772f654311295721edd47c45990813df002b017b1cdd2e751 + checksum: 10/e68c08112194756f76a09bf83e0c072c8c6969d708d5e97da2801c6e0b3c98940060eff4b32f573308a25802cbcbc2dff540e3f1cee15f3e70d5d6de530c515f languageName: node linkType: hard @@ -15608,17 +16847,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0": - version: 1.0.2 - resolution: "source-map-js@npm:1.0.2" - checksum: 10/38e2d2dd18d2e331522001fc51b54127ef4a5d473f53b1349c5cca2123562400e0986648b52e9407e348eaaed53bce49248b6e2641e6d793ca57cb2c360d6d51 - languageName: node - linkType: hard - -"source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 10/74f331cfd2d121c50790c8dd6d3c9de6be21926de80583b23b37029b0f37aefc3e019fa91f9a10a5e120c08135297e1ecf312d561459c45908cb1e0e365f49e5 +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 languageName: node linkType: hard @@ -15664,9 +16896,9 @@ __metadata: linkType: hard "spawn-command@npm:^0.0.2-1": - version: 0.0.2-1 - resolution: "spawn-command@npm:0.0.2-1" - checksum: 10/f59fd2f16c8ffe46afda588134697ba4f1e2032b216baf7c134a66a0b3d48df323ee46c367f273eb7f7bb8c68b8296ca6b49aac6530cedb4b6785302d238c411 + version: 0.0.2 + resolution: "spawn-command@npm:0.0.2" + checksum: 10/f13e8c3c63abd4a0b52fb567eba5f7940d480c5ed3ec61781d38a1850f179b1196c39e6efa2bbd301f82c1bf1cd7807abc8fbd8fc8e44bcaa3975a124c0d1657 languageName: node linkType: hard @@ -15681,9 +16913,9 @@ __metadata: linkType: hard "spdx-exceptions@npm:^2.1.0": - version: 2.3.0 - resolution: "spdx-exceptions@npm:2.3.0" - checksum: 10/cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10/bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 languageName: node linkType: hard @@ -15698,9 +16930,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.13 - resolution: "spdx-license-ids@npm:3.0.13" - checksum: 10/6328c516e958ceee80362dc657a58cab01c7fdb4667a1a4c1a3e91d069983977f87971340ee857eb66f65079b5d8561e56dc91510802cd7bebaae7632a6aa7fa + version: 3.0.23 + resolution: "spdx-license-ids@npm:3.0.23" + checksum: 10/fead6be44478e4dd73a0721ae569f4a04f358846d8d82e8d92efae64aca928592e380cf17e8b84c25c948f3a7d8a0b4fc781a1830f3911ca87d52733265176b5 languageName: node linkType: hard @@ -15747,6 +16979,13 @@ __metadata: languageName: node linkType: hard +"stable-hash@npm:^0.0.5": + version: 0.0.5 + resolution: "stable-hash@npm:0.0.5" + checksum: 10/9222ea2c558e37c4a576cb4e406966b9e6aa05b93f5c4f09ef4aaabe3577439b9b8fbff407b16840b63e2ae83de74290c7b1c2da7360d571e480e46a4aec0a56 + languageName: node + linkType: hard + "stable@npm:^0.1.8": version: 0.1.8 resolution: "stable@npm:0.1.8" @@ -15770,33 +17009,34 @@ __metadata: languageName: node linkType: hard -"statuses@npm:2.0.1": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 10/18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb - languageName: node - linkType: hard - -"statuses@npm:>= 1.4.0 < 2": +"statuses@npm:>= 1.5.0 < 2": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: 10/c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c languageName: node linkType: hard +"statuses@npm:~2.0.1, statuses@npm:~2.0.2": + version: 2.0.2 + resolution: "statuses@npm:2.0.2" + checksum: 10/6927feb50c2a75b2a4caab2c565491f7a93ad3d8dbad7b1398d52359e9243a20e2ebe35e33726dee945125ef7a515e9097d8a1b910ba2bbd818265a2f6c39879 + languageName: node + linkType: hard + "std-env@npm:^3.0.1": - version: 3.3.3 - resolution: "std-env@npm:3.3.3" - checksum: 10/2f276279297d1a0356d82b9fa54a212b0bbf9f53bf7f13829bd255405da2969a36e0d01c137288d8b7ed3bc615418f8f9715dfed2d38855495b61c5815f0c07f + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10/19c9cda4f370b1ffae2b8b08c72167d8c3e5cfa972aaf5c6873f85d0ed2faa729407f5abb194dc33380708c00315002febb6f1e1b484736bfcf9361ad366013a languageName: node linkType: hard -"stop-iteration-iterator@npm:^1.0.0": - version: 1.0.0 - resolution: "stop-iteration-iterator@npm:1.0.0" +"stop-iteration-iterator@npm:^1.0.0, stop-iteration-iterator@npm:^1.1.0": + version: 1.1.0 + resolution: "stop-iteration-iterator@npm:1.1.0" dependencies: - internal-slot: "npm:^1.0.4" - checksum: 10/2a23a36f4f6bfa63f46ae2d53a3f80fe8276110b95a55345d8ed3d92125413494033bc8697eb774e8f7aeb5725f70e3d69753caa2ecacdac6258c16fa8aa8b0f + es-errors: "npm:^1.3.0" + internal-slot: "npm:^1.1.0" + checksum: 10/ff36c4db171ee76c936ccfe9541946b77017f12703d4c446652017356816862d3aa029a64e7d4c4ceb484e00ed4a81789333896390d808458638f3a216aa1f41 languageName: node linkType: hard @@ -15824,7 +17064,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": +"string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -15835,7 +17075,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": +"string-width@npm:^5.0.1": version: 5.1.2 resolution: "string-width@npm:5.1.2" dependencies: @@ -15846,52 +17086,83 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.8": - version: 4.0.8 - resolution: "string.prototype.matchall@npm:4.0.8" +"string.prototype.includes@npm:^2.0.1": + version: 2.0.1 + resolution: "string.prototype.includes@npm:2.0.1" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - get-intrinsic: "npm:^1.1.3" - has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.3" - regexp.prototype.flags: "npm:^1.4.3" - side-channel: "npm:^1.0.4" - checksum: 10/9de2e9e33344002e08c03c13533d88d0c557d5a3d9214a4f2cc8d63349f7c35af895804dec08e43224cc4c0345651c678e14260c5933967fd97aad4640a7e485 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.3" + checksum: 10/939a5447e4a99a86f29cc97fa24f358e5071f79e34746de4c7eb2cd736ed626ad24870a1e356f33915b3b352bb87f7e4d1cebc15d1e1aaae0923777e21b1b28b languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.7": - version: 1.2.7 - resolution: "string.prototype.trim@npm:1.2.7" +"string.prototype.matchall@npm:^4.0.12": + version: 4.0.12 + resolution: "string.prototype.matchall@npm:4.0.12" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10/a1b795bdb4b4b7d9399e99771e8a36493a30cf18095b0e8b36bcb211aad42dc59186c9a833c774f7a70429dbd3862818133d7e0da1547a0e9f0e1ebddf995635 + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.6" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.6" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + internal-slot: "npm:^1.1.0" + regexp.prototype.flags: "npm:^1.5.3" + set-function-name: "npm:^2.0.2" + side-channel: "npm:^1.1.0" + checksum: 10/e4ab34b9e7639211e6c5e9759adb063028c5c5c4fc32ad967838b2bd1e5ce83a66ae8ec755d24a79302849f090b59194571b2c33471e86e7821b21c0f56df316 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimend@npm:1.0.6" +"string.prototype.repeat@npm:^1.0.0": + version: 1.0.0 + resolution: "string.prototype.repeat@npm:1.0.0" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10/3893db9267e0b8a16658c3947738536e90c400a9b7282de96925d4e210174cfe66c59d6b7eb5b4a9aaa78ef7f5e46afb117e842d93112fbd105c8d19206d8092 + define-properties: "npm:^1.1.3" + es-abstract: "npm:^1.17.5" + checksum: 10/4b1bd91b75fa8fdf0541625184ebe80e445a465ce4253c19c3bccd633898005dadae0f74b85ae72662a53aafb8035bf48f8f5c0755aec09bc106a7f13959d05e languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimstart@npm:1.0.6" +"string.prototype.trim@npm:^1.2.10": + version: 1.2.10 + resolution: "string.prototype.trim@npm:1.2.10" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10/05e2cd06fa5311b17f5b2c7af0a60239fa210f4bb07bbcfce4995215dce330e2b1dd2d8030d371f46252ab637522e14b6e9a78384e8515945b72654c14261d54 + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-object-atoms: "npm:^1.0.0" + has-property-descriptors: "npm:^1.0.2" + checksum: 10/47bb63cd2470a64bc5e2da1e570d369c016ccaa85c918c3a8bb4ab5965120f35e66d1f85ea544496fac84b9207a6b722adf007e6c548acd0813e5f8a82f9712a + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.9": + version: 1.0.9 + resolution: "string.prototype.trimend@npm:1.0.9" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10/140c73899b6747de9e499c7c2e7a83d549c47a26fa06045b69492be9cfb9e2a95187499a373983a08a115ecff8bc3bd7b0fb09b8ff72fb2172abe766849272ef + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10/160167dfbd68e6f7cb9f51a16074eebfce1571656fc31d40c3738ca9e30e35496f2c046fe57b6ad49f65f238a152be8c86fd9a2dd58682b5eba39dad995b3674 languageName: node linkType: hard @@ -15924,7 +17195,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -15934,11 +17205,11 @@ __metadata: linkType: hard "strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" + version: 7.2.0 + resolution: "strip-ansi@npm:7.2.0" dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10/475f53e9c44375d6e72807284024ac5d668ee1d06010740dec0b9744f2ddf47de8d7151f80e5f6190fc8f384e802fdf9504b76a7e9020c9faee7103623338be2 + ansi-regex: "npm:^6.2.2" + checksum: 10/96da3bc6d73cfba1218625a3d66cf7d37a69bf0920d8735b28f9eeaafcdb6c1fe8440e1ae9eb1ba0ca355dbe8702da872e105e2e939fa93e7851b3cb5dd7d316 languageName: node linkType: hard @@ -16012,21 +17283,28 @@ __metadata: languageName: node linkType: hard -"sucrase@npm:^3.32.0": - version: 3.35.0 - resolution: "sucrase@npm:3.35.0" +"stylis@npm:^4.1.2": + version: 4.3.6 + resolution: "stylis@npm:4.3.6" + checksum: 10/6ebe8a37827124e0caf0704c13d39c121f6e6a8433eb8c67cfce508477b24a4434d1731198ba0b6e453655022bbf5beda93585f38ff420545e5356f925f83761 + languageName: node + linkType: hard + +"sucrase@npm:^3.35.0": + version: 3.35.1 + resolution: "sucrase@npm:3.35.1" dependencies: "@jridgewell/gen-mapping": "npm:^0.3.2" commander: "npm:^4.0.0" - glob: "npm:^10.3.10" lines-and-columns: "npm:^1.1.6" mz: "npm:^2.7.0" pirates: "npm:^4.0.1" + tinyglobby: "npm:^0.2.11" ts-interface-checker: "npm:^0.1.9" bin: sucrase: bin/sucrase sucrase-node: bin/sucrase-node - checksum: 10/bc601558a62826f1c32287d4fdfa4f2c09fe0fec4c4d39d0e257fd9116d7d6227a18309721d4185ec84c9dc1af0d5ec0e05a42a337fbb74fc293e068549aacbe + checksum: 10/539f5c6ebc1ff8d449a89eb52b8c8944a730b9840ddadbd299a7d89ebcf16c3f4bc9aa59e1f2e112a502e5cf1508f7e02065f0e97c0435eb9a7058e997dfff5a languageName: node linkType: hard @@ -16082,19 +17360,19 @@ __metadata: linkType: hard "svgo@npm:^2.7.0, svgo@npm:^2.8.0": - version: 2.8.0 - resolution: "svgo@npm:2.8.0" + version: 2.8.2 + resolution: "svgo@npm:2.8.2" dependencies: - "@trysound/sax": "npm:0.2.0" commander: "npm:^7.2.0" css-select: "npm:^4.1.3" css-tree: "npm:^1.1.3" csso: "npm:^4.2.0" picocolors: "npm:^1.0.0" + sax: "npm:^1.5.0" stable: "npm:^0.1.8" bin: - svgo: bin/svgo - checksum: 10/2b74544da1a9521852fe2784252d6083b336e32528d0e424ee54d1613f17312edc7020c29fa399086560e96cba42ede4a2205328a08edeefa26de84cd769a64a + svgo: ./bin/svgo + checksum: 10/a0922a2cbbbc51c0162ea7a7d6c5b660fb4fb65e0f05e226ba571cfe8b651fd870072aed2722ef96715fb77829562b351eb72f2b7bf09038ffc88969acaffd0f languageName: node linkType: hard @@ -16106,48 +17384,48 @@ __metadata: linkType: hard "table@npm:^6.0.9": - version: 6.8.1 - resolution: "table@npm:6.8.1" + version: 6.9.0 + resolution: "table@npm:6.9.0" dependencies: ajv: "npm:^8.0.1" lodash.truncate: "npm:^4.4.2" slice-ansi: "npm:^4.0.0" string-width: "npm:^4.2.3" strip-ansi: "npm:^6.0.1" - checksum: 10/512c4f2bfb6f46f4d5ced19943ae5db1a5163eac1f23ce752625eb49715f84217c1c62bc2d017eb8985b37e0f85731108f654df809c0b34cca1678a672e7ea20 + checksum: 10/976da6d89841566e39628d1ba107ffab126964c9390a0a877a7c54ebb08820bf388d28fe9f8dcf354b538f19634a572a506c38a3762081640013a149cc862af9 languageName: node linkType: hard "tailwindcss@npm:^3.2.1": - version: 3.4.1 - resolution: "tailwindcss@npm:3.4.1" + version: 3.4.19 + resolution: "tailwindcss@npm:3.4.19" dependencies: "@alloc/quick-lru": "npm:^5.2.0" arg: "npm:^5.0.2" - chokidar: "npm:^3.5.3" + chokidar: "npm:^3.6.0" didyoumean: "npm:^1.2.2" dlv: "npm:^1.1.3" - fast-glob: "npm:^3.3.0" + fast-glob: "npm:^3.3.2" glob-parent: "npm:^6.0.2" is-glob: "npm:^4.0.3" - jiti: "npm:^1.19.1" - lilconfig: "npm:^2.1.0" - micromatch: "npm:^4.0.5" + jiti: "npm:^1.21.7" + lilconfig: "npm:^3.1.3" + micromatch: "npm:^4.0.8" normalize-path: "npm:^3.0.0" object-hash: "npm:^3.0.0" - picocolors: "npm:^1.0.0" - postcss: "npm:^8.4.23" + picocolors: "npm:^1.1.1" + postcss: "npm:^8.4.47" postcss-import: "npm:^15.1.0" postcss-js: "npm:^4.0.1" - postcss-load-config: "npm:^4.0.1" - postcss-nested: "npm:^6.0.1" - postcss-selector-parser: "npm:^6.0.11" - resolve: "npm:^1.22.2" - sucrase: "npm:^3.32.0" + postcss-load-config: "npm:^4.0.2 || ^5.0 || ^6.0" + postcss-nested: "npm:^6.2.0" + postcss-selector-parser: "npm:^6.1.2" + resolve: "npm:^1.22.8" + sucrase: "npm:^3.35.0" bin: tailwind: lib/cli.js tailwindcss: lib/cli.js - checksum: 10/bf460657c674b1fb22ad7017ab5a9771c2884a3089d7767cee2395e8d9a54d74846170934ee00e285f39622c8e9e54d6f0e54bf38344efdc61544291c4d325c2 + checksum: 10/f4e5e3dc3e1d96c453520f6787d0f36a9b9ae20bfa443102181fb772ba236e796eaf0888181becd5f00ffa6e99c17605224db216ff660a4ed7e7bb2d94b0b071 languageName: node linkType: hard @@ -16158,23 +17436,23 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 10/1769336dd21481ae6347611ca5fca47add0962fd8e80466515032125eca0084a4f0ede11e65341b9c0018ef4e1cf1ad820adbb0fba7cc99865c6005734000b0a +"tapable@npm:^2.0.0, tapable@npm:^2.2.1, tapable@npm:^2.3.0": + version: 2.3.0 + resolution: "tapable@npm:2.3.0" + checksum: 10/496a841039960533bb6e44816a01fffc2a1eb428bb2051ecab9e87adf07f19e1f937566cbbbb09dceff31163c0ffd81baafcad84db900b601f0155dd0b37e9f2 languageName: node linkType: hard "tar@npm:^7.5.4": - version: 7.5.9 - resolution: "tar@npm:7.5.9" + version: 7.5.11 + resolution: "tar@npm:7.5.11" dependencies: "@isaacs/fs-minipass": "npm:^4.0.0" chownr: "npm:^3.0.0" minipass: "npm:^7.1.2" minizlib: "npm:^3.1.0" yallist: "npm:^5.0.0" - checksum: 10/1213cdde9c22d6acf8809ba5d2a025212ce3517bc99c4a4c6981b7dc0489bf3b164db9c826c9517680889194c9ba57448c8ff0da35eca9a60bb7689bf0b3897d + checksum: 10/fb2e77ee858a73936c68e066f4a602d428d6f812e6da0cc1e14a41f99498e4f7fd3535e355fa15157240a5538aa416026cfa6306bb0d1d1c1abf314b1f878e9a languageName: node linkType: hard @@ -16188,15 +17466,14 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.3.3, terser-webpack-plugin@npm:^5.3.7": - version: 5.3.9 - resolution: "terser-webpack-plugin@npm:5.3.9" +"terser-webpack-plugin@npm:^5.3.17, terser-webpack-plugin@npm:^5.3.3": + version: 5.4.0 + resolution: "terser-webpack-plugin@npm:5.4.0" dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.17" + "@jridgewell/trace-mapping": "npm:^0.3.25" jest-worker: "npm:^27.4.5" - schema-utils: "npm:^3.1.1" - serialize-javascript: "npm:^6.0.1" - terser: "npm:^5.16.8" + schema-utils: "npm:^4.3.0" + terser: "npm:^5.31.1" peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -16206,21 +17483,21 @@ __metadata: optional: true uglify-js: optional: true - checksum: 10/339737a407e034b7a9d4a66e31d84d81c10433e41b8eae2ca776f0e47c2048879be482a9aa08e8c27565a2a949bc68f6e07f451bf4d9aa347dd61b3d000f5353 + checksum: 10/f4618b18cec5dd41fca4a53f621ea06df04ff7bb2b09d3766559284e171a91df2884083e5c143aaacee2000870b046eb7157e39d1d2d8024577395165a070094 languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.16.8": - version: 5.19.2 - resolution: "terser@npm:5.19.2" +"terser@npm:^5.10.0, terser@npm:^5.31.1": + version: 5.46.0 + resolution: "terser@npm:5.46.0" dependencies: "@jridgewell/source-map": "npm:^0.3.3" - acorn: "npm:^8.8.2" + acorn: "npm:^8.15.0" commander: "npm:^2.20.0" source-map-support: "npm:~0.5.20" bin: terser: bin/terser - checksum: 10/da441c9e0e630d26ca74d7f9659cc78f4afb698cebdb93cb5142565ba3f625bdf9a7b4f4bd94dabd5a2344732fde850d607e6f7eed04275754578d531f917382 + checksum: 10/331e4f5a165d91d16ac6a95b510d4f5ef24679e4bc9e1b4e4182e89b7245f614d24ce0def583e2ca3ca45f82ba810991e0c5b66dd4353a6e0b7082786af6bd35 languageName: node linkType: hard @@ -16261,9 +17538,9 @@ __metadata: linkType: hard "throttle-debounce@npm:^5.0.0": - version: 5.0.0 - resolution: "throttle-debounce@npm:5.0.0" - checksum: 10/bedd5a20cd226c7a6e765719c73fa8ec7a43f0c552bfb658cbe7ed51e16ab5f315dd2baed66904c004a1d16b0bb4e85e10126695a787b13516c37d4907426ec5 + version: 5.0.2 + resolution: "throttle-debounce@npm:5.0.2" + checksum: 10/9a5e5ae7f93127d921e913ad741e75e6d2bb946d15e1898ed541037bc646adb9a759c481385400be917ec6d93f078fd8b016980c1a9143e09ea88c99559b0c93 languageName: node linkType: hard @@ -16275,9 +17552,9 @@ __metadata: linkType: hard "tiny-invariant@npm:^1.0.2": - version: 1.3.1 - resolution: "tiny-invariant@npm:1.3.1" - checksum: 10/872dbd1ff20a21303a2fd20ce3a15602cfa7fcf9b228bd694a52e2938224313b5385a1078cb667ed7375d1612194feaca81c4ecbe93121ca1baebe344de4f84c + version: 1.3.3 + resolution: "tiny-invariant@npm:1.3.3" + checksum: 10/5e185c8cc2266967984ce3b352a4e57cb89dad5a8abb0dea21468a6ecaa67cd5bb47a3b7a85d08041008644af4f667fb8b6575ba38ba5fb00b3b5068306e59fe languageName: node linkType: hard @@ -16288,7 +17565,7 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.12": +"tinyglobby@npm:^0.2.11, tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13": version: 0.2.15 resolution: "tinyglobby@npm:0.2.15" dependencies: @@ -16305,13 +17582,6 @@ __metadata: languageName: node linkType: hard -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: 10/be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 - languageName: node - linkType: hard - "to-readable-stream@npm:^1.0.0": version: 1.0.0 resolution: "to-readable-stream@npm:1.0.0" @@ -16335,29 +17605,29 @@ __metadata: languageName: node linkType: hard -"toidentifier@npm:1.0.1": +"toidentifier@npm:1.0.1, toidentifier@npm:~1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" checksum: 10/952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 languageName: node linkType: hard -"totalist@npm:^1.0.0": - version: 1.1.0 - resolution: "totalist@npm:1.1.0" - checksum: 10/dfab80c7104a1d170adc8c18782d6c04b7df08352dec452191208c66395f7ef2af7537ddfa2cf1decbdcfab1a47afbbf0dec6543ea191da98c1c6e1599f86adc +"totalist@npm:^3.0.0": + version: 3.0.1 + resolution: "totalist@npm:3.0.1" + checksum: 10/5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a languageName: node linkType: hard "tough-cookie@npm:^4.0.0": - version: 4.1.3 - resolution: "tough-cookie@npm:4.1.3" + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" dependencies: psl: "npm:^1.1.33" punycode: "npm:^2.1.1" universalify: "npm:^0.2.0" url-parse: "npm:^1.5.3" - checksum: 10/cf148c359b638a7069fc3ba9a5257bdc9616a6948a98736b92c3570b3f8401cf9237a42bf716878b656f372a1fb65b74dd13a46ccff8eceba14ffd053d33f72a + checksum: 10/75663f4e2cd085f16af0b217e4218772adf0617fb3227171102618a54ce0187a164e505d61f773ed7d65988f8ff8a8f935d381f87da981752c1171b076b4afac languageName: node linkType: hard @@ -16408,11 +17678,18 @@ __metadata: linkType: hard "ts-api-utils@npm:^1.0.1": - version: 1.0.1 - resolution: "ts-api-utils@npm:1.0.1" + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" peerDependencies: typescript: ">=4.2.0" - checksum: 10/8b16fa5645442854fbaef83c57beec8daf0326b24576efe744d85bb3851241b8deac2df424ebe73c0bb7d5bfaac6bccbb554222b788f9fdf90998d164f38d640 + checksum: 10/713c51e7392323305bd4867422ba130fbf70873ef6edbf80ea6d7e9c8f41eeeb13e40e8e7fe7cd321d74e4864777329797077268c9f570464303a1723f1eed39 + languageName: node + linkType: hard + +"ts-dedent@npm:^2.2.0": + version: 2.2.0 + resolution: "ts-dedent@npm:2.2.0" + checksum: 10/93ed8f7878b6d5ed3c08d99b740010eede6bccfe64bce61c5a4da06a2c17d6ddbb80a8c49c2d15251de7594a4f93ffa21dd10e7be75ef66a4dc9951b4a94e2af languageName: node linkType: hard @@ -16434,15 +17711,15 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.14.2": - version: 3.14.2 - resolution: "tsconfig-paths@npm:3.14.2" +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" dependencies: "@types/json5": "npm:^0.0.29" json5: "npm:^1.0.2" minimist: "npm:^1.2.6" strip-bom: "npm:^3.0.0" - checksum: 10/17f23e98612a60cf23b80dc1d3b7b840879e41fcf603868fc3618a30f061ac7b463ef98cad8c28b68733b9bfe0cc40ffa2bcf29e94cf0d26e4f6addf7ac8527d + checksum: 10/2041beaedc6c271fc3bedd12e0da0cc553e65d030d4ff26044b771fac5752d0460944c0b5e680f670c2868c95c664a256cec960ae528888db6ded83524e33a14 languageName: node linkType: hard @@ -16461,9 +17738,9 @@ __metadata: linkType: hard "tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.0": - version: 2.6.1 - resolution: "tslib@npm:2.6.1" - checksum: 10/5cf1aa7ea4ca7ee9b8aa3d80eb7ee86634b307fbefcb948a831c2b13728e21e156ef7fb9edcbe21f05c08f65e4cf4480587086f31133491ba1a49c9e0b28fc75 + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 languageName: node linkType: hard @@ -16539,50 +17816,56 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-buffer@npm:1.0.0" +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.1" - is-typed-array: "npm:^1.1.10" - checksum: 10/3e0281c79b2a40cd97fe715db803884301993f4e8c18e8d79d75fd18f796e8cd203310fec8c7fdb5e6c09bedf0af4f6ab8b75eb3d3a85da69328f28a80456bd3 + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.14" + checksum: 10/3fb91f0735fb413b2bbaaca9fabe7b8fc14a3fa5a5a7546bab8a57e755be0e3788d893195ad9c2b842620592de0e68d4c077d4c2c41f04ec25b8b5bb82fa9a80 languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-length@npm:1.0.0" +"typed-array-byte-length@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" dependencies: - call-bind: "npm:^1.0.2" + call-bind: "npm:^1.0.8" for-each: "npm:^0.3.3" - has-proto: "npm:^1.0.1" - is-typed-array: "npm:^1.1.10" - checksum: 10/6f376bf5d988f00f98ccee41fd551cafc389095a2a307c18fab30f29da7d1464fc3697139cf254cda98b4128bbcb114f4b557bbabdc6d9c2e5039c515b31decf + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.14" + checksum: 10/269dad101dda73e3110117a9b84db86f0b5c07dad3a9418116fd38d580cab7fc628a4fc167e29b6d7c39da2f53374b78e7cb578b3c5ec7a556689d985d193519 languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-offset@npm:1.0.0" +"typed-array-byte-offset@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-byte-offset@npm:1.0.4" dependencies: - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.2" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" for-each: "npm:^0.3.3" - has-proto: "npm:^1.0.1" - is-typed-array: "npm:^1.1.10" - checksum: 10/2d81747faae31ca79f6c597dc18e15ae3d5b7e97f7aaebce3b31f46feeb2a6c1d6c92b9a634d901c83731ffb7ec0b74d05c6ff56076f5ae39db0cd19b16a3f92 + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.15" + reflect.getprototypeof: "npm:^1.0.9" + checksum: 10/c2869aa584cdae24ecfd282f20a0f556b13a49a9d5bca1713370bb3c89dff0ccbc5ceb45cb5b784c98f4579e5e3e2a07e438c3a5b8294583e2bd4abbd5104fb5 languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-length@npm:1.0.4" +"typed-array-length@npm:^1.0.7": + version: 1.0.7 + resolution: "typed-array-length@npm:1.0.7" dependencies: - call-bind: "npm:^1.0.2" + call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" - is-typed-array: "npm:^1.1.9" - checksum: 10/0444658acc110b233176cb0b7689dcb828b0cfa099ab1d377da430e8553b6fdcdce882360b7ffe9ae085b6330e1d39383d7b2c61574d6cd8eef651d3e4a87822 + gopd: "npm:^1.0.1" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + reflect.getprototypeof: "npm:^1.0.6" + checksum: 10/d6b2f0e81161682d2726eb92b1dc2b0890890f9930f33f9bcf6fc7272895ce66bc368066d273e6677776de167608adc53fcf81f1be39a146d64b630edbf2081c languageName: node linkType: hard @@ -16616,21 +17899,37 @@ __metadata: linkType: hard "ua-parser-js@npm:^1.0.35": - version: 1.0.35 - resolution: "ua-parser-js@npm:1.0.35" - checksum: 10/b69c99c20f90e1d441939be591a3e4c848d12b88671953fc0de7664bdcdb660f4e9db236099ae966cfb20504d8894825bbdee0fcc31326f2823bf439eadfc02c + version: 1.0.41 + resolution: "ua-parser-js@npm:1.0.41" + bin: + ua-parser-js: script/cli.js + checksum: 10/86f2b624ff13f5be86a7cc5172427960493c8c0f703fdc8de340d8701951a1478cdf7a76f1f510932bb25a2fce6a3e0ba750b631f026d85acdc6b2a6b0ba6138 languageName: node linkType: hard -"unbox-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "unbox-primitive@npm:1.0.2" +"unbox-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "unbox-primitive@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.2" + call-bound: "npm:^1.0.3" has-bigints: "npm:^1.0.2" - has-symbols: "npm:^1.0.3" - which-boxed-primitive: "npm:^1.0.2" - checksum: 10/06e1ee41c1095e37281cb71a975cb3350f7cb470a0665d2576f02cc9564f623bd90cfc0183693b8a7fdf2d242963dcc3010b509fa3ac683f540c765c0f3e7e43 + has-symbols: "npm:^1.1.0" + which-boxed-primitive: "npm:^1.1.1" + checksum: 10/fadb347020f66b2c8aeacf8b9a79826fa34cc5e5457af4eb0bbc4e79bd87fed0fa795949825df534320f7c13f199259516ad30abc55a6e7b91d8d996ca069e50 + languageName: node + linkType: hard + +"undici-types@npm:~7.18.0": + version: 7.18.2 + resolution: "undici-types@npm:7.18.2" + checksum: 10/e61a5918f624d68420c3ca9d301e9f15b61cba6e97be39fe2ce266dd6151e4afe424d679372638826cb506be33952774e0424141200111a9857e464216c009af + languageName: node + linkType: hard + +"undici@npm:^7.19.0": + version: 7.22.0 + resolution: "undici@npm:7.22.0" + checksum: 10/a7a1813ba4b74c0d46cc8dd160386202c05699ffc487c5d882cf40e6d2435c8d6faff3b8f8675d09bd1ef0386e370675c26b59b9a8c8b3f17b9f82a42236a927 languageName: node linkType: hard @@ -16645,9 +17944,9 @@ __metadata: linkType: hard "unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 10/39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 10/3c3dabdb1d22aef4904399f9e810d0b71c0b12b3815169d96fac97e56d5642840c6071cf709adcace2252bc6bb80242396c2ec74b37224eb015c5f7aca40bad7 languageName: node linkType: hard @@ -16661,17 +17960,17 @@ __metadata: languageName: node linkType: hard -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 10/06661bc8aba2a60c7733a7044f3e13085808939ad17924ffd4f5222a650f88009eb7c09481dc9c15cfc593d4ad99bd1cde8d54042733b335672591a81c52601c +"unicode-match-property-value-ecmascript@npm:^2.2.1": + version: 2.2.1 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.1" + checksum: 10/a42bebebab4c82ea6d8363e487b1fb862f82d1b54af1b67eb3fef43672939b685780f092c4f235266b90225863afa1258d57e7be3578d8986a08d8fc309aabe1 languageName: node linkType: hard "unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 10/243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + version: 2.2.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.2.0" + checksum: 10/0dd0f6e70130c59b4a841bac206758f70227b113145e4afe238161e3e8540e8eb79963e7a228cd90ad13d499e96f7ef4ee8940835404b2181ad9bf9c174818e3 languageName: node linkType: hard @@ -16814,30 +18113,97 @@ __metadata: linkType: hard "universalify@npm:^2.0.0": - version: 2.0.0 - resolution: "universalify@npm:2.0.0" - checksum: 10/2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10/ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 languageName: node linkType: hard -"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": +"unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" checksum: 10/4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.11": - version: 1.0.11 - resolution: "update-browserslist-db@npm:1.0.11" +"unrs-resolver@npm:^1.6.2": + version: 1.11.1 + resolution: "unrs-resolver@npm:1.11.1" + dependencies: + "@unrs/resolver-binding-android-arm-eabi": "npm:1.11.1" + "@unrs/resolver-binding-android-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-x64": "npm:1.11.1" + "@unrs/resolver-binding-freebsd-x64": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.11.1" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.11.1" + napi-postinstall: "npm:^0.3.0" + dependenciesMeta: + "@unrs/resolver-binding-android-arm-eabi": + optional: true + "@unrs/resolver-binding-android-arm64": + optional: true + "@unrs/resolver-binding-darwin-arm64": + optional: true + "@unrs/resolver-binding-darwin-x64": + optional: true + "@unrs/resolver-binding-freebsd-x64": + optional: true + "@unrs/resolver-binding-linux-arm-gnueabihf": + optional: true + "@unrs/resolver-binding-linux-arm-musleabihf": + optional: true + "@unrs/resolver-binding-linux-arm64-gnu": + optional: true + "@unrs/resolver-binding-linux-arm64-musl": + optional: true + "@unrs/resolver-binding-linux-ppc64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-musl": + optional: true + "@unrs/resolver-binding-linux-s390x-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-musl": + optional: true + "@unrs/resolver-binding-wasm32-wasi": + optional: true + "@unrs/resolver-binding-win32-arm64-msvc": + optional: true + "@unrs/resolver-binding-win32-ia32-msvc": + optional: true + "@unrs/resolver-binding-win32-x64-msvc": + optional: true + checksum: 10/4de653508cbaae47883a896bd5cdfef0e5e87b428d62620d16fd35cd534beaebf08ebf0cf2f8b4922aa947b2fe745180facf6cc3f39ba364f7ce0f974cb06a70 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.2.0": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" dependencies: - escalade: "npm:^3.1.1" - picocolors: "npm:^1.0.0" + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 10/cc1c7a38d15413046bea28ff3c7668a7cb6b4a53d83e8089fa960efd896deb6d1a9deffc2beb8dc0506186a352c8d19804efe5ec7eeb401037e14cf3ea5363f8 + checksum: 10/059f774300efb4b084a49293143c511f3ae946d40397b5c30914e900cd5691a12b8e61b41dd54ed73d3b56c8204165a0333107dd784ccf8f8c81790bcc423175 languageName: node linkType: hard @@ -16909,46 +18275,49 @@ __metadata: linkType: hard "use-composed-ref@npm:^1.3.0": - version: 1.3.0 - resolution: "use-composed-ref@npm:1.3.0" + version: 1.4.0 + resolution: "use-composed-ref@npm:1.4.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/f771cbadfdc91e03b7ab9eb32d0fc0cc647755711801bf507e891ad38c4bbc5f02b2509acadf9c965ec9c5f2f642fd33bdfdfb17b0873c4ad0a9b1f5e5e724bf + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/a0f199ba510e008ce7b6166d9bda095f1e4e4449089bde665938a9689a0d236a6cca655f18d7272208aaca20bb364ef5fc895d5e37128f29814c1141a4258ab1 languageName: node linkType: hard "use-isomorphic-layout-effect@npm:^1.1.1": - version: 1.1.2 - resolution: "use-isomorphic-layout-effect@npm:1.1.2" + version: 1.2.1 + resolution: "use-isomorphic-layout-effect@npm:1.2.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10/fd3787ed19f6cfbf70e2c5822d01bebbf96b00968195840d5ad61082b8e6ca7a8e2e46270c4096537d18a38ea57f4e4e9668cce5eec36fa4697ddba2ef1203fd + checksum: 10/a52155ffa7d67a5107ef2033ae2c63f5290c3e3b198de30d4d4f78cd7921e1ab1ea31eeec387defb67ef61adb672d3b8d25b54b7dcc089bacc4f885abde96e9d languageName: node linkType: hard "use-latest@npm:^1.2.1": - version: 1.2.1 - resolution: "use-latest@npm:1.2.1" + version: 1.3.0 + resolution: "use-latest@npm:1.3.0" dependencies: use-isomorphic-layout-effect: "npm:^1.1.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10/b0cbdd91f32e9a7fb4cd9d54934bef55dd6dbe90e2853506405e7c2ca78ca61dd34a6241f7138110a5013da02366138708f23f417c63524ad27aa43afa4196d6 + checksum: 10/913e95c272b67743ff1a0df61375058ae6ead368fd5631748e33699b2341aa89b07be03aa4cde4140a856adae70a6e0f299920cc1ad326f4afd310ba250604bd languageName: node linkType: hard "use-sync-external-store@npm:^1.0.0, use-sync-external-store@npm:^1.2.0": - version: 1.2.0 - resolution: "use-sync-external-store@npm:1.2.0" + version: 1.6.0 + resolution: "use-sync-external-store@npm:1.6.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/a676216affc203876bd47981103f201f28c2731361bb186367e12d287a7566763213a8816910c6eb88265eccd4c230426eb783d64c373c4a180905be8820ed8e + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10/b40ad2847ba220695bff2d4ba4f4d60391c0fb4fb012faa7a4c18eb38b69181936f5edc55a522c4d20a788d1a879b73c3810952c9d0fd128d01cb3f22042c09e languageName: node linkType: hard @@ -16967,9 +18336,9 @@ __metadata: linkType: hard "utility-types@npm:^3.10.0": - version: 3.10.0 - resolution: "utility-types@npm:3.10.0" - checksum: 10/3ca80abfb9482b8f924110b643411d6a8c6bf84049e76212652fb46ccc9085c635485dd0351b63a8da6cf2cffbef32cc27d16e924dc7ad445881a481632b3da0 + version: 3.11.0 + resolution: "utility-types@npm:3.11.0" + checksum: 10/a3c51463fc807ed04ccc8b5d0fa6e31f3dcd7a4cbd30ab4bc6d760ce5319dd493d95bf04244693daf316f97e9ab2a37741edfed8748ad38572a595398ad0fdaf languageName: node linkType: hard @@ -16989,6 +18358,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 10/9d0b6adb72b736e36f2b1b53da0d559125ba3e39d913b6072f6f033e0c87835b414f0836b45bcfaf2bdf698f92297fea1c3cc19b0b258bc182c9c43cc0fab9f2 + languageName: node + linkType: hard + "v8-compile-cache@npm:^2.0.3": version: 2.4.0 resolution: "v8-compile-cache@npm:2.4.0" @@ -16997,13 +18375,13 @@ __metadata: linkType: hard "v8-to-istanbul@npm:^9.0.1": - version: 9.1.0 - resolution: "v8-to-istanbul@npm:9.1.0" + version: 9.3.0 + resolution: "v8-to-istanbul@npm:9.3.0" dependencies: "@jridgewell/trace-mapping": "npm:^0.3.12" "@types/istanbul-lib-coverage": "npm:^2.0.1" - convert-source-map: "npm:^1.6.0" - checksum: 10/95811ff2f17a31432c3fc7b3027b7e8c2c6ca5e60a7811c5050ce51920ab2b80df29feb04c52235bbfdaa9a6809acd5a5dd9668292e98c708617c19e087c3f68 + convert-source-map: "npm:^2.0.0" + checksum: 10/fb1d70f1176cb9dc46cabbb3fd5c52c8f3e8738b61877b6e7266029aed0870b04140e3f9f4550ac32aebcfe1d0f38b0bac57e1e8fb97d68fec82f2b416148166 languageName: node linkType: hard @@ -17102,13 +18480,13 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.4.0": - version: 2.4.0 - resolution: "watchpack@npm:2.4.0" +"watchpack@npm:^2.5.1": + version: 2.5.1 + resolution: "watchpack@npm:2.5.1" dependencies: glob-to-regexp: "npm:^0.4.1" graceful-fs: "npm:^4.1.2" - checksum: 10/4280b45bc4b5d45d5579113f2a4af93b67ae1b9607cc3d86ae41cdd53ead10db5d9dc3237f24256d05ef88b28c69a02712f78e434cb7ecc8edaca134a56e8cab + checksum: 10/9c9cdd4a9f9ae146b10d15387f383f52589e4cc27b324da6be8e7e3e755255b062a69dd7f00eef2ce67b2c01e546aae353456e74f8c1350bba00462cc6375549 languageName: node linkType: hard @@ -17128,6 +18506,13 @@ __metadata: languageName: node linkType: hard +"web-worker@npm:^1.2.0": + version: 1.5.0 + resolution: "web-worker@npm:1.5.0" + checksum: 10/1209461e2c731fe8e8297c95a8a324c6dd00fd9f3c489ed79d18a15592731324762b7b06c8b6bc404596259aa13cd413119e0153e12a80f47a7f374960461e0d + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -17143,28 +18528,30 @@ __metadata: linkType: hard "webpack-bundle-analyzer@npm:^4.5.0": - version: 4.9.0 - resolution: "webpack-bundle-analyzer@npm:4.9.0" + version: 4.10.2 + resolution: "webpack-bundle-analyzer@npm:4.10.2" dependencies: "@discoveryjs/json-ext": "npm:0.5.7" acorn: "npm:^8.0.4" acorn-walk: "npm:^8.0.0" - chalk: "npm:^4.1.0" commander: "npm:^7.2.0" + debounce: "npm:^1.2.1" + escape-string-regexp: "npm:^4.0.0" gzip-size: "npm:^6.0.0" - lodash: "npm:^4.17.20" + html-escaper: "npm:^2.0.2" opener: "npm:^1.5.2" - sirv: "npm:^1.0.7" + picocolors: "npm:^1.0.0" + sirv: "npm:^2.0.3" ws: "npm:^7.3.1" bin: webpack-bundle-analyzer: lib/bin/analyzer.js - checksum: 10/bd1a7b431b6cf0e8c7582531ad340eb299d93fe3268d980d040df92f9383fe4fe0820032334390941e8deccd370a023a96abb393808e39c7e0855efb5b4987c8 + checksum: 10/cb7ff9d01dc04ef23634f439ab9fe739e022cce5595cb340e01d106ed474605ce4ef50b11b47e444507d341b16650dcb3610e88944020ca6c1c38e88072d43ba languageName: node linkType: hard -"webpack-dev-middleware@npm:^5.3.1": - version: 5.3.3 - resolution: "webpack-dev-middleware@npm:5.3.3" +"webpack-dev-middleware@npm:^5.3.4": + version: 5.3.4 + resolution: "webpack-dev-middleware@npm:5.3.4" dependencies: colorette: "npm:^2.0.10" memfs: "npm:^3.4.3" @@ -17173,13 +18560,13 @@ __metadata: schema-utils: "npm:^4.0.0" peerDependencies: webpack: ^4.0.0 || ^5.0.0 - checksum: 10/31a2f7a11e58a76bdcde1eb8da310b6643844d9b442f9916f48be5b46c103f23490c393c32a9af501ce68226fbb018b811f5a956635ed60a03f9481a4bcd6c76 + checksum: 10/3004374130f31c2910da39b80e24296009653bb11caa0b8449d962b67e003d7e73d01fbcfda9be1f1f04179f66a9c39f4caf7963df54303b430e39ba5a94f7c2 languageName: node linkType: hard "webpack-dev-server@npm:^4.9.3": - version: 4.15.1 - resolution: "webpack-dev-server@npm:4.15.1" + version: 4.15.2 + resolution: "webpack-dev-server@npm:4.15.2" dependencies: "@types/bonjour": "npm:^3.5.9" "@types/connect-history-api-fallback": "npm:^1.3.5" @@ -17209,7 +18596,7 @@ __metadata: serve-index: "npm:^1.9.1" sockjs: "npm:^0.3.24" spdy: "npm:^4.0.2" - webpack-dev-middleware: "npm:^5.3.1" + webpack-dev-middleware: "npm:^5.3.4" ws: "npm:^8.13.0" peerDependencies: webpack: ^4.37.0 || ^5.0.0 @@ -17220,61 +18607,63 @@ __metadata: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: 10/fd6dfb6c71eb94696b21930ea4c2f25e95ba85fac1bbc15aa5d03af0a90712eba057901fa9131ed3e901665c95b2379208279aca61e9c48e7cda276c3caa95dd + checksum: 10/86ca4fb49d2a264243b2284c6027a9a91fd7d47737bbb4096e873be8a3f8493a9577b1535d7cc84de1ee991da7da97686c85788ccac547b0f5cf5c7686aacee9 languageName: node linkType: hard "webpack-merge@npm:^5.8.0": - version: 5.9.0 - resolution: "webpack-merge@npm:5.9.0" + version: 5.10.0 + resolution: "webpack-merge@npm:5.10.0" dependencies: clone-deep: "npm:^4.0.1" + flat: "npm:^5.0.2" wildcard: "npm:^2.0.0" - checksum: 10/d23dd1f0bad0b9821bf58443d2d29097d65cd9353046c2d8a6d7b57877ec19cf64be57cc7ef2a371a15cf9264fe6eaf8dea4015dc87487e664ffab2a28329d56 + checksum: 10/fa46ab200f17d06c7cb49fc37ad91f15769753953c9724adac1061fa305a2a223cb37c3ed25a5f501580c91f11a0800990fe3814c70a77bf1aa5b3fca45a2ac6 languageName: node linkType: hard -"webpack-sources@npm:^3.2.2, webpack-sources@npm:^3.2.3": - version: 3.2.3 - resolution: "webpack-sources@npm:3.2.3" - checksum: 10/a661f41795d678b7526ae8a88cd1b3d8ce71a7d19b6503da8149b2e667fc7a12f9b899041c1665d39e38245ed3a59ab68de648ea31040c3829aa695a5a45211d +"webpack-sources@npm:^3.2.2, webpack-sources@npm:^3.3.4": + version: 3.3.4 + resolution: "webpack-sources@npm:3.3.4" + checksum: 10/714427b235b04c2d7cf229f204b9e65145ea3643da3c7b139ebfa8a51056238d1e3a2a47c3cc3fc8eab71ed4300f66405cdc7cff29cd2f7f6b71086252f81cf1 languageName: node linkType: hard "webpack@npm:^5.73.0": - version: 5.88.2 - resolution: "webpack@npm:5.88.2" - dependencies: - "@types/eslint-scope": "npm:^3.7.3" - "@types/estree": "npm:^1.0.0" - "@webassemblyjs/ast": "npm:^1.11.5" - "@webassemblyjs/wasm-edit": "npm:^1.11.5" - "@webassemblyjs/wasm-parser": "npm:^1.11.5" - acorn: "npm:^8.7.1" - acorn-import-assertions: "npm:^1.9.0" - browserslist: "npm:^4.14.5" + version: 5.105.4 + resolution: "webpack@npm:5.105.4" + dependencies: + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.8" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.16.0" + acorn-import-phases: "npm:^1.0.3" + browserslist: "npm:^4.28.1" chrome-trace-event: "npm:^1.0.2" - enhanced-resolve: "npm:^5.15.0" - es-module-lexer: "npm:^1.2.1" + enhanced-resolve: "npm:^5.20.0" + es-module-lexer: "npm:^2.0.0" eslint-scope: "npm:5.1.1" events: "npm:^3.2.0" glob-to-regexp: "npm:^0.4.1" - graceful-fs: "npm:^4.2.9" + graceful-fs: "npm:^4.2.11" json-parse-even-better-errors: "npm:^2.3.1" - loader-runner: "npm:^4.2.0" + loader-runner: "npm:^4.3.1" mime-types: "npm:^2.1.27" neo-async: "npm:^2.6.2" - schema-utils: "npm:^3.2.0" - tapable: "npm:^2.1.1" - terser-webpack-plugin: "npm:^5.3.7" - watchpack: "npm:^2.4.0" - webpack-sources: "npm:^3.2.3" + schema-utils: "npm:^4.3.3" + tapable: "npm:^2.3.0" + terser-webpack-plugin: "npm:^5.3.17" + watchpack: "npm:^2.5.1" + webpack-sources: "npm:^3.3.4" peerDependenciesMeta: webpack-cli: optional: true bin: webpack: bin/webpack.js - checksum: 10/2b26158f091df1d97b85ed8b9c374c673ee91de41e13579a3d5abb76f48fda0e2fe592541e58a96e2630d5bce18d885ce605f6ae767d7e0bc2b5ce3b700a51f0 + checksum: 10/ae8088dd1c995fa17b920009f864138297a9ea5089bc563601f661fa4a31bb24b000cc91ae122168ce9def79c49258b8aa1021c2754c3555205c29a0d6c9cc8d languageName: node linkType: hard @@ -17319,6 +18708,15 @@ __metadata: languageName: node linkType: hard +"whatwg-encoding@npm:^3.1.1": + version: 3.1.1 + resolution: "whatwg-encoding@npm:3.1.1" + dependencies: + iconv-lite: "npm:0.6.3" + checksum: 10/bbef815eb67f91487c7f2ef96329743f5fd8357d7d62b1119237d25d41c7e452dff8197235b2d3c031365a17f61d3bb73ca49d0ed1582475aa4a670815e79534 + languageName: node + linkType: hard + "whatwg-fetch@npm:2.0.4": version: 2.0.4 resolution: "whatwg-fetch@npm:2.0.4" @@ -17333,6 +18731,13 @@ __metadata: languageName: node linkType: hard +"whatwg-mimetype@npm:^4.0.0": + version: 4.0.0 + resolution: "whatwg-mimetype@npm:4.0.0" + checksum: 10/894a618e2d90bf444b6f309f3ceb6e58cf21b2beaa00c8b333696958c4076f0c7b30b9d33413c9ffff7c5832a0a0c8569e5bb347ef44beded72aeefd0acd62e8 + languageName: node + linkType: hard + "whatwg-url@npm:^10.0.0": version: 10.0.0 resolution: "whatwg-url@npm:10.0.0" @@ -17363,61 +18768,64 @@ __metadata: languageName: node linkType: hard -"which-boxed-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "which-boxed-primitive@npm:1.0.2" +"which-boxed-primitive@npm:^1.0.2, which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": + version: 1.1.1 + resolution: "which-boxed-primitive@npm:1.1.1" dependencies: - is-bigint: "npm:^1.0.1" - is-boolean-object: "npm:^1.1.0" - is-number-object: "npm:^1.0.4" - is-string: "npm:^1.0.5" - is-symbol: "npm:^1.0.3" - checksum: 10/9c7ca7855255f25ac47f4ce8b59c4cc33629e713fd7a165c9d77a2bb47bf3d9655a5664660c70337a3221cf96742f3589fae15a3a33639908d33e29aa2941efb + is-bigint: "npm:^1.1.0" + is-boolean-object: "npm:^1.2.1" + is-number-object: "npm:^1.1.1" + is-string: "npm:^1.1.1" + is-symbol: "npm:^1.1.1" + checksum: 10/a877c0667bc089518c83ad4d845cf8296b03efe3565c1de1940c646e00a2a1ae9ed8a185bcfa27cbf352de7906f0616d83b9d2f19ca500ee02a551fb5cf40740 languageName: node linkType: hard -"which-builtin-type@npm:^1.1.3": - version: 1.1.3 - resolution: "which-builtin-type@npm:1.1.3" +"which-builtin-type@npm:^1.2.1": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" dependencies: - function.prototype.name: "npm:^1.1.5" - has-tostringtag: "npm:^1.0.0" + call-bound: "npm:^1.0.2" + function.prototype.name: "npm:^1.1.6" + has-tostringtag: "npm:^1.0.2" is-async-function: "npm:^2.0.0" - is-date-object: "npm:^1.0.5" - is-finalizationregistry: "npm:^1.0.2" + is-date-object: "npm:^1.1.0" + is-finalizationregistry: "npm:^1.1.0" is-generator-function: "npm:^1.0.10" - is-regex: "npm:^1.1.4" + is-regex: "npm:^1.2.1" is-weakref: "npm:^1.0.2" isarray: "npm:^2.0.5" - which-boxed-primitive: "npm:^1.0.2" - which-collection: "npm:^1.0.1" - which-typed-array: "npm:^1.1.9" - checksum: 10/d7823c4a6aa4fc8183eb572edd9f9ee2751e5f3ba2ccd5b298cc163f720df0f02ee1a5291d18ca8a41d48144ef40007ff6a64e6f5e7c506527086c7513a5f673 + which-boxed-primitive: "npm:^1.1.0" + which-collection: "npm:^1.0.2" + which-typed-array: "npm:^1.1.16" + checksum: 10/22c81c5cb7a896c5171742cd30c90d992ff13fb1ea7693e6cf80af077791613fb3f89aa9b4b7f890bd47b6ce09c6322c409932359580a2a2a54057f7b52d1cbe languageName: node linkType: hard -"which-collection@npm:^1.0.1": - version: 1.0.1 - resolution: "which-collection@npm:1.0.1" +"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" dependencies: - is-map: "npm:^2.0.1" - is-set: "npm:^2.0.1" - is-weakmap: "npm:^2.0.1" - is-weakset: "npm:^2.0.1" - checksum: 10/85c95fcf92df7972ce66bed879e53d9dc752a30ef08e1ca4696df56bcf1c302e3b9965a39b04a20fa280a997fad6c170eb0b4d62435569b7f6c0bc7be910572b + is-map: "npm:^2.0.3" + is-set: "npm:^2.0.3" + is-weakmap: "npm:^2.0.2" + is-weakset: "npm:^2.0.3" + checksum: 10/674bf659b9bcfe4055f08634b48a8588e879161b9fefed57e9ec4ff5601e4d50a05ccd76cf10f698ef5873784e5df3223336d56c7ce88e13bcf52ebe582fc8d7 languageName: node linkType: hard -"which-typed-array@npm:^1.1.10, which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.9": - version: 1.1.11 - resolution: "which-typed-array@npm:1.1.11" +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19": + version: 1.1.20 + resolution: "which-typed-array@npm:1.1.20" dependencies: - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.2" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.0" - checksum: 10/bc9e8690e71d6c64893c9d88a7daca33af45918861003013faf77574a6a49cc6194d32ca7826e90de341d2f9ef3ac9e3acbe332a8ae73cadf07f59b9c6c6ecad + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + for-each: "npm:^0.3.5" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + checksum: 10/e56da3fc995d330ff012f682476f7883c16b12d36c6717c87c7ca23eb5a5ef957fa89115dacb389b11a9b4e99d5dbe2d12689b4d5d08c050b5aed0eae385b840 languageName: node linkType: hard @@ -17479,7 +18887,14 @@ __metadata: languageName: node linkType: hard -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10/1ec6f6089f205f83037be10d0c4b34c9183b0b63fca0834a5b3cee55dd321429d73d40bb44c8fc8471b5203d6e8f8275717f49a8ff4b2b0ab41d7e1b563e0854 + languageName: node + linkType: hard + +"wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -17490,7 +18905,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": +"wrap-ansi@npm:^8.0.1": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" dependencies: @@ -17531,8 +18946,8 @@ __metadata: linkType: hard "ws@npm:^7.3.1": - version: 7.5.9 - resolution: "ws@npm:7.5.9" + version: 7.5.10 + resolution: "ws@npm:7.5.10" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -17541,13 +18956,13 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10/171e35012934bd8788150a7f46f963e50bac43a4dc524ee714c20f258693ac4d3ba2abadb00838fdac42a47af9e958c7ae7e6f4bc56db047ba897b8a2268cf7c + checksum: 10/9c796b84ba80ffc2c2adcdfc9c8e9a219ba99caa435c9a8d45f9ac593bba325563b3f83edc5eb067cc6d21b9a6bf2c930adf76dd40af5f58a5ca6859e81858f0 languageName: node linkType: hard "ws@npm:^8.13.0, ws@npm:^8.2.3": - version: 8.13.0 - resolution: "ws@npm:8.13.0" + version: 8.19.0 + resolution: "ws@npm:8.19.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -17556,7 +18971,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10/1769532b6fdab9ff659f0b17810e7501831d34ecca23fd179ee64091dd93a51f42c59f6c7bb4c7a384b6c229aca8076fb312aa35626257c18081511ef62a161d + checksum: 10/26e4901e93abaf73af9f26a93707c95b4845e91a7a347ec8c569e6e9be7f9df066f6c2b817b2d685544e208207898a750b78461e6e8d810c11a370771450c31b languageName: node linkType: hard @@ -17641,15 +19056,6 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.3.4": - version: 2.4.1 - resolution: "yaml@npm:2.4.1" - bin: - yaml: bin.mjs - checksum: 10/2c54fd69ef59126758ae710f9756405a7d41abcbb61aca894250d0e81e76057c14dc9bb00a9528f72f99b8f24077f694a6f7fd09cdd6711fcec2eebfbb5df409 - languageName: node - linkType: hard - "yargs-parser@npm:^20.2.2": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" From 7888efbb3d162b2eaeead21b319a2a21ba82199c Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 21:54:11 +0000 Subject: [PATCH 52/60] docs: refine introduction and comparison pages for orchestrator - Reposition orchestrator as advanced layer on top of unity-builder - Emphasize benefits for projects of any size, not just large ones - Add self-hosted runner complementarity (failover, load balancing) - Expand "What Orchestrator Handles" with full lifecycle details - Add "Choosing Your Setup" decision matrix to comparison page Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 99 ++++++++++++------- .../02-game-ci-vs-orchestrator.mdx | 46 ++++++--- 2 files changed, 92 insertions(+), 53 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index a9560dc3..f99c2a6f 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -2,76 +2,101 @@ ## What Does Orchestrator Do? -**Orchestrator runs Unity builds on cloud infrastructure.** Start jobs from GitHub Actions, the -command line, or any CI system. Orchestrator provisions a cloud environment, sends your project to -be built, and streams results back. +**Orchestrator is an advanced build layer on top of +[Game CI unity-builder](../docker/01-getting-started.mdx).** It dispatches Unity builds to cloud +infrastructure, self-hosted runners, or local Docker containers instead of running them directly on +your CI runner. Start jobs from GitHub Actions, the command line, or any CI system. Orchestrator +provisions the environment, syncs your project, runs the build, and streams results back. ```mermaid flowchart LR - subgraph local["Your Machine / CI"] - A["GitHub Actions\nGitLab CI\nCLI, etc."] + subgraph trigger["Trigger"] + A["GitHub Actions\nGitLab CI\nCLI"] end - subgraph cloud["Cloud Provider"] - B["AWS Fargate\nKubernetes\nLocal Docker"] + subgraph orchestrator["Orchestrator"] + B["Provision\nSync\nCache\nBuild\nCleanup"] end - A -- "git push" --> B - B -- "build artifacts" --> A - - subgraph handles["Orchestrator handles"] - direction TB - C["Provisioning"] - D["Git sync + LFS"] - E["Caching (S3 / rclone)"] - F["Automatic cleanup"] + subgraph target["Build Target"] + C["AWS Fargate\nKubernetes\nLocal Docker\nSelf-Hosted"] end + A --> B --> C + C -- "artifacts + logs" --> A ``` -Orchestrator supports large projects with first-class Unity support and native cloud services like -AWS Fargate and Kubernetes. - :::info Standalone Package The orchestrator is available as a standalone package [`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator). When installed, unity-builder -automatically detects and loads it via the plugin interface. +automatically detects and loads it via the plugin interface. It can also be used independently from +the command line. ::: -## ✅ Why Orchestrator? +## Why Orchestrator? + +Orchestrator benefits projects of any size. Even small projects gain access to configurable +resources, caching, and cost-efficient scaling. Larger projects get retained workspaces, automatic +failover, and multi-provider load balancing. + +| Benefit | What it means | +| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| **Configurable resources** | Set CPU, memory, and disk per build instead of accepting CI runner defaults | +| **Scale from zero** | No idle servers. Cloud providers provision on demand and tear down when done | +| **Retained workspaces** | Cache the entire project folder across builds for faster rebuilds on large projects | +| **Automatic caching** | Unity Library, LFS objects, and build output cached to S3 or 70+ backends via rclone | +| **Provider failover** | Automatically route to a fallback provider when the primary is unavailable or overloaded | +| **Extensible** | Run [custom hooks](advanced-topics/hooks/container-hooks), middleware, or your own [provider plugin](providers/custom-providers) | +| **Self-hosted friendly** | Complements self-hosted runners with automatic fallback, load balancing, and runner availability checks | + +## When You Might Not Need It + +- Your project fits comfortably on standard GitHub runners and you don't need caching, hooks, or + custom resources +- You already have a fully managed build pipeline that meets your needs + +See [Standard Game-CI vs Orchestrator](game-ci-vs-orchestrator) for a detailed comparison. -1. **Flexible and elastic** - balance speed and cost, configure CPU, memory, and disk per build -2. **Scale from zero** - no idle servers, pay only while builds run -3. **Easy setup** - minimal configuration to [get started](getting-started) -4. **Extensible** - run [custom hooks](advanced-topics/hooks/container-hooks), or bring your own - [provider plugin](providers/custom-providers) +## What Orchestrator Handles -## ❌ When You Don't Need It +Orchestrator manages the full build lifecycle so you don't have to script it yourself: -- Your project is under 5 GB - standard GitHub runners should work fine -- You have dedicated build servers already running +- **Provisioning** - creates cloud resources (CloudFormation stacks, Kubernetes jobs, Docker + containers) and tears them down after the build +- **Git sync** - clones your repo with configurable depth, pulls LFS objects, initializes + submodules, and handles SSH/HTTP auth +- **Caching** - persists the Unity Library folder, LFS objects, and build output across builds using + S3 or rclone +- **Hooks** - inject custom containers or shell commands at any point in the build lifecycle with + phase, provider, and platform filtering +- **Secrets** - pulls secrets from AWS Secrets Manager, GCP Secret Manager, Azure Key Vault, or + HashiCorp Vault and injects them as environment variables +- **Logging** - streams structured build logs in real-time via Kinesis (AWS), kubectl (K8s), or + stdout (local) +- **Cleanup** - removes cloud resources, temporary files, and expired caches automatically -## 📦 Supported Providers +## Supported Providers -| Cloud Provider | Description | +| Provider | Description | | -------------------------------------- | -------------------------------------------------------- | | [AWS Fargate](providers/aws) | Fully managed containers on AWS. No servers to maintain. | | [Kubernetes](providers/kubernetes) | Run on any Kubernetes cluster. | | [Local Docker](providers/local-docker) | Docker containers on the local machine. | | [Local](providers/local) | Direct execution on the host machine. | -See [Providers](providers/overview) for the full list including [custom](providers/custom-providers) -and [community](providers/community-providers) providers. +See [Providers](providers/overview) for the full list including +[GCP Cloud Run](providers/gcp-cloud-run), [Azure ACI](providers/azure-aci), +[custom](providers/custom-providers), and [community](providers/community-providers) providers. -## 🖥️ Supported Platforms +## Supported Platforms | Platform | Description | | ---------------------------------------------- | ------------------------------------- | -| [GitHub Actions](providers/github-integration) | First-class support with Checks. | -| [GitLab CI](providers/gitlab-integration) | Via the Command Line mode. | +| [GitHub Actions](providers/github-integration) | First-class support with Checks API. | +| [GitLab CI](providers/gitlab-integration) | Via the command line mode. | | [Command Line](examples/command-line) | Run from any terminal or script. | | Any CI system | Anything that can run shell commands. | -## 🔗 External Links +## External Links - [Orchestrator Repository](https://github.com/game-ci/orchestrator) - standalone orchestrator package diff --git a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx index a07fc0a5..29d2c2ef 100644 --- a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx +++ b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx @@ -4,21 +4,23 @@ sidebar_label: Game-CI vs Orchestrator # Standard Game-CI vs Orchestrator Mode -## 🎮 Standard Game-CI +## Standard Game-CI Game CI provides Docker images and GitHub Actions for running Unity workflows on the build server resources provided by your CI platform (GitHub, GitLab, Circle CI). -**Best for:** Small to medium projects that fit within GitHub's resource limits. +**Best for:** Projects that fit within your CI runner's resource limits and don't need advanced +caching, hooks, or multi-provider routing. -## ☁️ Orchestrator Mode +## Orchestrator Mode -Orchestrator sends builds to cloud infrastructure (AWS Fargate, Kubernetes) instead of running on -the CI runner itself. This is useful when: +Orchestrator is an advanced layer on top of Game CI. It dispatches builds to cloud infrastructure +(AWS Fargate, Kubernetes), local Docker containers, or self-hosted runners, and manages the full +build lifecycle: provisioning, git sync, caching, hooks, and cleanup. -- Your project **exceeds disk space limits** on GitHub-hosted runners -- You need **more CPU or memory** than the CI platform provides -- You want to **scale to many concurrent builds** without managing servers +Projects of any size can benefit from orchestrator features like configurable resources, automatic +caching, and extensible hooks. Larger projects additionally benefit from retained workspaces, +provider failover, and load balancing. ```mermaid flowchart LR @@ -32,13 +34,25 @@ flowchart LR end ``` -## Self-Hosted Runners vs Orchestrator +## Self-Hosted Runners + Orchestrator -Both options let you build larger projects. Here's when to pick which: +Self-hosted runners and orchestrator are not mutually exclusive. Orchestrator **complements** +self-hosted runners by adding automatic failover, load balancing, and runner availability checks. -| | Self-Hosted Runners | Orchestrator | -| --------------- | ---------------------------------- | ------------------------------------- | -| **Setup** | Requires a dedicated server | Cloud account + credentials | -| **Maintenance** | You manage the server 24/7 | Fully managed, no servers to maintain | -| **Cost model** | Fixed (server always running) | Pay per build (scales to zero) | -| **Best for** | Teams with existing infrastructure | Teams without dedicated servers | +| | Self-Hosted Runners Alone | Self-Hosted + Orchestrator | +| ------------------ | ----------------------------------- | ------------------------------------------------------ | +| **Failover** | Manual intervention if server fails | Automatic fallback to cloud when runner is unavailable | +| **Load balancing** | Fixed capacity | Overflow to cloud during peak demand | +| **Caching** | Local disk only | S3/rclone-backed caching with retained workspaces | +| **Hooks** | Custom scripting | Built-in middleware pipeline with lifecycle hooks | +| **Maintenance** | You manage everything | Orchestrator handles provisioning, sync, and cleanup | + +## Choosing Your Setup + +| Scenario | Recommendation | +| ---------------------------------------------- | ----------------------------------------------------------------- | +| Small project, standard runners work fine | Standard Game-CI | +| Need configurable resources or caching | Orchestrator with any provider | +| Large project, no existing servers | Orchestrator with AWS Fargate or Kubernetes | +| Existing self-hosted runners, want reliability | Orchestrator with self-hosted primary + cloud fallback | +| Want to test orchestrator locally before cloud | Orchestrator with [Local Docker](providers/local-docker) provider | From cb9f0f5cf4c3dcbfc933feba775ba5d798e9ec33 Mon Sep 17 00:00:00 2001 From: frostebite Date: Tue, 10 Mar 2026 22:00:58 +0000 Subject: [PATCH 53/60] fix: resolve cytoscape webpack export error and broken doc link - Add webpack alias to redirect cytoscape UMD import to CJS bundle - Fix broken markdown link to unity-builder (use GitHub URL) Co-Authored-By: Claude Opus 4.6 --- .../03-github-orchestrator/01-introduction.mdx | 9 +++++---- docusaurus.config.js | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index f99c2a6f..9b32e702 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -3,10 +3,11 @@ ## What Does Orchestrator Do? **Orchestrator is an advanced build layer on top of -[Game CI unity-builder](../docker/01-getting-started.mdx).** It dispatches Unity builds to cloud -infrastructure, self-hosted runners, or local Docker containers instead of running them directly on -your CI runner. Start jobs from GitHub Actions, the command line, or any CI system. Orchestrator -provisions the environment, syncs your project, runs the build, and streams results back. +[Game CI unity-builder](https://github.com/game-ci/unity-builder).** It dispatches Unity builds to +cloud infrastructure, self-hosted runners, or local Docker containers instead of running them +directly on your CI runner. Start jobs from GitHub Actions, the command line, or any CI system. +Orchestrator provisions the environment, syncs your project, runs the build, and streams results +back. ```mermaid flowchart LR diff --git a/docusaurus.config.js b/docusaurus.config.js index 665579b0..e32eee4c 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -42,6 +42,24 @@ const config = { }, }; }, + function cytoscapeWebpackFix() { + return { + name: 'cytoscape-webpack-fix', + configureWebpack() { + return { + resolve: { + alias: { + // cytoscape 3.33+ only exports UMD under "require" condition, + // but mermaid imports it in a webpack "import" context. + 'cytoscape/dist/cytoscape.umd.js': require.resolve( + 'cytoscape/dist/cytoscape.cjs.js', + ), + }, + }, + }; + }, + }; + }, ], presets: [ From e02299e20d57164e54ca64f43ffb1e8363fcccc1 Mon Sep 17 00:00:00 2001 From: frostebite Date: Wed, 11 Mar 2026 00:14:22 +0000 Subject: [PATCH 54/60] fix: remove npm install step, add missing providers to overview - Remove bogus npm install step from getting-started (orchestrator is built into unity-builder, no separate install needed) - Add dispatch, experimental, and additional providers to overview page - Clarify orchestrator is built-in and activates via providerStrategy Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 9 +++--- .../02-getting-started.mdx | 32 +++++++------------ .../05-providers/01-overview.mdx | 19 +++++++++++ 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 9b32e702..95cb389e 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -24,12 +24,11 @@ flowchart LR C -- "artifacts + logs" --> A ``` -:::info Standalone Package +:::info Built-in and Standalone -The orchestrator is available as a standalone package -[`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator). When installed, unity-builder -automatically detects and loads it via the plugin interface. It can also be used independently from -the command line. +The orchestrator is built into [`game-ci/unity-builder`](https://github.com/game-ci/unity-builder) +and activates automatically when you set `providerStrategy`. It is also available as a +[standalone CLI](https://github.com/game-ci/orchestrator) for use outside GitHub Actions. ::: diff --git a/docs/03-github-orchestrator/02-getting-started.mdx b/docs/03-github-orchestrator/02-getting-started.mdx index c5bc3ba4..950024cb 100644 --- a/docs/03-github-orchestrator/02-getting-started.mdx +++ b/docs/03-github-orchestrator/02-getting-started.mdx @@ -1,33 +1,24 @@ # Getting Started -Orchestrator lets you run Unity builds on remote cloud infrastructure instead of GitHub-hosted -runners. This is useful for large projects that exceed GitHub's disk or resource limits. - -The orchestrator is distributed as a standalone package -([`@game-ci/orchestrator`](https://github.com/game-ci/orchestrator)). It can be used from GitHub -Actions (via `game-ci/unity-builder`) or directly from the command line. +Orchestrator lets you run Unity builds on cloud infrastructure, self-hosted runners, or local Docker +containers. It works as a built-in plugin for `game-ci/unity-builder` in GitHub Actions, or as a +standalone CLI tool. ## Prerequisites - A Unity project -- A cloud provider account (AWS or a Kubernetes cluster) +- A cloud provider account (AWS or a Kubernetes cluster) or Docker installed locally - Provider credentials (as GitHub secrets or environment variables) ## GitHub Actions -### 1. Install the orchestrator +When you set `providerStrategy` in `game-ci/unity-builder`, the orchestrator activates +automatically. No separate install step is needed. -Add a step before `unity-builder` to install the orchestrator package: +### Basic example ```yaml -- name: Install orchestrator - run: npm install -g @game-ci/orchestrator -``` - -### 2. Run the build - -```yaml -- uses: game-ci/unity-builder@main +- uses: game-ci/unity-builder@v4 with: providerStrategy: aws targetPlatform: StandaloneLinux64 @@ -46,10 +37,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install orchestrator - run: npm install -g @game-ci/orchestrator - - - uses: game-ci/unity-builder@main + - uses: game-ci/unity-builder@v4 env: UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} @@ -98,6 +86,8 @@ See the [CLI documentation](cli/getting-started) for full details. | [Kubernetes](providers/kubernetes) | Existing K8s clusters | | [Local Docker](providers/local-docker) | Testing locally before cloud | +See [Providers](providers/overview) for the full list. + ## Next Steps - [Provider setup guides](providers/overview) - configure your cloud credentials diff --git a/docs/03-github-orchestrator/05-providers/01-overview.mdx b/docs/03-github-orchestrator/05-providers/01-overview.mdx index b32a1827..dd83efcb 100644 --- a/docs/03-github-orchestrator/05-providers/01-overview.mdx +++ b/docs/03-github-orchestrator/05-providers/01-overview.mdx @@ -29,6 +29,25 @@ Each provider has its own page with setup instructions: - [Local Docker](local-docker) - [Local](local) +## Dispatch Providers + +Route builds to external CI systems instead of running them directly. + +- [GitHub Actions Dispatch](github-actions-dispatch) - trigger a GitHub Actions workflow +- [GitLab CI Dispatch](gitlab-ci-dispatch) - trigger a GitLab CI pipeline + +## Experimental Providers + +These providers are under active development. APIs and behavior may change between releases. + +- [GCP Cloud Run](gcp-cloud-run) - serverless containers on Google Cloud +- [Azure ACI](azure-aci) - serverless containers on Azure + +## Additional Providers + +- [Ansible](ansible) - provision and run builds via Ansible playbooks +- [Remote PowerShell](remote-powershell) - execute builds on remote Windows machines + ## Custom Providers Extend Orchestrator with your own provider by pointing `providerStrategy` at a GitHub repository, From 0b722a603595fe82f3f47738fab151c96f21ddbe Mon Sep 17 00:00:00 2001 From: frostebite Date: Thu, 12 Mar 2026 16:55:43 +0000 Subject: [PATCH 55/60] docs: improve test workflow engine taxonomy framing Replace "Adolescent" maturity label with "Stable" for clearer terminology. Rename "Built-in Dimensions" to "Example Dimensions" and add extensibility note to emphasize the taxonomy is a starting point that projects can fully customize. Co-Authored-By: Claude Opus 4.6 --- .../11-test-workflow-engine.mdx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx index 4e289a51..3ba0c464 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx @@ -34,7 +34,7 @@ runs: editMode: true playMode: true filters: - Maturity: Trusted,Adolescent + Maturity: Trusted,Stable Scope: Unit,Integration,System timeout: 600 @@ -72,12 +72,15 @@ runs: Tests are categorized by multi-dimensional taxonomy metadata. Filters select tests by matching against these dimensions: -### Built-in Dimensions +### Example Dimensions + +The dimensions below are provided as a starting point. Projects can rename, remove, or replace +any of these, and add entirely new dimensions — the taxonomy system is fully extensible. | Dimension | Values | Description | | -------------- | ------------------------------------- | ----------------------------- | | Scope | Unit, Integration, System, End To End | Test boundary | -| Maturity | Trusted, Adolescent, Experimental | Test reliability | +| Maturity | Trusted, Stable, Experimental | Test reliability | | FeedbackSpeed | Fast, Moderate, Slow | Expected execution time | | Execution | Synchronous, Asynchronous, Coroutine | Execution model | | Rigor | Strict, Normal, Relaxed | Assertion strictness | @@ -91,13 +94,14 @@ Filters accept comma-separated values, regex patterns, and hierarchical dot-nota ```yaml filters: Scope: Unit,Integration # Match any of these values - Maturity: /Trusted|Adolescent/ # Regex pattern + Maturity: /Trusted|Stable/ # Regex pattern Domain: Combat.Melee # Hierarchical match ``` -### Custom Dimensions +### Defining Your Own Dimensions -Projects can define additional taxonomy dimensions via a taxonomy definition file: +Projects can define their own taxonomy dimensions (or override the examples above) via a +taxonomy definition file: ```yaml # .game-ci/taxonomy.yml From c3c866c98cd73187e2aea18f53a4f45e6caef37f Mon Sep 17 00:00:00 2001 From: frostebite Date: Sat, 14 Mar 2026 03:59:22 +0000 Subject: [PATCH 56/60] docs: document engine plugin system for game-engine agnostic orchestration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add documentation for the new EnginePlugin interface that allows the orchestrator to support non-Unity engines (Godot, Unreal, custom). - New page: Advanced Topics > Engine Plugins — full guide covering the interface, plugin sources (npm, CLI, Docker), and authoring plugins - Updated introduction to mention engine agnosticism - Updated caching page to reference engine-aware cache folders - Added engine/enginePlugin to API reference parameters - Added --engine and --engine-plugin to CLI build command docs Co-Authored-By: Claude Opus 4.6 --- .../01-introduction.mdx | 13 +- .../05-api-reference.mdx | 7 + .../07-advanced-topics/01-caching.mdx | 5 +- .../07-advanced-topics/18-engine-plugins.mdx | 203 ++++++++++++++++++ .../08-cli/02-build-command.mdx | 18 ++ 5 files changed, 239 insertions(+), 7 deletions(-) create mode 100644 docs/03-github-orchestrator/07-advanced-topics/18-engine-plugins.mdx diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 95cb389e..06246867 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -3,11 +3,13 @@ ## What Does Orchestrator Do? **Orchestrator is an advanced build layer on top of -[Game CI unity-builder](https://github.com/game-ci/unity-builder).** It dispatches Unity builds to -cloud infrastructure, self-hosted runners, or local Docker containers instead of running them -directly on your CI runner. Start jobs from GitHub Actions, the command line, or any CI system. -Orchestrator provisions the environment, syncs your project, runs the build, and streams results -back. +[Game CI unity-builder](https://github.com/game-ci/unity-builder).** It dispatches builds to cloud +infrastructure, self-hosted runners, or local Docker containers instead of running them directly on +your CI runner. While Unity is the built-in default, Orchestrator is engine agnostic — Godot, +Unreal, and custom engines can plug in via the +[engine plugin system](advanced-topics/engine-plugins). Start jobs from GitHub Actions, the command +line, or any CI system. Orchestrator provisions the environment, syncs your project, runs the build, +and streams results back. ```mermaid flowchart LR @@ -46,6 +48,7 @@ failover, and multi-provider load balancing. | **Automatic caching** | Unity Library, LFS objects, and build output cached to S3 or 70+ backends via rclone | | **Provider failover** | Automatically route to a fallback provider when the primary is unavailable or overloaded | | **Extensible** | Run [custom hooks](advanced-topics/hooks/container-hooks), middleware, or your own [provider plugin](providers/custom-providers) | +| **Engine agnostic** | Built-in Unity support with a plugin system for [other engines](advanced-topics/engine-plugins) (Godot, Unreal, custom) | | **Self-hosted friendly** | Complements self-hosted runners with automatic fallback, load balancing, and runner availability checks | ## When You Might Not Need It diff --git a/docs/03-github-orchestrator/05-api-reference.mdx b/docs/03-github-orchestrator/05-api-reference.mdx index d2d5638f..ab19fdbf 100644 --- a/docs/03-github-orchestrator/05-api-reference.mdx +++ b/docs/03-github-orchestrator/05-api-reference.mdx @@ -39,6 +39,13 @@ Set the mode to control what Orchestrator does. Default: `cli-build`. | `orchestratorBranch` | `main` | Release branch of Orchestrator for remote containers. Use `orchestrator-develop` for latest development builds. | | `orchestratorRepoName` | `game-ci/unity-builder` | Repository for Orchestrator source. Override to use a fork for testing or custom builds. | +### Engine + +| Parameter | Default | Description | +| -------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `engine` | `unity` | Game engine name. Built-in: `unity`. Other engines require `enginePlugin`. | +| `enginePlugin` | - | Engine plugin source. NPM package, `cli:`, or `docker:`. See [Engine Plugins](advanced-topics/engine-plugins) for details and source formats. | + ### Git Synchronization | Parameter | Default | Description | diff --git a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx index a1d4ae14..c121d85f 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/01-caching.mdx @@ -16,8 +16,9 @@ flowchart LR ## Standard Caching -Caches only the Unity **Library** folder and **LFS** files between builds. Uses less storage but -requires re-importing unchanged assets. +Caches the engine's asset folders and **LFS** files between builds. For Unity this is the `Library` +folder. For other engines, the cached folders are defined by the [engine plugin](engine-plugins) +(e.g. `.godot/imported` for Godot). Uses less storage but requires re-importing unchanged assets. - ✅ Minimum storage cost - ✅ Best for smaller projects diff --git a/docs/03-github-orchestrator/07-advanced-topics/18-engine-plugins.mdx b/docs/03-github-orchestrator/07-advanced-topics/18-engine-plugins.mdx new file mode 100644 index 00000000..e0d5d0df --- /dev/null +++ b/docs/03-github-orchestrator/07-advanced-topics/18-engine-plugins.mdx @@ -0,0 +1,203 @@ +--- +sidebar_position: 18 +--- + +# Engine Plugins + +Orchestrator is game-engine agnostic. While Unity is the built-in default, you can plug in any game +engine — Godot, Unreal, a custom engine, or anything else — without forking the orchestrator. + +An **engine plugin** tells the orchestrator how to handle engine-specific concerns like cache +folders and container lifecycle hooks. Everything else (provisioning, git sync, logging, hooks, +secrets) works the same regardless of engine. + +## How It Works + +The orchestrator only needs to know two things about your engine: + +1. **Which folders to cache** between builds (e.g. `Library` for Unity, `.godot/imported` for Godot) +2. **What to run on container shutdown** (e.g. Unity needs to return its license) + +That's the entire `EnginePlugin` interface: + +```typescript +interface EnginePlugin { + name: string; // 'unity', 'godot', 'unreal', etc. + cacheFolders: string[]; // folders to cache, relative to project root + preStopCommand?: string; // shell command for container shutdown (optional) +} +``` + +## Built-in: Unity + +Unity is the default engine plugin. When you don't specify `--engine` or `--engine-plugin`, the +orchestrator behaves exactly as it always has — caching the `Library` folder and returning the Unity +license on container shutdown. + +No configuration needed. Existing workflows are unchanged. + +## Using a Different Engine + +Set `engine` and `enginePlugin` to load a community or custom engine plugin: + +```yaml +# GitHub Actions +- uses: game-ci/unity-builder@v4 + with: + engine: godot + enginePlugin: '@game-ci/godot-engine' + targetPlatform: StandaloneLinux64 +``` + +```bash +# CLI +game-ci build \ + --engine godot \ + --engine-plugin @game-ci/godot-engine \ + --target-platform linux +``` + +## Plugin Sources + +Engine plugins can be loaded from three sources: + +| Source | Format | Example | +| ------------------ | -------------------------- | ----------------------------------------- | +| **NPM module** | Package name or local path | `@game-ci/godot-engine`, `./my-plugin.js` | +| **CLI executable** | `cli:` | `cli:/usr/local/bin/my-engine-plugin` | +| **Docker image** | `docker:` | `docker:gameci/godot-engine-plugin` | + +When no prefix is specified, the plugin is loaded as an NPM module. + +### NPM Module + +The simplest way to distribute an engine plugin. Publish an NPM package that exports an +`EnginePlugin` object: + +```typescript +// index.ts +export default { + name: 'godot', + cacheFolders: ['.godot/imported', '.godot/shader_cache'], +}; +``` + +Supports default export, named `plugin` export, or `module.exports`: + +```javascript +// CommonJS +module.exports = { + name: 'godot', + cacheFolders: ['.godot/imported'], +}; +``` + +Install the package in your project, then reference it: + +```yaml +enginePlugin: '@your-org/godot-engine' +``` + +Or point to a local file during development: + +```yaml +enginePlugin: './my-engine-plugin.js' +``` + +### CLI Executable + +For plugins written in any language (Go, Python, Rust, shell, etc.). The executable receives a +`get-engine-config` argument and must print a JSON config on stdout: + +```bash +$ my-engine-plugin get-engine-config +{"name": "godot", "cacheFolders": [".godot/imported"], "preStopCommand": ""} +``` + +Reference it with the `cli:` prefix: + +```yaml +enginePlugin: 'cli:/usr/local/bin/my-engine-plugin' +``` + +### Docker Image + +For containerized plugin distribution. The image is run with +`docker run --rm get-engine-config` and must print JSON config on stdout: + +```dockerfile +FROM alpine +COPY config.json /config.json +ENTRYPOINT ["sh", "-c", "cat /config.json"] +``` + +Reference it with the `docker:` prefix: + +```yaml +enginePlugin: 'docker:your-org/godot-engine-plugin' +``` + +## Writing an Engine Plugin + +To create a plugin for your engine, you need to answer two questions: + +1. **What folders should be cached?** These are directories that take a long time to regenerate but + don't change between builds. For Unity this is `Library`, for Godot it's `.godot/imported`. + +2. **Does your engine need cleanup on container shutdown?** Unity needs to return its license. Most + engines don't need anything here — just omit `preStopCommand`. + +### Example: Minimal Godot Plugin + +```typescript +export default { + name: 'godot', + cacheFolders: ['.godot/imported', '.godot/shader_cache'], +}; +``` + +### Example: Engine with License Cleanup + +```typescript +export default { + name: 'my-engine', + cacheFolders: ['Cache', 'Intermediate'], + preStopCommand: '/opt/my-engine/return-license.sh', +}; +``` + +## What the Plugin Controls + +The engine plugin **only** controls orchestrator-level behavior that varies by engine: + +| Behavior | Controlled by plugin | Notes | +| ---------------------- | -------------------- | ----------------------------------------------------- | +| Cache folders | Yes | Which project folders to persist between builds | +| Container preStop hook | Yes | Shell command run on K8s container shutdown | +| Docker image | No | Passed by the caller via `customImage` or `baseImage` | +| Build scripts | No | Owned by the builder action (e.g. unity-builder) | +| Version detection | No | Handled by the caller or builder action | +| License activation | No | Handled by the builder action's entrypoint | + +This keeps plugins minimal. A complete engine plugin is typically 3-5 lines of config. + +## Programmatic Usage + +If you're building a custom integration, you can use the engine plugin API directly: + +```typescript +import { setEngine, getEngine, loadEngineFromModule } from '@game-ci/orchestrator'; + +// Load from an NPM package +const plugin = loadEngineFromModule('@game-ci/godot-engine'); +setEngine(plugin); + +// Or set inline +setEngine({ + name: 'godot', + cacheFolders: ['.godot/imported'], +}); + +// Check current engine +console.log(getEngine().name); // 'godot' +``` diff --git a/docs/03-github-orchestrator/08-cli/02-build-command.mdx b/docs/03-github-orchestrator/08-cli/02-build-command.mdx index c8fe0fbe..6181ad3a 100644 --- a/docs/03-github-orchestrator/08-cli/02-build-command.mdx +++ b/docs/03-github-orchestrator/08-cli/02-build-command.mdx @@ -46,6 +46,24 @@ game-ci build [options] | `--skip-activation` | `false` | Skip Unity license activation/deactivation | | `--unity-licensing-server` | _(empty)_ | Unity floating license server address | +## Engine Options + +| Flag | Default | Description | +| ----------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------ | +| `--engine` | `unity` | Game engine name (`unity`, `godot`, `unreal`, etc.) | +| `--engine-plugin` | _(empty)_ | Engine plugin source: NPM package, `cli:`, or `docker:`. See [Engine Plugins](../advanced-topics/engine-plugins). | + +### Non-Unity Engine Example + +```bash +game-ci build \ + --engine godot \ + --engine-plugin @game-ci/godot-engine \ + --target-platform linux \ + --custom-image my-godot-image:4.2 \ + --provider-strategy aws +``` + ## Custom Build Parameters Pass arbitrary parameters to the Unity build process: From 3f50e66b577f685bddf9cbb2bb0764e67f4abd57 Mon Sep 17 00:00:00 2001 From: frostebite Date: Wed, 18 Mar 2026 09:22:17 +0000 Subject: [PATCH 57/60] docs: reframe orchestrator as hardware-agnostic, not cloud-first Update introduction, getting-started, and comparison pages to describe the orchestrator as taking whatever hardware you give it, rather than framing it as three distinct types (cloud, self-hosted, local). Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/01-introduction.mdx | 16 ++++++++-------- .../02-game-ci-vs-orchestrator.mdx | 9 +++++---- .../02-getting-started.mdx | 4 ++-- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 06246867..e757844b 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -3,13 +3,13 @@ ## What Does Orchestrator Do? **Orchestrator is an advanced build layer on top of -[Game CI unity-builder](https://github.com/game-ci/unity-builder).** It dispatches builds to cloud -infrastructure, self-hosted runners, or local Docker containers instead of running them directly on -your CI runner. While Unity is the built-in default, Orchestrator is engine agnostic — Godot, -Unreal, and custom engines can plug in via the -[engine plugin system](advanced-topics/engine-plugins). Start jobs from GitHub Actions, the command -line, or any CI system. Orchestrator provisions the environment, syncs your project, runs the build, -and streams results back. +[Game CI unity-builder](https://github.com/game-ci/unity-builder).** It takes whatever hardware you +give it and provides the flexibility, control, and tools to manage all your build workflows across +it. Instead of running builds directly on your CI runner, Orchestrator dispatches them to any +infrastructure you choose — from a local machine to a Kubernetes cluster. While Unity is the +built-in default, Orchestrator is engine agnostic — Godot, Unreal, and custom engines can plug in +via the [engine plugin system](advanced-topics/engine-plugins). Start jobs from GitHub Actions, the +command line, or any CI system. ```mermaid flowchart LR @@ -20,7 +20,7 @@ flowchart LR B["Provision\nSync\nCache\nBuild\nCleanup"] end subgraph target["Build Target"] - C["AWS Fargate\nKubernetes\nLocal Docker\nSelf-Hosted"] + C["AWS Fargate\nKubernetes\nDocker\nYour Hardware"] end A --> B --> C C -- "artifacts + logs" --> A diff --git a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx index 29d2c2ef..df4d3baf 100644 --- a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx +++ b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx @@ -14,9 +14,10 @@ caching, hooks, or multi-provider routing. ## Orchestrator Mode -Orchestrator is an advanced layer on top of Game CI. It dispatches builds to cloud infrastructure -(AWS Fargate, Kubernetes), local Docker containers, or self-hosted runners, and manages the full -build lifecycle: provisioning, git sync, caching, hooks, and cleanup. +Orchestrator is an advanced layer on top of Game CI. It takes whatever hardware you give it and +manages the full build lifecycle across it: provisioning, git sync, caching, hooks, and cleanup. +Whether you're running on a cloud provider, a local machine, or your own servers, Orchestrator +gives you the tools and flexibility to manage your workflows. Projects of any size can benefit from orchestrator features like configurable resources, automatic caching, and extensible hooks. Larger projects additionally benefit from retained workspaces, @@ -29,7 +30,7 @@ flowchart LR end subgraph Orchestrator Mode GA["GitHub Action\nCLI / Any CI\n(dispatches only)\n\nConfigurable CPU, memory, disk\nScales to zero when idle"] - CC["Cloud Container\n(builds remotely)"] + CC["Build Target\n(any hardware)"] GA <--> CC end ``` diff --git a/docs/03-github-orchestrator/02-getting-started.mdx b/docs/03-github-orchestrator/02-getting-started.mdx index 950024cb..c1c73d35 100644 --- a/docs/03-github-orchestrator/02-getting-started.mdx +++ b/docs/03-github-orchestrator/02-getting-started.mdx @@ -1,7 +1,7 @@ # Getting Started -Orchestrator lets you run Unity builds on cloud infrastructure, self-hosted runners, or local Docker -containers. It works as a built-in plugin for `game-ci/unity-builder` in GitHub Actions, or as a +Orchestrator lets you run Unity builds on whatever hardware you have — cloud, on-premise, or your +local machine. It works as a built-in plugin for `game-ci/unity-builder` in GitHub Actions, or as a standalone CLI tool. ## Prerequisites From de78f6b0544cee162dee76e4bb0990d0127eda0e Mon Sep 17 00:00:00 2001 From: frostebite Date: Wed, 18 Mar 2026 13:42:10 +0000 Subject: [PATCH 58/60] docs: replace "hardware" with "machines" for beginner friendliness Update all instances across docs and versioned docs to use "machines" instead of "hardware" for clearer, more approachable language. Co-Authored-By: Claude Opus 4.6 --- .../05-providers/04-github-actions-dispatch.mdx | 2 +- docs/09-troubleshooting/common-issues.mdx | 2 +- docs/11-circleci/05-executors.mdx | 4 ++-- docs/12-self-hosting/01-overview.mdx | 10 +++++----- docs/12-self-hosting/02-host-types.mdx | 6 +++--- .../03-host-creation/03-QEMU/04-windows.mdx | 2 +- .../03-host-creation/03-QEMU/06-configuration.mdx | 2 +- versioned_docs/version-1/04-github/02-activation.mdx | 2 +- .../03-github-orchestrator/01-introduction.mdx | 2 +- versioned_docs/version-2/11-circleci/05-executors.mdx | 4 ++-- .../03-github-orchestrator/01-introduction.mdx | 2 +- versioned_docs/version-3/11-circleci/05-executors.mdx | 4 ++-- 12 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx index d2ea60f8..1751b4a4 100644 --- a/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx +++ b/docs/03-github-orchestrator/05-providers/04-github-actions-dispatch.mdx @@ -15,7 +15,7 @@ orchestrator dispatches the work to another repository's workflow and monitors i - **Distribute builds across organizations** - trigger workflows in repos owned by different GitHub organizations or teams. - **Specialized runner pools** - route builds to self-hosted runners registered against a different - repository with specific hardware (GPU, high memory, fast SSD). + repository with specific machines (GPU, high memory, fast SSD). - **License isolation** - keep Unity license activation in a controlled environment while allowing multiple game repos to dispatch builds to it. diff --git a/docs/09-troubleshooting/common-issues.mdx b/docs/09-troubleshooting/common-issues.mdx index d6a6779c..f5f76210 100644 --- a/docs/09-troubleshooting/common-issues.mdx +++ b/docs/09-troubleshooting/common-issues.mdx @@ -306,7 +306,7 @@ Error: Global Illumination requires a graphics device to render albedo. This error occurs when Unity fails to find a suitable OpenCL device for the GPU Lightmapper. This can be due to a variety of reasons, such as: -- The GPU Lightmapper is not supported on the current hardware. +- The GPU Lightmapper is not supported on the current machine. - The GPU Lightmapper is not supported on the current operating system. - The GPU Lightmapper is not supported on the current Unity version. - The GPU Lightmapper is not supported on the current graphics driver. diff --git a/docs/11-circleci/05-executors.mdx b/docs/11-circleci/05-executors.mdx index e802e505..bd0086b5 100644 --- a/docs/11-circleci/05-executors.mdx +++ b/docs/11-circleci/05-executors.mdx @@ -108,7 +108,7 @@ unsure how to create or configure it, follow The `macos-runner` is an excellent alternative over [macos](#macos) to build macOS IL2CPP with faster build times. Its non-ephemeral nature saves times on installing external dependencies after -the first run. And in addition, you are free to use an agent with hardware exceeding the +the first run. And in addition, you are free to use an agent with specs exceeding the [available](https://circleci.com/docs/configuration-reference#macos-execution-environment) for the web macOS executor. @@ -372,7 +372,7 @@ unsure how to create or configure it, follow The `windows-runner` is an excellent alternative over [windows](#windows) to build Windows IL2CPP with faster build times. Its non-ephemeral nature saves times on installing external dependencies -after the first run. And in addition, you are free to use an agent with hardware exceeding the +after the first run. And in addition, you are free to use an agent with specs exceeding the [available](https://circleci.com/docs/configuration-reference#windows-execution) for the web Windows executor. diff --git a/docs/12-self-hosting/01-overview.mdx b/docs/12-self-hosting/01-overview.mdx index d8b0af61..e93272ac 100644 --- a/docs/12-self-hosting/01-overview.mdx +++ b/docs/12-self-hosting/01-overview.mdx @@ -34,8 +34,8 @@ included some resources for you to start your learning journey below. There are many ways to self-host CI/CD runners, and which one is best for you will depend on your own situation and constraints. For the purpose of this guide we will make the following assumptions: -- 💻 User already has their own hardware -- 💸 Budget for new hardware, software, or services is $0 +- 💻 User already has their own machines +- 💸 Budget for new machines, software, or services is $0 - 🛠️ FOSS tools should be prioritized where possible - 📜 We define `Self-Hosting` in this context to refer to a user taking responsibility for the operating-system level configuration and life-cycle-management of a given compute resource (metal, @@ -44,7 +44,7 @@ own situation and constraints. For the purpose of this guide we will make the fo ## ⚠️ Security Disclaimer This guide strives to maintain a balance between convenience and security for the sake of usability. -The examples included in this guide are intended for use with on-prem hardware without public IP +The examples included in this guide are intended for use with on-prem machines without public IP addresses accessible from external networks. Security is a constantly moving target which requires continuous effort to maintain. Users should conduct their own security review before using the following techniques on production or public systems. @@ -52,7 +52,7 @@ following techniques on production or public systems. ## ⚡️ Power Costs Hosting your own runners also comes with an increase in power consumption. This will vary based on -the hardware you use and the prices of energy in your area. Below are some useful resources for +the machines you use and the prices of energy in your area. Below are some useful resources for discovering the potential energy costs of self-hosting. - https://outervision.com/power-supply-calculator @@ -72,7 +72,7 @@ This guide is tested on devices which meet the following requirements: ### Host Creation "Host Creation" in this context is the process of installing an operating system onto a piece of -physical hardware, or the creation and configuration of virtualised compute resources. +physical machine, or the creation and configuration of virtualised compute resources. - [Bare-Metal](./03-host-creation/02-bare-metal.mdx) - [Virtual Machines using Multipass](./03-host-creation/02-multipass.mdx) diff --git a/docs/12-self-hosting/02-host-types.mdx b/docs/12-self-hosting/02-host-types.mdx index 43a696c9..e4af49cf 100644 --- a/docs/12-self-hosting/02-host-types.mdx +++ b/docs/12-self-hosting/02-host-types.mdx @@ -13,7 +13,7 @@ import Layers012 from '/assets/images/k8s-layers012.drawio.png'; ## Bare-Metal -"Bare Metal" means that your host OS is running directly on a piece of hardware without any +"Bare Metal" means that your host OS is running directly on a physical machine without any virtualisation. This reduces the complexity of deployment at the cost of increased time and effort for re-provisioning the host. @@ -91,7 +91,7 @@ as many 5,000 per cluster.
Once installed, Kubernetes creates -[standardised interfaces](https://matt-rickard.com/kubernetes-interfaces) to control the hardware & +[standardised interfaces](https://matt-rickard.com/kubernetes-interfaces) to control the machines & software components of the underlying nodes (networking, storage, GPUs, CPU cores etc...) as well as a distributed key-value store which facilitates communication between all nodes in the cluster. @@ -104,7 +104,7 @@ a distributed key-value store which facilitates communication between all nodes
-With the underlying hardware abstracted into a generic pool of resources, Kubernetes is then able to +With the underlying machines abstracted into a generic pool of resources, Kubernetes is then able to re-compose those assets into isolated environments called "Namespaces" where it deploys containerised workloads in groups called "Pods". This layer of Kubernetes is very similar to a typical container host but with many more features for multi-tenancy, security, and life-cycle diff --git a/docs/12-self-hosting/03-host-creation/03-QEMU/04-windows.mdx b/docs/12-self-hosting/03-host-creation/03-QEMU/04-windows.mdx index 2c6ac1f0..a724c2b3 100644 --- a/docs/12-self-hosting/03-host-creation/03-QEMU/04-windows.mdx +++ b/docs/12-self-hosting/03-host-creation/03-QEMU/04-windows.mdx @@ -25,7 +25,7 @@ import DiskmarkSata from '/assets/images/diskmark-sata.png'; # Windows Windows VMs on QEMU + KVM work very well provided that you have tailored your VM to match your -needs. There are multiple possible combinations of images, hardware types, and installation methods +needs. There are multiple possible combinations of images, machine types, and installation methods that each have their own benefits and drawbacks. ## Choosing an Image diff --git a/docs/12-self-hosting/03-host-creation/03-QEMU/06-configuration.mdx b/docs/12-self-hosting/03-host-creation/03-QEMU/06-configuration.mdx index f902a3a3..85d630a3 100644 --- a/docs/12-self-hosting/03-host-creation/03-QEMU/06-configuration.mdx +++ b/docs/12-self-hosting/03-host-creation/03-QEMU/06-configuration.mdx @@ -2,7 +2,7 @@ The following are advanced configuration options for QEMU Virtual Machines that users may find useful but carry significant risks for system corruption and data-loss. Many of the processes below -are hardware-level options which will differ greatly across hardware types and vendors. Users are +are machine-level options which will differ greatly across machine types and vendors. Users are advised to proceed with caution and the understanding that support is provided on a 'best-effort' basis only. diff --git a/versioned_docs/version-1/04-github/02-activation.mdx b/versioned_docs/version-1/04-github/02-activation.mdx index 135715fb..63e9a06d 100644 --- a/versioned_docs/version-1/04-github/02-activation.mdx +++ b/versioned_docs/version-1/04-github/02-activation.mdx @@ -19,7 +19,7 @@ You may use the action using below instructions. The activation file uses machine identifiers and the Unity version number. All github virtual -machines emit the same hardware ID. You cannot perform this step locally. +machines emit the same machine ID. You cannot perform this step locally. Let's go! diff --git a/versioned_docs/version-2/03-github-orchestrator/01-introduction.mdx b/versioned_docs/version-2/03-github-orchestrator/01-introduction.mdx index 3ae13efb..e723c376 100644 --- a/versioned_docs/version-2/03-github-orchestrator/01-introduction.mdx +++ b/versioned_docs/version-2/03-github-orchestrator/01-introduction.mdx @@ -40,7 +40,7 @@ for game development pipelines. This solution prefers convenience, ease of use, scalability, throughput and flexibility. -Faster solutions exist, but would all involve self-hosted hardware with an immediate local cache of +Faster solutions exist, but would all involve self-hosted machines with an immediate local cache of the large project files and working directory and a dedicated server. # Orchestrator Release Status diff --git a/versioned_docs/version-2/11-circleci/05-executors.mdx b/versioned_docs/version-2/11-circleci/05-executors.mdx index e802e505..bd0086b5 100644 --- a/versioned_docs/version-2/11-circleci/05-executors.mdx +++ b/versioned_docs/version-2/11-circleci/05-executors.mdx @@ -108,7 +108,7 @@ unsure how to create or configure it, follow The `macos-runner` is an excellent alternative over [macos](#macos) to build macOS IL2CPP with faster build times. Its non-ephemeral nature saves times on installing external dependencies after -the first run. And in addition, you are free to use an agent with hardware exceeding the +the first run. And in addition, you are free to use an agent with specs exceeding the [available](https://circleci.com/docs/configuration-reference#macos-execution-environment) for the web macOS executor. @@ -372,7 +372,7 @@ unsure how to create or configure it, follow The `windows-runner` is an excellent alternative over [windows](#windows) to build Windows IL2CPP with faster build times. Its non-ephemeral nature saves times on installing external dependencies -after the first run. And in addition, you are free to use an agent with hardware exceeding the +after the first run. And in addition, you are free to use an agent with specs exceeding the [available](https://circleci.com/docs/configuration-reference#windows-execution) for the web Windows executor. diff --git a/versioned_docs/version-3/03-github-orchestrator/01-introduction.mdx b/versioned_docs/version-3/03-github-orchestrator/01-introduction.mdx index 3ae13efb..e723c376 100644 --- a/versioned_docs/version-3/03-github-orchestrator/01-introduction.mdx +++ b/versioned_docs/version-3/03-github-orchestrator/01-introduction.mdx @@ -40,7 +40,7 @@ for game development pipelines. This solution prefers convenience, ease of use, scalability, throughput and flexibility. -Faster solutions exist, but would all involve self-hosted hardware with an immediate local cache of +Faster solutions exist, but would all involve self-hosted machines with an immediate local cache of the large project files and working directory and a dedicated server. # Orchestrator Release Status diff --git a/versioned_docs/version-3/11-circleci/05-executors.mdx b/versioned_docs/version-3/11-circleci/05-executors.mdx index e802e505..bd0086b5 100644 --- a/versioned_docs/version-3/11-circleci/05-executors.mdx +++ b/versioned_docs/version-3/11-circleci/05-executors.mdx @@ -108,7 +108,7 @@ unsure how to create or configure it, follow The `macos-runner` is an excellent alternative over [macos](#macos) to build macOS IL2CPP with faster build times. Its non-ephemeral nature saves times on installing external dependencies after -the first run. And in addition, you are free to use an agent with hardware exceeding the +the first run. And in addition, you are free to use an agent with specs exceeding the [available](https://circleci.com/docs/configuration-reference#macos-execution-environment) for the web macOS executor. @@ -372,7 +372,7 @@ unsure how to create or configure it, follow The `windows-runner` is an excellent alternative over [windows](#windows) to build Windows IL2CPP with faster build times. Its non-ephemeral nature saves times on installing external dependencies -after the first run. And in addition, you are free to use an agent with hardware exceeding the +after the first run. And in addition, you are free to use an agent with specs exceeding the [available](https://circleci.com/docs/configuration-reference#windows-execution) for the web Windows executor. From 39dc031eae97b66e71ec1debb7dcbcc21ef1293e Mon Sep 17 00:00:00 2001 From: frostebite Date: Wed, 18 Mar 2026 13:47:07 +0000 Subject: [PATCH 59/60] docs: replace em dashes with hyphens and fix remaining "hardware" Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/01-introduction.mdx | 8 ++++---- docs/03-github-orchestrator/02-getting-started.mdx | 2 +- .../07-advanced-topics/11-test-workflow-engine.mdx | 10 +++++----- .../07-advanced-topics/18-engine-plugins.mdx | 6 +++--- docs/11-circleci/01-getting-started.mdx | 2 +- .../version-2/11-circleci/01-getting-started.mdx | 2 +- .../version-3/11-circleci/01-getting-started.mdx | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index e757844b..111531cc 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -6,10 +6,10 @@ [Game CI unity-builder](https://github.com/game-ci/unity-builder).** It takes whatever hardware you give it and provides the flexibility, control, and tools to manage all your build workflows across it. Instead of running builds directly on your CI runner, Orchestrator dispatches them to any -infrastructure you choose — from a local machine to a Kubernetes cluster. While Unity is the -built-in default, Orchestrator is engine agnostic — Godot, Unreal, and custom engines can plug in -via the [engine plugin system](advanced-topics/engine-plugins). Start jobs from GitHub Actions, the -command line, or any CI system. +infrastructure you choose -from a local machine to a Kubernetes cluster. While Unity is the built-in +default, Orchestrator is engine agnostic -Godot, Unreal, and custom engines can plug in via the +[engine plugin system](advanced-topics/engine-plugins). Start jobs from GitHub Actions, the command +line, or any CI system. ```mermaid flowchart LR diff --git a/docs/03-github-orchestrator/02-getting-started.mdx b/docs/03-github-orchestrator/02-getting-started.mdx index c1c73d35..42a8d85e 100644 --- a/docs/03-github-orchestrator/02-getting-started.mdx +++ b/docs/03-github-orchestrator/02-getting-started.mdx @@ -1,6 +1,6 @@ # Getting Started -Orchestrator lets you run Unity builds on whatever hardware you have — cloud, on-premise, or your +Orchestrator lets you run Unity builds on whatever machines you have -cloud, on-premise, or your local machine. It works as a built-in plugin for `game-ci/unity-builder` in GitHub Actions, or as a standalone CLI tool. diff --git a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx index 3ba0c464..c6790e26 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/11-test-workflow-engine.mdx @@ -74,13 +74,13 @@ against these dimensions: ### Example Dimensions -The dimensions below are provided as a starting point. Projects can rename, remove, or replace -any of these, and add entirely new dimensions — the taxonomy system is fully extensible. +The dimensions below are provided as a starting point. Projects can rename, remove, or replace any +of these, and add entirely new dimensions -the taxonomy system is fully extensible. | Dimension | Values | Description | | -------------- | ------------------------------------- | ----------------------------- | | Scope | Unit, Integration, System, End To End | Test boundary | -| Maturity | Trusted, Stable, Experimental | Test reliability | +| Maturity | Trusted, Stable, Experimental | Test reliability | | FeedbackSpeed | Fast, Moderate, Slow | Expected execution time | | Execution | Synchronous, Asynchronous, Coroutine | Execution model | | Rigor | Strict, Normal, Relaxed | Assertion strictness | @@ -100,8 +100,8 @@ filters: ### Defining Your Own Dimensions -Projects can define their own taxonomy dimensions (or override the examples above) via a -taxonomy definition file: +Projects can define their own taxonomy dimensions (or override the examples above) via a taxonomy +definition file: ```yaml # .game-ci/taxonomy.yml diff --git a/docs/03-github-orchestrator/07-advanced-topics/18-engine-plugins.mdx b/docs/03-github-orchestrator/07-advanced-topics/18-engine-plugins.mdx index e0d5d0df..82edd541 100644 --- a/docs/03-github-orchestrator/07-advanced-topics/18-engine-plugins.mdx +++ b/docs/03-github-orchestrator/07-advanced-topics/18-engine-plugins.mdx @@ -5,7 +5,7 @@ sidebar_position: 18 # Engine Plugins Orchestrator is game-engine agnostic. While Unity is the built-in default, you can plug in any game -engine — Godot, Unreal, a custom engine, or anything else — without forking the orchestrator. +engine -Godot, Unreal, a custom engine, or anything else -without forking the orchestrator. An **engine plugin** tells the orchestrator how to handle engine-specific concerns like cache folders and container lifecycle hooks. Everything else (provisioning, git sync, logging, hooks, @@ -31,7 +31,7 @@ interface EnginePlugin { ## Built-in: Unity Unity is the default engine plugin. When you don't specify `--engine` or `--engine-plugin`, the -orchestrator behaves exactly as it always has — caching the `Library` folder and returning the Unity +orchestrator behaves exactly as it always has -caching the `Library` folder and returning the Unity license on container shutdown. No configuration needed. Existing workflows are unchanged. @@ -145,7 +145,7 @@ To create a plugin for your engine, you need to answer two questions: don't change between builds. For Unity this is `Library`, for Godot it's `.godot/imported`. 2. **Does your engine need cleanup on container shutdown?** Unity needs to return its license. Most - engines don't need anything here — just omit `preStopCommand`. + engines don't need anything here -just omit `preStopCommand`. ### Example: Minimal Godot Plugin diff --git a/docs/11-circleci/01-getting-started.mdx b/docs/11-circleci/01-getting-started.mdx index 60dca692..aa09c404 100644 --- a/docs/11-circleci/01-getting-started.mdx +++ b/docs/11-circleci/01-getting-started.mdx @@ -25,7 +25,7 @@ so. processes, speed up project setup and make it easy to integrate with third-party tools. To streamline the process of testing and building Unity projects in CircleCI, we provide the -[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) — a certified orb capable of +[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) -a certified orb capable of caching dependencies, storing artifacts, collecting test data and running on multiple [executors](/docs/circleci/executors). diff --git a/versioned_docs/version-2/11-circleci/01-getting-started.mdx b/versioned_docs/version-2/11-circleci/01-getting-started.mdx index 60dca692..aa09c404 100644 --- a/versioned_docs/version-2/11-circleci/01-getting-started.mdx +++ b/versioned_docs/version-2/11-circleci/01-getting-started.mdx @@ -25,7 +25,7 @@ so. processes, speed up project setup and make it easy to integrate with third-party tools. To streamline the process of testing and building Unity projects in CircleCI, we provide the -[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) — a certified orb capable of +[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) -a certified orb capable of caching dependencies, storing artifacts, collecting test data and running on multiple [executors](/docs/circleci/executors). diff --git a/versioned_docs/version-3/11-circleci/01-getting-started.mdx b/versioned_docs/version-3/11-circleci/01-getting-started.mdx index 60dca692..aa09c404 100644 --- a/versioned_docs/version-3/11-circleci/01-getting-started.mdx +++ b/versioned_docs/version-3/11-circleci/01-getting-started.mdx @@ -25,7 +25,7 @@ so. processes, speed up project setup and make it easy to integrate with third-party tools. To streamline the process of testing and building Unity projects in CircleCI, we provide the -[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) — a certified orb capable of +[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) -a certified orb capable of caching dependencies, storing artifacts, collecting test data and running on multiple [executors](/docs/circleci/executors). From 7ba5f93dd54917d2fdf191de77885003ca6e61f7 Mon Sep 17 00:00:00 2001 From: frostebite Date: Wed, 18 Mar 2026 13:47:50 +0000 Subject: [PATCH 60/60] docs: revert circleci em dash changes, fix remaining hardware refs Revert em dash changes outside orchestrator subfolder. Fix remaining "hardware" references in orchestrator docs. Co-Authored-By: Claude Opus 4.6 --- docs/03-github-orchestrator/01-introduction.mdx | 2 +- .../03-github-orchestrator/02-game-ci-vs-orchestrator.mdx | 8 ++++---- docs/11-circleci/01-getting-started.mdx | 2 +- .../version-2/11-circleci/01-getting-started.mdx | 2 +- .../version-3/11-circleci/01-getting-started.mdx | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/03-github-orchestrator/01-introduction.mdx b/docs/03-github-orchestrator/01-introduction.mdx index 111531cc..65b2b35a 100644 --- a/docs/03-github-orchestrator/01-introduction.mdx +++ b/docs/03-github-orchestrator/01-introduction.mdx @@ -3,7 +3,7 @@ ## What Does Orchestrator Do? **Orchestrator is an advanced build layer on top of -[Game CI unity-builder](https://github.com/game-ci/unity-builder).** It takes whatever hardware you +[Game CI unity-builder](https://github.com/game-ci/unity-builder).** It takes whatever machines you give it and provides the flexibility, control, and tools to manage all your build workflows across it. Instead of running builds directly on your CI runner, Orchestrator dispatches them to any infrastructure you choose -from a local machine to a Kubernetes cluster. While Unity is the built-in diff --git a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx index df4d3baf..41c8e600 100644 --- a/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx +++ b/docs/03-github-orchestrator/02-game-ci-vs-orchestrator.mdx @@ -14,10 +14,10 @@ caching, hooks, or multi-provider routing. ## Orchestrator Mode -Orchestrator is an advanced layer on top of Game CI. It takes whatever hardware you give it and +Orchestrator is an advanced layer on top of Game CI. It takes whatever machines you give it and manages the full build lifecycle across it: provisioning, git sync, caching, hooks, and cleanup. -Whether you're running on a cloud provider, a local machine, or your own servers, Orchestrator -gives you the tools and flexibility to manage your workflows. +Whether you're running on a cloud provider, a local machine, or your own servers, Orchestrator gives +you the tools and flexibility to manage your workflows. Projects of any size can benefit from orchestrator features like configurable resources, automatic caching, and extensible hooks. Larger projects additionally benefit from retained workspaces, @@ -30,7 +30,7 @@ flowchart LR end subgraph Orchestrator Mode GA["GitHub Action\nCLI / Any CI\n(dispatches only)\n\nConfigurable CPU, memory, disk\nScales to zero when idle"] - CC["Build Target\n(any hardware)"] + CC["Build Target\n(any machine)"] GA <--> CC end ``` diff --git a/docs/11-circleci/01-getting-started.mdx b/docs/11-circleci/01-getting-started.mdx index aa09c404..60dca692 100644 --- a/docs/11-circleci/01-getting-started.mdx +++ b/docs/11-circleci/01-getting-started.mdx @@ -25,7 +25,7 @@ so. processes, speed up project setup and make it easy to integrate with third-party tools. To streamline the process of testing and building Unity projects in CircleCI, we provide the -[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) -a certified orb capable of +[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) — a certified orb capable of caching dependencies, storing artifacts, collecting test data and running on multiple [executors](/docs/circleci/executors). diff --git a/versioned_docs/version-2/11-circleci/01-getting-started.mdx b/versioned_docs/version-2/11-circleci/01-getting-started.mdx index aa09c404..60dca692 100644 --- a/versioned_docs/version-2/11-circleci/01-getting-started.mdx +++ b/versioned_docs/version-2/11-circleci/01-getting-started.mdx @@ -25,7 +25,7 @@ so. processes, speed up project setup and make it easy to integrate with third-party tools. To streamline the process of testing and building Unity projects in CircleCI, we provide the -[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) -a certified orb capable of +[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) — a certified orb capable of caching dependencies, storing artifacts, collecting test data and running on multiple [executors](/docs/circleci/executors). diff --git a/versioned_docs/version-3/11-circleci/01-getting-started.mdx b/versioned_docs/version-3/11-circleci/01-getting-started.mdx index aa09c404..60dca692 100644 --- a/versioned_docs/version-3/11-circleci/01-getting-started.mdx +++ b/versioned_docs/version-3/11-circleci/01-getting-started.mdx @@ -25,7 +25,7 @@ so. processes, speed up project setup and make it easy to integrate with third-party tools. To streamline the process of testing and building Unity projects in CircleCI, we provide the -[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) -a certified orb capable of +[Unity Orb](https://circleci.com/developer/orbs/orb/game-ci/unity) — a certified orb capable of caching dependencies, storing artifacts, collecting test data and running on multiple [executors](/docs/circleci/executors).