Download app/api/github/create/route.ts from hanzoai/gallery: direct link, hf CLI and curl.
- Browser
- Download file 4.25 kB
-
https://huggingface.co/spaces/hanzoai/gallery/resolve/main/app/api/github/create/route.ts
- Command line
-
hf download hf://spaces/hanzoai/gallery/app/api/github/create/route.ts
-
curl -L -o route.ts https://huggingface.co/spaces/hanzoai/gallery/resolve/main/app/api/github/create/route.ts
4.25 kB
| import { NextRequest, NextResponse } from 'next/server' | |
| import { templates } from '@/components/template-data' | |
| export async function POST(request: NextRequest) { | |
| try { | |
| const { templateId, repoName, description, isPrivate } = await request.json() | |
| const template = templates.find(t => t.id === templateId) | |
| if (!template) { | |
| return NextResponse.json( | |
| { error: 'Template not found' }, | |
| { status: 404 } | |
| ) | |
| } | |
| // Get GitHub token from environment or request headers | |
| const githubToken = request.headers.get('X-GitHub-Token') || process.env.GITHUB_TOKEN | |
| if (!githubToken) { | |
| return NextResponse.json( | |
| { error: 'GitHub authentication required' }, | |
| { status: 401 } | |
| ) | |
| } | |
| // Create repository using GitHub API | |
| const createRepoResponse = await fetch('https://api.github.com/user/repos', { | |
| method: 'POST', | |
| headers: { | |
| 'Authorization': `Bearer ${githubToken}`, | |
| 'Accept': 'application/vnd.github.v3+json', | |
| 'Content-Type': 'application/json' | |
| }, | |
| body: JSON.stringify({ | |
| name: repoName || `${template.id}-project`, | |
| description: description || template.description, | |
| private: isPrivate || false, | |
| auto_init: true, | |
| has_issues: true, | |
| has_projects: false, | |
| has_wiki: false | |
| }) | |
| }) | |
| if (!createRepoResponse.ok) { | |
| const error = await createRepoResponse.json() | |
| return NextResponse.json( | |
| { error: error.message || 'Failed to create repository' }, | |
| { status: createRepoResponse.status } | |
| ) | |
| } | |
| const repo = await createRepoResponse.json() | |
| // If template has a GitHub URL, we can suggest importing it | |
| if (template.githubUrl) { | |
| // Add a README with instructions | |
| const readmeContent = `# ${repoName || template.name} | |
| ${description || template.description} | |
| ## Getting Started | |
| This project was created from the ${template.name} template. | |
| ### Quick Setup | |
| \`\`\`bash | |
| # Clone this repository | |
| git clone ${repo.clone_url} | |
| # Navigate to the project | |
| cd ${repo.name} | |
| # Install dependencies | |
| npm install | |
| # Start development server | |
| npm run dev | |
| \`\`\` | |
| ### Template Information | |
| - **Template**: ${template.name} | |
| - **Category**: ${template.category} | |
| - **Technologies**: ${template.tech.join(', ')} | |
| ### Features | |
| ${template.features.map(f => `- ${f}`).join('\n')} | |
| ### Deploy | |
| ${template.deployUrls?.vercel ? `[](${template.deployUrls.vercel})` : ''} | |
| ${template.deployUrls?.netlify ? `[](${template.deployUrls.netlify})` : ''} | |
| ${template.deployUrls?.railway ? `[](${template.deployUrls.railway})` : ''} | |
| ## License | |
| MIT | |
| --- | |
| Created with [Hanzo AI Templates](https://hanzo.ai/templates) | |
| ` | |
| // Create README file | |
| const createFileResponse = await fetch( | |
| `https://api.github.com/repos/${repo.owner.login}/${repo.name}/contents/README.md`, | |
| { | |
| method: 'PUT', | |
| headers: { | |
| 'Authorization': `Bearer ${githubToken}`, | |
| 'Accept': 'application/vnd.github.v3+json', | |
| 'Content-Type': 'application/json' | |
| }, | |
| body: JSON.stringify({ | |
| message: 'Initial commit with template information', | |
| content: Buffer.from(readmeContent).toString('base64') | |
| }) | |
| } | |
| ) | |
| if (!createFileResponse.ok) { | |
| console.error('Failed to create README:', await createFileResponse.text()) | |
| } | |
| } | |
| return NextResponse.json({ | |
| success: true, | |
| repository: { | |
| name: repo.name, | |
| url: repo.html_url, | |
| cloneUrl: repo.clone_url, | |
| description: repo.description | |
| }, | |
| message: 'Repository created successfully', | |
| nextSteps: [ | |
| `Clone your repository: git clone ${repo.clone_url}`, | |
| 'Copy template files to your repository', | |
| 'Commit and push your changes' | |
| ] | |
| }) | |
| } catch (error) { | |
| console.error('Error creating GitHub repository:', error) | |
| return NextResponse.json( | |
| { error: 'Failed to create GitHub repository' }, | |
| { status: 500 } | |
| ) | |
| } | |
| } |