func createProjectFromTemplate(ctx context.Context, templateID, projectName, userID string) (*storage.Repo, error) {
// Fork the template repo
project, err := client.CreateRepo(ctx, storage.CreateRepoOptions{
ID: userID + "/" + projectName,
BaseRepo: storage.ForkBaseRepo{ID: templateID},
})
if err != nil {
return nil, err
}
// Customize the new project
builder, err := project.CreateCommit(storage.CommitOptions{
TargetBranch: "main",
CommitMessage: "Initialize project",
Author: storage.CommitSignature{Name: "System", Email: "system@example.com"},
})
if err != nil {
return nil, err
}
_, err = builder.AddFileFromString(
"README.md",
"# "+projectName+"\n\nCreated by "+userID,
nil,
).Send(ctx)
if err != nil {
return nil, err
}
return project, nil
}
// Usage
project, err := createProjectFromTemplate(context.Background(), "templates/react-starter", "my-new-app", "user-123")