Documentation
¶
Overview ¶
Package forge applies what reaches a forge — comments, labels, issues, releases — on GitHub, GitLab, or a simulated forge for the tests. Every write is idempotent, so a run interrupted half-way can be resumed.
Index ¶
- Constants
- Variables
- func InCI() string
- func KeepsBranches(f Forge) bool
- func Marker(key string) string
- type Fake
- func (f *Fake) Comment(t Target, body, marker string) error
- func (f *Fake) Issue(id int) (*Issue, error)
- func (f *Fake) KeepIssue(title, body string, create bool) (int, error)
- func (f *Fake) Label(t Target, add, remove []string) error
- func (f *Fake) MergeRequestBranch(id int) (string, bool, error)
- func (f *Fake) OpenIssue(title, body, marker string) (int, error)
- func (f *Fake) OpenMergeRequest(branch, base, title, body string) (int, error)
- func (f *Fake) OpenMergeRequests(prefix string) ([]string, error)
- func (f *Fake) Release(tag, notes string) error
- func (f *Fake) Sticky(t Target, body, marker string, create bool) error
- type FakeItem
- type FakeRel
- type FakeState
- type Forge
- type Issue
- type Local
- func (l *Local) Comment(t Target, body, marker string) error
- func (l *Local) Issue(id int) (*Issue, error)
- func (l *Local) Item(kind string, id int) (*LocalItem, error)
- func (l *Local) Items(kind string) ([]*LocalItem, error)
- func (l *Local) KeepIssue(title, body string, create bool) (int, error)
- func (l *Local) Label(t Target, add, remove []string) error
- func (l *Local) MergeRequestBranch(id int) (string, bool, error)
- func (l *Local) OpenIssue(title, body, marker string) (int, error)
- func (l *Local) OpenMergeRequest(branch, base, title, body string) (int, error)
- func (l *Local) OpenMergeRequests(prefix string) ([]string, error)
- func (l *Local) Release(tag, notes string) error
- func (l *Local) StateOf(it *LocalItem) string
- func (l *Local) Sticky(t Target, body, marker string, create bool) error
- type LocalItem
- type Target
Constants ¶
const Missing = "" /* 128-byte string literal not displayed */
Missing says what to do when a write needs a forge and the project has none.
Variables ¶
var ErrUnreachable = errors.New("forge unreachable")
ErrUnreachable marks a forge that did not answer: the run is blocked by something outside the role.
Functions ¶
func InCI ¶ added in v0.2.2
func InCI() string
InCI names the variable that says the run is in CI, or "" outside it.
func KeepsBranches ¶ added in v0.2.2
KeepsBranches says whether f's merge requests come from local branches: nothing is pushed to a remote, nor fetched from one.
Types ¶
type Fake ¶
type Fake struct{ Path string }
Fake is a forge kept in a JSON file, shared between processes, for the conformance tests. It can be told to fail its N-th write, once.
func (*Fake) OpenMergeRequest ¶
type FakeItem ¶
type FakeItem struct {
ID int `json:"id"`
Branch string `json:"branch,omitempty"` // a merge request's source branch
Base string `json:"base,omitempty"`
Closed bool `json:"closed,omitempty"`
Fork bool `json:"fork,omitempty"` // a merge request from a fork
Title string `json:"title,omitempty"`
Body string `json:"body,omitempty"`
Labels []string `json:"labels"`
Comments []string `json:"comments"`
}
FakeItem is an issue or a merge request.
type FakeState ¶
type FakeState struct {
Issues []FakeItem `json:"issues"`
MergeRequests []FakeItem `json:"merge-requests"`
Releases []FakeRel `json:"releases"`
FailOnWrite int `json:"fail-on-write,omitempty"` // the write that fails, counting from 1
Writes int `json:"writes"`
}
FakeState is the file's content.
type Forge ¶
type Forge interface {
Issue(id int) (*Issue, error)
// Comment posts body on t unless a comment carrying marker is already there.
Comment(t Target, body, marker string) error
// Sticky keeps one comment carrying marker on t, edited to body on each
// run instead of a new one each time; with create false, it only edits
// one already there.
Sticky(t Target, body, marker string, create bool) error
// Label adds and removes labels; adding one already there changes nothing.
Label(t Target, add, remove []string) error
// OpenIssue creates an issue, or comments on an open one with the same title.
OpenIssue(title, body, marker string) (int, error)
// KeepIssue rewrites the body of the open issue with this title, or opens
// it when there is none and create is true: one issue, kept in place.
KeepIssue(title, body string, create bool) (int, error)
// Release publishes notes for an existing tag, unless already published.
Release(tag, notes string) error
// OpenMergeRequest opens a merge request from branch into base, or
// updates the title and body of the one already open from branch.
OpenMergeRequest(branch, base, title, body string) (int, error)
// OpenMergeRequests lists the branches of the open merge requests whose
// branch starts with prefix, sorted.
OpenMergeRequests(prefix string) ([]string, error)
// MergeRequestBranch is the branch a merge request comes from, and
// whether it lives in this repository (not in a fork).
MergeRequestBranch(id int) (branch string, here bool, err error)
}
Forge is what the engine needs from one.
type Issue ¶
type Issue struct {
ID int `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
Labels []string `json:"labels"`
}
Issue is what the line reads from a work item.
type Local ¶ added in v0.2.2
type Local struct{ Repo string }
Local is a forge kept in the clone, never committed: for a project with no forge, or one whose person works alone. Each issue is a Markdown file, .git/workline/issues/<n>.md; each merge request is a local branch, recorded the same way in .git/workline/merge-requests/<n>.md; a release's notes go in .git/workline/releases/<tag>.md. Nothing is pushed: `workline issues` reads them. Writes are idempotent, as on any forge.
func (*Local) MergeRequestBranch ¶ added in v0.2.2
func (*Local) OpenMergeRequest ¶ added in v0.2.2
func (*Local) OpenMergeRequests ¶ added in v0.2.2
type LocalItem ¶ added in v0.2.2
type LocalItem struct {
ID int `yaml:"-"`
Title string `yaml:"title"`
State string `yaml:"state"` // open or closed, as written; see Local.StateOf
Labels []string `yaml:"labels,flow"`
Branch string `yaml:"branch,omitempty"` // a merge request's local branch
Base string `yaml:"base,omitempty"`
Body string `yaml:"-"`
Comments []string `yaml:"-"`
}
LocalItem is an issue or a merge request of the local forge.