Aplicação para gerenciar aplicações de Firebase. Inclui suporte para vários ambientes e migrações de dados
em breve
Interessado em adicionar um recurso ou contribuir? Por favor, abra um problema!
Como esse é o código -fonte, um ótimo lugar para começar é verificar a versão hospedada do Fireadmin disponível no fireadmin.io.
Durante o desenvolvimento, você provavelmente confiará principalmente no npm start
; No entanto, existem scripts adicionais à sua disposição:
yarn <script> | Descrição |
---|---|
start | Serve seu aplicativo no localhost:3000 |
start:dist | Construa o aplicativo para ./dist e serve no localhost:3000 usando firebase serve |
functions:start | Executa funções Repl Localmente (usa firebase functions:shell |
functions:build | Cria funções em nuvem para ./functions/dist |
functions:test | Executa testes de unidade de funções com mocha |
build | Cria o aplicativo para ./dist |
test | Executa testes E2E com Cypress. Consulte o teste |
lint | Fia o projeto para possíveis erros |
lint:fix | Fia o projeto e corrige todos os erros corretos |
Husky é usado para ativar a capacidade de gancho prepush
. O script prepush
atualmente é executado no eslint
, que impedirá que você pressione se houver algum fiapo dentro do seu código. Se você deseja desativar isso, remova o script prepush
do package.json
.
├── .github # Github Settings + Github Actions Workflows
│ ├── deploy.yml # Deploy workflow (called on merges to "master" and "production" branches)
│ └── verify.yml # Verify workflow (run when PR is created)
├── cypress # UI Integration Tests
├── docs # Docs application (built with Gatsby)
│ ├── content # Content of docs (written in markdown)
│ ├── components # React components used in docs app
│ ├── gatsby-config.js # Gatsby plugin settings
│ └── gatsby-node.js # Gatsby node definitions (how templates are combined with content)
│ └── package.json # Docs package file (docs specific dependencies)
├── functions # Cloud Functions (uses Cloud Functions for Firebase)
│ ├── src # Cloud Functions Source code (each folder represents a function)
│ └── index.js # Functions entry point
├── public # Public assets
│ ├── favicon.ico # Favicon
│ ├── firebase-messaging.sw.js # Messaging Service worker (loaded by Firebase SDK)
│ └── index.html # Main HTML page container for app
├── src # Application source code
│ ├── components # Global Reusable Presentational Components
│ ├── containers # Global Reusable Container Components
│ ├── layouts # Components that dictate major page structure
│ │ └── CoreLayout # Global application layout in which to render routes
│ ├── routes # Main route definitions and async split points
│ │ ├── index.js # Bootstrap main application routes with store
│ │ └── Home # Fractal route
│ │ ├── index.js # Route definitions and async split points
│ │ ├── assets # Assets required to render components
│ │ ├── components # Presentational React Components
│ │ ├── modules # Collections of reducers/constants/actions
│ │ └── routes ** # Fractal sub-routes (** optional)
│ ├── static # Static assets
│ └── utils # Application-wide utils (form validation etc)
├── .firebaserc # Firebase project settings (including settings for CI deployment)
├── cypress.json # Cypress Integration Test settings
├── database.rules.json # Firebase Real Time Database Rules
├── firebase.json # Firebase resource settings (including which folders are deployed)
├── firestore.indexes.json # Firestore Indexes
├── firestore.rules # Firestore Database Rules
└── storage.rules # Cloud Storage Rules
^10.18.0
(nó 10 sugerido para corresponder às mais novas funções da nuvem de tempo de execução)npm i -g firebase-tools
Instale dependências: yarn install
Crie um aplicativo da Web no console do Firebase do seu projeto (a configuração será usada na próxima etapa)
Crie um .env.local
que possui o seguinte formato (com seus valores preenchidos da etapa anterior):
REACT_APP_FIREBASE_apiKey= < - api key - >
REACT_APP_FIREBASE_authDomain= < - auth domain - >
REACT_APP_FIREBASE_databaseURL= < - database URL - >
REACT_APP_FIREBASE_projectId= < - project ID - >
REACT_APP_FIREBASE_storageBucket= < - storageBucket - >
REACT_APP_FIREBASE_messagingSenderId= < - message sender ID - >
REACT_APP_FIREBASE_appId= < - project app id - >
REACT_APP_FIREBASE_PUBLIC_VAPID_KEY= < - project app id - >
REACT_APP_ALGOLIA_APP_ID= < - - >
REACT_APP_ALGOLIA_API_KEY= < - - >
Crie functions/.runtimeconfig.json
Arquivo que parece assim:
{
"algolia" : {
"api_key" : " <- your API KEY -> " ,
"app_id" : " <- your Algolia APP ID -> "
},
"gmail" : {
"email" : " <- gmail account for sending invite emails -> " ,
"password" : " <- password for ^ email -> "
},
"encryption" : {
"password" : " <- your own made up encryption password for service accounts -> "
}
}
Definir variáveis de configuração de funções para corresponder ao arquivo que você acabou de fazer (para a versão implantada de suas funções):
firebase functions:config:set $( jq -r ' to_entries[] | [.key, (.value | tojson)] | join("=") ' < functions/.runtimeconfig.json )
Projeto de construção: yarn build
Implante no FireBase: firebase deploy
(implanta, funções em nuvem, regras e hospedagem)
Iniciar o servidor de desenvolvimento: npm start
Nota: Você também pode usar yarn start:dist
para testar como seu aplicativo funcionará quando implantado no FireBase
Veja a versão implantada do site executando firebase open hosting:site
Nota : Config para isso está localizado dentro .github/workflows/app-deploy.yml
. firebase-ci
foi adicionado para simplificar o processo de implantação do CI, obtendo configurações do .firebaserc
. Tudo o que é necessário é fornecer autenticação com Firebase:
Tenha pelo menos dois projetos de Firebase para serem prontos, um para cada ambiente (estadiamento e produção)
Substitua as informações dentro .firebaserc
nas seções de ambos os projects
, ci
e targets
Login: firebase login:ci
para gerar um token de autenticação. Este token será usado para fornecer os direitos do provedor de IC para implantar em seu nome. As configurações são fornecidas para o GITLAB, mas qualquer provedor de IC pode ser usado.
Defina a variável de ambiente FIREBASE_TOKEN
nos segredos de ações do GitHub
Adicione as seguintes variáveis de ambiente às variáveis do GitHub Actions (dentro /settings/ci_cd
):
FIREBASE_TOKEN ; // Used to deploy to Firebase (token generated in last step)
CYPRESS_RECORD_KEY ; // Record key for Cypress Dashboard
SERVICE_ACCOUNT ; // Used to authenticate with database to run hosted tests
Execute as ações do GitHub empurrando o código para o seu controle remoto (provavelmente Github)
Para obter mais opções nas configurações de CI, consulte os documentos do Firebase-CI.
yarn build
firebase deploy
Nota: Você pode usar firebase serve
para testar como seu aplicativo funcionará quando implantado no FireBase, mas certifique -se de executar yarn build
primeiro.A documentação está disponível em fireadmin.io/docs
Todo o código -fonte e o conteúdo do DOCs estão localizados na pasta docs
. Os documentos são gerados do Markdown para arquivos estáticos usando Gatsby com base em configurações no gatsby-config.js
.
Visite o Docs Readme para obter mais informações.
NOTA : Se você tiver implantação de IC de configuração, os testes E2E e os testes de unidade podem ser executados automaticamente no seu ambiente de estadiamento antes de executar a construção da produção.
Os testes de unidade de funções em nuvem são gravados no Mocha com cobertura de código gerada por Istambul. Esses testes abrangem "funcionalidade de back -end" tratados pelas funções em nuvem, matando o ambiente de funções (incluindo dependências).
cd functions
npm i
npm test
yarn test:cov
Os testes de ponta a ponta são feitos usando o cipreste e eles vivem na pasta cypress
. Esses testes cobrem a funcionalidade da interface do usuário e são executados diretamente no ambiente hospedado do fogo. Os testes de ponta a ponta do aplicativo são executados automaticamente nas ações do GitHub após a implantação no ambiente de estadiamento antes de implantar na produção.
Crie uma conta de serviço no console do Firebase
Salve a conta de serviço como serviceAccount.json
na raiz do projeto
Obtenha o UID do usuário que deseja usar ao testar da guia Autenticação do console do Firebase
Crie cypress.env.json
com o seguinte formato:
{
"TEST_UID" : " <- user account's UID -> "
}
Execute yarn emulators
. Isso inicializará os emuladores (apontados durante o teste)
Em um terminal diferente Yun yarn start:emulate
. Isso inicializará o aplicativo apontado para os emuladores
Em uma guia Terminal diferente, execute yarn test:emulate:run
. Isso executará testes de integração do Cypress apontados para os emuladores (para semeadura e verificação)
Para abrir a interface do usuário de teste local do Cypress, onde você pode executar testes únicos ou todos os testes, use yarn test:emulate
.
12
em vez de uma versão mais recente? O Cloud Functions Runtime suporta até 12
, e é por isso que é isso que é usado para a versão de compilação do CI. Isso será alterado quando o tempo de execução das funções for atualizado