github

package
v0.0.0-...-2869b66 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 9, 2025 License: MIT Imports: 8 Imported by: 0

README

GitHub Integration Package

This package provides a well-structured, maintainable GitHub API integration following SOLID principles.

Architecture Overview

The package is organized following Single Responsibility Principle (SRP) with each file handling a specific domain:

Core Files
client.go - Main Client & Facade
  • Purpose: Entry point and orchestrator for all GitHub operations
  • Pattern: Facade pattern that delegates to specialized services
  • SOLID Principles:
    • Single Responsibility: Only handles client initialization and service coordination
    • Open/Closed: New services can be added without modifying existing code
    • Dependency Inversion: Depends on service abstractions
client := github.NewClient(token, julesClient)
workflows, err := client.Actions.ListWorkflows(ctx, owner, repo)
repos, err := client.Repositories.ListAccessibleRepos(ctx)
types.go - Domain Types
  • Purpose: Centralized domain models
  • Contains: Repository, Workflow, WorkflowRun, WorkflowJob
  • Benefit: Single source of truth for data structures
Services

Each service encapsulates a specific domain with clear responsibilities:

actions.go - ActionsService
  • Responsibility: GitHub Actions operations (workflows, runs, jobs, artifacts, caches)
  • Methods:
    • Workflow operations: ListWorkflows, GetWorkflow, TriggerWorkflow
    • Run management: ListWorkflowRuns, GetWorkflowRun, RerunWorkflow, CancelWorkflow
    • Job control: ListWorkflowJobs, GetWorkflowJob, RerunJob
    • Artifacts: ListArtifacts, DownloadArtifact, DeleteArtifact
    • Caches: ListCaches, DeleteCachesByKey, DeleteCacheByID
repositories.go - RepositoryService
  • Responsibility: Repository discovery and management
  • Methods:
    • DiscoverCurrentRepo: Detect repository from git remote
    • ListConnectedRepos: Fetch Jules-connected repositories
    • ListAccessibleRepos: List all accessible repositories
    • SyncRepoWithJules: Ensure repository is connected to Jules
pullrequests.go - PullRequestService
  • Responsibility: Pull request operations
  • Methods:
    • GetSessionPullRequest: Get PR for Jules session
    • MergePullRequest: Merge PR with specified method
    • GetPullRequestDiff: Retrieve PR diff
sessions.go - SessionService
  • Responsibility: Jules session management with GitHub context
  • Methods:
    • CreateSessionFromRepo: Create session for specific repository
    • CreateSessionFromCurrentRepo: Create session using git context
Utilities
git.go - GitRemoteParser
  • Responsibility: Git remote URL parsing
  • Methods:
    • GetRepoFromGitRemote: Detect repository from git remote
    • ParseGitHubURL: Parse owner/repo from URLs (HTTPS & SSH)
utils.go - Helper Functions
  • Responsibility: Shared utility functions
  • Contains: parseInt and other common helpers

Design Patterns

1. Facade Pattern

The Client struct acts as a facade, providing a simple interface to the complex GitHub API subsystem.

2. Service Layer Pattern

Each service (ActionsService, RepositoryService, etc.) encapsulates business logic for its domain.

3. Dependency Injection

Services receive dependencies through constructors, making them testable and loosely coupled.

client.Repositories = NewRepositoryService(client, julesClient)
client.Actions = NewActionsService(client)

SOLID Principles Applied

Single Responsibility Principle (SRP)
  • ✅ Each service handles one domain area
  • client.go only orchestrates, doesn't implement business logic
  • git.go only handles git operations
  • types.go only defines data structures
Open/Closed Principle
  • ✅ New services can be added without modifying existing services
  • ✅ New methods can be added to services without breaking clients
Liskov Substitution Principle
  • ✅ Services can be replaced with mocks for testing
  • ✅ All services follow consistent patterns
Interface Segregation Principle
  • ✅ Each service exposes only relevant methods
  • ✅ CLI commands use only the services they need
Dependency Inversion Principle
  • ✅ High-level Client depends on service abstractions
  • ✅ Services depend on interfaces (jules.Client), not concrete implementations

Usage Examples

Actions
// List workflows
workflows, err := client.Actions.ListWorkflows(ctx, "owner", "repo")

// Trigger workflow
err := client.Actions.TriggerWorkflow(ctx, "owner", "repo", "workflow.yml", "main", inputs)

// List workflow runs
runs, err := client.Actions.ListWorkflowRuns(ctx, "owner", "repo", "", nil)
Repositories
// Discover current repository
repo, err := client.Repositories.DiscoverCurrentRepo(ctx)

// List accessible repositories
repos, err := client.Repositories.ListAccessibleRepos(ctx)
Pull Requests
// Get PR for session
pr, err := client.PullRequests.GetSessionPullRequest(ctx, sessionID)

// Merge PR
err := client.PullRequests.MergePullRequest(ctx, prURL, "squash")
Sessions
// Create session from current repo
session, err := client.Sessions.CreateSessionFromCurrentRepo(ctx, prompt, branch)

Benefits of This Architecture

  1. Maintainability: Clear separation of concerns makes code easier to understand and modify
  2. Testability: Services can be mocked and tested independently
  3. Scalability: New features can be added without touching existing code
  4. Readability: Intent is clear from the service name (e.g., client.Actions.ListWorkflows)
  5. Reusability: Services can be reused across different parts of the application
  6. Type Safety: Strong typing with domain models prevents errors

Migration from Old Structure

Old (monolithic):

workflows, err := client.ListWorkflows(ctx, owner, repo)

New (service-based):

workflows, err := client.Actions.ListWorkflows(ctx, owner, repo)

All CLI commands have been updated to use the new structure.

Testing

Each service can be tested independently:

func TestActionsService_ListWorkflows(t *testing.T) {
    mockClient := &github.Client{...}
    service := NewActionsService(mockClient)

    workflows, err := service.ListWorkflows(ctx, "owner", "repo")
    // assertions...
}

Future Enhancements

  • Add interfaces for each service to enable better mocking
  • Add comprehensive unit tests for each service
  • Add integration tests
  • Add caching layer for frequently accessed data
  • Add rate limiting and retry logic
  • Add metrics and logging

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ActionsService

type ActionsService struct {
	// contains filtered or unexported fields
}

ActionsService handles GitHub Actions operations

func NewActionsService

func NewActionsService(client *Client) *ActionsService

NewActionsService creates a new actions service

func (*ActionsService) CancelWorkflow

func (s *ActionsService) CancelWorkflow(ctx context.Context, owner, repo string, runID int64) error

CancelWorkflow cancels a workflow run

func (*ActionsService) DeleteArtifact

func (s *ActionsService) DeleteArtifact(ctx context.Context, owner, repo string, artifactID int64) error

DeleteArtifact deletes an artifact

func (*ActionsService) DeleteCacheByID

func (s *ActionsService) DeleteCacheByID(ctx context.Context, owner, repo string, cacheID int64) error

DeleteCacheByID deletes a cache by ID

func (*ActionsService) DeleteCachesByKey

func (s *ActionsService) DeleteCachesByKey(ctx context.Context, owner, repo, key string, ref *string) error

DeleteCachesByKey deletes caches by key

func (*ActionsService) DownloadArtifact

func (s *ActionsService) DownloadArtifact(ctx context.Context, owner, repo string, artifactID int64) (string, error)

DownloadArtifact downloads an artifact and returns the download URL

func (*ActionsService) DownloadJobLogs

func (s *ActionsService) DownloadJobLogs(ctx context.Context, owner, repo string, jobID int64) (string, error)

DownloadJobLogs downloads logs for a specific job

func (*ActionsService) DownloadWorkflowLogs

func (s *ActionsService) DownloadWorkflowLogs(ctx context.Context, owner, repo string, runID int64) (string, error)

DownloadWorkflowLogs downloads logs for a workflow run

func (*ActionsService) GetArtifact

func (s *ActionsService) GetArtifact(ctx context.Context, owner, repo string, artifactID int64) (*github.Artifact, error)

GetArtifact gets a specific artifact by ID

func (*ActionsService) GetWorkflow

func (s *ActionsService) GetWorkflow(ctx context.Context, owner, repo, workflowIDOrFile string) (*Workflow, error)

GetWorkflow gets a specific workflow by ID or filename

func (*ActionsService) GetWorkflowJob

func (s *ActionsService) GetWorkflowJob(ctx context.Context, owner, repo string, jobID int64) (*WorkflowJob, error)

GetWorkflowJob gets a specific job by ID

func (*ActionsService) GetWorkflowRun

func (s *ActionsService) GetWorkflowRun(ctx context.Context, owner, repo string, runID int64) (*WorkflowRun, error)

GetWorkflowRun gets a specific workflow run by ID

func (*ActionsService) ListArtifacts

func (s *ActionsService) ListArtifacts(ctx context.Context, owner, repo string, runID int64) ([]*github.Artifact, error)

ListArtifacts lists artifacts for a repository or workflow run

func (*ActionsService) ListCaches

func (s *ActionsService) ListCaches(ctx context.Context, owner, repo string, ref *string) ([]*github.ActionsCache, error)

ListCaches lists GitHub Actions caches for a repository

func (*ActionsService) ListWorkflowJobs

func (s *ActionsService) ListWorkflowJobs(ctx context.Context, owner, repo string, runID int64, filter string) ([]*WorkflowJob, error)

ListWorkflowJobs lists jobs for a workflow run

func (*ActionsService) ListWorkflowRuns

func (s *ActionsService) ListWorkflowRuns(ctx context.Context, owner, repo string, workflowIDOrFile string, opts *github.ListWorkflowRunsOptions) ([]*WorkflowRun, error)

ListWorkflowRuns lists workflow runs for a repository or specific workflow

func (*ActionsService) ListWorkflows

func (s *ActionsService) ListWorkflows(ctx context.Context, owner, repo string) ([]*Workflow, error)

ListWorkflows lists all workflows in a repository

func (*ActionsService) RerunFailedJobs

func (s *ActionsService) RerunFailedJobs(ctx context.Context, owner, repo string, runID int64) error

RerunFailedJobs re-runs only failed jobs in a workflow run

func (*ActionsService) RerunJob

func (s *ActionsService) RerunJob(ctx context.Context, owner, repo string, jobID int64) error

RerunJob re-runs a specific job

func (*ActionsService) RerunWorkflow

func (s *ActionsService) RerunWorkflow(ctx context.Context, owner, repo string, runID int64) error

RerunWorkflow re-runs a workflow run

func (*ActionsService) TriggerWorkflow

func (s *ActionsService) TriggerWorkflow(ctx context.Context, owner, repo, workflowIDOrFile, ref string, inputs map[string]interface{}) error

TriggerWorkflow manually triggers a workflow dispatch event

type Client

type Client struct {
	*github.Client

	// Specialized services - each responsible for a specific domain
	Repositories *RepositoryService
	Actions      *ActionsService
	PullRequests *PullRequestService
	Sessions     *SessionService
	Issues       *IssuesService
	Milestones   *MilestonesService
	Projects     *ProjectsService
	// contains filtered or unexported fields
}

Client wraps the GitHub API client with Jules integration It acts as a facade that delegates to specialized services following SOLID principles: - Single Responsibility: Each service handles one domain area - Open/Closed: New services can be added without modifying existing code - Liskov Substitution: Services can be mocked for testing - Interface Segregation: Each service exposes only relevant methods - Dependency Inversion: Services depend on abstractions (interfaces)

func NewClient

func NewClient(token string, julesClient *jules.Client) *Client

NewClient creates a new GitHub client with authentication and initializes all services This is the main entry point for GitHub operations

type GitRemoteParser

type GitRemoteParser struct{}

GitRemoteParser handles parsing of Git remote URLs and repository detection

func NewGitRemoteParser

func NewGitRemoteParser() *GitRemoteParser

NewGitRemoteParser creates a new git remote parser

func (*GitRemoteParser) GetRepoFromGitRemote

func (p *GitRemoteParser) GetRepoFromGitRemote() (*Repository, error)

GetRepoFromGitRemote detects the GitHub repository from the current directory's git remote

func (*GitRemoteParser) ParseGitHubURL

func (p *GitRemoteParser) ParseGitHubURL(remoteURL string) (*Repository, error)

ParseGitHubURL parses a GitHub URL and extracts owner and repository name Supports both HTTPS and SSH URL formats: - https://github.com/owner/repo.git - git@github.com:owner/repo.git

type Issue

type Issue struct {
	Number    int        `json:"number"`
	Title     string     `json:"title"`
	Body      string     `json:"body"`
	State     string     `json:"state"`
	URL       string     `json:"url"`
	HTMLURL   string     `json:"html_url"`
	Milestone string     `json:"milestone,omitempty"`
	CreatedAt time.Time  `json:"created_at"`
	UpdatedAt time.Time  `json:"updated_at"`
	ClosedAt  *time.Time `json:"closed_at,omitempty"`
	Assignees []string   `json:"assignees"`
	Labels    []string   `json:"labels"`
}

Issue represents a GitHub issue with relevant metadata.

type IssueCreateRequest

type IssueCreateRequest struct {
	Title     string   `json:"title"`
	Body      string   `json:"body,omitempty"`
	Assignees []string `json:"assignees,omitempty"`
	Labels    []string `json:"labels,omitempty"`
	Milestone int      `json:"milestone,omitempty"`
}

IssueCreateRequest represents parameters for creating a new issue

type IssueUpdateRequest

type IssueUpdateRequest struct {
	Title     *string   `json:"title,omitempty"`
	Body      *string   `json:"body,omitempty"`
	State     *string   `json:"state,omitempty"`
	Assignees *[]string `json:"assignees,omitempty"`
	Labels    *[]string `json:"labels,omitempty"`
	Milestone *int      `json:"milestone,omitempty"`
}

IssueUpdateRequest represents parameters for updating an issue

type IssuesService

type IssuesService struct {
	// contains filtered or unexported fields
}

IssuesService handles GitHub Issues operations

func NewIssuesService

func NewIssuesService(client *Client) *IssuesService

NewIssuesService creates a new issues service

func (*IssuesService) AddComment

func (s *IssuesService) AddComment(ctx context.Context, owner, repo string, number int, body string) error

AddComment adds a comment to an issue

func (*IssuesService) AddLabels

func (s *IssuesService) AddLabels(ctx context.Context, owner, repo string, number int, labels []string) error

AddLabels adds labels to an issue

func (*IssuesService) AssignIssue

func (s *IssuesService) AssignIssue(ctx context.Context, owner, repo string, number int, assignees []string) error

AssignIssue assigns users to an issue

func (*IssuesService) CloseIssue

func (s *IssuesService) CloseIssue(ctx context.Context, owner, repo string, number int) (*Issue, error)

CloseIssue closes an issue

func (*IssuesService) CreateIssue

func (s *IssuesService) CreateIssue(ctx context.Context, owner, repo string, req *IssueCreateRequest) (*Issue, error)

CreateIssue creates a new issue in a repository.

func (*IssuesService) GetIssue

func (s *IssuesService) GetIssue(ctx context.Context, owner, repo string, number int) (*Issue, error)

GetIssue retrieves a specific issue

func (*IssuesService) ListIssues

func (s *IssuesService) ListIssues(ctx context.Context, owner, repo string, state string, labels []string) ([]*Issue, error)

ListIssues lists issues for a repository

func (*IssuesService) RemoveLabel

func (s *IssuesService) RemoveLabel(ctx context.Context, owner, repo string, number int, label string) error

RemoveLabel removes a label from an issue

func (*IssuesService) UpdateIssue

func (s *IssuesService) UpdateIssue(ctx context.Context, owner, repo string, number int, req IssueUpdateRequest) (*Issue, error)

UpdateIssue updates an existing issue

type Milestone

type Milestone struct {
	Number       int        `json:"number"`
	Title        string     `json:"title"`
	Description  string     `json:"description"`
	State        string     `json:"state"`
	URL          string     `json:"url"`
	HTMLURL      string     `json:"html_url"`
	OpenIssues   int        `json:"open_issues"`
	ClosedIssues int        `json:"closed_issues"`
	CreatedAt    time.Time  `json:"created_at"`
	UpdatedAt    time.Time  `json:"updated_at"`
	DueOn        *time.Time `json:"due_on,omitempty"`
	ClosedAt     *time.Time `json:"closed_at,omitempty"`
}

Milestone represents a GitHub milestone.

type MilestoneCreateRequest

type MilestoneCreateRequest struct {
	Title       string     `json:"title"`
	Description string     `json:"description,omitempty"`
	DueOn       *time.Time `json:"due_on,omitempty"`
	State       string     `json:"state,omitempty"`
}

MilestoneCreateRequest represents parameters for creating a milestone

type MilestonesService

type MilestonesService struct {
	// contains filtered or unexported fields
}

MilestonesService handles GitHub Milestones operations

func NewMilestonesService

func NewMilestonesService(client *Client) *MilestonesService

NewMilestonesService creates a new milestones service

func (*MilestonesService) CloseMilestone

func (s *MilestonesService) CloseMilestone(ctx context.Context, owner, repo string, number int) (*Milestone, error)

CloseMilestone closes a milestone

func (*MilestonesService) CreateMilestone

func (s *MilestonesService) CreateMilestone(ctx context.Context, owner, repo string, req MilestoneCreateRequest) (*Milestone, error)

CreateMilestone creates a new milestone

func (*MilestonesService) DeleteMilestone

func (s *MilestonesService) DeleteMilestone(ctx context.Context, owner, repo string, number int) error

DeleteMilestone deletes a milestone

func (*MilestonesService) GetMilestone

func (s *MilestonesService) GetMilestone(ctx context.Context, owner, repo string, number int) (*Milestone, error)

GetMilestone retrieves a specific milestone

func (*MilestonesService) ListMilestones

func (s *MilestonesService) ListMilestones(ctx context.Context, owner, repo string, state string) ([]*Milestone, error)

ListMilestones lists milestones for a repository

func (*MilestonesService) UpdateMilestone

func (s *MilestonesService) UpdateMilestone(ctx context.Context, owner, repo string, number int, req MilestoneCreateRequest) (*Milestone, error)

UpdateMilestone updates an existing milestone

type Project

type Project struct {
	ID          int64      `json:"id"`
	Number      int        `json:"number"`
	Title       string     `json:"title"`
	Description string     `json:"description"`
	State       string     `json:"state"`
	URL         string     `json:"url"`
	HTMLURL     string     `json:"html_url"`
	Public      bool       `json:"public"`
	CreatedAt   time.Time  `json:"created_at"`
	UpdatedAt   time.Time  `json:"updated_at"`
	ClosedAt    *time.Time `json:"closed_at,omitempty"`
}

Project represents a GitHub Project (v2).

type ProjectField

type ProjectField struct {
	ID       int64    `json:"id"`
	Name     string   `json:"name"`
	DataType string   `json:"data_type"`
	Options  []string `json:"options,omitempty"`
}

ProjectField represents a field in a GitHub Projects v2 project.

type ProjectsService

type ProjectsService struct {
	// contains filtered or unexported fields
}

ProjectsService handles GitHub Projects (v2) operations Note: Projects v2 uses GraphQL API for most operations This service provides helper methods for common use cases

func NewProjectsService

func NewProjectsService(client *Client) *ProjectsService

NewProjectsService creates a new projects service

func (*ProjectsService) GetOrganizationProject

func (s *ProjectsService) GetOrganizationProject(ctx context.Context, org string, projectNumber int) (*Project, error)

GetOrganizationProject retrieves a specific organization project

func (*ProjectsService) GetUserProject

func (s *ProjectsService) GetUserProject(ctx context.Context, username string, projectNumber int) (*Project, error)

GetUserProject retrieves a specific user project

func (*ProjectsService) ListOrganizationProjects

func (s *ProjectsService) ListOrganizationProjects(ctx context.Context, org string) ([]*Project, error)

ListOrganizationProjects lists Projects v2 for an organization

func (*ProjectsService) ListProjectFields

func (s *ProjectsService) ListProjectFields(ctx context.Context, org string, projectNumber int) ([]*ProjectField, error)

ListProjectFields lists fields for a project

func (*ProjectsService) ListUserProjects

func (s *ProjectsService) ListUserProjects(ctx context.Context, username string) ([]*Project, error)

ListUserProjects lists Projects v2 for a user

type PullRequestService

type PullRequestService struct {
	// contains filtered or unexported fields
}

PullRequestService handles pull request operations

func NewPullRequestService

func NewPullRequestService(client *Client, julesClient *jules.Client) *PullRequestService

NewPullRequestService creates a new pull request service

func (*PullRequestService) GetPullRequestDiff

func (s *PullRequestService) GetPullRequestDiff(ctx context.Context, sessionID string) (string, error)

GetPullRequestDiff retrieves the diff for a PR created by a Jules session

func (*PullRequestService) GetSessionPullRequest

func (s *PullRequestService) GetSessionPullRequest(ctx context.Context, sessionID string) (*github.PullRequest, error)

GetSessionPullRequest retrieves the PR created by a Jules session

func (*PullRequestService) MergePullRequest

func (s *PullRequestService) MergePullRequest(ctx context.Context, prURL string, mergeMethod string) error

MergePullRequest merges a PR created by Jules

type Repository

type Repository struct {
	Owner         string `json:"owner"`
	Name          string `json:"name"`
	FullName      string `json:"full_name"`
	Description   string `json:"description,omitempty"`
	Stars         int    `json:"stars"`
	Forks         int    `json:"forks"`
	OpenIssues    int    `json:"open_issues"`
	DefaultBranch string `json:"default_branch"`
	Private       bool   `json:"private"`
	URL           string `json:"url"`
	UpdatedAt     string `json:"updated_at,omitempty"`
}

Repository represents a GitHub repository with metadata

type RepositoryService

type RepositoryService struct {
	// contains filtered or unexported fields
}

RepositoryService handles repository-related operations

func NewRepositoryService

func NewRepositoryService(client *Client, julesClient *jules.Client) *RepositoryService

NewRepositoryService creates a new repository service

func (*RepositoryService) DiscoverCurrentRepo

func (s *RepositoryService) DiscoverCurrentRepo(ctx context.Context) (*Repository, error)

DiscoverCurrentRepo detects the GitHub repository from the current git remote

func (*RepositoryService) ListAccessibleRepos

func (s *RepositoryService) ListAccessibleRepos(ctx context.Context) ([]*Repository, error)

ListAccessibleRepos lists repositories the user can access

func (*RepositoryService) ListConnectedRepos

func (s *RepositoryService) ListConnectedRepos(ctx context.Context) ([]*Repository, error)

ListConnectedRepos fetches repositories connected to Jules

func (*RepositoryService) SearchRepositories

func (s *RepositoryService) SearchRepositories(ctx context.Context, query string, opts *github.SearchOptions) ([]*Repository, error)

SearchRepositories searches for GitHub repositories using the GitHub Search API

func (*RepositoryService) SyncRepoWithJules

func (s *RepositoryService) SyncRepoWithJules(ctx context.Context, owner, repo string) error

SyncRepoWithJules ensures a repository is connected to Jules

type SessionService

type SessionService struct {
	// contains filtered or unexported fields
}

SessionService handles Jules session operations with GitHub integration

func NewSessionService

func NewSessionService(client *Client, julesClient *jules.Client, repoService *RepositoryService) *SessionService

NewSessionService creates a new session service

func (*SessionService) CreateSessionFromCurrentRepo

func (s *SessionService) CreateSessionFromCurrentRepo(ctx context.Context, prompt string, branch string) (*jules.Session, error)

CreateSessionFromCurrentRepo creates a Jules session using git context

func (*SessionService) CreateSessionFromRepo

func (s *SessionService) CreateSessionFromRepo(ctx context.Context, prompt, owner, repo, branch string) (*jules.Session, error)

CreateSessionFromRepo creates a Jules session for a specific GitHub repository

type Workflow

type Workflow struct {
	ID        int64  `json:"id"`
	Name      string `json:"name"`
	Path      string `json:"path"`
	State     string `json:"state"`
	CreatedAt string `json:"created_at"`
	UpdatedAt string `json:"updated_at"`
	URL       string `json:"url"`
	BadgeURL  string `json:"badge_url"`
}

Workflow represents a GitHub Actions workflow

type WorkflowJob

type WorkflowJob struct {
	ID          int64  `json:"id"`
	RunID       int64  `json:"run_id"`
	Name        string `json:"name"`
	Status      string `json:"status"`
	Conclusion  string `json:"conclusion,omitempty"`
	StartedAt   string `json:"started_at,omitempty"`
	CompletedAt string `json:"completed_at,omitempty"`
	URL         string `json:"url"`
	RunnerName  string `json:"runner_name,omitempty"`
}

WorkflowJob represents a GitHub Actions workflow job

type WorkflowRun

type WorkflowRun struct {
	ID           int64  `json:"id"`
	Name         string `json:"name"`
	HeadBranch   string `json:"head_branch"`
	Status       string `json:"status"`
	Conclusion   string `json:"conclusion,omitempty"`
	WorkflowID   int64  `json:"workflow_id"`
	URL          string `json:"url"`
	CreatedAt    string `json:"created_at"`
	UpdatedAt    string `json:"updated_at"`
	RunNumber    int    `json:"run_number"`
	Event        string `json:"event"`
	Actor        string `json:"actor"`
	RunAttempt   int    `json:"run_attempt"`
	RunStartedAt string `json:"run_started_at,omitempty"`
}

WorkflowRun represents a GitHub Actions workflow run

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL