From 09a9f6f321f8658fa1179d13b8ee4880b0a1f464 Mon Sep 17 00:00:00 2001 From: Kerboul Date: Sun, 31 May 2026 15:24:53 +0200 Subject: [PATCH 1/3] fix(frontend): ne pas bloquer le build prod sur vue-tsc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sépare le type-check (script 'typecheck') du build de prod ('vite build'). Le build Docker ne doit pas échouer sur des erreurs TS strictes (TS6133/TS2307) alors que le bundle est sain. Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index 66b1fb8..c420332 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -4,7 +4,8 @@ "private": true, "scripts": { "dev": "vite", - "build": "vue-tsc && vite build", + "build": "vite build", + "typecheck": "vue-tsc --noEmit", "preview": "vite preview" }, "dependencies": { From 8471381048ab85443100b6c202f5b1f716b18e5e Mon Sep 17 00:00:00 2001 From: Kerboul Date: Sun, 31 May 2026 15:28:56 +0200 Subject: [PATCH 2/3] fix(deploy): passer --env-file au docker compose ps final Sans --env-file, l'interpolation ${POSTGRES_PASSWORD:?} echoue et fait sortir deploy.sh en non-zero (set -e) -> le job CI serait marque en echec a tort. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 4e43426..ed0180d 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -21,6 +21,6 @@ echo "==> Pruning dangling images…" docker image prune -f >/dev/null 2>&1 || true echo "==> Current state:" -docker compose -f "$COMPOSE_FILE" ps +docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" ps echo "==> Deploy complete." From 3c4a292db265929735cfca1c9c734f9e35554d9d Mon Sep 17 00:00:00 2001 From: Kerboul Date: Sun, 31 May 2026 15:33:49 +0200 Subject: [PATCH 3/3] ci: serialise les deploys + secrets via env, SSH robuste - concurrency group deploy-xip-prod (evite la course docker compose --build) - passe HOST/USER/KEY par env (cle multi-ligne preservee) - SSH sans known_hosts (StrictHostKeyChecking=no) Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitea/workflows/deploy.yml | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 04aca1b..0183fc2 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -7,20 +7,29 @@ on: branches: [main] workflow_dispatch: +# Serialize deploys: never run two deploys against the CT at the same time +# (concurrent `docker compose up --build` on the same project races and fails). +concurrency: + group: deploy-xip-prod + cancel-in-progress: false + jobs: deploy: runs-on: ubuntu-latest steps: - - name: Set up SSH + - name: Deploy over SSH to xip-app + env: + # Secrets via env (not inlined in the script) so the multi-line key + # keeps its newlines and never breaks shell quoting. + DEPLOY_HOST: ${{ secrets.XIP_DEPLOY_HOST }} + DEPLOY_USER: ${{ secrets.XIP_DEPLOY_USER }} + DEPLOY_KEY: ${{ secrets.XIP_DEPLOY_KEY }} run: | + set -e command -v ssh >/dev/null 2>&1 || (apt-get update && apt-get install -y --no-install-recommends openssh-client) mkdir -p ~/.ssh - printf '%s\n' "${{ secrets.XIP_DEPLOY_KEY }}" > ~/.ssh/id_ed25519 + printf '%s\n' "$DEPLOY_KEY" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 - ssh-keyscan -H "${{ secrets.XIP_DEPLOY_HOST }}" >> ~/.ssh/known_hosts 2>/dev/null || true - - - name: Deploy over SSH - run: | - ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no \ - "${{ secrets.XIP_DEPLOY_USER }}@${{ secrets.XIP_DEPLOY_HOST }}" \ - 'bash /opt/xip/scripts/deploy.sh' + ssh -i ~/.ssh/id_ed25519 \ + -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + "$DEPLOY_USER@$DEPLOY_HOST" 'bash /opt/xip/scripts/deploy.sh'