Skip to content

An SDK written in Go for interacting with the Harness API's

License

Notifications You must be signed in to change notification settings

harness/harness-go-sdk

Repository files navigation

Harness SDK for Go

This project is a Harness SDK for the go programming language. It provides go client for interacting with the current gen GraphQL and Config-as-Code API's.

Disclaimer

This product is not supported by the Harness Customer support team. If you have any questions please open a new issue or join our slack channel.

Getting Started

Installing

Use go get to retrieve the SDK to add it to your GOPATH workspace, or project's Go module dependencies.

go get github.com/harness/harness-go-sdk

To update the SDK use go get -u to retrieve the latest version of the SDK.

go get -u github.com/harness/harness-go-sdk

Dependencies

The metadata of the SDK's dependencies can be found in the Go module file go.mod.

Go Modules

If you are using Go modules, your go get will default to the latest tagged release version of the SDK. To get a specific release version of the SDK use @<tag> in your go get command.

go get github.com/harness/[email protected]

To get the latest SDK repository change use @latest.

go get github.com/harness/harness-go-sdk@latest

Quick Examples

Get an application by name

client := NewClient()
app, err := client.ApplicationClient.GetApplicationByName("my-app)

Create a Service

svc, _ := ServiceFactory(app.Id, serviceName, cac.DeploymentTypes.Kubernetes, cac.ArtifactTypes.Docker)
svc.ApplicationId = app.Id

newService, err := client.Services().UpsertService(svc)

Configuration

There are a few environment variables you can set to configure the api client.

  • HARNESS_ACCOUNT_ID: (required) The ID of the harness account you are connecting to.
  • HARNESS_API_KEY: (required) The API Key used for authentication.
  • HARNESS_BEARER_TOKEN: (optional) The authentication bearer token. This is needed for certain API calls to the config-as-code API's. This will be deprecated in the near future once those endpoints are updated.
  • HARNESS_ENDPOINT: (optional) The FQDN for contacting the Harness managers. Defaults to https://app.harness.io.

If you need to provide additional configuration you can create a client object from scratch.

client := &Client{
    UserAgent:   getUserAgentString(),
    Endpoint:    utils.GetEnv(envvar.Endpoint, utils.DefaultApiUrl),
    AccountId:   os.Getenv(envvar.AccountId),
    APIKey:      os.Getenv(envvar.ApiKey),
    BearerToken: os.Getenv(envvar.BearerToken),
    HTTPClient: &retryablehttp.Client{
        RetryMax:     10,
        RetryWaitMin: 5 * time.Second,
        RetryWaitMax: 10 * time.Second,
        HTTPClient: &http.Client{
            Timeout: 10 * time.Second,
        },
        Backoff:    retryablehttp.DefaultBackoff,
        CheckRetry: retryablehttp.DefaultRetryPolicy,
    },
}

The github.com/hashicorp/go-retryablehttp is essentially a drop-in replacement for the http package and is used to handle retries when getting rate limited.