stash

package module
v1.3.1 Latest Latest
Warning

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

Go to latest
Published: Dec 3, 2018 License: MIT Imports: 13 Imported by: 1

README

Stash tools

Go package of Stash tools.

This library uses glide for dependency management.

Installation

make

Usage

go get github.com/xoom/stash

import "github.com/xoom/stash"
Stash Rest API Documentation
NewClient
stashClient := stash.NewClient("stash_user", "stash_pwd", "http://stash-url.local:7990")
Inject http client
httpTransport := &http.Transport{
		TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
	}

httpClient := &http.Client{Timeout: 20 * time.Second, Transport: httpTransport}

stashClient := stash.NewClient("stash_user", "stash_pwd", "http://stash-url.local:7990")

stashClient.SetHTTPClient(httpClient)


CreateRepository
repository, err := stashClient.CreateRepository("PROJ", "slug")
GetRepositories
repository, err := stashClient.GetRepository("PROJ", "slug")
GetBranches
branches, err := stashClient.GetBranches("PROJ", "slug")
GetRepository
repository, err := stashClient.GetRepository("PROJ", "slug")
CreateBranchRestriction
branchRestriction, err := stashClient.CreateBranchRestriction("PROJ", "slug", "develop", "user")
GetBranchRestrictions
branchRestrictions, err := stashClient.GetBranchRestrictions("PROJ", "slug")
DeleteBranchRestriction
err := stashClient.DeleteBranchRestriction("PROJ", "slug", branchRestriction.Id)
ApprovePullRequest
err := stashClient.ApprovePullRequest("PROJ", "slug", pullRequest.Id, 0)
MergePullRequest
err := stashClient.MergePullRequest("PROJ", "slug", pullRequest.Id, 0)
GetPullRequests
// get all pull requests
pullRequests, err := stashClient.GetPullRequests("PROJ", "slug", "")

// get pull request by state
state := "OPEN"
pullRequests, err := stashClient.GetPullRequests("PROJ", "slug", state)
GetPullRequest
// get pull request by id
pullRequest, err := stashClient.GetPullRequest("PROJ", "slug", 1)
CreatePullRequest
title     := "A Title"
des       := "A Description"
from      := "feature/file1"
to        := "develop"
reviewers := []string{"bob", "bill"}

pullRequest, err := stashClient.CreatePullRequest("PROJ", "slug", title, desc, from, to, reviewers)
CreateComment
comment, err := stashClient.CreateComment("PROJ", "slug", 1, "build passing")
UpdatePullRequest
title     := "New title"
desc      := "New description"
branch    := "master"

pullRequest, err := stashClient.UpdatePullRequest("PROJ", "slug", "1", 10, title, desc, branch, nil)
GetRawFile
filePath := "foo/bar"
branch   := "develop"

data, _ := stashClient.GetRawFile("PRJ", "slug", filePath, branch)

fmt.Println(string(data))
stash

Development

Local stash instance

Download and run a development instance of stash via a docker image.

# pick a directory where to save the data generated by the container
export STASH_DATA="${HOME}/stash/data"

# for a linux host
$ docker run -u root -v $STASH_DATA:/var/atlassian/application-data/stash atlassian/stash chown -R daemon  /var/atlassian/application-data/stash

$ docker run -v $STASH_DATA:/var/atlassian/application-data/stash --name="stash" -d -p 7990:7990 -p 7999:7999 atlassian/stash

# for a MacOs Host via 'boot2docker'
$ docker run -u root -v $STASH_DATA:/var/atlassian/application-data/stash --name=stash -d -p 7990:7990 -p 7999:7999 atlassian/stash

Open your browser to http://localhost:7990 and follow the setup instructions.

** If your are using boot2docker get your IP via boot2docker ip

Documentation

Overview

Atlassian Stash API package. Stash API Reference: https://developer.atlassian.com/static/rest/stash/3.0.1/stash-rest.html

Index

Constants

This section is empty.

Variables

Functions

func IsRepositoryExists

func IsRepositoryExists(err error) bool

func IsRepositoryNotFound

func IsRepositoryNotFound(err error) bool

Types

type Author added in v1.2.0

type Author struct {
	User     User   `json:"user"`
	Role     string `json:"role"`
	Approved bool   `json:"approved"`
	Status   string `json:"status"`
}

type Branch

type Branch struct {
	ID              string `json:"id"`
	DisplayID       string `json:"displayId"`
	LatestChangeSet string `json:"latestChangeset"`
	IsDefault       bool   `json:"isDefault"`
}

type BranchPermission

type BranchPermission struct {
	Type   string   `json:"type"`
	Branch string   `json:"value"`
	Users  []string `json:"users"`
	Groups []string `json:"groups"`
}

type BranchRestriction

type BranchRestriction struct {
	Id     int    `json:"id"`
	Branch Branch `json:"branch"`
}

type BranchRestrictions

type BranchRestrictions struct {
	BranchRestriction []BranchRestriction `json:"values"`
}

type Branches

type Branches struct {
	IsLastPage    bool     `json:"isLastPage"`
	Size          int      `json:"size"`
	Start         int      `json:"start"`
	NextPageStart int      `json:"nextPageStart"`
	Branch        []Branch `json:"values"`
}

type Client

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

func (Client) ApprovePullRequest added in v1.2.0

func (client Client) ApprovePullRequest(projectKey, repositorySlug string, pullRequestID, version int) error

ApprovePullRequest approves a pull request

func (Client) CreateBranchRestriction

func (client Client) CreateBranchRestriction(projectKey, repositorySlug, branch, user string) (BranchRestriction, error)

func (Client) CreateComment

func (client Client) CreateComment(projectKey, repositorySlug, pullRequest, text string) (Comment, error)

CreateComment creates a comment for a pull-request.

func (Client) CreatePullRequest

func (client Client) CreatePullRequest(projectKey, repositorySlug, title, description, fromRef, toRef string, reviewers []string) (PullRequest, error)

CreatePullRequest creates a pull request between branches.

func (Client) CreateRepository

func (client Client) CreateRepository(projectKey, projectSlug string) (Repository, error)

func (Client) DeclinePullRequest added in v1.2.0

func (client Client) DeclinePullRequest(projectKey, repositorySlug string, pullRequestID, version int) error

DeclinePullRequest declines a pull request

func (Client) DeleteBranch

func (client Client) DeleteBranch(projectKey, repositorySlug, branchName string) error

func (Client) DeleteBranchRestriction

func (client Client) DeleteBranchRestriction(projectKey, repositorySlug string, id int) error

DeleteBranchRestriction deletes a branch restriction

func (Client) GetBranchRestrictions

func (client Client) GetBranchRestrictions(projectKey, repositorySlug string) (BranchRestrictions, error)

GetBranchRestrictions get branchs restrictions

func (Client) GetBranches

func (client Client) GetBranches(projectKey, repositorySlug string) (map[string]Branch, error)

GetBranches returns a map of branches indexed by branch display name for the given repository.

func (Client) GetCommit

func (client Client) GetCommit(projectKey, repositorySlug, commitHash string) (Commit, error)

GetCommit returns a representation of the given commit hash.

func (Client) GetCommits

func (client Client) GetCommits(projectKey, repositorySlug, commitSinceHash string, commitUntilHash string) (Commits, error)

GetCommits returns the commits between two hashes, inclusively.

func (Client) GetPullRequest

func (client Client) GetPullRequest(projectKey, projectSlug, identifier string) (PullRequest, error)

GetPullRequest returns a pull request for a project/slug with specified identifier.

func (Client) GetPullRequests

func (client Client) GetPullRequests(projectKey, projectSlug, state string) ([]PullRequest, error)

GetPullRequests returns a list of pull requests for a project / slug.

func (Client) GetRawFile

func (client Client) GetRawFile(repositoryProjectKey, repositorySlug, filePath, branch string) ([]byte, error)

func (Client) GetRepositories

func (client Client) GetRepositories() (map[int]Repository, error)

GetRepositories returns a map of repositories indexed by repository URL.

func (Client) GetRepository

func (client Client) GetRepository(projectKey, repositorySlug string) (Repository, error)

GetRepository returns a repository representation for the given Stash Project key and repository slug.

func (Client) GetTags

func (client Client) GetTags(projectKey, repositorySlug string) (map[string]Tag, error)

GetTags returns a map of tags indexed by tag display name for the given repository.

func (Client) MergePullRequest added in v1.2.0

func (client Client) MergePullRequest(projectKey, repositorySlug string, pullRequestID, version int) error

MergePullRequest merges a pull request

func (*Client) SetHTTPClient added in v1.3.0

func (client *Client) SetHTTPClient(httpClient *http.Client)

SetHTTPClient will change default http client from stash client

func (Client) UpdatePullRequest

func (client Client) UpdatePullRequest(projectKey, repositorySlug, identifier string, version int, title, description, toRef string, reviewers []string) (PullRequest, error)

UpdatePullRequest update a pull request.

type Clone

type Clone struct {
	HREF string `json:"href"`
	Name string `json:"name"`
}

type Comment

type Comment struct {
	ID int `json:"id"`
}

type CommentResource

type CommentResource struct {
	Text string `json:"text"`
}

type Commit

type Commit struct {
	ID        string `json:"id"`
	DisplayID string `json:"displayId"`
	Author    struct {
		Name         string `json:"name"`
		EmailAddress string `json:"emailAddress"`
	} `json:"author"`
	AuthorTimestamp int64 `json:"authorTimestamp"` // in milliseconds since the epoch
	Attributes      struct {
		JiraKeys []string `json:"jira-key"`
	} `json:"attributes"`
}

type Commits

type Commits struct {
	Commits []Commit `json:"values"`
}
type Links struct {
	Clones []Clone `json:"clone"`
}

type Page

type Page struct {
	IsLastPage    bool `json:"isLastPage"`
	Size          int  `json:"size"`
	Start         int  `json:"start"`
	NextPageStart int  `json:"nextPageStart"`
}

type Project

type Project struct {
	Key  string `json:"key"`
	Name string `json:"name"`
}

type PullRequest

type PullRequest struct {
	ID          int        `id:"closed"`
	Version     int        `json:"version"`
	Closed      bool       `json:"closed"`
	Open        bool       `json:"open"`
	State       string     `json:"state"`
	Title       string     `json:"title"`
	Description string     `json:"description"`
	FromRef     Ref        `json:"fromRef"`
	ToRef       Ref        `json:"toRef"`
	CreatedDate int64      `json:"createdDate"`
	UpdatedDate int64      `json:"updatedDate"`
	Reviewers   []Reviewer `json:"reviewers"`
	Author      Author     `json:"author"`
}

type PullRequestProject

type PullRequestProject struct {
	Key string `json:"key"`
}

type PullRequestRef

type PullRequestRef struct {
	Id         string                `json:"id"`
	Repository PullRequestRepository `json:"repository"`
}

type PullRequestRepository

type PullRequestRepository struct {
	Slug    string             `json:"slug"`
	Name    string             `json:"name,omitempty"`
	Project PullRequestProject `json:"project"`
}

type PullRequestResource

type PullRequestResource struct {
	Version     int    `json:"version,omitempty"`
	Title       string `json:"title,omitempty"`
	Description string `json:"description,omitempty"`
	// FromRef and ToRef should be PullRequestRef but there is interface{}
	// for omitting empty values. encoding/json can't handle empty structs
	// and omit them.
	FromRef   interface{} `json:"fromRef,omitempty"`
	ToRef     interface{} `json:"toRef,omitempty"`
	Reviewers []Reviewer  `json:"reviewers,omitempty"`
}

type PullRequests

type PullRequests struct {
	Page
	PullRequests []PullRequest `json:"values"`
}

type Ref

type Ref struct {
	DisplayID string `json:"displayId"`
}

type Repositories

type Repositories struct {
	IsLastPage    bool         `json:"isLastPage"`
	Size          int          `json:"size"`
	Start         int          `json:"start"`
	NextPageStart int          `json:"nextPageStart"`
	Repository    []Repository `json:"values"`
}

type Repository

type Repository struct {
	ID      int     `json:"id"`
	Name    string  `json:"name"`
	Slug    string  `json:"slug"`
	Project Project `json:"project"`
	ScmID   string  `json:"scmId"`
	Links   Links   `json:"links"`
}

func HasRepository

func HasRepository(repositories map[int]Repository, url string) (Repository, bool)

func (Repository) SshUrl

func (repo Repository) SshUrl() string

SshUrl extracts the SSH-based URL from the repository metadata.

type Reviewer

type Reviewer struct {
	User     User   `json:"user"`
	Role     string `json:"role"`
	Approved bool   `json:"approved"`
	Status   string `json:"status"`
}

type Stash

type Stash interface {
	ApprovePullRequest(projectKey, repositorySlug string, pullRequestID, pullRequestVersion int) error
	CreateBranchRestriction(projectKey, repositorySlug, branch, user string) (BranchRestriction, error)
	CreateComment(projectKey, repositorySlug, pullRequest, text string) (Comment, error)
	CreatePullRequest(projectKey, repositorySlug, title, description, fromRef, toRef string, reviewers []string) (PullRequest, error)
	CreateRepository(projectKey, slug string) (Repository, error)
	DeclinePullRequest(projectKey, repositorySlug string, pullRequestID, pullRequestVersion int) error
	DeleteBranch(projectKey, repositorySlug, branchName string) error
	DeleteBranchRestriction(projectKey, repositorySlug string, id int) error
	GetBranchRestrictions(projectKey, repositorySlug string) (BranchRestrictions, error)
	GetBranches(projectKey, repositorySlug string) (map[string]Branch, error)
	GetCommit(projectKey, repositorySlug, commitHash string) (Commit, error)
	GetCommits(projectKey, repositorySlug, commitSinceHash string, commitUntilHash string) (Commits, error)
	GetPullRequest(projectKey, repositorySlug, identifier string) (PullRequest, error)
	GetPullRequests(projectKey, repositorySlug, state string) ([]PullRequest, error)
	GetRawFile(projectKey, repositorySlug, branch, filePath string) ([]byte, error)
	GetRepositories() (map[int]Repository, error)
	GetRepository(projectKey, repositorySlug string) (Repository, error)
	GetTags(projectKey, repositorySlug string) (map[string]Tag, error)
	MergePullRequest(projectKey, repositorySlug string, pullRequestID, pullRequestVersion int) error
	SetHTTPClient(httpClient *http.Client)
	UpdatePullRequest(projectKey, repositorySlug, identifier string, version int, title, description, toRef string, reviewers []string) (PullRequest, error)
}

func NewClient

func NewClient(userName, password string, baseURL *url.URL) Stash

NewClient will generate and return a StashClient abstraction

type Tag

type Tag struct {
	ID        string `json:"id"`
	DisplayID string `json:"displayId"`
	Hash      string `json:"hash"`
}

type Tags

type Tags struct {
	Page
	Tags []Tag `json:"values"`
}

type User

type User struct {
	Name string `json:"name"`
}

Jump to

Keyboard shortcuts

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