Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: adiciona código de erro semântico em casos de ceps mal formatados #38

Merged
merged 8 commits into from Jun 10, 2020

Conversation

paulo-santana
Copy link
Contributor

Cobre o primeiro dos itens sugeridos pelo @filipedeschamps no pr #29, adicionando semântica aos status code em caso de erros no endpoint /cep/v1.

Um problema que eu notei é que a API do cep-promise aceita letras como valor. Mesmo sabendo que é extremamente improvável que alguém vá fazer uma requisição dessas, isso não é um caso que deveria ser tratado? Usar letras aqui gera um "service_error", porque o cep-promise ainda envia as requisições e os serviços dizem que não encontraram nada. O correto seria, na minha visão, retornar também um "validation_error" pra esse caso.

Como a BrasilAPI apenas captura as exceções lançadas pelo cep-promise e não faz validação, eu achei melhor não mexer nisso aqui agora. Acho que a mudança, se ela for mesmo absolutamente necessária, teria que ser feita direto na lib

@vercel
Copy link

vercel bot commented Mar 5, 2020

This pull request is being automatically deployed with ZEIT Now (learn more).
To see the status of your deployment, click below or on the icon next to each commit.

🔍 Inspect: https://zeit.co/filipedeschamps/brasilapi/7rlpfxpeb
✅ Preview: https://brasilapi-git-fork-paulo-santana-master.filipedeschamps.now.sh

@paulo-santana paulo-santana changed the title feat: usa código de erro semântico em casos de ceps mal formatados feat: adiciona código de erro semântico em casos de ceps mal formatados Mar 5, 2020
pages/api/cep/v1/[cep].js Outdated Show resolved Hide resolved
pages/api/cep/v1/[cep].js Outdated Show resolved Hide resolved
@filipedeschamps
Copy link
Member

@paulo-santana sensacional!!!! Mas em paralelo, eu to confuso, porque o Github não está acionando o Action, dado que o Now fez o deploy? Alguém tem alguma idéia?

@paulo-santana
Copy link
Contributor Author

paulo-santana commented Mar 10, 2020

Cara, eu não faço ideia.

Eu criei uma conta na Zeit pra poder começar a debugar, mas assim que ativei as Actions no meu fork e dei um pull request da actions pra master, ele executou os testes normalmente.

Saímos do "na minha máquina funciona" pro "no meu repositório funciona".

Como eu manjo pouco de github e menos ainda de actions, não sei como sair daqui pra ajudar a resolver o problema. Será que tá faltando alguma coisa no script pra fazer ele funcionar com PRs de forks diferentes?

image

@paulo-santana
Copy link
Contributor Author

Pelo que eu vi aqui - (thread no github.community) e no maxheld83/ghactions#262, parece que o Github intencionalmente não roda workflows para PRs que vem de outros forks, pois ele injeta informações sensíveis do repositório e do dono dele na hora da execução. Aí pessoas mal intencionadas poderiam listar secrets e chaves privadas e esse tipo de coisa apenas mandando pull requests.

Pelo que parece, o workflow é executado na fork, mas não sei se tem como acessar o resultado. Que treta...

@mukaschultze
Copy link
Member

Pelo que parece, o workflow é executado na fork, mas não sei se tem como acessar o resultado. Que treta...

Não seria isso? https://github.com/paulo-santana/BrasilAPI/actions/runs/52633671

Github intencionalmente não roda workflows para PRs que vem de outros forks

Isso me parece gambiarra do GitHub, todos os outros CI/CD executam contra o PR e contra a branch, e deixam por secrets diferentes pra master e pros PRs.

@paulo-santana
Copy link
Contributor Author

paulo-santana commented Mar 10, 2020

Não seria isso? https://github.com/paulo-santana/BrasilAPI/actions/runs/52633671

Esse é o workflow de outro pr que eu fiz apenas pra testar, da minha branch Action pra minha branch Master.

Já esse PR aqui, de acordo com o appleton no primeiro link que eu mandei, teria executado o workflow no meu repositório. Eu tava pensando aqui que talvez ele não tenha executado porque eu não estava com a Actions ativada. Agora que eu tô, tô querendo mandar mais um PR pra ver se ele executa o workflow de vez kkkkkkkk. Aguentem mais uma notificação aí

@paulo-santana
Copy link
Contributor Author

paulo-santana commented Mar 10, 2020

Bom, vamos lá: desses dois últimos commits que eu fiz, o primeiro executou os testes no meu fork, o segundo não.

O primeiro executou porque eu tinha configurado o projeto na minha conta da Zeit. Então, quando ele viu o commit, o Now fez o deploy tanto na minha conta quanto na do Filipe e disparou o evento pros nossos repositórios. No meu repo os testes rodaram, mas no base não, por conta dessa limitação do github.

Mas antes de fazer o segundo commit, eu deletei o projeto da minha conta da Zeit, então o bot só fez o deploy na conta do Filipe. E só a conta dele emitiu o evento. A minha não. E aí consequentemente o workflow não foi executado.

Se cada pessoa que for contribuir pro projeto tiver que criar uma conta na zeit e implementar o próprio fork lá... Parece muita burocracia. E ainda tem o fato dos admins do repositório base terem que entrar no fork pra ver se os testes estão passando

@filipedeschamps
Copy link
Member

Show @paulo-santana obrigado por todos os testes!!!

