---
# System prepended metadata

title: Spec swiss armyknife

---

# Spec swiss armyknife



# GroundControl toolchain

​

## Databases

​

### Command: `copy`

​

Copies data from one database to another.

​

Usage:

​

```

gc db copy <from:uri> <to:uri> [-v] [--copy-users] [--copy-runtime] [--project=<code>]

```

​

Where `uri` is a reference to a database. It can be any of:

​

- `gc:<stack>/<env>`, e.g. `gc:groundcontrol/live` or `gc:aldi/acc`. As a shorthand, `gc:<env>` means `gc:groundcontrol/<env>`, e.g. `gc:live` or `gc:acc`.

- Special case: `gc:groundcontrol/int` (or short `gc:int`) is our integration server.

- `mongodb:<uri>` uris: a direct reference to a mongodb

- `local` is a shorthand for `mongodb://localhost:27017`

​

Options:

​

- `--copy-users`: Specify to copy user accounts. Note that passwords are invalid if the `APP_SECRET` environment variable differs. The acceptance and live servers for one stack should have the same `APP_SECRET` so there it's ok. The `super@groundcontrol` user is never copied. If this flag is not specified, users are *not* copied.

- `--copy-runtime`: Specify to copy runtime collections in addition to project structures. See below which collections are considered runtime colletions.

- `--project=<code>`: Copy only information from the project with the given code. This will also merge the information into the target DB, rather than dropping the target DB / collections. This is only allowed if the source and target DBs have the exact same migrations. Note that everything related to that project in the target DB is first removed.

- `-v`: be verbose

​

> Note 1: participants' push devices are *never* copied.

> Note 2: when `<to>` refers to a live environment, users must confirm with `y/n`.

​


Examples:

​

- Pull DB from live: `gc db copy gc:live local`

- Push DB to live: `gc db copy local gc:live`

- Copy live DB to acc, copying users as well: `gc db copy gc:live gc:acc --copy-users`

- Copy live DB to acc from server: `gc db copy mongodb://localhost:29002 mongodb://localhost:29012 --copy-users`

- Copy ALDI live DB to integration: `gc db copy gc:aldi/live gc:int`

- Copy a single project from the ALDI stack to the GC stack: `gc db copy gc:aldi/live gc:live --project=beone`

​

### Command: `pull`

​

Usage:

​

```

gc db pull <from:uri>

```

​

Shorthand for `gc db copy <from> local`

​

### Command: `push`

​

Usage:

​

```

gc db push <to:uri>

```

​

Shorthand for `gc db copy local <to>`

​

### Appendix: runtime collections

​

The following collections are considered to be part of the runtime of a project:

​

- `messages`

- `answers`

- `*_states`

- `*_logs`

​

All other collections are considered to be a part of the project structure.

​

## Deployments

​

### Command: `deploy`

​

Deploys some part of the infrastructure.

​

Usage:

​

```

gc deploy <from:uri> <to:uri> [--app=<app>,<app>*]

```

​

Where `<uri>` is a reference to an installation. It can be any of:

​

- `gc:<stack>/<env>`, e.g. `gc:groundcontrol/live` or `gc:aldi/acc`. As a shorthand, `gc:<env>` means `gc:groundcontrol/<env>`, e.g. `gc:live` or `gc:acc`.

- Special case: `gc:groundcontrol/int` (or short `gc:int`) is our integration server.

- If no `:` is present, it is assumed to be the path to your local installation of GroundControl. This directory should contain the subdirectories `web`, `mission` and `server`.

​

Options:

​

- `--app=<app>,<app>*`: Migrate only the specified apps, instead of the entire infrastructure.

​

Examples:

​

- Deploy the integration server to acceptance on the ALDI stack: `gc deploy gc:int aldi:acc`

- Deploy the ALDI acceptance server to live: `gc deploy aldi:acc aldi:live`

- Perform a hotfix from your local computer (Mission Control and Web Client only): `gc deploy . gc:live --app=mission,web`. This assumes you're in the GroundControl base directory.

​

> Note 1: our CI runners deploy the apps automatically to `gc:int`, so you should never deploy *to* `gc:int`.

> Note 2: whenever deploying *to* an `acc` environment, the toolchain subsequently invokes `gc copy <stack>:live <stack>:acc`.

