.do
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' })

SDK Documentation

CLI

Command-line tool for repository operations

do repo create mobile-app --org org-123

CLI Documentation

API

REST/RPC endpoints for repository management

curl -X POST https://api.do/v1/repositories -d '{"name":"mobile-app"}'

API Documentation

MCP

Model Context Protocol for AI-driven repositories

Create a new repository named mobile-app

MCP Documentation

Parent Primitive

  • projects - Project management and organization
  • api - Git and CI/CD integrations (SDK object mapping)
  • branches - Branch management
  • commits - Commit tracking
  • on - Repository event handlers
  • webhooks - Repository webhook notifications