-
Notifications
You must be signed in to change notification settings - Fork 1
95 lines (87 loc) · 3.92 KB
/
Copy pathfly-deploy.yml
File metadata and controls
95 lines (87 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# See https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/
name: Fly Deploy
on:
push:
branches:
- main
# Redesplegar la última imagen sin tener que inventar un commit (útil para
# recuperar de un deploy a medias o para medir el pipeline).
workflow_dispatch:
jobs:
# Vigilancia de desfase (typecheck, vitest, bloques generados, skills). Corre EN
# PARALELO y NO bloquea el deploy (decisión deliberada): un rojo se ve en Actions,
# no detiene prod. Para convertirlo en gate: `needs: verify` en deploy.
verify:
name: Verify (typecheck, tests, docs)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
# Los `./+types/*` de React Router se generan; sin esto typecheck falla en limpio.
- run: npx react-router typegen
- run: npm run typecheck
- run: npm run check:docs
- run: npm run check:skills
- run: npx vitest run
env:
CI: "true"
deploy:
name: Deploy app
runs-on: ubuntu-latest
concurrency: deploy-group
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Warn if packages changed without version bump
run: |
if git diff HEAD~1 --name-only | grep -qE '^(packages/|cli/)'; then
if ! git diff HEAD~1 --name-only | grep -qE '(packages/.*/package\.json|cli/package\.json)'; then
echo "::warning::Changes in packages/ or cli/ detected without a package.json version bump. Did you forget to publish?"
fi
fi
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- uses: superfly/flyctl-actions/setup-flyctl@master
# Empujamos la imagen DIRECTO al registry de Fly en vez de cargarla en el
# docker local y dejar que `flyctl --local-only` la suba entera. Medido en
# el pipeline anterior: exportar a formato docker 69s + importar al docker
# local 33s + subida de flyctl 116s = ~3.5 min moviendo bits que buildx ya
# tenía en la mano. Empujando desde buildx sólo viajan las capas que
# cambiaron, y las que no ya están en el registry.
- name: Log in to Fly registry
run: flyctl auth docker
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
- name: Build and push image
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: registry.fly.io/easybits:${{ github.sha }}
# CACHEBUST = SHA del commit → fuerza recompilar la fuente en cada push
# (las deps siguen cacheadas). Sin esto el gha cache a veces servía un
# binario viejo y tools nuevas (ej. call_create) "desaparecían".
build-args: |
CACHEBUST=${{ github.sha }}
# El cache se queda en GitHub Actions. Se probó moverlo al registry de
# Fly esperando ahorrar los ~34s de restaurar capas, y MIDIÓ PEOR y con
# mucha más varianza: 129s con gha contra 132/140/178/205s con registry
# — subir las capas de cache a Fly en cada build cuesta más de lo que
# ahorra al bajarlas. Si alguien lo vuelve a intentar, que mida el
# estado estacionario con un SHA NUEVO: un `workflow_dispatch` repite
# el SHA, no invalida CACHEBUST y da un 110s engañoso.
cache-from: type=gha
# mode=max, NO min: este Dockerfile es multi-etapa y las capas caras
# (npm ci, prisma generate) viven en `builder`, que no forma parte de
# la imagen final. Con `min` no se cachearían y `npm ci` correría
# entero en cada deploy — cambiar 33s de export por varios minutos.
cache-to: type=gha,mode=max
- name: Deploy
run: flyctl deploy --image registry.fly.io/easybits:${{ github.sha }}
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}