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.
Lleva tu flujo con Claude Code al siguiente nivel
50 plantillas de prompts probadas en producción, listas para copiar y pegar en Claude Code.
PDF gratuito: Hoja de trucos de Claude Code en 5 minutos
Comandos clave, atajos y ejemplos de prompts en una sola página imprimible.
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
Cómo potenciar tus proyectos personales con Claude Code [Con ejemplos]
Aprende a acelerar drásticamente tus proyectos personales de desarrollo usando Claude Code. Incluye ejemplos reales y un flujo de trabajo práctico desde la idea hasta el despliegue.
Cómo automatizar la refactorización con Claude Code
Aprende a automatizar eficientemente la refactorización de código usando Claude Code. Incluye prompts prácticos y patrones concretos de refactorización para proyectos reales.
Guia completa de configuracion CORS con Claude Code
Aprende sobre la configuracion completa de CORS usando Claude Code. Incluye consejos practicos y ejemplos de codigo.