GitHub API con Claude Code
Aprenda sobre la API de GitHub usando Claude Code. Incluye consejos practicos y ejemplos de codigo.
Optimizando el uso de la API de GitHub con Claude Code
Aprovechando la API de GitHub, puede automatizar muchos aspectos del flujo de trabajo de desarrollo: gestion de repositorios, creacion de PRs, gestion de issues y releases. Con Claude Code, puede construir rapidamente scripts de automatizacion utilizando el SDK Octokit.
Configuracion del cliente Octokit
> Configura un cliente de la API de GitHub.
> Compatible con autenticacion tanto de GitHub App como de Personal Access Token.
// src/lib/github.ts
import { Octokit } from '@octokit/rest';
import { createAppAuth } from '@octokit/auth-app';
// Autenticacion con Personal Access Token
export function createOctokitWithPAT(token: string) {
return new Octokit({ auth: token });
}
// Autenticacion con GitHub App
export function createOctokitWithApp(
appId: string,
privateKey: string,
installationId: number
) {
return new Octokit({
authStrategy: createAppAuth,
auth: { appId, privateKey, installationId },
});
}
const octokit = createOctokitWithPAT(process.env.GITHUB_TOKEN!);
export default octokit;
Herramienta de automatizacion de PRs
> Crea una herramienta que automatice la creacion de PRs, asignacion de revisores y etiquetado.
// src/services/pr-automation.ts
import octokit from '../lib/github';
interface CreatePROptions {
owner: string;
repo: string;
title: string;
body: string;
head: string;
base: string;
reviewers?: string[];
labels?: string[];
draft?: boolean;
}
export async function createPullRequest(options: CreatePROptions) {
// Crear PR
const { data: pr } = await octokit.pulls.create({
owner: options.owner,
repo: options.repo,
title: options.title,
body: options.body,
head: options.head,
base: options.base,
draft: options.draft || false,
});
// Asignar revisores
if (options.reviewers?.length) {
await octokit.pulls.requestReviewers({
owner: options.owner,
repo: options.repo,
pull_number: pr.number,
reviewers: options.reviewers,
});
}
// Agregar etiquetas
if (options.labels?.length) {
await octokit.issues.addLabels({
owner: options.owner,
repo: options.repo,
issue_number: pr.number,
labels: options.labels,
});
}
return pr;
}
// Analizar archivos modificados de un PR
export async function analyzePRChanges(
owner: string,
repo: string,
pullNumber: number
) {
const { data: files } = await octokit.pulls.listFiles({
owner, repo,
pull_number: pullNumber,
per_page: 100,
});
const summary = {
totalFiles: files.length,
additions: files.reduce((sum, f) => sum + f.additions, 0),
deletions: files.reduce((sum, f) => sum + f.deletions, 0),
filesByType: {} as Record<string, number>,
};
for (const file of files) {
const ext = file.filename.split('.').pop() || 'other';
summary.filesByType[ext] = (summary.filesByType[ext] || 0) + 1;
}
return summary;
}
Automatizacion de gestion de issues
> Crea un script para el cierre automatico de issues obsoletos y la asignacion automatica de etiquetas.
// src/services/issue-management.ts
import octokit from '../lib/github';
export async function closeStaleIssues(
owner: string,
repo: string,
daysThreshold = 90
) {
const cutoffDate = new Date();
cutoffDate.setDate(cutoffDate.getDate() - daysThreshold);
const { data: issues } = await octokit.issues.listForRepo({
owner, repo,
state: 'open',
sort: 'updated',
direction: 'asc',
per_page: 100,
});
const staleIssues = issues.filter(
(issue) =>
!issue.pull_request &&
new Date(issue.updated_at) < cutoffDate
);
for (const issue of staleIssues) {
// Agregar etiqueta stale
await octokit.issues.addLabels({
owner, repo,
issue_number: issue.number,
labels: ['stale'],
});
// Agregar comentario y cerrar
await octokit.issues.createComment({
owner, repo,
issue_number: issue.number,
body: `Este issue se cierra automaticamente porque no ha sido actualizado en mas de ${daysThreshold} dias. Si necesita atencion nuevamente, por favor reabralo.`,
});
await octokit.issues.update({
owner, repo,
issue_number: issue.number,
state: 'closed',
state_reason: 'not_planned',
});
}
return { closedCount: staleIssues.length };
}
Automatizacion de releases
// src/services/release.ts
import octokit from '../lib/github';
export async function createRelease(
owner: string,
repo: string,
tagName: string,
options?: { prerelease?: boolean; generateNotes?: boolean }
) {
const { data: release } = await octokit.repos.createRelease({
owner, repo,
tag_name: tagName,
name: `Release ${tagName}`,
generate_release_notes: options?.generateNotes ?? true,
prerelease: options?.prerelease ?? false,
});
return release;
}
Servidor de recepcion de Webhooks
// src/api/github-webhook.ts
import { Webhooks } from '@octokit/webhooks';
const webhooks = new Webhooks({
secret: process.env.GITHUB_WEBHOOK_SECRET!,
});
webhooks.on('pull_request.opened', async ({ payload }) => {
const { pull_request, repository } = payload;
console.log(`Nuevo PR: ${pull_request.title} en ${repository.full_name}`);
// Etiquetado automatico, asignacion de revisores, etc.
});
webhooks.on('issues.opened', async ({ payload }) => {
const { issue, repository } = payload;
console.log(`Nuevo Issue: ${issue.title} en ${repository.full_name}`);
});
export default webhooks;
Resumen
Combinando la API de GitHub con Claude Code, puede realizar rapidamente la automatizacion del flujo de trabajo de desarrollo. Consulte tambien la guia de uso de GitHub Actions y el flujo de trabajo Git.
Para detalles de la API de GitHub, consulte la documentacion de la API REST de GitHub.
PDF gratuito: Hoja de trucos de Claude Code en 5 minutos
Solo deja tu correo y te enviaremos al instante la hoja de trucos en una página A4.
Cuidamos tus datos personales y nunca enviamos spam.
Sobre el autor
Masa
Ingeniero apasionado por Claude Code. Dirige claudecode-lab.com, un medio tecnológico en 10 idiomas con más de 2.000 páginas.
Artículos relacionados
7 comprobaciones antes de publicar cada día un artículo multilingüe sobre Claude Code
Una lista práctica para publicar artículos multilingües sobre Claude Code todos los días sin olvidar idiomas, romper CTAs ni dejar páginas antiguas en producción.
Que es Codex Automations y como dejar que la IA gestione contenido mientras duermes
Guia practica para usar Codex Automations en analitica, articulos, CTA, despliegue y monetizacion.
Claude Code × GCP Cloud Functions Guía Completa | Desarrollo Serverless Ultrarrápido
Optimiza GCP Cloud Functions con Claude Code. Implementa triggers HTTP/Pub/Sub/Firestore, pruebas locales y automatización de despliegues con ejemplos de código reales de la experiencia de Masa.