Skip to content

Commit

Permalink
Updating README
Browse files Browse the repository at this point in the history
  • Loading branch information
jesuejunior committed May 10, 2021
1 parent 2c7cb89 commit 7429773
Showing 1 changed file with 65 additions and 53 deletions.
118 changes: 65 additions & 53 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,91 +1,103 @@
# Brandenburg

## Concepts
A ideia desse projeto é já ser um "start" para seu projeto python. O que temos aqui são configurações pré prontas para que você possa se dedicar inteiramente ao código do seu projeto.

`Important`: This project is following the [12factor.net](https://12factor.net/) principles


## Dependencies API
O Pipfile já vem com alguns scripts que ajudam nas tarefas do dia a dia e nas checagens do CI.

- Google Cloud Platform or AWS account
- [Docker](https://docs.docker.com/get-docker/) (Optional)
- Python 3.7+ (pyenv)
- Pip (Pipenv)
- ``pipenv run test``

### Optional (FaaS)
- Twilio Account (SMS, Whatsapp)
- Salesforce Marketing Cloud
- Sendgrid (Email)
- AWS (SES, SNS)
- Zenvia (SMS, Whatsapp)
Roda os testes do projeto. Esse script está configurado para medir a cobertura do pacote ``brandenburg``. Esse pacote deve ser ajustado para o pacote onde seu código vai ficar.

- ``pipenv run lint``

## DEV Mode
Roda o ``mypy`` para fazer checagem estática de tipos no código.

`Important`:
- ``pipenv run fmt`` e ``pipenv run fmt-check``

- This section is about [config](https://12factor.net/config)
- This script has been tested on macOS and Linux(Debian like)
- You could see all environment variables in [config.py](brandenburg/config.py)
Roda o black para formatar o código. O comando ``pipenv run fmt-check`` apenas checa se alguma formatação seria necessária. É útil para rodar no processo de CI.

- ``pipenv run isort`` e ``pipenv run isort-check``

Formata o código ordenando os imports usando o projeto isort. O comando ``pipenv run isort-check`` apenas checa se algum import precisa ser reformatado. É útil para rodar no processo de CI.

Inside of the project you have to run the following commands.
It will check and install all dependencies as needed.
```
script/bootstrap
```

Copy `example.env` to `dev.env` and set the variables though.
# Pre-commit Hooks

#### Running tests
Ao instalar o `pre-commit`, todas as vezes que realizar um novo commit, será checado todos os pontos de qualidade do
codigo, como codestyle, testes, imports e por aí vai.

```bash
script/test
Os comandos abaixo devem ser executados apenas quando é feito o clone do projeto.

```shell
pre-commit install
pre-commit install --hook-type pre-puh
```

# CI/CD

#### To run locally
Esse repositorio já possui alguns workflows do Github Actions pré-configurados. Os workflows são:

## API
- `.github/workflows/pull-request.yaml`

````bash
script/server
````
Esse workflow roda em cada PR aberto no projeto. Roda os testes em múltiplas versões do python e faz checagem de formatação de código, lint (com mypy) e formatação de imports (com isort).

### Deployment
Esse workflow faz também upload do relatório de coverage para o [codeclimate](https://codeclimate.com). Perceba que o upload é feito em apenas um versão do python, isso porque o codeclimate rejeita múltiplos upload para um mesmo commit, então precisamos escolher uma das rodadas de teste para fazer o upload.

`Important`: This API is ready to deploy anywhere. However, we are using Heroku to do this job as easy as possible.
Para que o upload para o codeclimate funciona você precisa criar um token no CodeClimate e colocar esse token como um secret no seu repositório. O Nome do secret **deve ser**: ``CC_TEST_REPORTER_ID``. Mais sobre a documentação do codeclimate com githubactions: https://docs.codeclimate.com/docs/github-actions-test-coverage

## Changelog Automático

### API on Heroku
This script has a env name param to read the right env file and set all variable ons heroku
deployment.
Esse projeto já vem com o [release-drafter](https://github.com/release-drafter/release-drafter) configurado. Dessa forma, a cada PR megeado na branch [``main``](https://github.blog/changelog/2020-10-01-the-default-branch-for-newly-created-repositories-is-now-main/) (e também na ``master`` para repositório legados) uma Release Draft será atualizada mencionando esse PR.

```bash
script/deploy stg
```
Para fazer uso dessa opção, basta criar quatro labels em seu projeto:

- ``feature``
- ``bug``
- ``docs``
- ``breaking-change``

#### API Documentation
Todos os PRs que tievem uma (ou mais) dessas labels e forem mergeados pra branch principal, uma release Draft será automaticamente atualizada.

```bash
http://127.0.0.1:8000/docs/
```
Essa configuração do release-drafter também já calcula a próxima versão baseado no [SemVer](https://semver.org). A configuração é a seguinte:

#### Make a resquest
I have used [httpie](https://httpie.org/) to do this job.
- A label ``breaking-change`` aumenta a ``major`` version;
- A label ``feature`` aumenta a ``minor`` version;
- A label ``bug`` aumenta a ``patch`` version;
- PR sem label também aumenta a ``patch`` version;

Getting a token
Não se esqueça de de ajustar o links para o seu projeto no arquivo ``.github/release-drafter.yml``.

```bash
http 127.0.0.1:8000/v1/leads/token/
# Pydantic - Configuração baseada em variáveis de ambiente

Para facilitar na criação de um novo serviço e seguindo as boas práticas definidas no [12factors](https://12factor.net/config) sobre configurações.
Adicionamos o uso no pydantic para criar e validar essas informações para nós.

Exemplo de uso:

```python
from config import settings

print(settings.DEBUG)
```

Sending to Salesforce Marketing cloud
Para configurar uma variável de ambiente é necessário ficar atento ao prefixo.
o default do projeto verificar inicialmente para uma variável de ambiente chamada `NAMESPACE`caso não a
encontre o prefixo será `DEV_`, o que isso significa?

```bash
http POST 127.0.0.1:8000/v1/leads/16db0bd3-579a-4a61-80b7-99f798013ee2 name=anitta [email protected] phone_number=11912341678
O uso ficará da seguinte forma quando configuramos o namespace sempre adicionaremos o prefixo no
momento de exportar as variaveis de ambiente.

```python
NAMESPACE=PROD PROD_DEBUG=False python main.py
```

Any problems or doubts, please feel free to contact me.
Caso não definimos nenhum namespace, o prefixo será `DEV`, ou seja

```python
DEV_REDIS_PORT=1234 python main.py
```

Lembrando que dentro da sua aplicação o que vale é justamente o nome que foi definido no arquivo config.py, sem o prefixo.

0 comments on commit 7429773

Please sign in to comment.