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

# Construire et publier

> Créez, emballez, testez sous contrainte et publiez le pilote d'imprimante PC.

# Construire et publier

Le package actuel est `@plato/pc-printer`.

## Scripts

| Scénario | Commande                                                                                       | But                                                                             |
| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| `clean`  | `node scripts/clean.js`                                                                        | Supprime les artefacts de build, la sortie, les journaux, le zip et `dump.rdb`. |
| `build`  | `esbuild src/index.ts src/scripts/*.ts --bundle --platform=node --target=node12 --outdir=dist` | Regroupe le code d’exécution.                                                   |
| `start`  | `node dist/index.js`                                                                           | Démarre le pilote intégré.                                                      |
| `pkg`    | `pkg dist/index.js -t node12-win-x64 -o output/plato-printer.exe --config package.json`        | Crée un exécutable Windows.                                                     |
| `bundle` | version bump, build, préparation Redis, pkg, zip                                               | Produit `plato-printer.zip`.                                                    |
| `stress` | `node scripts/stress-test.js`                                                                  | Exécute un test de charge d'imprimante fictive.                                 |

## Construire localement

```sh theme={null}
pnpm --filter @plato/pc-printer clean
pnpm --filter @plato/pc-printer build
pnpm --filter @plato/pc-printer start
```

## Créer un zip de version

```sh theme={null}
pnpm --filter @plato/pc-printer bundle
```

Le script du bundle :

1. Incréments `src/version.ts`.
2. Construit le pilote dans `dist`.
3. Prépare le binaire Windows Redis configuré.
4. Construit `output/plato-printer.exe`.
5. Copie `config.json`.
6. Copie les ressources Caddy.
7. Copie les certificats.
8. Copie `redis-binaries/<redis.version>`.
9. Crée `plato-printer.zip`.

## Contenu de la version

```txt theme={null}
plato-printer.exe
config.json
assets/
  caddy/
  certs/
redis-binaries/
```

## Gestion des versions

`src/version.ts` contient :

```ts theme={null}
export const BUILD_VERSION = 66;
```

La version de build est renvoyée par `GET /health` et imprimée dans la bannière de démarrage. Ne modifiez pas ce fichier manuellement ; `scripts/increment-version.js` le met à jour pendant `pnpm bundle`.

## Préparation du caddie

Caddy est épinglé sur `2.6.4`.

Pour télécharger Caddy dans `assets/caddy` avant de le regrouper :

```sh theme={null}
pnpm --filter @plato/pc-printer exec node scripts/download-caddy.js
```

Si `assets/caddy/caddy.exe` existe, le programme d'installation du runtime peut le copier au lieu de télécharger Caddy sur l'ordinateur du client.

## Redis Préparation binaire

`scripts/prepare-redis-binaries.js` lit `config.json` et télécharge la version configurée de Windows Redis si elle est manquante.

Le chemin attendu est :

```txt theme={null}
redis-binaries/<version>/Redis-<version>-Windows-x64-msys2/redis-server.exe
```

## Test de résistance

Le test de résistance démarre des imprimantes TCP fictives et envoie de nombreuses requêtes `/print`.

```sh theme={null}
pnpm --filter @plato/pc-printer stress
```

Options utiles :

```sh theme={null}
node scripts/stress-test.js \
  --host http://127.0.0.1:8080 \
  --printers 5 \
  --jobs 100 \
  --base-port 9200 \
  --poll-ms 500 \
  --timeout-ms 60000
```

Le test réussit lorsque toutes les files d’attente cibles sont épuisées.

## Liste de contrôle de sortie

1. Confirmez que `config.json` est correct pour la version.
2. Confirmez que les actifs Caddy existent si HTTPS doit fonctionner hors ligne.
3. Exécutez `pnpm --filter @plato/pc-printer clean`.
4. Exécutez `pnpm --filter @plato/pc-printer bundle`.
5. Exécutez l'exécutable à partir de `output/`.
6. Vérifiez `GET /health`.
7. Exécutez un véritable test d’impression.
8. Vérifiez que `plato-printer.zip` contient les fichiers attendus.
