-
Notifications
You must be signed in to change notification settings - Fork 2
179 lines (150 loc) · 7.43 KB
/
deploy-functions.yml
File metadata and controls
179 lines (150 loc) · 7.43 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
name: Deploy Azure Functions
on:
push:
branches: ["main"]
concurrency:
group: functions-prod
cancel-in-progress: true
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Checkout repository source code
- name: Checkout
uses: actions/checkout@v4
# Setup Node.js runtime
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
# Install all monorepo dependencies (npm workspaces)
- name: Install dependencies
run: npm ci
# Build only the packages needed by Azure Functions (avoids building front/Next.js
# which fails under Corepack/Node 22 due to SWC + packageManager conflict)
- name: Build internal packages for functions
run: |
npm run -w db-model build
npm run -w arcgis build --if-present
npm run -w scraping-cuenca-mediterranea build --if-present
npm run -w scraping-cuenca-cantabrico build --if-present
npm run -w scraping-cuenca-catalana build --if-present
npm run -w scraping-cuenca-duero build --if-present
npm run -w scraping-cuenca-jucar build --if-present
npm run -w scraping-cuenca-segura build --if-present
npm run -w scraping-cuenca-mino-sil build --if-present
npm run -w @embalse-info/db build --if-present
# Build ONLY the functions workspace (TypeScript -> dist/)
# This runs clean + type-check + build
- name: Build functions workspace
run: npm run -w functions ci
# Prepare a clean deployment folder that Azure expects.
# Azure Functions requires host.json at the root.
# We also copy compiled dist output and the internal db package.
- name: Prepare deploy folder
run: |
rm -rf deploy
mkdir -p deploy/packages deploy/integrations
# Copy required runtime files
cp functions/host.json deploy/host.json
cp -R functions/dist deploy/dist
# Copy all workspace packages needed at runtime
cp -R packages/db deploy/packages/db
cp -R packages/db-model deploy/packages/db-model
cp -R integrations/arcgis deploy/integrations/arcgis
cp -R integrations/scraping-cuenca-mediterranea deploy/integrations/scraping-cuenca-mediterranea
cp -R integrations/scraping-cuenca-cantabrico deploy/integrations/scraping-cuenca-cantabrico
cp -R integrations/scraping-cuenca-catalana deploy/integrations/scraping-cuenca-catalana
cp -R integrations/scraping-cuenca-duero deploy/integrations/scraping-cuenca-duero
cp -R integrations/scraping-cuenca-jucar deploy/integrations/scraping-cuenca-jucar
cp -R integrations/scraping-cuenca-segura deploy/integrations/scraping-cuenca-segura
cp -R integrations/scraping-cuenca-mino-sil deploy/integrations/scraping-cuenca-mino-sil
# Strip devDependencies and rewrite workspace refs to file: paths
node -e "
const fs = require('fs');
function patchPkg(p, depOverrides) {
const pkg = JSON.parse(fs.readFileSync(p, 'utf8'));
delete pkg.devDependencies;
if (depOverrides) {
pkg.dependencies = { ...pkg.dependencies, ...depOverrides };
}
fs.writeFileSync(p, JSON.stringify(pkg, null, 2));
}
// db: point workspace deps to file: paths
patchPkg('deploy/packages/db/package.json', {
'arcgis': 'file:../../integrations/arcgis',
'db-model': 'file:../db-model',
'scraping-cuenca-mediterranea': 'file:../../integrations/scraping-cuenca-mediterranea',
'scraping-cuenca-cantabrico': 'file:../../integrations/scraping-cuenca-cantabrico',
'scraping-cuenca-catalana': 'file:../../integrations/scraping-cuenca-catalana',
'scraping-cuenca-duero': 'file:../../integrations/scraping-cuenca-duero',
'scraping-cuenca-jucar': 'file:../../integrations/scraping-cuenca-jucar',
'scraping-cuenca-segura': 'file:../../integrations/scraping-cuenca-segura',
'scraping-cuenca-mino-sil': 'file:../../integrations/scraping-cuenca-mino-sil'
});
// arcgis: point db-model to file: path
patchPkg('deploy/integrations/arcgis/package.json', {
'db-model': 'file:../../packages/db-model'
});
// scraping-cuenca-mediterranea: point db-model to file: path
patchPkg('deploy/integrations/scraping-cuenca-mediterranea/package.json', {
'db-model': 'file:../../packages/db-model'
});
// scraping-cuenca-cantabrico: point db-model to file: path
patchPkg('deploy/integrations/scraping-cuenca-cantabrico/package.json', {
'db-model': 'file:../../packages/db-model'
});
// scraping-cuenca-catalana: point db-model to file: path
patchPkg('deploy/integrations/scraping-cuenca-catalana/package.json', {
'db-model': 'file:../../packages/db-model'
});
// scraping-cuenca-duero: point db-model to file: path
patchPkg('deploy/integrations/scraping-cuenca-duero/package.json', {
'db-model': 'file:../../packages/db-model'
});
// scraping-cuenca-jucar: point db-model to file: path
patchPkg('deploy/integrations/scraping-cuenca-jucar/package.json', {
'db-model': 'file:../../packages/db-model'
});
// scraping-cuenca-segura: point db-model to file: path
patchPkg('deploy/integrations/scraping-cuenca-segura/package.json', {
'db-model': 'file:../../packages/db-model'
});
// scraping-cuenca-mino-sil: point db-model to file: path
patchPkg('deploy/integrations/scraping-cuenca-mino-sil/package.json', {
'db-model': 'file:../../packages/db-model'
});
// db-model: just strip devDeps
patchPkg('deploy/packages/db-model/package.json');
"
# Generate a deploy-specific package.json.
node -e "
const fs = require('fs');
const pkg = JSON.parse(fs.readFileSync('functions/package.json','utf8'));
pkg.name = 'functions-deploy';
pkg.main = 'dist/index.js';
delete pkg.devDependencies;
delete pkg.scripts;
pkg.dependencies = pkg.dependencies || {};
pkg.dependencies['@embalse-info/db'] = 'file:./packages/db';
fs.writeFileSync('deploy/package.json', JSON.stringify(pkg, null, 2));
"
# Install only production dependencies inside deploy/
# This creates deploy/node_modules ready for Azure runtime
cd deploy
npm install --omit=dev --ignore-scripts
# Replace symlinks with real copies so the deploy zip is self-contained
find node_modules -type l | while read link; do
target=$(readlink -f "$link")
rm "$link"
cp -R "$target" "$link"
done
# Deploy the prepared folder to Azure Functions
- name: Deploy to Azure Functions
uses: Azure/functions-action@v1.5.3
with:
app-name: fn-info-embalse-prod
package: deploy
publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}
sku: flexconsumption