> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploys & intégration Git

> Inspectez l'historique des deploys, liez un dépôt via la GitHub App Square Cloud, ou utilisez l'ancien flux webhook.

`app.deploys` expose le [`DeploysModule`](https://github.com/squarecloudofc/sdk-api-js/blob/main/src/modules/deploys.ts), qui couvre à la fois la chronologie des deploys et les deux voies d'intégration GitHub.

```typescript theme={null}
const app = await api.applications.fetch("abc123def456abc123def456");
app.deploys; // DeploysModule
```

## Lister l'historique des deploys

`app.deploys.list()` renvoie `Deployment[][]` — **un tableau interne par deploy**, chacun parcourant les états du cycle de vie : `pending → clone → commit → restarting → success | error`.

```typescript theme={null}
const history = await app.deploys.list();

for (const timeline of history) {
    const last = timeline.at(-1);
    console.log(`Deploy ${last?.id} ended as ${last?.state}`);

    for (const event of timeline) {
        if (event.state === "clone")  console.log(`  cloned branch ${event.branch}`);
        if (event.state === "commit") console.log(`  files`, event.files);
    }
}
```

Aplatissez le résultat si vous voulez une seule liste chronologique :

```typescript theme={null}
const flat = history.flat();
```

<Warning>
  En v3, cette méthode renvoyait un `Deployment[]` plat. La v4 renvoie `Deployment[][]` afin que vous puissiez regrouper les événements par deploy. Utilisez `.flat()` pour conserver l'ancienne forme.
</Warning>

<Note>
  `Deployment.id` est désormais un simple SHA-1 de commit (40 caractères hexadécimaux). En v3, il était formaté comme `` `git-${string}` ``.
</Note>

## Lier via la GitHub App Square Cloud (recommandé)

`app.deploys.linkGithubApp({ repositoryName, repositoryBranch })` lie un dépôt GitHub à l'application via la GitHub App officielle.

```typescript theme={null}
const repo = await app.deploys.linkGithubApp({
    repositoryName: "octocat/hello-world",
    repositoryBranch: "main",
});

console.log(`Linked ${repo.full_name}#${repo.branch}`);
```

Pour supprimer le lien :

```typescript theme={null}
await app.deploys.unlinkGithubApp();
```

<Warning>
  `linkGithubApp` et `unlinkGithubApp` nécessitent un **token de session (JWT)** comme clé d'API — les clés d'API simples ne sont pas acceptées par ces endpoints.
</Warning>

## Lier via l'ancien flux webhook

`app.deploys.integrateGithubWebhook(accessToken)` configure l'ancienne intégration basée sur les webhooks à l'aide d'un GitHub Personal Access Token.

```typescript theme={null}
const webhookUrl = await app.deploys.integrateGithubWebhook("ghp_xxx...");
console.log(`Configure GitHub to POST to: ${webhookUrl}`);
```

Passez `"@"` pour supprimer le webhook :

```typescript theme={null}
await app.deploys.integrateGithubWebhook("@");
```

## Inspecter la configuration actuelle

`app.deploys.current()` renvoie la liaison GitHub App et l'URL du webhook actuellement configurées, le cas échéant.

```typescript theme={null}
const current = await app.deploys.current();

console.log(current.app);     // GitHub App linkage (or null)
console.log(current.webhook); // legacy webhook URL (or null)
```

Il existe également un raccourci `app.deploys.webhookURL()` qui ne renvoie que l'URL du webhook (ou `undefined`).
