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
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()
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 = []
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
def main(): prs_abertos = obter_prs_abertos() prs_abertos.reverse()
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()