Skip to content

feat: adiciona infracost#30

Open
EzzioMoreira wants to merge 7 commits intomentoriaiac:mainfrom
EzzioMoreira:feat/add-infracost
Open

feat: adiciona infracost#30
EzzioMoreira wants to merge 7 commits intomentoriaiac:mainfrom
EzzioMoreira:feat/add-infracost

Conversation

@EzzioMoreira
Copy link
Contributor

@EzzioMoreira EzzioMoreira commented Aug 12, 2022

Titulo

Adiciona fluxo reutilizável para projetos terraform, exibe estimativa de custo dos recursos que serão criados ou alterados nos comentários do PR.

  • Garanta que seu topic/feature/bugfix branch tenha uma branch nomeada e não a sua branch main esteja no PR
  • Dê um titulo que expresse o objetivo do PR
  • Associe seu PR a uma Issue criada no repositósito. Caso seja uma correção de linguagem ou pequenas correções, não é necessário
  • Descreva o objetivo do PR
  • Inclua links relevantes para a sua modificação/sugestão/correção
  • Descreva um passo-a-passo para testar o seu PR

Issue

#29

Objetivo

Dar visibilidades nos custo dos recursos que serão provisionados.

Referências

https://www.infracost.io/
https://github.com/infracost/actions

Como testar

Utilizando

Criar a seguintes estrutura de diretórios:

.github/workflows/<proposito>.yml

Utilize o exemplo abaixo para seu pipeline de CI:

name: "Estimativa de custo da infra com Infracost"

on: 
  pull_request:
  
jobs:
  infracost:
    uses: "mentoriaiac/cicd_centralizado/.github/workflows/infracost.yaml@v1"
    secrets:
      INFRACOST_API_KEY: ${{ secrets.INFRACOST_API_KEY }}

Repositórios utilizados na validação: https://github.com/EzzioMoreira/rds-terraform
Faça um fork desse projeto, crie uma nova branch e crie um PR.

Copy link
Member

@lgfa29 lgfa29 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tá ficando legal @EzzioMoreira!

Deixei uns comentários para ajustes, qualquer dúvida é só perguntar 🙂

Comment on lines +34 to +35
with:
ref: '${{ github.event.pull_request.base.ref }}'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seria bom evitar eventos específicos na pipeline centralizada, assim dá para usar o workflow em eventos que não são PR.

Se eu entendi certo, a ideia aqui é gerar um diff entre o commit na base do PR vs. no PR? Uma opção seria usar o valor github.event.repository.default_branch. Não é exatamente o mesmo, por exemplo se tiver um PR que aponta para uma branch que não é a default, mas talvez seja aceitável? Geralmente você quer saber a diferença para a main 😅

Uma outra opção seria deixar esse workflow só para PRs, aí nesse caso seria bom colocar um if para ver qual o tipo de evento no começo da pipelines.

Copy link
Contributor Author

@EzzioMoreira EzzioMoreira Aug 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lgfa29 ficaria mais ou menos assim?

jobs:
  infracost:
    name: Infracost workflow
    runs-on: ${{ inputs.os_version }}
    if: github.event.pull_request.opened
    ou seria assim:
    if: github.event.pull_request.state.open

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seria bom testar, mas eu acho que só precisa disso:

jobs:
  infracost:
    if: github.event.pull_request

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tranquilo vou fazer o teste e adiciono o link do resultado aqui.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lgfa29 parece que funcionou.
Primeiro teste eu fiz a chamada da actions passando on: push actions não rodou na abertura de PR.
Link do teste: EzzioMoreira/rds-terraform#5

name: "Estimativa de custo Infracost"

on:
  push:
  
jobs:
  infracost:
    uses: "EzzioMoreira/cicd_centralizado/.github/workflows/infracost.yaml@feat/add-infracost"
    secrets:
      infracost_api_key: ${{ secrets.INFRACOST_API_KEY }}

Segundo teste eu fiz a chamada da actions passando on: pull_request actions rodou na abertura de PR.

name: "Estimativa de custo Infracost"

on:
  pull_request:
  
jobs:
  infracost:
    uses: "EzzioMoreira/cicd_centralizado/.github/workflows/infracost.yaml@feat/add-infracost"
    secrets:
      infracost_api_key: ${{ secrets.INFRACOST_API_KEY }}

Era esse o comportamento esperado?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pelo que conversamos na nossa ultima reunião. A ideia é que o infracost rode a partir da main mesmo. Pegando o diff do commit atual e o ultimo anterior.

run: |
infracost comment github --path=/tmp/infracost.json \
--repo=$GITHUB_REPOSITORY \
--github-token=${{github.token}} \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seria bom testar, mas acho que esse token não vai ter permissão de comentar se o workflow for chamado de um PR que é um fork de uma pessoa que não é maintainer do repo.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lgfa29 eu fiz a validação aqui rds e funcionou como esperado. O github-token tem permissão de leitura/escrita no repositório corrente.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A permissão do token varia dependendo da pessoa que ativou a ação. Como você tem permissão de escrita no repo, os seus PRs vão funcionar, na tabela de permissão tem que ver a última coluna, que é para repositórios criados a partir de um fork:

image

Eu criei um PR de teste no seu repo, vamos ver se funciona 😄

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Falamos na ultima reunião de colocar isso em outro lugar, mas seria a partir da main, né? Dai não precisaria desse token, né?

EzzioMoreira and others added 6 commits August 20, 2022 07:34
Co-authored-by: Luiz Aoqui <luiz@hashicorp.com>
Co-authored-by: Luiz Aoqui <luiz@hashicorp.com>
Co-authored-by: Luiz Aoqui <luiz@hashicorp.com>
Co-authored-by: Luiz Aoqui <luiz@hashicorp.com>
Comment on lines +34 to +35
with:
ref: '${{ github.event.pull_request.base.ref }}'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pelo que conversamos na nossa ultima reunião. A ideia é que o infracost rode a partir da main mesmo. Pegando o diff do commit atual e o ultimo anterior.

run: |
infracost comment github --path=/tmp/infracost.json \
--repo=$GITHUB_REPOSITORY \
--github-token=${{github.token}} \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Falamos na ultima reunião de colocar isso em outro lugar, mas seria a partir da main, né? Dai não precisaria desse token, né?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants