githubci

package
v0.7.4 Latest Latest
Warning

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

Go to latest
Published: Mar 27, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Overview

Package githubci provides GitHub API client for PR integration

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

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

Client wraps the GitHub API client

func NewClient

func NewClient(token, repository string) *Client

NewClient creates a new GitHub API client

func NewClientFromEnv

func NewClientFromEnv() *Client

NewClientFromEnv creates a client from GitHub Actions environment variables

func (*Client) CreateIssueComment

func (c *Client) CreateIssueComment(ctx context.Context, prNumber int, body string) (*gh.IssueComment, error)

CreateIssueComment creates a new comment on an issue/PR

func (*Client) HasToken

func (c *Client) HasToken() bool

HasToken returns true if a token is configured

func (*Client) ListIssueComments

func (c *Client) ListIssueComments(ctx context.Context, prNumber int) ([]*gh.IssueComment, error)

ListIssueComments lists all comments on an issue/PR

func (*Client) UpdateIssueComment

func (c *Client) UpdateIssueComment(ctx context.Context, commentID int64, body string) (*gh.IssueComment, error)

UpdateIssueComment updates an existing comment

type Concurrency

type Concurrency struct {
	Group            string `yaml:"group"`
	CancelInProgress bool   `yaml:"cancel-in-progress"`
}

Concurrency controls concurrent runs

type Config

type Config struct {
	// TerraformBinary is the terraform binary to use (e.g., "terraform", "tofu")
	TerraformBinary string `` /* 148-byte string literal not displayed */
	// RunsOn specifies the runner label(s) for jobs
	RunsOn string `yaml:"runs_on" json:"runs_on" jsonschema:"description=GitHub Actions runner label (e.g. ubuntu-latest),default=ubuntu-latest"`
	// Container optionally runs jobs in a container
	Container *Image `yaml:"container,omitempty" json:"container,omitempty" jsonschema:"description=Container image to run jobs in (optional)"`
	// Env sets workflow-level environment variables
	Env map[string]string `yaml:"env,omitempty" json:"env,omitempty" jsonschema:"description=Workflow-level environment variables"`
	// PlanEnabled enables terraform plan jobs
	PlanEnabled bool `yaml:"plan_enabled" json:"plan_enabled" jsonschema:"description=Enable terraform plan jobs,default=true"`
	// PlanOnly generates only plan jobs without apply jobs
	PlanOnly bool `yaml:"plan_only" json:"plan_only" jsonschema:"description=Generate only plan jobs (no apply jobs),default=false"`
	// AutoApprove skips manual approval for apply
	AutoApprove bool `` /* 129-byte string literal not displayed */
	// InitEnabled automatically runs terraform init
	InitEnabled bool `yaml:"init_enabled" json:"init_enabled" jsonschema:"description=Automatically run terraform init,default=true"`
	// Permissions sets workflow-level permissions (e.g., id-token: write)
	Permissions map[string]string `` /* 141-byte string literal not displayed */
	// JobDefaults defines default settings for all jobs
	JobDefaults *JobDefaults `yaml:"job_defaults,omitempty" json:"job_defaults,omitempty" jsonschema:"description=Default settings applied to all jobs"`
	// Overwrites defines job-level overrides for plan and apply jobs
	Overwrites []JobOverwrite `yaml:"overwrites,omitempty" json:"overwrites,omitempty" jsonschema:"description=Job-level overrides for plan or apply jobs"`
	// PR contains pull request integration settings
	PR *PRConfig `yaml:"pr,omitempty" json:"pr,omitempty" jsonschema:"description=Pull request integration settings"`
}

Config contains GitHub Actions specific settings

type ConfigStep

type ConfigStep struct {
	// Name is the step display name
	Name string `yaml:"name,omitempty" json:"name,omitempty" jsonschema:"description=Step display name"`
	// Uses references a GitHub Action (e.g., actions/checkout@v4)
	Uses string `yaml:"uses,omitempty" json:"uses,omitempty" jsonschema:"description=GitHub Action reference"`
	// With provides inputs to the action
	With map[string]string `yaml:"with,omitempty" json:"with,omitempty" jsonschema:"description=Action inputs"`
	// Run is a shell command
	Run string `yaml:"run,omitempty" json:"run,omitempty" jsonschema:"description=Shell command to run"`
	// Env sets environment variables for this step
	Env map[string]string `yaml:"env,omitempty" json:"env,omitempty" jsonschema:"description=Step environment variables"`
}

ConfigStep represents a step in a GitHub Actions job (for job_defaults)

type Container

type Container struct {
	Image string            `yaml:"image"`
	Env   map[string]string `yaml:"env,omitempty"`
}

Container specifies a container to run the job in

type Generator

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

Generator generates GitHub Actions workflows

func NewGenerator

func NewGenerator(cfg *Config, contributions []*pipeline.Contribution, depGraph *graph.DependencyGraph, modules []*discovery.Module) *Generator

NewGenerator creates a new GitHub Actions pipeline generator

func (*Generator) DryRun

func (g *Generator) DryRun(targetModules []*discovery.Module) (*pipeline.DryRunResult, error)

DryRun returns information about what would be generated without creating YAML

func (*Generator) Generate

func (g *Generator) Generate(targetModules []*discovery.Module) (pipeline.GeneratedPipeline, error)

Generate creates a GitHub Actions workflow for the given modules

type Image

type Image struct {
	// Name is the image name (e.g., "hashicorp/terraform:1.6")
	Name string `yaml:"name,omitempty" json:"name,omitempty" jsonschema:"description=Docker image name"`
	// Entrypoint overrides the default entrypoint
	Entrypoint []string `yaml:"entrypoint,omitempty" json:"entrypoint,omitempty" jsonschema:"description=Override default entrypoint"`
}

Image defines a Docker image configuration Supports both string format and object format with entrypoint

func (*Image) HasEntrypoint

func (img *Image) HasEntrypoint() bool

HasEntrypoint returns true if entrypoint is configured

func (*Image) String

func (img *Image) String() string

String returns the image name

func (*Image) UnmarshalYAML

func (img *Image) UnmarshalYAML(unmarshal func(any) error) error

UnmarshalYAML implements custom unmarshaling for Image to support string shorthand

type Job

type Job struct {
	Name        string            `yaml:"name,omitempty"`
	RunsOn      string            `yaml:"runs-on"`
	Container   *Container        `yaml:"container,omitempty"`
	Needs       []string          `yaml:"needs,omitempty"`
	If          string            `yaml:"if,omitempty"`
	Environment string            `yaml:"environment,omitempty"`
	Concurrency *Concurrency      `yaml:"concurrency,omitempty"`
	Env         map[string]string `yaml:"env,omitempty"`
	Steps       []Step            `yaml:"steps"`
}

Job represents a workflow job

type JobDefaults

type JobDefaults struct {
	// RunsOn overrides the runner label for all jobs
	RunsOn string `yaml:"runs_on,omitempty" json:"runs_on,omitempty" jsonschema:"description=Override runner label"`
	// Container runs jobs in a container
	Container *Image `yaml:"container,omitempty" json:"container,omitempty" jsonschema:"description=Container image for all jobs"`
	// Env sets additional environment variables for all jobs
	Env map[string]string `yaml:"env,omitempty" json:"env,omitempty" jsonschema:"description=Additional environment variables"`
	// StepsBefore are extra steps to run before terraform commands
	StepsBefore []ConfigStep `yaml:"steps_before,omitempty" json:"steps_before,omitempty" jsonschema:"description=Extra steps before terraform commands"`
	// StepsAfter are extra steps to run after terraform commands
	StepsAfter []ConfigStep `yaml:"steps_after,omitempty" json:"steps_after,omitempty" jsonschema:"description=Extra steps after terraform commands"`
}

JobDefaults defines default settings for all GitHub Actions jobs

type JobOverwrite

type JobOverwrite struct {
	// Type specifies which jobs to override: "plan" or "apply"
	Type JobOverwriteType `yaml:"type" json:"type" jsonschema:"description=Type of jobs to override,enum=plan,enum=apply,required"`
	// RunsOn overrides the runner label
	RunsOn string `yaml:"runs_on,omitempty" json:"runs_on,omitempty" jsonschema:"description=Override runner label"`
	// Container runs jobs in a container
	Container *Image `yaml:"container,omitempty" json:"container,omitempty" jsonschema:"description=Container image override"`
	// Env sets additional environment variables
	Env map[string]string `yaml:"env,omitempty" json:"env,omitempty" jsonschema:"description=Additional environment variables"`
	// StepsBefore are extra steps to run before terraform commands
	StepsBefore []ConfigStep `yaml:"steps_before,omitempty" json:"steps_before,omitempty" jsonschema:"description=Extra steps before terraform commands"`
	// StepsAfter are extra steps to run after terraform commands
	StepsAfter []ConfigStep `yaml:"steps_after,omitempty" json:"steps_after,omitempty" jsonschema:"description=Extra steps after terraform commands"`
}

JobOverwrite defines job-level overrides for plan or apply jobs

type JobOverwriteType

type JobOverwriteType string

JobOverwriteType defines the type of jobs to override

const (
	// OverwriteTypePlan applies to plan jobs only
	OverwriteTypePlan JobOverwriteType = "plan"
	// OverwriteTypeApply applies to apply jobs only
	OverwriteTypeApply JobOverwriteType = "apply"
)

type MRCommentConfig

type MRCommentConfig struct {
	// Enabled enables MR comments (default: true when in MR pipeline)
	Enabled *bool `yaml:"enabled,omitempty" json:"enabled,omitempty" jsonschema:"description=Enable MR comments,default=true"`
	// OnChangesOnly only comment when there are changes (default: false)
	OnChangesOnly bool `` /* 126-byte string literal not displayed */
	// IncludeDetails includes full plan output in collapsible sections
	IncludeDetails bool `` /* 151-byte string literal not displayed */
}

MRCommentConfig contains settings for MR/PR comments. Shared by both GitLab and GitHub plugins.

type PRConfig

type PRConfig struct {
	// Comment enables PR comment with plan summary
	Comment *MRCommentConfig `yaml:"comment,omitempty" json:"comment,omitempty" jsonschema:"description=PR comment configuration"`
	// SummaryJob configures the summary job that posts PR comments
	SummaryJob *SummaryJobConfig `yaml:"summary_job,omitempty" json:"summary_job,omitempty" jsonschema:"description=Summary job configuration"`
}

PRConfig contains settings for PR/MR integration (used by GitHub provider)

type PRContext

type PRContext struct {
	Owner        string
	Repo         string
	PRNumber     int
	SourceBranch string
	TargetBranch string
	RunID        string
	CommitSHA    string
	InPR         bool
}

PRContext contains information about the current PR context

func DetectPRContext

func DetectPRContext() *PRContext

DetectPRContext detects if we're running in a GitHub Actions PR workflow

type PRService

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

PRService handles GitHub PR comment operations

func NewPRService

func NewPRService(cfg *PRConfig, client *Client, ctx *PRContext) *PRService

NewPRService creates a new PR service with injected dependencies.

func NewPRServiceFromEnv

func NewPRServiceFromEnv(cfg *PRConfig) *PRService

NewPRServiceFromEnv creates a new PR service with dependencies from environment.

func (*PRService) IsEnabled

func (s *PRService) IsEnabled() bool

IsEnabled returns true if PR integration is enabled

func (*PRService) UpsertComment

func (s *PRService) UpsertComment(body string) error

UpsertComment creates or updates the terraci comment on the PR

type PRTrigger

type PRTrigger struct {
	Branches []string `yaml:"branches,omitempty"`
}

PRTrigger limits pull request events

type PushTrigger

type PushTrigger struct {
	Branches []string `yaml:"branches,omitempty"`
}

PushTrigger limits push events

type Step

type Step struct {
	Name string            `yaml:"name,omitempty"`
	Uses string            `yaml:"uses,omitempty"`
	With map[string]string `yaml:"with,omitempty"`
	Run  string            `yaml:"run,omitempty"`
	Env  map[string]string `yaml:"env,omitempty"`
	If   string            `yaml:"if,omitempty"`
}

Step is one step in a job

type SummaryJobConfig

type SummaryJobConfig struct {
	// RunsOn specifies the runner label for the summary job
	RunsOn string `yaml:"runs_on,omitempty" json:"runs_on,omitempty" jsonschema:"description=Runner label for summary job"`
}

SummaryJobConfig contains settings for the GitHub Actions summary job

type Workflow

type Workflow struct {
	Name        string            `yaml:"name"`
	On          WorkflowTrigger   `yaml:"on"`
	Permissions map[string]string `yaml:"permissions,omitempty"`
	Env         map[string]string `yaml:"env,omitempty"`
	Concurrency *Concurrency      `yaml:"concurrency,omitempty"`
	Jobs        map[string]*Job   `yaml:"jobs"`
}

Workflow represents a GitHub Actions workflow

func (*Workflow) ToYAML

func (w *Workflow) ToYAML() ([]byte, error)

ToYAML serializes the workflow to YAML with a generated-by header

type WorkflowTrigger

type WorkflowTrigger struct {
	Push             *PushTrigger `yaml:"push,omitempty"`
	PullRequest      *PRTrigger   `yaml:"pull_request,omitempty"`
	WorkflowDispatch any          `yaml:"workflow_dispatch,omitempty"`
}

WorkflowTrigger defines when the workflow runs

Jump to

Keyboard shortcuts

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