digitalinnovationone / dio-lab-open-source

Repositório do lab "Contribuindo em um Projeto Open Source no GitHub" da Digital Innovation One.
https://digitalinnovationone.github.io/dio-lab-open-source/
6.07k stars 44.73k forks source link

[SUGESTÃO] Token de autenticação na pasta script #50547

Open Gabiru-cpu opened 3 days ago

Gabiru-cpu commented 3 days ago

Sua sugestão está relacionada a um problema? Por favor descreva. Não

Descreva a solução que você gostaria adicionar uma biblioteca e um sistema de autentificarão no script para deixar mais interessante

Descreva as alternativas que você considerou estudar e implementar sistemas de seguranças mesmo que simples é uma boa pratica para evoluir como dev

Contexto adicional Como definir o token de ambiente no terminal Linux/macOS(bash): export GITHUB_TOKEN='seu-token-aqui' Windows (cmd): set GITHUB_TOKEN=seu-token-aqui Windows (PowerShell): $env:GITHUB_TOKEN = "seu-token-aqui"

Exemplo: import requests import time import os

class GitHubConfig: """Configurações relacionadas ao GitHub e ao repositório.""" TOKEN = os.getenv('GITHUB_TOKEN') # Token obtido da variável de ambiente OWNER = 'digitalinnovationone' REPO = 'dio-lab-open-source' HEADERS = { 'Authorization': f'token {TOKEN}', 'Accept': 'application/vnd.github.v3+json' }

class ScriptConfig: """Configurações específicas do script.""" DIO_LAB_WORKFLOW_TRIGGER_LABEL = 'run dio workflow' DELAY_SECONDS = 10

def obter_prs_abertos(): """Retorna uma lista de todos os PRs abertos.""" next_page = 1 all_prs = []

while True:
    try:
        response = requests.get(f'https://api.github.com/repos/{GitHubConfig.OWNER}/{GitHubConfig.REPO}/pulls?page={next_page}&per_page=100', headers=GitHubConfig.HEADERS)
        response.raise_for_status()
    except requests.RequestException as e:
        print(f"Erro ao recuperar PRs: {e}")
        return []

    prs = response.json()
    all_prs.extend(prs)

    if len(prs) < 100:
        break

    next_page += 1

print(f"Recuperados {len(all_prs)} PRs abertos no total.")
return all_prs

def adicionar_label(pr_number): """Adiciona a label ao PR especificado.""" label_data = {'labels': [ScriptConfig.DIO_LAB_WORKFLOW_TRIGGER_LABEL]} try: response = requests.post(f'https://api.github.com/repos/{GitHubConfig.OWNER}/{GitHubConfig.REPO}/issues/{pr_number}/labels', headers=GitHubConfig.HEADERS, json=label_data) response.raise_for_status() except requests.RequestException as e: print(f"Erro ao adicionar label ao PR {pr_number}: {e}") return None

return response.status_code

def main(): prs_abertos = obter_prs_abertos() prs_abertos.reverse()

for pr in prs_abertos:
    pr_number = pr['number']
    labels = [label['name'] for label in pr['labels']]

    if ScriptConfig.DIO_LAB_WORKFLOW_TRIGGER_LABEL not in labels:
        status_code = adicionar_label(pr_number)
        if status_code:
            print(f"Adicionado label ao PR #{pr_number}, Resposta: {status_code}")
        time.sleep(ScriptConfig.DELAY_SECONDS)
    else:
        print(f"PR #{pr_number} já possui o label. Pulando.")

if name == "main": if not GitHubConfig.TOKEN: print("Erro: GITHUB_TOKEN não está configurado. Defina o token como uma variável de ambiente.") else: main()

Gabiru-cpu commented 3 days ago

😊