Bitbucket-API library for golang.
Supports Bitbucket Cloud REST API v2.0. Responses follow the JSON shape documented by the official API.
- Bitbucket Cloud REST API v2.0 https://developer.atlassian.com/cloud/bitbucket/rest/intro/
- Swagger for API v2.0 https://api.bitbucket.org/swagger.json
go get github.com/ktrysmt/go-bitbucketBitbucket Cloud accepts several credential types. Pick the constructor that matches your credential.
Atlassian has deprecated app passwords; use an Atlassian API token instead. Pass your Atlassian account email as the username and the API token as the password.
c := bitbucket.NewAPITokenAuth("you@example.com", "your-api-token")NewAPITokenAuth is a thin alias over NewBasicAuth that documents the
intended usage. See the
Atlassian API token guide.
c := bitbucket.NewBasicAuth("username", "app-password")c, err := bitbucket.NewOAuthbearerToken("access-token")If you obtain tokens through the OAuth handshake yourself, use one of:
c, err := bitbucket.NewOAuthClientCredentials("client-id", "client-secret")
c, accessToken, err := bitbucket.NewOAuthWithCode("client-id", "client-secret", "auth-code")
c, accessToken, err := bitbucket.NewOAuthWithRefreshToken("client-id", "client-secret", "refresh-token")For Isolated Cloud Instances whose OAuth token endpoint lives under a
customer-specific hostname, the matching *WithEndpoint variants override the
default bitbucket.Endpoint:
import "golang.org/x/oauth2"
ep := oauth2.Endpoint{
AuthURL: "https://auth.your-isolated-instance.example.com/site/oauth2/authorize",
TokenURL: "https://auth.your-isolated-instance.example.com/site/oauth2/access_token",
}
c, err := bitbucket.NewOAuthClientCredentialsWithEndpoint(
"client-id", "client-secret", ep.TokenURL,
)
c, accessToken, err := bitbucket.NewOAuthWithCodeWithEndpoint(
"client-id", "client-secret", "auth-code", ep,
)
c, accessToken, err := bitbucket.NewOAuthWithRefreshTokenWithEndpoint(
"client-id", "client-secret", "refresh-token", ep,
)When the REST API is reachable under a customer-specific hostname, pass the base URL alongside the credential:
c, err := bitbucket.NewAPITokenAuthWithBaseUrlStr(
"you@example.com",
"your-api-token",
"https://api.your-isolated-instance.example.com/2.0",
)If the endpoint uses a private CA, supply the PEM bundle:
caBundle, _ := os.ReadFile("/etc/ssl/private-ca.pem")
c, err := bitbucket.NewAPITokenAuthWithBaseUrlStrCaCert(
"you@example.com",
"your-api-token",
"https://api.your-isolated-instance.example.com/2.0",
caBundle,
)The same *WithBaseUrlStr and *WithBaseUrlStrCaCert variants exist for
NewBasicAuth and NewOAuthbearerToken. For OAuth-handshake constructors,
combine the *WithEndpoint variant above with client.SetApiBaseURL to
redirect REST traffic to the same host. Alternatively, set
BITBUCKET_API_BASE_URL in the environment to override the default for any
constructor that does not take a URL argument.
package main
import (
"fmt"
"github.com/ktrysmt/go-bitbucket"
)
func main() {
c := bitbucket.NewAPITokenAuth("you@example.com", "your-api-token")
opt := &bitbucket.PullRequestsOptions{
Owner: "your-team",
RepoSlug: "awesome-project",
SourceBranch: "develop",
DestinationBranch: "master",
Title: "fix bug. #9999",
CloseSourceBranch: true,
}
res, err := c.Repositories.PullRequests.Create(opt)
if err != nil {
panic(err)
}
fmt.Println(res)
}package main
import (
"fmt"
"github.com/ktrysmt/go-bitbucket"
)
func main() {
c := bitbucket.NewAPITokenAuth("you@example.com", "your-api-token")
opt := &bitbucket.RepositoryOptions{
Owner: "project_name",
RepoSlug: "repo_name",
Scm: "git",
}
res, err := c.Repositories.Repository.Create(opt)
if err != nil {
panic(err)
}
fmt.Println(res)
}It does not correspond yet. Because there are many differences between v2.0 and v1.0.
- Bitbucket API v1.0 https://confluence.atlassian.com/bitbucket/version-1-423626337.html
It is officially recommended to use v2.0. But unfortunately Bitbucket Server (formerly: Stash) API is still v1.0. And The API v1.0 covers resources that the v2.0 API and API v2.0 is yet to cover.
It's using go mod.
Set your available user account to Global Env.
export BITBUCKET_TEST_USERNAME=<your_username>
export BITBUCKET_TEST_PASSWORD=<your_password>
export BITBUCKET_TEST_OWNER=<your_repo_owner>
export BITBUCKET_TEST_REPOSLUG=<your_repo_name>
export BITBUCKET_TEST_ACCESS_TOKEN=<your_repo_access_token>And just run;
make testIf you want to test individually;
go test -v ./tests/diff_test.goE2E Integration tests;
make test/e2eUnit tests;
make test/unitMock tests;
make test/mockIndividually;
go test ./mock_tests/repository_mock_test.goFor documented workflow of the gomock test structure in /mock_tests/repository_mock_test.go refer to;
- TestMockRepositoryPipelineVariables_List_Success
- TestMockRepositoryPipelineVariables_List_Error