Merge pull request #1 from IANewCool/ci/vercel-deploy

ci(web): Vercel deploy (Flutter Web) + SPA rewrites
This commit is contained in:
IANewCool 2025-08-11 19:55:21 -04:00 committed by GitHub
commit 4b1aee80c7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 59 additions and 0 deletions

36
.github/workflows/web-vercel.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: Deploy Web to Vercel
on:
push:
branches: [develop, main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Cache pub dependencies
- uses: actions/cache@v3
with:
path: ~/.pub-cache
key: ${{ runner.os }}-pub-${{ hashFiles('pubspec.yaml') }}
restore-keys: ${{ runner.os }}-pub-
- uses: subosito/flutter-action@v2
with: { flutter-version: '3.29.2' }
# Create .env file for build
- run: |
echo "SPOTIFY_SECRETS=dummy_client_id:dummy_client_secret" > .env
echo "LASTFM_API_KEY=dummy_lastfm_key" >> .env
echo "LASTFM_API_SECRET=dummy_lastfm_secret" >> .env
echo "HIDE_DONATIONS=0" >> .env
echo "ENABLE_UPDATE_CHECK=1" >> .env
echo "RELEASE_CHANNEL=nightly" >> .env
echo "DISABLE_SPOTIFY_IMAGES=0" >> .env
- run: flutter pub get
- run: flutter build web --release --dart-define=API_BASE=https://api.tunestream.io
- run: npm i -g vercel
# deploy del directorio estático generado por Flutter
- run: vercel deploy --prod build/web --yes --token ${{ secrets.VERCEL_TOKEN }} --name tunestream-app
YAML < /dev/null

23
vercel.json Normal file
View File

@ -0,0 +1,23 @@
{
"cleanUrls": true,
"trailingSlash": false,
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }],
"headers": [
{
"source": "/(.*)",
"headers": [
{ "key": "X-Frame-Options", "value": "DENY" },
{ "key": "X-Content-Type-Options", "value": "nosniff" },
{ "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
{ "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=()" }
]
},
{
"source": "/(.*\\.(js|css|ico|png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot))",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
]
}
]
}
JSON < /dev/null