# Unity Gaming Services CLI

> Create and manage schedule configurations from the command line using the Unity Gaming Services command-line interface.

You can use the [Unity Gaming Services CLI](https://services.docs.unity.com/guides/ugs-cli/latest/general/overview) to interact with schedules. The CLI allows you to manage schedule configurations from the command line.

## Prerequisites

For more comprehensive information on the CLI, follow the steps in the [Unity Gaming Services CLI Get Started guide](https://services.docs.unity.com/guides/ugs-cli/latest/general/get-started/install-the-cli/).

To follow this guide, you first need to complete the following actions:

1. [Install the UGS CLI](https://services.docs.unity.com/guides/ugs-cli/latest/general/get-started/install-the-cli/).

2. Use the following to configure your Project ID and Environment:
   `ugs config set project-id <your-project-id>`
   `ugs config set environment-name <your-environment-name>`

3. Configure a service account with the required roles for [Scheduler](https://services.docs.unity.com/docs/service-account-auth/index.html#scheduler-configuration-editor) and [environments management](https://services.docs.unity.com/docs/service-account-auth/index.html#unity-environments-admin). For more information, refer to [Get Authenticated](https://services.docs.unity.com/guides/ugs-cli/latest/general/get-started/get-authenticated/).

## Using the CLI

For a full reference of all commands and options, refer to the [Schedules Command Line documentation](https://services.docs.unity.com/guides/ugs-cli/latest/scheduler/Scheduler%20Command%20Line/overview).

> **Note:**
>
> The `ugs scheduler` command is also available as `ugs sched`.

### Deploy schedules

Run the `new-file` command to create a schedule configuration locally:

```bash
ugs scheduler new-file <file-name>
```

The configuration file contents can look like the following:

```json
{
  "$schema": "https://ugs-config-schemas.unity3d.com/v1/schedules.schema.json",
  "Configs": {
    "Schedule1": {
      "EventName": "EventType1",
      "Type": "recurring",
      "Schedule": "0 * * * *",
      "PayloadVersion": 1,
      "Payload": "{}"
    },
    "Schedule2": {
      "EventName": "EventType2",
      "Type": "one-time",
      "Schedule": "2024-03-08T13:06:32.311+00:00",
      "PayloadVersion": 1,
      "Payload": "{ \"message\": \"Hello, world!\"}"
    }
  }
}
```

You can also separate the schedule configurations into multiple files if you need to.

```json
{
  "$schema": "https://ugs-config-schemas.unity3d.com/v1/schedules.schema.json",
  "Configs": {
    "Schedule1": {
      "EventName": "EventType1",
      "Type": "recurring",
      "Schedule": "0 * * * *",
      "PayloadVersion": 1,
      "Payload": "{}"
    }
  }
}
```

```json
{
  "$schema": "https://ugs-config-schemas.unity3d.com/v1/schedules.schema.json",
  "Configs": {
    "Schedule2": {
      "EventName": "EventType2",
      "Type": "one-time",
      "Schedule": "2024-03-08T13:06:32.311+00:00",
      "PayloadVersion": 1,
      "Payload": "{ \"message\": \"Hello, world!\"}"
    }
  }
}
```

You can use the `Deploy` command to promote your local schedule configuration files to the remote environment.

You need to deploy the configuration files for them to become active schedules.

```bash
ugs deploy <path-to-schedules-file> <path-to-schedules-file>
```

```bash
ugs deploy <path-to-directory>
```

### Retrieve schedules

To list all currently active schedules, run the following command:

```bash
ugs scheduler list
```

You can use the `Fetch` command to retrieve multiple schedules from remote at once.

The provided path is the directory that schedules are saved to:

```bash
ugs fetch <path>
```

### Delete schedules

You can delete a schedule by running the `deploy` command with a `--reconcile` flag.

> **Warning:**
>
> Reconcile is a destructive operation. It deletes all schedules that are not present in the provided path.
> You can check the output of the command with the `--dry-run` flag before running the command without it.

```bash
ugs deploy <path-to-config-file> --services scheduler --reconcile
```
