# Versions et retour arrière

> Chaque image envoyée devient une version. Mets-en une en service, reviens à la précédente en une commande, sans rien reconstruire.

Source : https://docs.arkya.gg/applications/versions

## Construire, envoyer, mettre en service

`ark deploy` enchaîne tout. Tu peux aussi faire chaque étape à part :

```bash
ark build
ark push
ark deploy --release 8f2c1d9a44e0
```

- `ark build` construit l’image depuis ton `Dockerfile`, pour `linux/amd64`.
- `ark push` l’envoie au registre `registry.arkya.gg`, enregistre la version et attend le verdict de l’[analyse de sécurité](https://docs.arkya.gg/applications/image#l-analyse-de-securite).
- `ark deploy --release` met en service une version déjà envoyée.

## Le nom des versions

Par défaut, une version porte le commit Git en cours, sur 12 caractères. Avec des changements non commités, l’heure s’y ajoute. Hors d’un dépôt Git, c’est l’heure seule.

Pour choisir le nom, passe `--tag` :

```bash
ark deploy --tag v1.4.0
```

> **Bon à savoir**
>
> Si tu lances `ark build` puis `ark push` avec des changements non commités, les deux commandes calculent une heure différente, et `ark push` ne trouve pas l’image. Passe le même `--tag` aux deux, ou utilise `ark deploy`.

## La mise en service

Arkya remplace le conteneur en cours par la nouvelle version. Il n’y a qu’un conteneur par application : compte une courte coupure, le temps que la nouvelle version démarre.

La mise en service attend que ton application soit prête. Si elle ne démarre pas, `ark deploy` échoue et affiche les dernières lignes de son journal.

Une version bloquée par l’analyse de sécurité ne se met pas en service. Une version dont l’analyse court encore est refusée quelques secondes : relance la commande.

## Revenir en arrière

Les versions envoyées restent disponibles. Pour revenir à la précédente, sans rien reconstruire :

```bash
ark status
ark deploy --release 7a1b2c3d4e5f
```

`ark status` liste les cinq dernières versions et marque celle en service. L’onglet **Versions** de l’application, dans l’espace client, les liste toutes, avec le verdict de leur analyse et un bouton **Mettre en service**.

> **Attention**
>
> Si une nouvelle version ne démarre pas, Arkya ne remet pas l’ancienne en service tout seul. C’est à toi de lancer `ark deploy --release` avec la version précédente.

## Sans le CLI

L’onglet **Versions** donne aussi les identifiants du registre. Avec eux, `docker login`, `docker build` et `docker push` suffisent ; tu mets ensuite la version en service depuis le même onglet.

```bash
docker build --platform linux/amd64 -t registry.arkya.gg/c-xxxxxxxxxxxx/mon-api:v1 .
docker push registry.arkya.gg/c-xxxxxxxxxxxx/mon-api:v1
```

L’adresse exacte de ton dépôt est affichée dans l’onglet **Versions**.
