Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
0dc4c06
refactor: exhaustive codebase cleanup - remove 90+ ghost files, fix b…
claude Mar 17, 2026
37f5529
chore: update package-lock.json after npm install
claude Mar 17, 2026
583b6e3
refactor: consolidate notificationSound into notificationSounds
claude Mar 17, 2026
0afe862
fix: resolve 8 code anomalies found in exhaustive analysis
claude Mar 17, 2026
57b18cd
fix: resolve 12 code anomalies - env validation, memory leaks, type s…
claude Mar 17, 2026
c814f9c
fix: resolve 7 medium-severity anomalies - typos, leaks, error handling
claude Mar 17, 2026
f61de06
fix: replace console.error with logger, sanitize HTML in LinkPreview
claude Mar 17, 2026
a3e73fc
refactor: remove 64 ghost files and 4 orphaned tests (~15,000 lines)
claude Mar 17, 2026
f0131bb
refactor: remove 4 more ghost files and orphaned tests
claude Mar 17, 2026
e1fd1d5
refactor: remove final 4 ghost files (SentimentIndicator, shadcn/ui s…
claude Mar 17, 2026
ff01525
fix: add comments to empty catch blocks for audio playback
claude Mar 17, 2026
19b331d
chore: remove 13 unused npm dependencies
claude Mar 17, 2026
d06d2f9
fix: resolve memory leaks, race conditions, and stale closures across…
claude Mar 17, 2026
bfc6ffb
fix: resolve page-layer bugs, delete ghost files, remove unused imports
claude Mar 18, 2026
9375e67
fix: eliminate duplicate image loading, DRY filename generation, MFAV…
claude Mar 18, 2026
a030071
fix: add missing .catch() handlers, error logging, remove unused forw…
claude Mar 18, 2026
409cc0b
fix: add cleanup for setTimeout timers in EasterEggs and Gamification…
claude Mar 18, 2026
cea6f7f
fix: unused imports, missing error checks, Object URL leak, stale clo…
claude Mar 18, 2026
fc934f9
fix: add error handling to ChatPanel, RealtimeInboxView, useCampaigns
claude Mar 18, 2026
5ca80bc
fix: add error logging to all catch blocks in InstanceSettingsDialog
claude Mar 18, 2026
029d17c
fix: remove duplicate tailwind key, enable noFallthroughCasesInSwitch
claude Mar 18, 2026
f8a2166
fix: Object URL leaks in MediaPreview/VoiceSelector + clipboard error…
claude Mar 18, 2026
e0c25de
fix: race condition in goal notifications, error handling in exports,…
claude Mar 18, 2026
f156d1b
fix: unused imports, AudioContext leak, null-safe access, and error l…
claude Mar 18, 2026
71cc48e
fix: add error handling to all navigator.clipboard.writeText calls
claude Mar 18, 2026
07b2b50
fix: add error logging to all empty catch blocks in API-calling compo…
claude Mar 18, 2026
d0f9aef
fix: logic bug in GoalsDashboard goal visibility + remove unused imports
claude Mar 18, 2026
0ebd5b3
fix: resolve all 186 ESLint errors across 100 files
claude Mar 19, 2026
2791b68
fix: add .env to .gitignore and remove invalid CSS preload from index…
claude Mar 19, 2026
3898241
fix: correct mock module name in 3 test files (notificationSound -> n…
claude Mar 19, 2026
40ba00d
fix: phase 1 stability - staleTime, ProtectedRoute timeout, realtime …
claude Mar 20, 2026
2702793
fix: add error handling to silent query failures in hooks and views
claude Mar 20, 2026
5ea8337
fix: prevent ProtectedRoute infinite loading and auth race conditions
claude Mar 20, 2026
f43bf25
security: add security headers to vite config and index.html
claude Mar 21, 2026
4f1925b
security: add noopener,noreferrer to all window.open calls
claude Mar 21, 2026
61018d6
perf: reduce aggressive refetchInterval and disable refetchOnWindowFo…
claude Mar 21, 2026
9bbb42e
security: add URL validation to prevent open redirect vulnerabilities
claude Mar 21, 2026
24dff44
test: add tests for 7 previously untested hooks
claude Mar 21, 2026
5a692fb
test: add tests for 13 previously untested hooks
claude Mar 21, 2026
89135b1
fix: add Supabase setup seed script and improve auth error handling
claude Mar 21, 2026
8a0a598
fix: switch to accessible Supabase project and setup complete database
claude Mar 21, 2026
1568d9f
feat: configure Evolution API integration with live instance
claude Mar 21, 2026
8d471ad
chore: add supabase temp dir to gitignore, track seed.sql
claude Mar 21, 2026
a9382a6
test: add comprehensive E2E test batteries across all modules
claude Mar 21, 2026
4009687
test: update E2E test files from parallel agents (in-progress fixes)
claude Mar 21, 2026
aa60a44
test: add Contacts, Queues, Tags test batteries (158 tests passing)
claude Mar 21, 2026
08daf75
test: add Settings, Admin, Products, Pipeline tests (129 tests passing)
claude Mar 21, 2026
10245a7
security: comprehensive backend security hardening (OWASP Top 10)
claude Mar 25, 2026
7c7b9af
test: include pending test file updates from previous sessions
claude Mar 25, 2026
3100e94
feat: add fetch retry/timeout, rate limiting, and fix tests (Phase 2)
claude Mar 25, 2026
66be884
feat: rate limiting, subscription manager, and additional fixes (Phas…
claude Mar 25, 2026
f96f890
fix: update tests for subscription manager refactoring
claude Mar 25, 2026
734c554
feat: Phase 3 infrastructure - circuit breaker, health checks, struct…
claude Mar 25, 2026
578ca03
feat: add health check endpoints to edge functions
claude Mar 25, 2026
896e3c9
feat: Phase 3 - AI cache, DLQ, idempotency, RUM, and function integra…
claude Mar 25, 2026
89b74f6
feat: integrate structured logging and DLQ into webhook and AI functions
claude Mar 25, 2026
07c6a63
feat: integrate DLQ and idempotency into webhooks and email functions
claude Mar 25, 2026
c62919f
feat: integrate structured logging into AI analysis and chatbot funct…
claude Mar 25, 2026
5b1af48
feat: add circuit breaker to chatbot-l1 edge function
claude Mar 25, 2026
4ef2398
feat: add structured logging to evolution-api edge function
claude Mar 25, 2026
2fc0e6b
feat: complete Phase 3 - structured logging and circuit breaker in re…
claude Mar 25, 2026
034f641
feat: add cleanup-ai-cache function and update config.toml
claude Mar 25, 2026
cfdd86c
feat: Phase 4 security and config hardening
claude Mar 26, 2026
d610694
feat: add model versioning to chatbot-l1 cache key
claude Mar 26, 2026
698e3df
feat: add input validation utility and fix type safety issues
claude Mar 26, 2026
ee1e1b8
feat: update Supabase SDK to 2.87.1, add input validation, fix types
claude Mar 26, 2026
0c2693e
feat: fix type assertions and add validation to remaining functions
claude Mar 26, 2026
d68dce2
feat: complete Phase 4 - type safety fixes and input validation
claude Mar 26, 2026
6c2c225
fix: update useRealtimeMessages tests for join query pattern
claude Mar 26, 2026
7f9ae96
docs: add comprehensive backend analysis report v2.0
claude Mar 26, 2026
359adf6
feat: implement Phase 5 security hardening and performance improvements
claude Mar 26, 2026
3712eab
feat: Phase 6 - comprehensive security hardening and infrastructure i…
claude Mar 27, 2026
b97b3f1
feat: Phase 7 - audit-driven improvements across 22 dimensions
claude Mar 27, 2026
e737d91
feat: Phase 8 - security hardening, validation, and code quality impr…
claude Mar 28, 2026
c7c3341
feat: Phase 9 - performance indexes, error standardization, and test …
claude Mar 28, 2026
a32b15c
feat: Phase 10 - replace console.* with structured logger and fix any…
claude Mar 28, 2026
38c181b
feat: Phase 11 - CSP meta tag for production security and build optim…
claude Mar 28, 2026
1f3bc1c
feat: Phase 12 - env validation at startup and error response standar…
claude Mar 28, 2026
ff30806
feat: Phase 13 - complete error response standardization and React pe…
claude Mar 29, 2026
42f2c74
fix: Phase 13b - fix last 6 inline error responses in AI edge functions
claude Mar 29, 2026
936e363
fix: remove stray closing bracket causing syntax error in ai-suggest-…
claude Mar 29, 2026
6ff4a37
feat: Phase 14 - dashboard performance optimizations and test coverage
claude Mar 29, 2026
33d4cda
feat: Phase 15 - add useSLAMetrics test suite (7 tests)
claude Mar 29, 2026
2679b99
feat: Phase 16 - final edge function standardization and RealtimeMetr…
claude Mar 29, 2026
bab60b1
feat: improve mobile responsiveness across critical pages
claude Apr 1, 2026
135c849
feat: Phase 17 - comprehensive accessibility improvements
claude Apr 1, 2026
072d93b
feat: Phase 18 - React.memo on heavy inbox components
claude Apr 1, 2026
5397588
feat: Phase 19 - form validation with user feedback on ContactForm
claude Apr 1, 2026
0ab980c
feat: Phase 20 - add RUM (Real User Monitoring) test suite
claude Apr 1, 2026
e44e1d3
feat: Phase 21 - harden edge function input validation
claude Apr 1, 2026
eb7695f
feat: Phase 22 - final audit fixes (a11y, error boundaries, tests)
claude Apr 1, 2026
b449d5e
feat: Phase 23 - add form validation feedback to 3 views
claude Apr 1, 2026
1837324
feat: Phase 24 - add loading skeletons to 3 views
claude Apr 1, 2026
e07ec8e
Phase 25-27: aria-labels, dead code removal, type safety fixes
claude Apr 1, 2026
401ed9b
Phase 28-29: AgentsView a11y, DashboardFilters test coverage
claude Apr 2, 2026
21bc191
feat: integrate Wavoip for WhatsApp VoIP calls (make & receive)
claude Apr 2, 2026
0c7cb8a
feat: replace Wavoip SDK with custom VoIP engine for WhatsApp calls
claude Apr 2, 2026
2a17ae2
feat: Phase 30-31 — React.memo optimizations + VoIP test coverage
claude Apr 2, 2026
bb966a9
feat: Phase 32-34 — accessibility, performance, call cleanup
claude Apr 2, 2026
68a6ff2
fix: P0/P1 audit — type safety, i18n, React.memo, ErrorBoundary, a11y
claude Apr 2, 2026
1966774
feat: P2 improvements — skeleton loaders, eslint-disable cleanup
claude Apr 2, 2026
39beb98
fix: i18n completeness, type safety in VoIP, remove unsafe casts
claude Apr 2, 2026
31a9f85
fix: memory leak in ChatPanel, form accessibility in ContactForm
claude Apr 2, 2026
a7f8d2f
refactor: eliminate eslint-disable comments with useRef/useCallback
claude Apr 2, 2026
bc2298b
docs: add justification comments to remaining eslint-disable directives
claude Apr 2, 2026
cebb615
fix: error handling, memory leaks, performance, type safety improvements
claude Apr 2, 2026
eff7394
fix: add missing aria-labels to icon-only buttons
claude Apr 2, 2026
aa9356f
feat: accessibility polish — memo, form labels, autoFocus in dialogs
claude Apr 2, 2026
db6386d
feat: Onda 1 quick wins — husky, security headers, strict TS, CI type…
claude Apr 2, 2026
7590c66
refactor: Onda 2 — extract useReportsData hook, DOMPurify, global err…
claude Apr 2, 2026
fca25ef
feat: add circuit breaker pattern for Evolution API resilience
claude Apr 2, 2026
d1bb0f0
feat: add rate limiter, sanitize tests, and test coverage improvements
claude Apr 2, 2026
7de7acf
fix: add input validation to webhook Edge Functions
claude Apr 2, 2026
36e25f5
feat: add performance monitoring with Web Vitals reporting
claude Apr 2, 2026
821fcdd
feat: add API response Zod schemas and comprehensive validation tests
claude Apr 2, 2026
97e47b6
perf: improve bundle splitting — ChatPanel 1879KB → 196KB
claude Apr 2, 2026
4237683
fix: smart React Query retry strategy and deduplicate error handlers
claude Apr 2, 2026
272916b
chore: add security-focused ESLint rules
claude Apr 2, 2026
cf0e9bc
docs: add migration guide and strengthen ESLint security rules
claude Apr 2, 2026
af3a3a5
chore: extend CODEOWNERS for auth and validation files
claude Apr 2, 2026
eb5f5c1
refactor: remove unused financial features (wallet, payments, carteira)
claude Apr 4, 2026
14c0dd6
refactor: drop client_wallet_rules table and auto_assign_contact func…
claude Apr 4, 2026
13cde92
docs: remove all references to unused financial features from documen…
claude Apr 4, 2026
95ca4eb
refactor: remove unused Stripe payment gateway integration
claude Apr 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 6 additions & 3 deletions .env
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
VITE_SUPABASE_PROJECT_ID="allrjhkpuscmgbsnmjlv"
VITE_SUPABASE_PUBLISHABLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFsbHJqaGtwdXNjbWdic25tamx2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjU3NDc3NDQsImV4cCI6MjA4MTMyMzc0NH0.7S2yN87sjm22J9DXC7Njo7UaXQ2tHk6XMJheNVqHA74"
VITE_SUPABASE_URL="https://allrjhkpuscmgbsnmjlv.supabase.co"
VITE_SUPABASE_PROJECT_ID="rhqfnvvjdwvnulxybmrk"
VITE_SUPABASE_PUBLISHABLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InJocWZudnZqZHd2bnVseHlibXJrIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjkxMDYyMjcsImV4cCI6MjA4NDY4MjIyN30.Kv1vBdF0mA0cCfyQI63AdzuIvYW1uxtn6Gu8UZrqBng"
VITE_SUPABASE_URL="https://rhqfnvvjdwvnulxybmrk.supabase.co"

# EVOLUTION API
VITE_EVOLUTION_API_URL=https://evolution.atomicabr.com.br
17 changes: 16 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@

# SUPABASE
VITE_SUPABASE_URL=https://seu-projeto.supabase.co
VITE_SUPABASE_ANON_KEY=sua-anon-key-aqui
VITE_SUPABASE_PUBLISHABLE_KEY=sua-anon-key-aqui

# BITRIX24 (opcional - se integrado)
VITE_BITRIX_WEBHOOK_URL=https://promobrindes.bitrix24.com.br/rest/1/seu-webhook/

# Evolution API credentials are configured as Supabase Edge Function secrets (not in frontend)

# APP CONFIG
VITE_APP_NAME=Sistema Empresarial
VITE_APP_ENV=production
Expand All @@ -18,6 +20,19 @@ VITE_APP_ENV=production
VITE_ENABLE_ANALYTICS=true
VITE_ENABLE_DEBUG=false

# ==============================================================================
# SUPABASE EDGE FUNCTIONS (configurar no dashboard do Supabase)
# ==============================================================================
# ALLOWED_ORIGINS=https://seu-dominio.com,https://app.seu-dominio.com
# EVOLUTION_API_URL=https://sua-evolution-api.com
# EVOLUTION_API_KEY=sua-chave-aqui
# WHATSAPP_VERIFY_TOKEN=seu-token-verificacao-aqui
# RESEND_API_KEY=sua-chave-resend-aqui
# ELEVENLABS_API_KEY=sua-chave-elevenlabs-aqui
# MAPBOX_PUBLIC_TOKEN=seu-token-mapbox-aqui

# ==============================================================================
# IMPORTANTE: Nunca commitar o arquivo .env com valores reais!
# Credenciais NUNCA devem ser expostas no frontend (VITE_*)
# Use Supabase Secrets para chaves de Edge Functions
# ==============================================================================
28 changes: 28 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Code owners for zapp-web
# These users/teams will be automatically requested for review

# Default owners for everything
* @zapp-team

# Security-sensitive files require security team review
supabase/migrations/ @zapp-team @security-team
supabase/functions/_shared/jwtVerifier.ts @zapp-team @security-team
supabase/functions/_shared/corsHandler.ts @zapp-team @security-team
supabase/functions/_shared/ssrfGuard.ts @zapp-team @security-team
supabase/functions/_shared/rateLimiter.ts @zapp-team @security-team

# CI/CD changes require DevOps review
.github/ @zapp-team @devops-team

# Edge Functions
supabase/functions/ @zapp-team @backend-team

# Authentication and authorization
src/hooks/useAuth.tsx @zapp-team @security-team
src/components/auth/ @zapp-team @security-team
supabase/functions/webauthn/ @zapp-team @security-team
supabase/functions/approve-password-reset/ @zapp-team @security-team

# Validation schemas
src/validations/ @zapp-team @backend-team
supabase/functions/_shared/validation.ts @zapp-team @backend-team
41 changes: 41 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
name: Bug Report
about: Reportar um problema no sistema
title: "[BUG] "
labels: bug
assignees: ''
---

## Descrição do Bug

<!-- Descreva claramente o que está acontecendo -->

## Passos para Reproduzir

1. Vá para '...'
2. Clique em '...'
3. Role até '...'
4. Observe o erro

## Comportamento Esperado

<!-- O que deveria acontecer? -->

## Comportamento Atual

<!-- O que realmente acontece? -->

## Screenshots / Logs

<!-- Se aplicável, adicione screenshots ou logs do console -->

## Ambiente

- Navegador: [ex: Chrome 120, Firefox 122]
- SO: [ex: Windows 11, macOS 14]
- Versão do sistema: [ex: v1.0.0]
- Resolução da tela: [ex: 1920x1080]

## Contexto Adicional

<!-- Informações extras que podem ajudar -->
33 changes: 33 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
---
name: Feature Request
about: Sugerir uma nova funcionalidade
title: "[FEATURE] "
labels: enhancement
assignees: ''
---

## Problema

<!-- Qual problema esta feature resolve? -->

## Solução Proposta

<!-- Descreva a solução que você gostaria -->

## Alternativas Consideradas

<!-- Outras abordagens que foram consideradas -->

## Critérios de Aceite

- [ ] ...
- [ ] ...
- [ ] ...

## Mockup / Referência Visual

<!-- Se aplicável, adicione mockups ou referências -->

## Contexto Adicional

<!-- Informações extras sobre a feature -->
40 changes: 40 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
## Descrição

<!-- O que este PR faz? Por que essa mudança é necessária? -->

## Tipo de Mudança

- [ ] Bug fix (correção que não quebra funcionalidade existente)
- [ ] Feature (nova funcionalidade)
- [ ] Breaking change (correção/feature que quebraria funcionalidade existente)
- [ ] Refactoring (sem mudança de comportamento)
- [ ] Documentação
- [ ] CI/CD / Infraestrutura

## Checklist

### Obrigatório
- [ ] Testes passam (`npm run test`)
- [ ] Lint passa (`npm run lint`)
- [ ] TypeScript compila sem erros (`npx tsc --noEmit`)
- [ ] Build funciona (`npm run build`)

### Segurança
- [ ] Nenhum secret/credencial hardcoded
- [ ] Inputs validados no backend (Edge Functions)
- [ ] RLS policies revisadas (se alterou schema)
- [ ] Sem `console.log` em código de produção

### Qualidade
- [ ] Testes adicionados/atualizados para mudanças
- [ ] Sem `: any` desnecessário
- [ ] Strings de UI usam i18n (`useTranslation`)
- [ ] Componentes acessíveis (aria-labels, keyboard nav)

## Screenshots (se aplicável)

## Como Testar

1. ...
2. ...
3. ...
32 changes: 32 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
version: 2

updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 10
reviewers:
- "zapp-team"
labels:
- "dependencies"
- "security"
commit-message:
prefix: "chore(deps):"
groups:
production-dependencies:
dependency-type: "production"
development-dependencies:
dependency-type: "development"
update-types:
- "minor"
- "patch"

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
labels:
- "ci"
- "dependencies"
129 changes: 129 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
name: CI

on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run lint

typecheck:
name: Type Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- name: Generate Supabase types
run: npx supabase gen types typescript --project-id "$SUPABASE_PROJECT_ID" > src/integrations/supabase/types.ts
env:
SUPABASE_PROJECT_ID: ${{ secrets.SUPABASE_PROJECT_ID }}
SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
continue-on-error: true
- run: npx tsc --noEmit

security:
name: Security Audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- name: Check for known vulnerabilities
run: npm audit --audit-level=high
continue-on-error: true
- name: Check for secrets in code
run: |
echo "Checking for potential secrets..."
! grep -rn 'sk_live\|pk_live\|AKIA[A-Z0-9]\|password\s*=\s*["\x27][^"\x27]\+["\x27]' src/ --include='*.ts' --include='*.tsx' || echo "Warning: potential secrets found"

test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- name: Run tests with coverage
run: npx vitest run --reporter=verbose --coverage
env:
CI: true
- name: Upload coverage report
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage/
retention-days: 7

build:
name: Build
runs-on: ubuntu-latest
needs: [lint, typecheck, test, security]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: build
path: dist/
retention-days: 7

deploy-preview:
name: Deploy Preview
runs-on: ubuntu-latest
needs: [build]
if: github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: build
path: dist/
- name: Deploy preview
run: echo "Preview deployment would go here (Vercel/Netlify/etc)"

deploy-production:
name: Deploy Production
runs-on: ubuntu-latest
needs: [build]
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
environment: production
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: build
path: dist/
- name: Deploy to production
run: echo "Production deployment would go here"
Loading