Development
repositories
Code repository management
repositories
Code repositories with Git integration, branch management, commit tracking, pull requests, code review, and repository analytics for version control.
Overview
The repositories primitive provides comprehensive code repository management including Git operations, branch management, commit tracking, pull requests, code review workflows, and repository analytics.
Parent Primitive: projects - Project management and organization
SDK Object Mapping
This primitive integrates with api SDK object (one of 8 core) for Git and CI/CD integrations:
import { api, on, send, repositories } from 'sdk.do'
// API - Git operations via integrations (api is one of 8 core SDK objects)
const repo = await repositories.create({
name: 'mobile-app',
projectId: 'project-123',
})
// ON - Repository events (on is one of 8 core SDK objects)
on($.Repository.pushed, async ({ repository, commits }) => {
// Trigger CI/CD via API integrations
await api.action('github.dispatch_workflow', {
repo: repository.name,
workflow: 'ci.yml',
ref: commits[0].branch,
})
// Notify team
await send($.Slack.message, {
channel: repository.team.channel,
text: `New push to ${repository.name}: ${commits.length} commits`,
})
})
on($.Repository.prOpened, async ({ repository, pr }) => {
// Auto-assign reviewers via API
await api.action('github.assign_reviewers', {
repo: repository.name,
pr: pr.number,
reviewers: repository.codeOwners,
})
// Run automated checks
await api.action('github.create_check', {
repo: repository.name,
sha: pr.head.sha,
name: 'code-quality',
status: 'in_progress',
})
})
on($.Repository.prMerged, async ({ repository, pr }) => {
// Deploy via API integration
await api.action('vercel.deploy', {
project: repository.deploymentProject,
branch: pr.base.ref,
})
})Quick Example
import { repositories } from 'sdk.do'
// Create repository
const repo = await repositories.create({
name: 'mobile-app',
description: 'Mobile application repository',
organizationId: 'org-123',
visibility: 'private',
defaultBranch: 'main',
gitignore: 'Node',
license: 'MIT',
})
console.log(`Repository: ${repo.name}`)
console.log(`Clone URL: ${repo.cloneUrl}`)
// Clone repository
await repositories.clone(repo.id, {
destination: './local-repo',
branch: 'main',
})
// Create branch
const branch = await repositories.createBranch(repo.id, {
name: 'feature/user-auth',
from: 'main',
})
// List branches
const branches = await repositories.listBranches(repo.id)
branches.forEach((b) => {
console.log(`${b.name}: ${b.commit.sha} (${b.lastUpdated})`)
})
// Commit changes
const commit = await repositories.commit(repo.id, {
branch: 'feature/user-auth',
message: 'Add user authentication',
files: [
{ path: 'src/auth.ts', content: authCode },
{ path: 'tests/auth.test.ts', content: testCode },
],
author: {
name: 'John Doe',
email: '[email protected]',
},
})
// Get commit details
const commitInfo = await repositories.getCommit(repo.id, commit.sha)
console.log(`Author: ${commitInfo.author.name}`)
console.log(`Message: ${commitInfo.message}`)
console.log(`Files changed: ${commitInfo.files.length}`)
// Commit history
const history = await repositories.getHistory(repo.id, {
branch: 'main',
limit: 20,
since: new Date('2024-01-01'),
})
history.forEach((c) => {
console.log(`${c.sha.slice(0, 7)}: ${c.message} (${c.author.name})`)
})
// Create pull request
const pr = await repositories.createPullRequest(repo.id, {
title: 'Add user authentication',
description: 'Implements OAuth2 authentication flow',
sourceBranch: 'feature/user-auth',
targetBranch: 'main',
assignees: ['user-123'],
reviewers: ['user-456', 'user-789'],
labels: ['feature', 'authentication'],
})
console.log(`Pull Request #${pr.number}`)
// List pull requests
const pullRequests = await repositories.listPullRequests(repo.id, {
state: 'open',
author: 'user-123',
})
// Add PR comment
await repositories.addPRComment(repo.id, pr.number, {
body: 'Please add unit tests for the authentication flow',
path: 'src/auth.ts',
line: 42,
})
// Request changes
await repositories.reviewPR(repo.id, pr.number, {
event: 'REQUEST_CHANGES',
body: 'Needs more test coverage',
comments: [{ path: 'src/auth.ts', line: 42, body: 'Add error handling here' }],
})
// Approve PR
await repositories.reviewPR(repo.id, pr.number, {
event: 'APPROVE',
body: 'LGTM! Great work.',
})
// Merge pull request
await repositories.mergePR(repo.id, pr.number, {
method: 'squash',
commitMessage: 'feat: Add user authentication (#123)',
deleteBranch: true,
})
// Repository files
const files = await repositories.listFiles(repo.id, {
branch: 'main',
path: 'src/',
})
files.forEach((file) => {
console.log(`${file.type}: ${file.path} (${file.size} bytes)`)
})
// Read file
const fileContent = await repositories.readFile(repo.id, {
path: 'src/auth.ts',
branch: 'main',
})
console.log(fileContent.content)
// Search code
const searchResults = await repositories.searchCode(repo.id, {
query: 'authentication',
path: 'src/',
language: 'typescript',
})
searchResults.forEach((result) => {
console.log(`${result.file}:${result.line}`)
console.log(` ${result.snippet}`)
})
// Repository tags
await repositories.createTag(repo.id, {
name: 'v1.0.0',
commit: commit.sha,
message: 'Release version 1.0.0',
tagger: {
name: 'Release Bot',
email: '[email protected]',
},
})
const tags = await repositories.listTags(repo.id)
// Repository releases
await repositories.createRelease(repo.id, {
tag: 'v1.0.0',
name: 'Version 1.0.0',
body: 'First stable release',
draft: false,
prerelease: false,
assets: [{ name: 'app-v1.0.0.zip', url: 'https://...' }],
})
// Repository statistics
const stats = await repositories.getStats(repo.id)
console.log(`Commits: ${stats.commits}`)
console.log(`Branches: ${stats.branches}`)
console.log(`Contributors: ${stats.contributors}`)
console.log(`Lines of code: ${stats.linesOfCode}`)
console.log(`Languages: ${Object.keys(stats.languages).join(', ')}`)
// Code contributors
const contributors = await repositories.getContributors(repo.id)
contributors.forEach((c) => {
console.log(`${c.name}: ${c.commits} commits, ${c.additions}+ ${c.deletions}-`)
})
// Code frequency
const frequency = await repositories.getCodeFrequency(repo.id, {
timeRange: { last: '90d' },
})
// Repository insights
const insights = await repositories.getInsights(repo.id, {
period: 'month',
})
console.log(`Commits this month: ${insights.commits}`)
console.log(`PRs merged: ${insights.prsMerged}`)
console.log(`Active contributors: ${insights.activeContributors}`)
// Protected branches
await repositories.protectBranch(repo.id, 'main', {
requirePullRequest: true,
requiredReviews: 2,
dismissStaleReviews: true,
requireStatusChecks: ['ci/tests', 'ci/lint'],
restrictPushes: ['role:admin'],
requireLinearHistory: true,
})
// Webhooks
await repositories.addWebhook(repo.id, {
url: 'https://api.example.com/webhook',
events: ['push', 'pull_request', 'release'],
secret: 'webhook-secret-123',
})
// Repository permissions
await repositories.setPermissions(repo.id, {
'user-123': 'admin',
'user-456': 'write',
'team-789': 'read',
})
// Fork repository
const fork = await repositories.fork(repo.id, {
organizationId: 'org-456',
name: 'mobile-app-fork',
})
// Mirror repository
await repositories.createMirror(repo.id, {
source: 'https://github.com/external/repo.git',
interval: { hours: 1 },
credentials: { username: 'bot', token: 'token-123' },
})
// Repository templates
const template = await repositories.createTemplate(repo.id, {
name: 'Node.js API Template',
description: 'Standard Node.js API structure',
})
// Create from template
const fromTemplate = await repositories.createFromTemplate('Node.js API Template', {
name: 'customer-api',
organizationId: 'org-123',
})
// Repository archive
await repositories.archive(repo.id)
// Unarchive
await repositories.unarchive(repo.id)
// Delete repository
await repositories.delete(repo.id, {
confirmationToken: 'delete-mobile-app',
})
// Repository notifications
on(repositories.pushed, async (repo, push) => {
console.log(`New push to ${repo.name}: ${push.commits.length} commits`)
await triggerCI(repo.id, push.ref)
})
on(repositories.prOpened, async (repo, pr) => {
console.log(`New PR #${pr.number}: ${pr.title}`)
await assignReviewers(repo.id, pr.number)
})
on(repositories.prMerged, async (repo, pr) => {
console.log(`PR merged: ${pr.title}`)
await deployToStaging(repo.id)
})Core Capabilities
- Git Integration - Full Git version control
- Branch Management - Create, merge, protect branches
- Pull Requests - Code review workflows
- Commit Tracking - Commit history and analytics
- Code Search - Search across repository
Access Methods
SDK
TypeScript/JavaScript library for repositories
await repositories.create({ name: 'mobile-app', organizationId: 'org-123' })CLI
Command-line tool for repository operations
do repo create mobile-app --org org-123API
REST/RPC endpoints for repository management
curl -X POST https://api.do/v1/repositories -d '{"name":"mobile-app"}'MCP
Model Context Protocol for AI-driven repositories
Create a new repository named mobile-appRelated Primitives
Parent Primitive
- projects - Project management and organization