# Écrire un script

> --json, les codes de sortie, et ce sur quoi tu peux t'appuyer.

Toutes les commandes qui montrent quelque chose acceptent `--json`. Elles rendent
alors la réponse de l'API, telle quelle, sans tableau ni couleur.

```bash
ark ls --json
```

```json
[
  {
    "id": "cmu2m6yjj000fyrbgj3r6y2ba",
    "name": "survie-2026",
    "family": "GAME",
    "status": "ACTIVE",
    "canPower": true,
    "address": "51.210.44.12:25565",
    "dimensions": { "cpuCores": 4, "ramGb": 8, "storageGb": 80 },
    "monthlyMillicents": 12400,
    "isFree": false,
    "createdAt": "2026-09-15T11:54:02.000Z"
  }
]
```

## Avec jq

```bash
# les identifiants de tout ce qui tourne
ark ls --json | jq -r '.[] | select(.status == "ACTIVE") | .id'

# les serveurs de jeu, par nom
ark ls --json | jq -r '.[] | select(.family == "GAME") | .name'

# ce que coûte l'ensemble, par mois
ark ls --json | jq '[.[].monthlyMillicents] | add / 1000'
```

## Les prix

Les montants arrivent en **millicents** : `12400` millicents valent `12,40 €`.
Un cent vaut dix millicents, donc le passage en euros est une division par mille.

```bash
ark ls --json | jq '.[] | {nom: .name, euros: (.monthlyMillicents / 1000)}'
```

## Les codes de sortie

`0` quand la commande a fait ce qu'on lui demandait, `1` sinon. Il n'y a pas d'autre
code : le message sur la sortie d'erreur dit quoi.

```bash
set -euo pipefail

if ! ark info "$SERVICE" > /dev/null; then
  echo "service introuvable" >&2
  exit 1
fi
```

## Ne rien demander

`--yes` saute les confirmations. Les commandes concernées : `ark rm`,
`ark backup restore`, `ark snapshot rollback`, `ark sftp --reset`.

```bash
ark backup restore survie-2026 avant-maj --yes
```

<Warning>
  `ark rm --yes` supprime sans demander de retaper le nom. Dans un script, vérifie
  deux fois quelle variable tu lui passes.
</Warning>

## Sur un runner d'intégration continue

Isole les identifiants du runner de ceux d'un poste :

```bash
export ARKYA_HOME="$RUNNER_TEMP/arkya"
export ARKYA_TOKEN="$ARKYA_DEPLOY_TOKEN"
ark login --no-docker
```

Un [jeton de portée registre](/commencer/jetons#les-deux-portees) suffit si le runner
ne fait que construire et déployer.

## La couleur

Le CLI colore quand la sortie est un terminal, et jamais sinon. `NO_COLOR=1` la coupe
aussi dans un terminal.
