Release no AppExchange
Fase 1: Pre-flight (local)
Seção intitulada “Fase 1: Pre-flight (local)”Execute estes antes de tocar na org. Corrija tudo que aparecer.
1.1 Salesforce Code Analyzer v5 — scan completo
Seção intitulada “1.1 Salesforce Code Analyzer v5 — scan completo”# Install (once)sf plugins install @salesforce/plugin-code-analyzer
# Run ALL rules (PMD, ESLint, RetireJS, Regex, Flow, CPD)sf code-analyzer run \ --workspace force-app \ --output-file docs/scan-results.html
# Run AppExchange-specific rulessf code-analyzer run \ --rule-selector AppExchange \ --workspace force-app \ --output-file docs/scan-appexchange.html
# Run only Security-tagged rulessf code-analyzer run \ --rule-selector Security \ --workspace force-app \ --output-file docs/scan-security.html
# Severity threshold — fail on High or Critical (CI/CD)sf code-analyzer run \ --rule-selector AppExchange \ --workspace force-app \ --severity-threshold 2 \ --output-file docs/scan-appexchange.htmlTolerância zero em: Critical (1) e High (2).
Medium (3) e abaixo — documente como falsos positivos em docs/FALSE-POSITIVES.md.
1.2 ESLint (LWC)
Seção intitulada “1.2 ESLint (LWC)”npm run lint1.3 Testes Jest LWC
Seção intitulada “1.3 Testes Jest LWC”npm run test:unitFase 2: Testes de Org & Cobertura
Seção intitulada “Fase 2: Testes de Org & Cobertura”2.1 Executar todos os testes Apex
Seção intitulada “2.1 Executar todos os testes Apex”sf apex run test \ --code-coverage \ --result-format human \ --wait 10 \ --target-org FlexiFREENecessário: >= 75% cobertura geral, cada trigger deve ter cobertura.
2.2 Verificar cobertura por classe
Seção intitulada “2.2 Verificar cobertura por classe”sf apex run test \ --code-coverage \ --result-format json \ --wait 10 \ --target-org FlexiFREE \ | jq '.result.coverage.coverage[] | select(.coveredPercent < 75) | {name, coveredPercent}'Fase 3: Construir Versão do Pacote (beta)
Seção intitulada “Fase 3: Construir Versão do Pacote (beta)”3.1 Incrementar versão em sfdx-project.json
Seção intitulada “3.1 Incrementar versão em sfdx-project.json”"versionName": "ver 1.2.0","versionNumber": "1.2.0.NEXT"3.2 Criar versão beta do pacote
Seção intitulada “3.2 Criar versão beta do pacote”sf package version create \ --package FlexibleTeamShare \ --definition-file config/package-scratch-def.json \ --installation-key-bypass \ --wait 30 \ --code-coverage \ --skip-ancestor-check3.3 Verificar e checar cobertura
Seção intitulada “3.3 Verificar e checar cobertura”sf package version list --packages FlexibleTeamShare --order-by CreatedDate --verbosesf package version report --package 04tXXXXXXXXXXXXXXX --verboseFase 4: Testar Instalação
Seção intitulada “Fase 4: Testar Instalação”4.1 Instalar em scratch/sandbox org limpa
Seção intitulada “4.1 Instalar em scratch/sandbox org limpa”sf package install \ --package 04tXXXXXXXXXXXXXXX \ --target-org TestOrg \ --wait 104.2 Smoke test
Seção intitulada “4.2 Smoke test”- Atribuir permission sets
FTS_App_AccesseFTS_Data_Access - Configurar uma sharing config via Wizard
- Adicionar/editar/remover membros da equipe em um registro
- Verificar registros de compartilhamento criados/excluídos
- Testar como usuário não-admin (somente FTS_Data_Access)
Fase 5: Promover para Release
Seção intitulada “Fase 5: Promover para Release”sf package version promote --package 04tXXXXXXXXXXXXXXXFase 6: Partner Security Portal — Source Scanner (Checkmarx)
Seção intitulada “Fase 6: Partner Security Portal — Source Scanner (Checkmarx)”Isso é obrigatório para qualquer submissão que inclua um pacote Salesforce.
- Acesse Partner Security Portal usando suas credenciais da org DevHub/packaging
- Selecione sua versão do pacote promovida (released)
- Clique em Start Scan e aguarde resultados (geralmente 15-30 min)
- Baixe o relatório
Tratar achados
Seção intitulada “Tratar achados”- Critical/High — corrija o código, reconstrua, rescaneie
- Falsos positivos — documente em
docs/FALSE-POSITIVES.md, anexe à submissão - Low/Info — documente justificativa, sem correção necessária
Fase 7: DAST Scan (se aplicável)
Seção intitulada “Fase 7: DAST Scan (se aplicável)”Flexible Team Share tem sem callouts externos, sem UI web, sem endpoints API — DAST é não aplicável.
Fase 8: Preparar Materiais de Submissão
Seção intitulada “Fase 8: Preparar Materiais de Submissão”Documentos necessários
Seção intitulada “Documentos necessários”| Material | Arquivo | Notas |
|---|---|---|
| Relatório Code Analyzer (completo) | docs/scan-results.html | Da Fase 1 |
| Relatório Code Analyzer (AppExchange) | docs/scan-appexchange.html | Da Fase 1 |
| Relatório Source Scanner | Baixado do Portal | Da Fase 6 |
| Doc de falsos positivos | docs/FALSE-POSITIVES.md | Explique cada achado |
| Documentação Admin/Usuário | docs/APPLICATION-OVERVIEW.md, docs/USE-CASES.md | Revisores testam seu app |
| Guia de instalação | docs/1. Installation Guide.md | Setup passo a passo |
Preparação da org de revisão
Seção intitulada “Preparação da org de revisão”- Instale a versão do pacote promovida
- Desabilite MFA/2FA para que a equipe de revisão possa fazer login
- Instale apenas pacotes relacionados a esta revisão
- Crie um usuário de teste com acesso completo para a equipe de revisão
- Pré-configure pelo menos uma sharing config funcional com dados de exemplo
Fase 9: Enviar
Seção intitulada “Fase 9: Enviar”- Acesse AppExchange Partner Console > Publishing > Security Review
- Selecione seu pacote e versão promovida
- Carregue todos os relatórios de scan
- Forneça credenciais de login da org para a equipe de revisão
- Pague taxa de $999 (para apps pagos; apps gratuitos — sem taxa)
- Envie
Cronograma: 4-6 semanas. A maioria dos apps passa na 2ª tentativa.
Resumo da Ordem de Execução
Seção intitulada “Resumo da Ordem de Execução”Fase 1 Code Analyzer + ESLint + Jest ← corrigir problemas de códigoFase 2 Testes Apex na org (>= 75%) ← corrigir lacunas de coberturaFase 3 Construir versão beta do pacote ← se build falhar, voltar à Fase 2Fase 4 Instalar & smoke test em org limpa ← se quebrado, corrigir e reconstruirFase 5 Promover para release ← IRREVERSÍVELFase 6 Source Scanner (Checkmarx) ← apenas em versão promovidaFase 7 DAST scan (se aplicável) ← N/A para este appFase 8 Preparar docs & org de revisão ← empacotar tudoFase 9 Enviar para AppExchange ← aguardar 4-6 semanas