@paulogdm você sabe dizer como isso é feito no repositório do Next.js? Pelo que vejo nos PRs de lá, pessoas que não tem acesso write (não são Contributor , Collaborator nem Member), como esse aqui por exemplo vercel/next.js#11678 , as actions são rodadas normalmente.

E eu não consigo ver nada de especial dentro da action, pegando por exemplo esta action Build, test, and deploy / build (pull_request).

Será que o comportamento do Github muda se o target do merge não for a branch default? No caso o Next.js usa a branch canary.

@lucianopf já passou por esse tipo de situação em algum repositório?

@filipedeschamps
Copy link
Member

Em paralelo, o argumento de não rodar as actions de um fork por motivos de segurança, eu até entendo se não houver a separação dos tokens por branches (como o Travis faz por exemplo), mas o hook do now roda normalmente, então eu posso expor os secrets daquele ambiente deployado também com um PR como esperado, não?

@filipedeschamps filipedeschamps mentioned this pull request Apr 7, 2020
@paulo-santana
Copy link
Contributor Author

Eu pesquisei bastante de ontem pra hoje, mas não consegui achar nada diferente do que eu encontrei um mês atrás. Aliás, pelo que eu vi nesse repositório do Next.js do Zeit, ele já executava actions bem antes de você ter implementado aqui, então tudo aquilo sobre o GH não disparar workflows pra PRs de Forks nunca foi aplicável aqui...

O mais bizarro de tudo é que "do nada", desde o seu comentário ontem, os checks estão esperando o workflow rodar, e eu não consigo imaginar o porquê.

Sobre o Now funcionar, eu chutaria que é porque ele é um app de terceiros, com suas próprias políticas. Na documentação da integração dele com o Github tem um parágrafo explicando que quando um PR de um fork altera o arquivo de configuração (now.json) ou quando o projeto tem alguma secret, o bot vai precisar de uma autorização dos admins do repositório pra poder deployar o PR.

Eu vou fazer mais um commit pra ver se ele executa o workflow dessa vez

@filipedeschamps
Copy link
Member

O mais bizarro de tudo é que "do nada", desde o seu comentário ontem, os checks estão esperando o workflow rodar, e eu não consigo imaginar o porquê.

É que eu coloquei esse check como Required na configuração do repositório, dai ele aparece de largada 👍

ou quando o projeto tem alguma secret, o bot vai precisar de uma autorização dos admins do repositório pra poder deployar o PR

Perfeito 👍

Altera o estilo do código do arquivo status/v1/index.js
@paulo-santana
Copy link
Contributor Author

@filipedeschamps eu criei um projeto bem simples com o ambiente parecido com o da BrasilAPI, e depois de fazer alguns testes com um outro perfil eu vi que os workflows rodam normalmente pra PRs de forks desde que o evento configurado pra eles seja o pull_request.

Aqui eu tenho 2 arquivos de workflow, um é uma cópia do seu, que é ativado com o evento deployment_status, o outro é um bem simples que é ativado com o evento pull_request. O comportamento do deployment_status é o mesmo que aqui, nem aparece nos checks
https://github.com/paulo-santana/hello-next/pull/5

Isso resolveria o problema atual, mas de início criaria um novo, que é a perda da sincronia com o bot na publicação do projeto. "Amanhoje" vou ver se tem algum jeito de fazer o workflow disparar com o evento pull_request, mas esperar a execução dos testes até que o Now finalize o deploy.

@lucianopf
Copy link
Member

Boa @paulo-santana, será que se vc alterar essa config no arquivo de config do seu REPO já não configura corretamente pra esse PR e trigga os testes? 👀 🙏

@paulo-santana
Copy link
Contributor Author

Eu to trabalhando num workflow que realiza os testes localmente próprio servidor que o GH Actions disponibiliza. Ele até funciona, mas tem um problema em que o Jest não finaliza o processo, então o workflow fica empacado no step dele e nunca envia o resultado. Inclusive eu já to terminando, daqui a pouco eu mando um PR.

Vai ser uma medida paliativa enquanto a gente não consegue testar contra o deploy na Zeit

@filipedeschamps
Copy link
Member

Fala @paulo-santana voltando aqui para esse PR! Show que funciona no pull_request e que pena que é um mistério o deployment :( de qualquer forma, o que eu to pensando é sempre fazer o merge numa branch intermediária, tipo release-candidate, porque dai vai ser rodado tudo conforme esperado. O que você acha?

@filipedeschamps filipedeschamps changed the base branch from master to release-candidate June 10, 2020 23:37
@filipedeschamps filipedeschamps merged commit 4c342b7 into BrasilAPI:release-candidate Jun 10, 2020
@filipedeschamps
Copy link
Member

Funcionou como esperado! Mas talvez o interessante seria eu ter dado mais semântica para o PR nessa branch. De qualquer forma, eu considero um avanço 👍

@filipedeschamps
Copy link
Member

Ah @paulo-santana nessa branch eu fiz o merge também da sua inserção no README 👍

@paulo-santana
Copy link
Contributor Author

Se funciona, não vejo por que não utilizar dessa forma. Melhor do que não ter ou ter que ficar buscando outras soluções. Inclusive, se for confirmar que vai continuar com essa, pode apagar o PR #50, ou avisa que eu apago.

No mais, acho que trabalhar dessa forma vai precisar de algumas instruções no README.md ou mesmo em um CONTRIBUTING.md. Posso fazer um, se preferir

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants