1735 lines
78 KiB
Go
1735 lines
78 KiB
Go
|
// Generated service client for heroku API.
|
||
|
//
|
||
|
// To be able to interact with this API, you have to
|
||
|
// create a new service:
|
||
|
//
|
||
|
// s := heroku.NewService(nil)
|
||
|
//
|
||
|
// The Service struct has all the methods you need
|
||
|
// to interact with heroku API.
|
||
|
//
|
||
|
package heroku
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"net/http"
|
||
|
"reflect"
|
||
|
"runtime"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
Version = "v3"
|
||
|
DefaultAPIURL = "https://api.heroku.com"
|
||
|
DefaultUserAgent = "heroku/" + Version + " (" + runtime.GOOS + "; " + runtime.GOARCH + ")"
|
||
|
)
|
||
|
|
||
|
// Service represents your API.
|
||
|
type Service struct {
|
||
|
client *http.Client
|
||
|
}
|
||
|
|
||
|
// NewService creates a Service using the given, if none is provided
|
||
|
// it uses http.DefaultClient.
|
||
|
func NewService(c *http.Client) *Service {
|
||
|
if c == nil {
|
||
|
c = http.DefaultClient
|
||
|
}
|
||
|
return &Service{
|
||
|
client: c,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// NewRequest generates an HTTP request, but does not perform the request.
|
||
|
func (s *Service) NewRequest(method, path string, body interface{}) (*http.Request, error) {
|
||
|
var ctype string
|
||
|
var rbody io.Reader
|
||
|
switch t := body.(type) {
|
||
|
case nil:
|
||
|
case string:
|
||
|
rbody = bytes.NewBufferString(t)
|
||
|
case io.Reader:
|
||
|
rbody = t
|
||
|
default:
|
||
|
v := reflect.ValueOf(body)
|
||
|
if !v.IsValid() {
|
||
|
break
|
||
|
}
|
||
|
if v.Type().Kind() == reflect.Ptr {
|
||
|
v = reflect.Indirect(v)
|
||
|
if !v.IsValid() {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
j, err := json.Marshal(body)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
rbody = bytes.NewReader(j)
|
||
|
ctype = "application/json"
|
||
|
}
|
||
|
req, err := http.NewRequest(method, DefaultAPIURL+path, rbody)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
req.Header.Set("Accept", "application/json")
|
||
|
req.Header.Set("User-Agent", DefaultUserAgent)
|
||
|
if ctype != "" {
|
||
|
req.Header.Set("Content-Type", ctype)
|
||
|
}
|
||
|
return req, nil
|
||
|
}
|
||
|
|
||
|
// Do sends a request and decodes the response into v.
|
||
|
func (s *Service) Do(v interface{}, method, path string, body interface{}, lr *ListRange) error {
|
||
|
req, err := s.NewRequest(method, path, body)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if lr != nil {
|
||
|
lr.SetHeader(req)
|
||
|
}
|
||
|
resp, err := s.client.Do(req)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
switch t := v.(type) {
|
||
|
case nil:
|
||
|
case io.Writer:
|
||
|
_, err = io.Copy(t, resp.Body)
|
||
|
default:
|
||
|
err = json.NewDecoder(resp.Body).Decode(v)
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Get sends a GET request and decodes the response into v.
|
||
|
func (s *Service) Get(v interface{}, path string, lr *ListRange) error {
|
||
|
return s.Do(v, "GET", path, nil, lr)
|
||
|
}
|
||
|
|
||
|
// Patch sends a Path request and decodes the response into v.
|
||
|
func (s *Service) Patch(v interface{}, path string, body interface{}) error {
|
||
|
return s.Do(v, "PATCH", path, body, nil)
|
||
|
}
|
||
|
|
||
|
// Post sends a POST request and decodes the response into v.
|
||
|
func (s *Service) Post(v interface{}, path string, body interface{}) error {
|
||
|
return s.Do(v, "POST", path, body, nil)
|
||
|
}
|
||
|
|
||
|
// Put sends a PUT request and decodes the response into v.
|
||
|
func (s *Service) Put(v interface{}, path string, body interface{}) error {
|
||
|
return s.Do(v, "PUT", path, body, nil)
|
||
|
}
|
||
|
|
||
|
// Delete sends a DELETE request.
|
||
|
func (s *Service) Delete(path string) error {
|
||
|
return s.Do(nil, "DELETE", path, nil, nil)
|
||
|
}
|
||
|
|
||
|
// ListRange describes a range.
|
||
|
type ListRange struct {
|
||
|
Field string
|
||
|
Max int
|
||
|
Descending bool
|
||
|
FirstID string
|
||
|
LastID string
|
||
|
}
|
||
|
|
||
|
// SetHeader set headers on the given Request.
|
||
|
func (lr *ListRange) SetHeader(req *http.Request) {
|
||
|
var hdrval string
|
||
|
if lr.Field != "" {
|
||
|
hdrval += lr.Field + " "
|
||
|
}
|
||
|
hdrval += lr.FirstID + ".." + lr.LastID
|
||
|
if lr.Max != 0 {
|
||
|
hdrval += fmt.Sprintf("; max=%d", lr.Max)
|
||
|
if lr.Descending {
|
||
|
hdrval += ", "
|
||
|
}
|
||
|
}
|
||
|
if lr.Descending {
|
||
|
hdrval += ", order=desc"
|
||
|
}
|
||
|
req.Header.Set("Range", hdrval)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Bool allocates a new int value returns a pointer to it.
|
||
|
func Bool(v bool) *bool {
|
||
|
p := new(bool)
|
||
|
*p = v
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// Int allocates a new int value returns a pointer to it.
|
||
|
func Int(v int) *int {
|
||
|
p := new(int)
|
||
|
*p = v
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// Float64 allocates a new float64 value returns a pointer to it.
|
||
|
func Float64(v float64) *float64 {
|
||
|
p := new(float64)
|
||
|
*p = v
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// String allocates a new string value returns a pointer to it.
|
||
|
func String(v string) *string {
|
||
|
p := new(string)
|
||
|
*p = v
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// An account represents an individual signed up to use the Heroku
|
||
|
// platform.
|
||
|
type Account struct {
|
||
|
AllowTracking bool `json:"allow_tracking"` // whether to allow third party web activity tracking
|
||
|
Beta bool `json:"beta"` // whether allowed to utilize beta Heroku features
|
||
|
CreatedAt time.Time `json:"created_at"` // when account was created
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
LastLogin time.Time `json:"last_login"` // when account last authorized with Heroku
|
||
|
Name *string `json:"name"` // full name of the account owner
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when account was updated
|
||
|
Verified bool `json:"verified"` // whether account has been verified with billing information
|
||
|
}
|
||
|
|
||
|
// Info for account.
|
||
|
func (s *Service) AccountInfo() (*Account, error) {
|
||
|
var account Account
|
||
|
return &account, s.Get(&account, fmt.Sprintf("/account"), nil)
|
||
|
}
|
||
|
|
||
|
type AccountUpdateOpts struct {
|
||
|
AllowTracking *bool `json:"allow_tracking,omitempty"` // whether to allow third party web activity tracking
|
||
|
Beta *bool `json:"beta,omitempty"` // whether allowed to utilize beta Heroku features
|
||
|
Name *string `json:"name,omitempty"` // full name of the account owner
|
||
|
Password string `json:"password"` // current password on the account
|
||
|
}
|
||
|
|
||
|
// Update account.
|
||
|
func (s *Service) AccountUpdate(o struct {
|
||
|
AllowTracking *bool `json:"allow_tracking,omitempty"` // whether to allow third party web activity tracking
|
||
|
Beta *bool `json:"beta,omitempty"` // whether allowed to utilize beta Heroku features
|
||
|
Name *string `json:"name,omitempty"` // full name of the account owner
|
||
|
Password string `json:"password"` // current password on the account
|
||
|
}) (*Account, error) {
|
||
|
var account Account
|
||
|
return &account, s.Patch(&account, fmt.Sprintf("/account"), o)
|
||
|
}
|
||
|
|
||
|
type AccountChangeEmailOpts struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
Password string `json:"password"` // current password on the account
|
||
|
}
|
||
|
|
||
|
// Change Email for account.
|
||
|
func (s *Service) AccountChangeEmail(o struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
Password string `json:"password"` // current password on the account
|
||
|
}) (*Account, error) {
|
||
|
var account Account
|
||
|
return &account, s.Patch(&account, fmt.Sprintf("/account"), o)
|
||
|
}
|
||
|
|
||
|
type AccountChangePasswordOpts struct {
|
||
|
NewPassword string `json:"new_password"` // the new password for the account when changing the password
|
||
|
Password string `json:"password"` // current password on the account
|
||
|
}
|
||
|
|
||
|
// Change Password for account.
|
||
|
func (s *Service) AccountChangePassword(o struct {
|
||
|
NewPassword string `json:"new_password"` // the new password for the account when changing the password
|
||
|
Password string `json:"password"` // current password on the account
|
||
|
}) (*Account, error) {
|
||
|
var account Account
|
||
|
return &account, s.Patch(&account, fmt.Sprintf("/account"), o)
|
||
|
}
|
||
|
|
||
|
// An account feature represents a Heroku labs capability that can be
|
||
|
// enabled or disabled for an account on Heroku.
|
||
|
type AccountFeature struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when account feature was created
|
||
|
Description string `json:"description"` // description of account feature
|
||
|
DocURL string `json:"doc_url"` // documentation URL of account feature
|
||
|
Enabled bool `json:"enabled"` // whether or not account feature has been enabled
|
||
|
ID string `json:"id"` // unique identifier of account feature
|
||
|
Name string `json:"name"` // unique name of account feature
|
||
|
State string `json:"state"` // state of account feature
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when account feature was updated
|
||
|
}
|
||
|
|
||
|
// Info for an existing account feature.
|
||
|
func (s *Service) AccountFeatureInfo(accountFeatureIdentity string) (*AccountFeature, error) {
|
||
|
var accountFeature AccountFeature
|
||
|
return &accountFeature, s.Get(&accountFeature, fmt.Sprintf("/account/features/%v", accountFeatureIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing account features.
|
||
|
func (s *Service) AccountFeatureList(lr *ListRange) ([]*AccountFeature, error) {
|
||
|
var accountFeatureList []*AccountFeature
|
||
|
return accountFeatureList, s.Get(&accountFeatureList, fmt.Sprintf("/account/features"), lr)
|
||
|
}
|
||
|
|
||
|
type AccountFeatureUpdateOpts struct {
|
||
|
Enabled bool `json:"enabled"` // whether or not account feature has been enabled
|
||
|
}
|
||
|
|
||
|
// Update an existing account feature.
|
||
|
func (s *Service) AccountFeatureUpdate(accountFeatureIdentity string, o struct {
|
||
|
Enabled bool `json:"enabled"` // whether or not account feature has been enabled
|
||
|
}) (*AccountFeature, error) {
|
||
|
var accountFeature AccountFeature
|
||
|
return &accountFeature, s.Patch(&accountFeature, fmt.Sprintf("/account/features/%v", accountFeatureIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Add-ons represent add-ons that have been provisioned for an app.
|
||
|
type Addon struct {
|
||
|
AddonService struct {
|
||
|
ID string `json:"id"` // unique identifier of this addon-service
|
||
|
Name string `json:"name"` // unique name of this addon-service
|
||
|
} `json:"addon_service"` // identity of add-on service
|
||
|
ConfigVars []string `json:"config_vars"` // config vars associated with this application
|
||
|
CreatedAt time.Time `json:"created_at"` // when add-on was updated
|
||
|
ID string `json:"id"` // unique identifier of add-on
|
||
|
Name string `json:"name"` // name of the add-on unique within its app
|
||
|
Plan struct {
|
||
|
ID string `json:"id"` // unique identifier of this plan
|
||
|
Name string `json:"name"` // unique name of this plan
|
||
|
} `json:"plan"` // identity of add-on plan
|
||
|
ProviderID string `json:"provider_id"` // id of this add-on with its provider
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when add-on was updated
|
||
|
}
|
||
|
type AddonCreateOpts struct {
|
||
|
Config *map[string]string `json:"config,omitempty"` // custom add-on provisioning options
|
||
|
Plan string `json:"plan"` // unique identifier of this plan
|
||
|
}
|
||
|
|
||
|
// Create a new add-on.
|
||
|
func (s *Service) AddonCreate(appIdentity string, o struct {
|
||
|
Config *map[string]string `json:"config,omitempty"` // custom add-on provisioning options
|
||
|
Plan string `json:"plan"` // unique identifier of this plan
|
||
|
}) (*Addon, error) {
|
||
|
var addon Addon
|
||
|
return &addon, s.Post(&addon, fmt.Sprintf("/apps/%v/addons", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Delete an existing add-on.
|
||
|
func (s *Service) AddonDelete(appIdentity string, addonIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addonIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for an existing add-on.
|
||
|
func (s *Service) AddonInfo(appIdentity string, addonIdentity string) (*Addon, error) {
|
||
|
var addon Addon
|
||
|
return &addon, s.Get(&addon, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addonIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing add-ons.
|
||
|
func (s *Service) AddonList(appIdentity string, lr *ListRange) ([]*Addon, error) {
|
||
|
var addonList []*Addon
|
||
|
return addonList, s.Get(&addonList, fmt.Sprintf("/apps/%v/addons", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
type AddonUpdateOpts struct {
|
||
|
Plan string `json:"plan"` // unique identifier of this plan
|
||
|
}
|
||
|
|
||
|
// Change add-on plan. Some add-ons may not support changing plans. In
|
||
|
// that case, an error will be returned.
|
||
|
func (s *Service) AddonUpdate(appIdentity string, addonIdentity string, o struct {
|
||
|
Plan string `json:"plan"` // unique identifier of this plan
|
||
|
}) (*Addon, error) {
|
||
|
var addon Addon
|
||
|
return &addon, s.Patch(&addon, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addonIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Add-on services represent add-ons that may be provisioned for apps.
|
||
|
// Endpoints under add-on services can be accessed without
|
||
|
// authentication.
|
||
|
type AddonService struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when addon-service was created
|
||
|
ID string `json:"id"` // unique identifier of this addon-service
|
||
|
Name string `json:"name"` // unique name of this addon-service
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when addon-service was updated
|
||
|
}
|
||
|
|
||
|
// Info for existing addon-service.
|
||
|
func (s *Service) AddonServiceInfo(addonServiceIdentity string) (*AddonService, error) {
|
||
|
var addonService AddonService
|
||
|
return &addonService, s.Get(&addonService, fmt.Sprintf("/addon-services/%v", addonServiceIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing addon-services.
|
||
|
func (s *Service) AddonServiceList(lr *ListRange) ([]*AddonService, error) {
|
||
|
var addonServiceList []*AddonService
|
||
|
return addonServiceList, s.Get(&addonServiceList, fmt.Sprintf("/addon-services"), lr)
|
||
|
}
|
||
|
|
||
|
// An app represents the program that you would like to deploy and run
|
||
|
// on Heroku.
|
||
|
type App struct {
|
||
|
ArchivedAt *time.Time `json:"archived_at"` // when app was archived
|
||
|
BuildpackProvidedDescription *string `json:"buildpack_provided_description"` // description from buildpack of app
|
||
|
CreatedAt time.Time `json:"created_at"` // when app was created
|
||
|
GitURL string `json:"git_url"` // git repo URL of app
|
||
|
ID string `json:"id"` // unique identifier of app
|
||
|
Maintenance bool `json:"maintenance"` // maintenance status of app
|
||
|
Name string `json:"name"` // unique name of app
|
||
|
Owner struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
} `json:"owner"` // identity of app owner
|
||
|
Region struct {
|
||
|
ID string `json:"id"` // unique identifier of region
|
||
|
Name string `json:"name"` // unique name of region
|
||
|
} `json:"region"` // identity of app region
|
||
|
ReleasedAt *time.Time `json:"released_at"` // when app was released
|
||
|
RepoSize *int `json:"repo_size"` // git repo size in bytes of app
|
||
|
SlugSize *int `json:"slug_size"` // slug size in bytes of app
|
||
|
Stack struct {
|
||
|
ID string `json:"id"` // unique identifier of stack
|
||
|
Name string `json:"name"` // unique name of stack
|
||
|
} `json:"stack"` // identity of app stack
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when app was updated
|
||
|
WebURL string `json:"web_url"` // web URL of app
|
||
|
}
|
||
|
type AppCreateOpts struct {
|
||
|
Name *string `json:"name,omitempty"` // unique name of app
|
||
|
Region *string `json:"region,omitempty"` // unique identifier of region
|
||
|
Stack *string `json:"stack,omitempty"` // unique name of stack
|
||
|
}
|
||
|
|
||
|
// Create a new app.
|
||
|
func (s *Service) AppCreate(o struct {
|
||
|
Name *string `json:"name,omitempty"` // unique name of app
|
||
|
Region *string `json:"region,omitempty"` // unique identifier of region
|
||
|
Stack *string `json:"stack,omitempty"` // unique name of stack
|
||
|
}) (*App, error) {
|
||
|
var app App
|
||
|
return &app, s.Post(&app, fmt.Sprintf("/apps"), o)
|
||
|
}
|
||
|
|
||
|
// Delete an existing app.
|
||
|
func (s *Service) AppDelete(appIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/apps/%v", appIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for existing app.
|
||
|
func (s *Service) AppInfo(appIdentity string) (*App, error) {
|
||
|
var app App
|
||
|
return &app, s.Get(&app, fmt.Sprintf("/apps/%v", appIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing apps.
|
||
|
func (s *Service) AppList(lr *ListRange) ([]*App, error) {
|
||
|
var appList []*App
|
||
|
return appList, s.Get(&appList, fmt.Sprintf("/apps"), lr)
|
||
|
}
|
||
|
|
||
|
type AppUpdateOpts struct {
|
||
|
Maintenance *bool `json:"maintenance,omitempty"` // maintenance status of app
|
||
|
Name *string `json:"name,omitempty"` // unique name of app
|
||
|
}
|
||
|
|
||
|
// Update an existing app.
|
||
|
func (s *Service) AppUpdate(appIdentity string, o struct {
|
||
|
Maintenance *bool `json:"maintenance,omitempty"` // maintenance status of app
|
||
|
Name *string `json:"name,omitempty"` // unique name of app
|
||
|
}) (*App, error) {
|
||
|
var app App
|
||
|
return &app, s.Patch(&app, fmt.Sprintf("/apps/%v", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// An app feature represents a Heroku labs capability that can be
|
||
|
// enabled or disabled for an app on Heroku.
|
||
|
type AppFeature struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when app feature was created
|
||
|
Description string `json:"description"` // description of app feature
|
||
|
DocURL string `json:"doc_url"` // documentation URL of app feature
|
||
|
Enabled bool `json:"enabled"` // whether or not app feature has been enabled
|
||
|
ID string `json:"id"` // unique identifier of app feature
|
||
|
Name string `json:"name"` // unique name of app feature
|
||
|
State string `json:"state"` // state of app feature
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when app feature was updated
|
||
|
}
|
||
|
|
||
|
// Info for an existing app feature.
|
||
|
func (s *Service) AppFeatureInfo(appIdentity string, appFeatureIdentity string) (*AppFeature, error) {
|
||
|
var appFeature AppFeature
|
||
|
return &appFeature, s.Get(&appFeature, fmt.Sprintf("/apps/%v/features/%v", appIdentity, appFeatureIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing app features.
|
||
|
func (s *Service) AppFeatureList(appIdentity string, lr *ListRange) ([]*AppFeature, error) {
|
||
|
var appFeatureList []*AppFeature
|
||
|
return appFeatureList, s.Get(&appFeatureList, fmt.Sprintf("/apps/%v/features", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
type AppFeatureUpdateOpts struct {
|
||
|
Enabled bool `json:"enabled"` // whether or not app feature has been enabled
|
||
|
}
|
||
|
|
||
|
// Update an existing app feature.
|
||
|
func (s *Service) AppFeatureUpdate(appIdentity string, appFeatureIdentity string, o struct {
|
||
|
Enabled bool `json:"enabled"` // whether or not app feature has been enabled
|
||
|
}) (*AppFeature, error) {
|
||
|
var appFeature AppFeature
|
||
|
return &appFeature, s.Patch(&appFeature, fmt.Sprintf("/apps/%v/features/%v", appIdentity, appFeatureIdentity), o)
|
||
|
}
|
||
|
|
||
|
// An app setup represents an app on Heroku that is setup using an
|
||
|
// environment, addons, and scripts described in an app.json manifest
|
||
|
// file.
|
||
|
type AppSetup struct {
|
||
|
App struct {
|
||
|
ID string `json:"id"` // unique identifier of app
|
||
|
Name string `json:"name"` // unique name of app
|
||
|
} `json:"app"` // identity of app
|
||
|
Build struct {
|
||
|
ID string `json:"id"` // unique identifier of build
|
||
|
Status string `json:"status"` // status of build
|
||
|
} `json:"build"` // identity and status of build
|
||
|
CreatedAt time.Time `json:"created_at"` // when app setup was created
|
||
|
FailureMessage *string `json:"failure_message"` // reason that app setup has failed
|
||
|
ID string `json:"id"` // unique identifier of app setup
|
||
|
ManifestErrors []string `json:"manifest_errors"` // errors associated with invalid app.json manifest file
|
||
|
Postdeploy *struct {
|
||
|
ExitCode int `json:"exit_code"` // The exit code of the postdeploy script
|
||
|
Output string `json:"output"` // output of the postdeploy script
|
||
|
} `json:"postdeploy"` // result of postdeploy script
|
||
|
ResolvedSuccessURL *string `json:"resolved_success_url"` // fully qualified success url
|
||
|
Status string `json:"status"` // the overall status of app setup
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when app setup was updated
|
||
|
}
|
||
|
type AppSetupCreateOpts struct {
|
||
|
App *struct {
|
||
|
Locked *bool `json:"locked,omitempty"` // are other organization members forbidden from joining this app.
|
||
|
Name *string `json:"name,omitempty"` // unique name of app
|
||
|
Organization *string `json:"organization,omitempty"` // unique name of organization
|
||
|
Personal *bool `json:"personal,omitempty"` // force creation of the app in the user account even if a default org
|
||
|
// is set.
|
||
|
Region *string `json:"region,omitempty"` // unique name of region
|
||
|
Stack *string `json:"stack,omitempty"` // unique name of stack
|
||
|
} `json:"app,omitempty"` // optional parameters for created app
|
||
|
Overrides *struct {
|
||
|
Env *map[string]string `json:"env,omitempty"` // overrides of the env specified in the app.json manifest file
|
||
|
} `json:"overrides,omitempty"` // overrides of keys in the app.json manifest file
|
||
|
SourceBlob struct {
|
||
|
URL *string `json:"url,omitempty"` // URL of gzipped tarball of source code containing app.json manifest
|
||
|
// file
|
||
|
} `json:"source_blob"` // gzipped tarball of source code containing app.json manifest file
|
||
|
}
|
||
|
|
||
|
// Create a new app setup from a gzipped tar archive containing an
|
||
|
// app.json manifest file.
|
||
|
func (s *Service) AppSetupCreate(o struct {
|
||
|
App *struct {
|
||
|
Locked *bool `json:"locked,omitempty"` // are other organization members forbidden from joining this app.
|
||
|
Name *string `json:"name,omitempty"` // unique name of app
|
||
|
Organization *string `json:"organization,omitempty"` // unique name of organization
|
||
|
Personal *bool `json:"personal,omitempty"` // force creation of the app in the user account even if a default org
|
||
|
// is set.
|
||
|
Region *string `json:"region,omitempty"` // unique name of region
|
||
|
Stack *string `json:"stack,omitempty"` // unique name of stack
|
||
|
} `json:"app,omitempty"` // optional parameters for created app
|
||
|
Overrides *struct {
|
||
|
Env *map[string]string `json:"env,omitempty"` // overrides of the env specified in the app.json manifest file
|
||
|
} `json:"overrides,omitempty"` // overrides of keys in the app.json manifest file
|
||
|
SourceBlob struct {
|
||
|
URL *string `json:"url,omitempty"` // URL of gzipped tarball of source code containing app.json manifest
|
||
|
// file
|
||
|
} `json:"source_blob"` // gzipped tarball of source code containing app.json manifest file
|
||
|
}) (*AppSetup, error) {
|
||
|
var appSetup AppSetup
|
||
|
return &appSetup, s.Post(&appSetup, fmt.Sprintf("/app-setups"), o)
|
||
|
}
|
||
|
|
||
|
// Get the status of an app setup.
|
||
|
func (s *Service) AppSetupInfo(appSetupIdentity string) (*AppSetup, error) {
|
||
|
var appSetup AppSetup
|
||
|
return &appSetup, s.Get(&appSetup, fmt.Sprintf("/app-setups/%v", appSetupIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// An app transfer represents a two party interaction for transferring
|
||
|
// ownership of an app.
|
||
|
type AppTransfer struct {
|
||
|
App struct {
|
||
|
ID string `json:"id"` // unique identifier of app
|
||
|
Name string `json:"name"` // unique name of app
|
||
|
} `json:"app"` // app involved in the transfer
|
||
|
CreatedAt time.Time `json:"created_at"` // when app transfer was created
|
||
|
ID string `json:"id"` // unique identifier of app transfer
|
||
|
Owner struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
} `json:"owner"` // identity of the owner of the transfer
|
||
|
Recipient struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
} `json:"recipient"` // identity of the recipient of the transfer
|
||
|
State string `json:"state"` // the current state of an app transfer
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when app transfer was updated
|
||
|
}
|
||
|
type AppTransferCreateOpts struct {
|
||
|
App string `json:"app"` // unique identifier of app
|
||
|
Recipient string `json:"recipient"` // unique email address of account
|
||
|
}
|
||
|
|
||
|
// Create a new app transfer.
|
||
|
func (s *Service) AppTransferCreate(o struct {
|
||
|
App string `json:"app"` // unique identifier of app
|
||
|
Recipient string `json:"recipient"` // unique email address of account
|
||
|
}) (*AppTransfer, error) {
|
||
|
var appTransfer AppTransfer
|
||
|
return &appTransfer, s.Post(&appTransfer, fmt.Sprintf("/account/app-transfers"), o)
|
||
|
}
|
||
|
|
||
|
// Delete an existing app transfer
|
||
|
func (s *Service) AppTransferDelete(appTransferIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for existing app transfer.
|
||
|
func (s *Service) AppTransferInfo(appTransferIdentity string) (*AppTransfer, error) {
|
||
|
var appTransfer AppTransfer
|
||
|
return &appTransfer, s.Get(&appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing apps transfers.
|
||
|
func (s *Service) AppTransferList(lr *ListRange) ([]*AppTransfer, error) {
|
||
|
var appTransferList []*AppTransfer
|
||
|
return appTransferList, s.Get(&appTransferList, fmt.Sprintf("/account/app-transfers"), lr)
|
||
|
}
|
||
|
|
||
|
type AppTransferUpdateOpts struct {
|
||
|
State string `json:"state"` // the current state of an app transfer
|
||
|
}
|
||
|
|
||
|
// Update an existing app transfer.
|
||
|
func (s *Service) AppTransferUpdate(appTransferIdentity string, o struct {
|
||
|
State string `json:"state"` // the current state of an app transfer
|
||
|
}) (*AppTransfer, error) {
|
||
|
var appTransfer AppTransfer
|
||
|
return &appTransfer, s.Patch(&appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity), o)
|
||
|
}
|
||
|
|
||
|
// A build represents the process of transforming a code tarball into a
|
||
|
// slug
|
||
|
type Build struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when build was created
|
||
|
ID string `json:"id"` // unique identifier of build
|
||
|
Slug *struct {
|
||
|
ID string `json:"id"` // unique identifier of slug
|
||
|
} `json:"slug"` // slug created by this build
|
||
|
SourceBlob struct {
|
||
|
URL string `json:"url"` // URL where gzipped tar archive of source code for build was
|
||
|
// downloaded.
|
||
|
Version *string `json:"version"` // Version of the gzipped tarball.
|
||
|
} `json:"source_blob"` // location of gzipped tarball of source code used to create build
|
||
|
Status string `json:"status"` // status of build
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when build was updated
|
||
|
User struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
} `json:"user"` // user that started the build
|
||
|
}
|
||
|
type BuildCreateOpts struct {
|
||
|
SourceBlob struct {
|
||
|
URL *string `json:"url,omitempty"` // URL where gzipped tar archive of source code for build was
|
||
|
// downloaded.
|
||
|
Version *string `json:"version,omitempty"` // Version of the gzipped tarball.
|
||
|
} `json:"source_blob"` // location of gzipped tarball of source code used to create build
|
||
|
}
|
||
|
|
||
|
// Create a new build.
|
||
|
func (s *Service) BuildCreate(appIdentity string, o struct {
|
||
|
SourceBlob struct {
|
||
|
URL *string `json:"url,omitempty"` // URL where gzipped tar archive of source code for build was
|
||
|
// downloaded.
|
||
|
Version *string `json:"version,omitempty"` // Version of the gzipped tarball.
|
||
|
} `json:"source_blob"` // location of gzipped tarball of source code used to create build
|
||
|
}) (*Build, error) {
|
||
|
var build Build
|
||
|
return &build, s.Post(&build, fmt.Sprintf("/apps/%v/builds", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Info for existing build.
|
||
|
func (s *Service) BuildInfo(appIdentity string, buildIdentity string) (*Build, error) {
|
||
|
var build Build
|
||
|
return &build, s.Get(&build, fmt.Sprintf("/apps/%v/builds/%v", appIdentity, buildIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing build.
|
||
|
func (s *Service) BuildList(appIdentity string, lr *ListRange) ([]*Build, error) {
|
||
|
var buildList []*Build
|
||
|
return buildList, s.Get(&buildList, fmt.Sprintf("/apps/%v/builds", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
// A build result contains the output from a build.
|
||
|
type BuildResult struct {
|
||
|
Build struct {
|
||
|
ID string `json:"id"` // unique identifier of build
|
||
|
Status string `json:"status"` // status of build
|
||
|
} `json:"build"` // identity of build
|
||
|
ExitCode float64 `json:"exit_code"` // status from the build
|
||
|
Lines []struct {
|
||
|
Line string `json:"line"` // A line of output from the build.
|
||
|
Stream string `json:"stream"` // The output stream where the line was sent.
|
||
|
} `json:"lines"` // A list of all the lines of a build's output.
|
||
|
}
|
||
|
|
||
|
// Info for existing result.
|
||
|
func (s *Service) BuildResultInfo(appIdentity string, buildIdentity string) (*BuildResult, error) {
|
||
|
var buildResult BuildResult
|
||
|
return &buildResult, s.Get(&buildResult, fmt.Sprintf("/apps/%v/builds/%v/result", appIdentity, buildIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// A collaborator represents an account that has been given access to an
|
||
|
// app on Heroku.
|
||
|
type Collaborator struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when collaborator was created
|
||
|
ID string `json:"id"` // unique identifier of collaborator
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when collaborator was updated
|
||
|
User struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
} `json:"user"` // identity of collaborated account
|
||
|
}
|
||
|
type CollaboratorCreateOpts struct {
|
||
|
Silent *bool `json:"silent,omitempty"` // whether to suppress email invitation when creating collaborator
|
||
|
User string `json:"user"` // unique email address of account
|
||
|
}
|
||
|
|
||
|
// Create a new collaborator.
|
||
|
func (s *Service) CollaboratorCreate(appIdentity string, o struct {
|
||
|
Silent *bool `json:"silent,omitempty"` // whether to suppress email invitation when creating collaborator
|
||
|
User string `json:"user"` // unique email address of account
|
||
|
}) (*Collaborator, error) {
|
||
|
var collaborator Collaborator
|
||
|
return &collaborator, s.Post(&collaborator, fmt.Sprintf("/apps/%v/collaborators", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Delete an existing collaborator.
|
||
|
func (s *Service) CollaboratorDelete(appIdentity string, collaboratorIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/apps/%v/collaborators/%v", appIdentity, collaboratorIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for existing collaborator.
|
||
|
func (s *Service) CollaboratorInfo(appIdentity string, collaboratorIdentity string) (*Collaborator, error) {
|
||
|
var collaborator Collaborator
|
||
|
return &collaborator, s.Get(&collaborator, fmt.Sprintf("/apps/%v/collaborators/%v", appIdentity, collaboratorIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing collaborators.
|
||
|
func (s *Service) CollaboratorList(appIdentity string, lr *ListRange) ([]*Collaborator, error) {
|
||
|
var collaboratorList []*Collaborator
|
||
|
return collaboratorList, s.Get(&collaboratorList, fmt.Sprintf("/apps/%v/collaborators", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
// Config Vars allow you to manage the configuration information
|
||
|
// provided to an app on Heroku.
|
||
|
type ConfigVar map[string]string
|
||
|
|
||
|
// Get config-vars for app.
|
||
|
func (s *Service) ConfigVarInfo(appIdentity string) (map[string]string, error) {
|
||
|
var configVar ConfigVar
|
||
|
return configVar, s.Get(&configVar, fmt.Sprintf("/apps/%v/config-vars", appIdentity), nil)
|
||
|
}
|
||
|
|
||
|
type ConfigVarUpdateOpts map[string]*string
|
||
|
|
||
|
// Update config-vars for app. You can update existing config-vars by
|
||
|
// setting them again, and remove by setting it to `NULL`.
|
||
|
func (s *Service) ConfigVarUpdate(appIdentity string, o map[string]*string) (map[string]string, error) {
|
||
|
var configVar ConfigVar
|
||
|
return configVar, s.Patch(&configVar, fmt.Sprintf("/apps/%v/config-vars", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// A credit represents value that will be used up before further charges
|
||
|
// are assigned to an account.
|
||
|
type Credit struct {
|
||
|
Amount float64 `json:"amount"` // total value of credit in cents
|
||
|
Balance float64 `json:"balance"` // remaining value of credit in cents
|
||
|
CreatedAt time.Time `json:"created_at"` // when credit was created
|
||
|
ExpiresAt time.Time `json:"expires_at"` // when credit will expire
|
||
|
ID string `json:"id"` // unique identifier of credit
|
||
|
Title string `json:"title"` // a name for credit
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when credit was updated
|
||
|
}
|
||
|
|
||
|
// Info for existing credit.
|
||
|
func (s *Service) CreditInfo(creditIdentity string) (*Credit, error) {
|
||
|
var credit Credit
|
||
|
return &credit, s.Get(&credit, fmt.Sprintf("/account/credits/%v", creditIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing credits.
|
||
|
func (s *Service) CreditList(lr *ListRange) ([]*Credit, error) {
|
||
|
var creditList []*Credit
|
||
|
return creditList, s.Get(&creditList, fmt.Sprintf("/account/credits"), lr)
|
||
|
}
|
||
|
|
||
|
// Domains define what web routes should be routed to an app on Heroku.
|
||
|
type Domain struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when domain was created
|
||
|
Hostname string `json:"hostname"` // full hostname
|
||
|
ID string `json:"id"` // unique identifier of this domain
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when domain was updated
|
||
|
}
|
||
|
type DomainCreateOpts struct {
|
||
|
Hostname string `json:"hostname"` // full hostname
|
||
|
}
|
||
|
|
||
|
// Create a new domain.
|
||
|
func (s *Service) DomainCreate(appIdentity string, o struct {
|
||
|
Hostname string `json:"hostname"` // full hostname
|
||
|
}) (*Domain, error) {
|
||
|
var domain Domain
|
||
|
return &domain, s.Post(&domain, fmt.Sprintf("/apps/%v/domains", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Delete an existing domain
|
||
|
func (s *Service) DomainDelete(appIdentity string, domainIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/apps/%v/domains/%v", appIdentity, domainIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for existing domain.
|
||
|
func (s *Service) DomainInfo(appIdentity string, domainIdentity string) (*Domain, error) {
|
||
|
var domain Domain
|
||
|
return &domain, s.Get(&domain, fmt.Sprintf("/apps/%v/domains/%v", appIdentity, domainIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing domains.
|
||
|
func (s *Service) DomainList(appIdentity string, lr *ListRange) ([]*Domain, error) {
|
||
|
var domainList []*Domain
|
||
|
return domainList, s.Get(&domainList, fmt.Sprintf("/apps/%v/domains", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
// Dynos encapsulate running processes of an app on Heroku.
|
||
|
type Dyno struct {
|
||
|
AttachURL *string `json:"attach_url"` // a URL to stream output from for attached processes or null for
|
||
|
// non-attached processes
|
||
|
Command string `json:"command"` // command used to start this process
|
||
|
CreatedAt time.Time `json:"created_at"` // when dyno was created
|
||
|
ID string `json:"id"` // unique identifier of this dyno
|
||
|
Name string `json:"name"` // the name of this process on this dyno
|
||
|
Release struct {
|
||
|
ID string `json:"id"` // unique identifier of release
|
||
|
Version int `json:"version"` // unique version assigned to the release
|
||
|
} `json:"release"` // app release of the dyno
|
||
|
Size string `json:"size"` // dyno size (default: "1X")
|
||
|
State string `json:"state"` // current status of process (either: crashed, down, idle, starting, or
|
||
|
// up)
|
||
|
Type string `json:"type"` // type of process
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when process last changed state
|
||
|
}
|
||
|
type DynoCreateOpts struct {
|
||
|
Attach *bool `json:"attach,omitempty"` // whether to stream output or not
|
||
|
Command string `json:"command"` // command used to start this process
|
||
|
Env *map[string]string `json:"env,omitempty"` // custom environment to add to the dyno config vars
|
||
|
Size *string `json:"size,omitempty"` // dyno size (default: "1X")
|
||
|
}
|
||
|
|
||
|
// Create a new dyno.
|
||
|
func (s *Service) DynoCreate(appIdentity string, o struct {
|
||
|
Attach *bool `json:"attach,omitempty"` // whether to stream output or not
|
||
|
Command string `json:"command"` // command used to start this process
|
||
|
Env *map[string]string `json:"env,omitempty"` // custom environment to add to the dyno config vars
|
||
|
Size *string `json:"size,omitempty"` // dyno size (default: "1X")
|
||
|
}) (*Dyno, error) {
|
||
|
var dyno Dyno
|
||
|
return &dyno, s.Post(&dyno, fmt.Sprintf("/apps/%v/dynos", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Restart dyno.
|
||
|
func (s *Service) DynoRestart(appIdentity string, dynoIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/apps/%v/dynos/%v", appIdentity, dynoIdentity))
|
||
|
}
|
||
|
|
||
|
// Restart all dynos
|
||
|
func (s *Service) DynoRestartAll(appIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/apps/%v/dynos", appIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for existing dyno.
|
||
|
func (s *Service) DynoInfo(appIdentity string, dynoIdentity string) (*Dyno, error) {
|
||
|
var dyno Dyno
|
||
|
return &dyno, s.Get(&dyno, fmt.Sprintf("/apps/%v/dynos/%v", appIdentity, dynoIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing dynos.
|
||
|
func (s *Service) DynoList(appIdentity string, lr *ListRange) ([]*Dyno, error) {
|
||
|
var dynoList []*Dyno
|
||
|
return dynoList, s.Get(&dynoList, fmt.Sprintf("/apps/%v/dynos", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
// The formation of processes that should be maintained for an app.
|
||
|
// Update the formation to scale processes or change dyno sizes.
|
||
|
// Available process type names and commands are defined by the
|
||
|
// `process_types` attribute for the [slug](#slug) currently released on
|
||
|
// an app.
|
||
|
type Formation struct {
|
||
|
Command string `json:"command"` // command to use to launch this process
|
||
|
CreatedAt time.Time `json:"created_at"` // when process type was created
|
||
|
ID string `json:"id"` // unique identifier of this process type
|
||
|
Quantity int `json:"quantity"` // number of processes to maintain
|
||
|
Size string `json:"size"` // dyno size (default: "1X")
|
||
|
Type string `json:"type"` // type of process to maintain
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when dyno type was updated
|
||
|
}
|
||
|
|
||
|
// Info for a process type
|
||
|
func (s *Service) FormationInfo(appIdentity string, formationIdentity string) (*Formation, error) {
|
||
|
var formation Formation
|
||
|
return &formation, s.Get(&formation, fmt.Sprintf("/apps/%v/formation/%v", appIdentity, formationIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List process type formation
|
||
|
func (s *Service) FormationList(appIdentity string, lr *ListRange) ([]*Formation, error) {
|
||
|
var formationList []*Formation
|
||
|
return formationList, s.Get(&formationList, fmt.Sprintf("/apps/%v/formation", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
type FormationBatchUpdateOpts struct {
|
||
|
Updates []struct {
|
||
|
Process string `json:"process"` // unique identifier of this process type
|
||
|
Quantity *int `json:"quantity,omitempty"` // number of processes to maintain
|
||
|
Size *string `json:"size,omitempty"` // dyno size (default: "1X")
|
||
|
} `json:"updates"` // Array with formation updates. Each element must have "process", the
|
||
|
// id or name of the process type to be updated, and can optionally
|
||
|
// update its "quantity" or "size".
|
||
|
}
|
||
|
|
||
|
// Batch update process types
|
||
|
func (s *Service) FormationBatchUpdate(appIdentity string, o struct {
|
||
|
Updates []struct {
|
||
|
Process string `json:"process"` // unique identifier of this process type
|
||
|
Quantity *int `json:"quantity,omitempty"` // number of processes to maintain
|
||
|
Size *string `json:"size,omitempty"` // dyno size (default: "1X")
|
||
|
} `json:"updates"` // Array with formation updates. Each element must have "process", the
|
||
|
// id or name of the process type to be updated, and can optionally
|
||
|
// update its "quantity" or "size".
|
||
|
}) (*Formation, error) {
|
||
|
var formation Formation
|
||
|
return &formation, s.Patch(&formation, fmt.Sprintf("/apps/%v/formation", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
type FormationUpdateOpts struct {
|
||
|
Quantity *int `json:"quantity,omitempty"` // number of processes to maintain
|
||
|
Size *string `json:"size,omitempty"` // dyno size (default: "1X")
|
||
|
}
|
||
|
|
||
|
// Update process type
|
||
|
func (s *Service) FormationUpdate(appIdentity string, formationIdentity string, o struct {
|
||
|
Quantity *int `json:"quantity,omitempty"` // number of processes to maintain
|
||
|
Size *string `json:"size,omitempty"` // dyno size (default: "1X")
|
||
|
}) (*Formation, error) {
|
||
|
var formation Formation
|
||
|
return &formation, s.Patch(&formation, fmt.Sprintf("/apps/%v/formation/%v", appIdentity, formationIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Keys represent public SSH keys associated with an account and are
|
||
|
// used to authorize accounts as they are performing git operations.
|
||
|
type Key struct {
|
||
|
Comment string `json:"comment"` // comment on the key
|
||
|
CreatedAt time.Time `json:"created_at"` // when key was created
|
||
|
Email string `json:"email"` // deprecated. Please refer to 'comment' instead
|
||
|
Fingerprint string `json:"fingerprint"` // a unique identifying string based on contents
|
||
|
ID string `json:"id"` // unique identifier of this key
|
||
|
PublicKey string `json:"public_key"` // full public_key as uploaded
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when key was updated
|
||
|
}
|
||
|
type KeyCreateOpts struct {
|
||
|
PublicKey string `json:"public_key"` // full public_key as uploaded
|
||
|
}
|
||
|
|
||
|
// Create a new key.
|
||
|
func (s *Service) KeyCreate(o struct {
|
||
|
PublicKey string `json:"public_key"` // full public_key as uploaded
|
||
|
}) (*Key, error) {
|
||
|
var key Key
|
||
|
return &key, s.Post(&key, fmt.Sprintf("/account/keys"), o)
|
||
|
}
|
||
|
|
||
|
// Delete an existing key
|
||
|
func (s *Service) KeyDelete(keyIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/account/keys/%v", keyIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for existing key.
|
||
|
func (s *Service) KeyInfo(keyIdentity string) (*Key, error) {
|
||
|
var key Key
|
||
|
return &key, s.Get(&key, fmt.Sprintf("/account/keys/%v", keyIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing keys.
|
||
|
func (s *Service) KeyList(lr *ListRange) ([]*Key, error) {
|
||
|
var keyList []*Key
|
||
|
return keyList, s.Get(&keyList, fmt.Sprintf("/account/keys"), lr)
|
||
|
}
|
||
|
|
||
|
// [Log
|
||
|
// drains](https://devcenter.heroku.com/articles/logging#syslog-drains)
|
||
|
// provide a way to forward your Heroku logs to an external syslog
|
||
|
// server for long-term archiving. This external service must be
|
||
|
// configured to receive syslog packets from Heroku, whereupon its URL
|
||
|
// can be added to an app using this API. Some addons will add a log
|
||
|
// drain when they are provisioned to an app. These drains can only be
|
||
|
// removed by removing the add-on.
|
||
|
type LogDrain struct {
|
||
|
Addon *struct {
|
||
|
ID string `json:"id"` // unique identifier of add-on
|
||
|
} `json:"addon"` // addon that created the drain
|
||
|
CreatedAt time.Time `json:"created_at"` // when log drain was created
|
||
|
ID string `json:"id"` // unique identifier of this log drain
|
||
|
Token string `json:"token"` // token associated with the log drain
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when log drain was updated
|
||
|
URL string `json:"url"` // url associated with the log drain
|
||
|
}
|
||
|
type LogDrainCreateOpts struct {
|
||
|
URL string `json:"url"` // url associated with the log drain
|
||
|
}
|
||
|
|
||
|
// Create a new log drain.
|
||
|
func (s *Service) LogDrainCreate(appIdentity string, o struct {
|
||
|
URL string `json:"url"` // url associated with the log drain
|
||
|
}) (*LogDrain, error) {
|
||
|
var logDrain LogDrain
|
||
|
return &logDrain, s.Post(&logDrain, fmt.Sprintf("/apps/%v/log-drains", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Delete an existing log drain. Log drains added by add-ons can only be
|
||
|
// removed by removing the add-on.
|
||
|
func (s *Service) LogDrainDelete(appIdentity string, logDrainIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/apps/%v/log-drains/%v", appIdentity, logDrainIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for existing log drain.
|
||
|
func (s *Service) LogDrainInfo(appIdentity string, logDrainIdentity string) (*LogDrain, error) {
|
||
|
var logDrain LogDrain
|
||
|
return &logDrain, s.Get(&logDrain, fmt.Sprintf("/apps/%v/log-drains/%v", appIdentity, logDrainIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing log drains.
|
||
|
func (s *Service) LogDrainList(appIdentity string, lr *ListRange) ([]*LogDrain, error) {
|
||
|
var logDrainList []*LogDrain
|
||
|
return logDrainList, s.Get(&logDrainList, fmt.Sprintf("/apps/%v/log-drains", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
// A log session is a reference to the http based log stream for an app.
|
||
|
type LogSession struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when log connection was created
|
||
|
ID string `json:"id"` // unique identifier of this log session
|
||
|
LogplexURL string `json:"logplex_url"` // URL for log streaming session
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when log session was updated
|
||
|
}
|
||
|
type LogSessionCreateOpts struct {
|
||
|
Dyno *string `json:"dyno,omitempty"` // dyno to limit results to
|
||
|
Lines *int `json:"lines,omitempty"` // number of log lines to stream at once
|
||
|
Source *string `json:"source,omitempty"` // log source to limit results to
|
||
|
Tail *bool `json:"tail,omitempty"` // whether to stream ongoing logs
|
||
|
}
|
||
|
|
||
|
// Create a new log session.
|
||
|
func (s *Service) LogSessionCreate(appIdentity string, o struct {
|
||
|
Dyno *string `json:"dyno,omitempty"` // dyno to limit results to
|
||
|
Lines *int `json:"lines,omitempty"` // number of log lines to stream at once
|
||
|
Source *string `json:"source,omitempty"` // log source to limit results to
|
||
|
Tail *bool `json:"tail,omitempty"` // whether to stream ongoing logs
|
||
|
}) (*LogSession, error) {
|
||
|
var logSession LogSession
|
||
|
return &logSession, s.Post(&logSession, fmt.Sprintf("/apps/%v/log-sessions", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// OAuth authorizations represent clients that a Heroku user has
|
||
|
// authorized to automate, customize or extend their usage of the
|
||
|
// platform. For more information please refer to the [Heroku OAuth
|
||
|
// documentation](https://devcenter.heroku.com/articles/oauth)
|
||
|
type OAuthAuthorization struct {
|
||
|
AccessToken *struct {
|
||
|
ExpiresIn *int `json:"expires_in"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
|
// indefinite lifetime
|
||
|
ID string `json:"id"` // unique identifier of OAuth token
|
||
|
Token string `json:"token"` // contents of the token to be used for authorization
|
||
|
} `json:"access_token"` // access token for this authorization
|
||
|
Client *struct {
|
||
|
ID string `json:"id"` // unique identifier of this OAuth client
|
||
|
Name string `json:"name"` // OAuth client name
|
||
|
RedirectURI string `json:"redirect_uri"` // endpoint for redirection after authorization with OAuth client
|
||
|
} `json:"client"` // identifier of the client that obtained this authorization, if any
|
||
|
CreatedAt time.Time `json:"created_at"` // when OAuth authorization was created
|
||
|
Grant *struct {
|
||
|
Code string `json:"code"` // grant code received from OAuth web application authorization
|
||
|
ExpiresIn int `json:"expires_in"` // seconds until OAuth grant expires
|
||
|
ID string `json:"id"` // unique identifier of OAuth grant
|
||
|
} `json:"grant"` // this authorization's grant
|
||
|
ID string `json:"id"` // unique identifier of OAuth authorization
|
||
|
RefreshToken *struct {
|
||
|
ExpiresIn *int `json:"expires_in"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
|
// indefinite lifetime
|
||
|
ID string `json:"id"` // unique identifier of OAuth token
|
||
|
Token string `json:"token"` // contents of the token to be used for authorization
|
||
|
} `json:"refresh_token"` // refresh token for this authorization
|
||
|
Scope []string `json:"scope"` // The scope of access OAuth authorization allows
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when OAuth authorization was updated
|
||
|
}
|
||
|
type OAuthAuthorizationCreateOpts struct {
|
||
|
Client *string `json:"client,omitempty"` // unique identifier of this OAuth client
|
||
|
Description *string `json:"description,omitempty"` // human-friendly description of this OAuth authorization
|
||
|
ExpiresIn *int `json:"expires_in,omitempty"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
|
// indefinite lifetime
|
||
|
Scope []string `json:"scope"` // The scope of access OAuth authorization allows
|
||
|
}
|
||
|
|
||
|
// Create a new OAuth authorization.
|
||
|
func (s *Service) OAuthAuthorizationCreate(o struct {
|
||
|
Client *string `json:"client,omitempty"` // unique identifier of this OAuth client
|
||
|
Description *string `json:"description,omitempty"` // human-friendly description of this OAuth authorization
|
||
|
ExpiresIn *int `json:"expires_in,omitempty"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
|
// indefinite lifetime
|
||
|
Scope []string `json:"scope"` // The scope of access OAuth authorization allows
|
||
|
}) (*OAuthAuthorization, error) {
|
||
|
var oauthAuthorization OAuthAuthorization
|
||
|
return &oauthAuthorization, s.Post(&oauthAuthorization, fmt.Sprintf("/oauth/authorizations"), o)
|
||
|
}
|
||
|
|
||
|
// Delete OAuth authorization.
|
||
|
func (s *Service) OAuthAuthorizationDelete(oauthAuthorizationIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/oauth/authorizations/%v", oauthAuthorizationIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for an OAuth authorization.
|
||
|
func (s *Service) OAuthAuthorizationInfo(oauthAuthorizationIdentity string) (*OAuthAuthorization, error) {
|
||
|
var oauthAuthorization OAuthAuthorization
|
||
|
return &oauthAuthorization, s.Get(&oauthAuthorization, fmt.Sprintf("/oauth/authorizations/%v", oauthAuthorizationIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List OAuth authorizations.
|
||
|
func (s *Service) OAuthAuthorizationList(lr *ListRange) ([]*OAuthAuthorization, error) {
|
||
|
var oauthAuthorizationList []*OAuthAuthorization
|
||
|
return oauthAuthorizationList, s.Get(&oauthAuthorizationList, fmt.Sprintf("/oauth/authorizations"), lr)
|
||
|
}
|
||
|
|
||
|
// OAuth clients are applications that Heroku users can authorize to
|
||
|
// automate, customize or extend their usage of the platform. For more
|
||
|
// information please refer to the [Heroku OAuth
|
||
|
// documentation](https://devcenter.heroku.com/articles/oauth).
|
||
|
type OAuthClient struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when OAuth client was created
|
||
|
ID string `json:"id"` // unique identifier of this OAuth client
|
||
|
IgnoresDelinquent *bool `json:"ignores_delinquent"` // whether the client is still operable given a delinquent account
|
||
|
Name string `json:"name"` // OAuth client name
|
||
|
RedirectURI string `json:"redirect_uri"` // endpoint for redirection after authorization with OAuth client
|
||
|
Secret string `json:"secret"` // secret used to obtain OAuth authorizations under this client
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when OAuth client was updated
|
||
|
}
|
||
|
type OAuthClientCreateOpts struct {
|
||
|
Name string `json:"name"` // OAuth client name
|
||
|
RedirectURI string `json:"redirect_uri"` // endpoint for redirection after authorization with OAuth client
|
||
|
}
|
||
|
|
||
|
// Create a new OAuth client.
|
||
|
func (s *Service) OAuthClientCreate(o struct {
|
||
|
Name string `json:"name"` // OAuth client name
|
||
|
RedirectURI string `json:"redirect_uri"` // endpoint for redirection after authorization with OAuth client
|
||
|
}) (*OAuthClient, error) {
|
||
|
var oauthClient OAuthClient
|
||
|
return &oauthClient, s.Post(&oauthClient, fmt.Sprintf("/oauth/clients"), o)
|
||
|
}
|
||
|
|
||
|
// Delete OAuth client.
|
||
|
func (s *Service) OAuthClientDelete(oauthClientIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for an OAuth client
|
||
|
func (s *Service) OAuthClientInfo(oauthClientIdentity string) (*OAuthClient, error) {
|
||
|
var oauthClient OAuthClient
|
||
|
return &oauthClient, s.Get(&oauthClient, fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List OAuth clients
|
||
|
func (s *Service) OAuthClientList(lr *ListRange) ([]*OAuthClient, error) {
|
||
|
var oauthClientList []*OAuthClient
|
||
|
return oauthClientList, s.Get(&oauthClientList, fmt.Sprintf("/oauth/clients"), lr)
|
||
|
}
|
||
|
|
||
|
type OAuthClientUpdateOpts struct {
|
||
|
Name *string `json:"name,omitempty"` // OAuth client name
|
||
|
RedirectURI *string `json:"redirect_uri,omitempty"` // endpoint for redirection after authorization with OAuth client
|
||
|
}
|
||
|
|
||
|
// Update OAuth client
|
||
|
func (s *Service) OAuthClientUpdate(oauthClientIdentity string, o struct {
|
||
|
Name *string `json:"name,omitempty"` // OAuth client name
|
||
|
RedirectURI *string `json:"redirect_uri,omitempty"` // endpoint for redirection after authorization with OAuth client
|
||
|
}) (*OAuthClient, error) {
|
||
|
var oauthClient OAuthClient
|
||
|
return &oauthClient, s.Patch(&oauthClient, fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity), o)
|
||
|
}
|
||
|
|
||
|
// OAuth grants are used to obtain authorizations on behalf of a user.
|
||
|
// For more information please refer to the [Heroku OAuth
|
||
|
// documentation](https://devcenter.heroku.com/articles/oauth)
|
||
|
type OAuthGrant struct{}
|
||
|
|
||
|
// OAuth tokens provide access for authorized clients to act on behalf
|
||
|
// of a Heroku user to automate, customize or extend their usage of the
|
||
|
// platform. For more information please refer to the [Heroku OAuth
|
||
|
// documentation](https://devcenter.heroku.com/articles/oauth)
|
||
|
type OAuthToken struct {
|
||
|
AccessToken struct {
|
||
|
ExpiresIn *int `json:"expires_in"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
|
// indefinite lifetime
|
||
|
ID string `json:"id"` // unique identifier of OAuth token
|
||
|
Token string `json:"token"` // contents of the token to be used for authorization
|
||
|
} `json:"access_token"` // current access token
|
||
|
Authorization struct {
|
||
|
ID string `json:"id"` // unique identifier of OAuth authorization
|
||
|
} `json:"authorization"` // authorization for this set of tokens
|
||
|
Client *struct {
|
||
|
Secret string `json:"secret"` // secret used to obtain OAuth authorizations under this client
|
||
|
} `json:"client"` // OAuth client secret used to obtain token
|
||
|
CreatedAt time.Time `json:"created_at"` // when OAuth token was created
|
||
|
Grant struct {
|
||
|
Code string `json:"code"` // grant code received from OAuth web application authorization
|
||
|
Type string `json:"type"` // type of grant requested, one of `authorization_code` or
|
||
|
// `refresh_token`
|
||
|
} `json:"grant"` // grant used on the underlying authorization
|
||
|
ID string `json:"id"` // unique identifier of OAuth token
|
||
|
RefreshToken struct {
|
||
|
ExpiresIn *int `json:"expires_in"` // seconds until OAuth token expires; may be `null` for tokens with
|
||
|
// indefinite lifetime
|
||
|
ID string `json:"id"` // unique identifier of OAuth token
|
||
|
Token string `json:"token"` // contents of the token to be used for authorization
|
||
|
} `json:"refresh_token"` // refresh token for this authorization
|
||
|
Session struct {
|
||
|
ID string `json:"id"` // unique identifier of OAuth token
|
||
|
} `json:"session"` // OAuth session using this token
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when OAuth token was updated
|
||
|
User struct {
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
} `json:"user"` // Reference to the user associated with this token
|
||
|
}
|
||
|
type OAuthTokenCreateOpts struct {
|
||
|
Client struct {
|
||
|
Secret *string `json:"secret,omitempty"` // secret used to obtain OAuth authorizations under this client
|
||
|
} `json:"client"`
|
||
|
Grant struct {
|
||
|
Code *string `json:"code,omitempty"` // grant code received from OAuth web application authorization
|
||
|
Type *string `json:"type,omitempty"` // type of grant requested, one of `authorization_code` or
|
||
|
// `refresh_token`
|
||
|
} `json:"grant"`
|
||
|
RefreshToken struct {
|
||
|
Token *string `json:"token,omitempty"` // contents of the token to be used for authorization
|
||
|
} `json:"refresh_token"`
|
||
|
}
|
||
|
|
||
|
// Create a new OAuth token.
|
||
|
func (s *Service) OAuthTokenCreate(o struct {
|
||
|
Client struct {
|
||
|
Secret *string `json:"secret,omitempty"` // secret used to obtain OAuth authorizations under this client
|
||
|
} `json:"client"`
|
||
|
Grant struct {
|
||
|
Code *string `json:"code,omitempty"` // grant code received from OAuth web application authorization
|
||
|
Type *string `json:"type,omitempty"` // type of grant requested, one of `authorization_code` or
|
||
|
// `refresh_token`
|
||
|
} `json:"grant"`
|
||
|
RefreshToken struct {
|
||
|
Token *string `json:"token,omitempty"` // contents of the token to be used for authorization
|
||
|
} `json:"refresh_token"`
|
||
|
}) (*OAuthToken, error) {
|
||
|
var oauthToken OAuthToken
|
||
|
return &oauthToken, s.Post(&oauthToken, fmt.Sprintf("/oauth/tokens"), o)
|
||
|
}
|
||
|
|
||
|
// Organizations allow you to manage access to a shared group of
|
||
|
// applications across your development team.
|
||
|
type Organization struct {
|
||
|
CreditCardCollections bool `json:"credit_card_collections"` // whether charges incurred by the org are paid by credit card.
|
||
|
Default bool `json:"default"` // whether to use this organization when none is specified
|
||
|
Name string `json:"name"` // unique name of organization
|
||
|
ProvisionedLicenses bool `json:"provisioned_licenses"` // whether the org is provisioned licenses by salesforce.
|
||
|
Role string `json:"role"` // role in the organization
|
||
|
}
|
||
|
|
||
|
// List organizations in which you are a member.
|
||
|
func (s *Service) OrganizationList(lr *ListRange) ([]*Organization, error) {
|
||
|
var organizationList []*Organization
|
||
|
return organizationList, s.Get(&organizationList, fmt.Sprintf("/organizations"), lr)
|
||
|
}
|
||
|
|
||
|
type OrganizationUpdateOpts struct {
|
||
|
Default *bool `json:"default,omitempty"` // whether to use this organization when none is specified
|
||
|
}
|
||
|
|
||
|
// Set or unset the organization as your default organization.
|
||
|
func (s *Service) OrganizationUpdate(organizationIdentity string, o struct {
|
||
|
Default *bool `json:"default,omitempty"` // whether to use this organization when none is specified
|
||
|
}) (*Organization, error) {
|
||
|
var organization Organization
|
||
|
return &organization, s.Patch(&organization, fmt.Sprintf("/organizations/%v", organizationIdentity), o)
|
||
|
}
|
||
|
|
||
|
// An organization app encapsulates the organization specific
|
||
|
// functionality of Heroku apps.
|
||
|
type OrganizationApp struct {
|
||
|
ArchivedAt *time.Time `json:"archived_at"` // when app was archived
|
||
|
BuildpackProvidedDescription *string `json:"buildpack_provided_description"` // description from buildpack of app
|
||
|
CreatedAt time.Time `json:"created_at"` // when app was created
|
||
|
GitURL string `json:"git_url"` // git repo URL of app
|
||
|
ID string `json:"id"` // unique identifier of app
|
||
|
Joined bool `json:"joined"` // is the current member a collaborator on this app.
|
||
|
Locked bool `json:"locked"` // are other organization members forbidden from joining this app.
|
||
|
Maintenance bool `json:"maintenance"` // maintenance status of app
|
||
|
Name string `json:"name"` // unique name of app
|
||
|
Organization *struct {
|
||
|
Name string `json:"name"` // unique name of organization
|
||
|
} `json:"organization"` // organization that owns this app
|
||
|
Owner *struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
} `json:"owner"` // identity of app owner
|
||
|
Region struct {
|
||
|
ID string `json:"id"` // unique identifier of region
|
||
|
Name string `json:"name"` // unique name of region
|
||
|
} `json:"region"` // identity of app region
|
||
|
ReleasedAt *time.Time `json:"released_at"` // when app was released
|
||
|
RepoSize *int `json:"repo_size"` // git repo size in bytes of app
|
||
|
SlugSize *int `json:"slug_size"` // slug size in bytes of app
|
||
|
Stack struct {
|
||
|
ID string `json:"id"` // unique identifier of stack
|
||
|
Name string `json:"name"` // unique name of stack
|
||
|
} `json:"stack"` // identity of app stack
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when app was updated
|
||
|
WebURL string `json:"web_url"` // web URL of app
|
||
|
}
|
||
|
type OrganizationAppCreateOpts struct {
|
||
|
Locked *bool `json:"locked,omitempty"` // are other organization members forbidden from joining this app.
|
||
|
Name *string `json:"name,omitempty"` // unique name of app
|
||
|
Organization *string `json:"organization,omitempty"` // unique name of organization
|
||
|
Personal *bool `json:"personal,omitempty"` // force creation of the app in the user account even if a default org
|
||
|
// is set.
|
||
|
Region *string `json:"region,omitempty"` // unique name of region
|
||
|
Stack *string `json:"stack,omitempty"` // unique name of stack
|
||
|
}
|
||
|
|
||
|
// Create a new app in the specified organization, in the default
|
||
|
// organization if unspecified, or in personal account, if default
|
||
|
// organization is not set.
|
||
|
func (s *Service) OrganizationAppCreate(o struct {
|
||
|
Locked *bool `json:"locked,omitempty"` // are other organization members forbidden from joining this app.
|
||
|
Name *string `json:"name,omitempty"` // unique name of app
|
||
|
Organization *string `json:"organization,omitempty"` // unique name of organization
|
||
|
Personal *bool `json:"personal,omitempty"` // force creation of the app in the user account even if a default org
|
||
|
// is set.
|
||
|
Region *string `json:"region,omitempty"` // unique name of region
|
||
|
Stack *string `json:"stack,omitempty"` // unique name of stack
|
||
|
}) (*OrganizationApp, error) {
|
||
|
var organizationApp OrganizationApp
|
||
|
return &organizationApp, s.Post(&organizationApp, fmt.Sprintf("/organizations/apps"), o)
|
||
|
}
|
||
|
|
||
|
// List apps in the default organization, or in personal account, if
|
||
|
// default organization is not set.
|
||
|
func (s *Service) OrganizationAppList(lr *ListRange) ([]*OrganizationApp, error) {
|
||
|
var organizationAppList []*OrganizationApp
|
||
|
return organizationAppList, s.Get(&organizationAppList, fmt.Sprintf("/organizations/apps"), lr)
|
||
|
}
|
||
|
|
||
|
// List organization apps.
|
||
|
func (s *Service) OrganizationAppListForOrganization(organizationIdentity string, lr *ListRange) ([]*OrganizationApp, error) {
|
||
|
var organizationAppList []*OrganizationApp
|
||
|
return organizationAppList, s.Get(&organizationAppList, fmt.Sprintf("/organizations/%v/apps", organizationIdentity), lr)
|
||
|
}
|
||
|
|
||
|
// Info for an organization app.
|
||
|
func (s *Service) OrganizationAppInfo(organizationAppIdentity string) (*OrganizationApp, error) {
|
||
|
var organizationApp OrganizationApp
|
||
|
return &organizationApp, s.Get(&organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), nil)
|
||
|
}
|
||
|
|
||
|
type OrganizationAppUpdateLockedOpts struct {
|
||
|
Locked bool `json:"locked"` // are other organization members forbidden from joining this app.
|
||
|
}
|
||
|
|
||
|
// Lock or unlock an organization app.
|
||
|
func (s *Service) OrganizationAppUpdateLocked(organizationAppIdentity string, o struct {
|
||
|
Locked bool `json:"locked"` // are other organization members forbidden from joining this app.
|
||
|
}) (*OrganizationApp, error) {
|
||
|
var organizationApp OrganizationApp
|
||
|
return &organizationApp, s.Patch(&organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o)
|
||
|
}
|
||
|
|
||
|
type OrganizationAppTransferToAccountOpts struct {
|
||
|
Owner string `json:"owner"` // unique email address of account
|
||
|
}
|
||
|
|
||
|
// Transfer an existing organization app to another Heroku account.
|
||
|
func (s *Service) OrganizationAppTransferToAccount(organizationAppIdentity string, o struct {
|
||
|
Owner string `json:"owner"` // unique email address of account
|
||
|
}) (*OrganizationApp, error) {
|
||
|
var organizationApp OrganizationApp
|
||
|
return &organizationApp, s.Patch(&organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o)
|
||
|
}
|
||
|
|
||
|
type OrganizationAppTransferToOrganizationOpts struct {
|
||
|
Owner string `json:"owner"` // unique name of organization
|
||
|
}
|
||
|
|
||
|
// Transfer an existing organization app to another organization.
|
||
|
func (s *Service) OrganizationAppTransferToOrganization(organizationAppIdentity string, o struct {
|
||
|
Owner string `json:"owner"` // unique name of organization
|
||
|
}) (*OrganizationApp, error) {
|
||
|
var organizationApp OrganizationApp
|
||
|
return &organizationApp, s.Patch(&organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o)
|
||
|
}
|
||
|
|
||
|
// An organization collaborator represents an account that has been
|
||
|
// given access to an organization app on Heroku.
|
||
|
type OrganizationAppCollaborator struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when collaborator was created
|
||
|
ID string `json:"id"` // unique identifier of collaborator
|
||
|
Role string `json:"role"` // role in the organization
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when collaborator was updated
|
||
|
User struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
} `json:"user"` // identity of collaborated account
|
||
|
}
|
||
|
type OrganizationAppCollaboratorCreateOpts struct {
|
||
|
Silent *bool `json:"silent,omitempty"` // whether to suppress email invitation when creating collaborator
|
||
|
User string `json:"user"` // unique email address of account
|
||
|
}
|
||
|
|
||
|
// Create a new collaborator on an organization app. Use this endpoint
|
||
|
// instead of the `/apps/{app_id_or_name}/collaborator` endpoint when
|
||
|
// you want the collaborator to be granted [privileges]
|
||
|
// (https://devcenter.heroku.com/articles/org-users-access#roles)
|
||
|
// according to their role in the organization.
|
||
|
func (s *Service) OrganizationAppCollaboratorCreate(appIdentity string, o struct {
|
||
|
Silent *bool `json:"silent,omitempty"` // whether to suppress email invitation when creating collaborator
|
||
|
User string `json:"user"` // unique email address of account
|
||
|
}) (*OrganizationAppCollaborator, error) {
|
||
|
var organizationAppCollaborator OrganizationAppCollaborator
|
||
|
return &organizationAppCollaborator, s.Post(&organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Delete an existing collaborator from an organization app.
|
||
|
func (s *Service) OrganizationAppCollaboratorDelete(organizationAppIdentity string, organizationAppCollaboratorIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for a collaborator on an organization app.
|
||
|
func (s *Service) OrganizationAppCollaboratorInfo(organizationAppIdentity string, organizationAppCollaboratorIdentity string) (*OrganizationAppCollaborator, error) {
|
||
|
var organizationAppCollaborator OrganizationAppCollaborator
|
||
|
return &organizationAppCollaborator, s.Get(&organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List collaborators on an organization app.
|
||
|
func (s *Service) OrganizationAppCollaboratorList(organizationAppIdentity string, lr *ListRange) ([]*OrganizationAppCollaborator, error) {
|
||
|
var organizationAppCollaboratorList []*OrganizationAppCollaborator
|
||
|
return organizationAppCollaboratorList, s.Get(&organizationAppCollaboratorList, fmt.Sprintf("/organizations/apps/%v/collaborators", organizationAppIdentity), lr)
|
||
|
}
|
||
|
|
||
|
// An organization member is an individual with access to an
|
||
|
// organization.
|
||
|
type OrganizationMember struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when organization-member was created
|
||
|
Email string `json:"email"` // email address of the organization member
|
||
|
Role string `json:"role"` // role in the organization
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when organization-member was updated
|
||
|
}
|
||
|
type OrganizationMemberCreateOrUpdateOpts struct {
|
||
|
Email string `json:"email"` // email address of the organization member
|
||
|
Role string `json:"role"` // role in the organization
|
||
|
}
|
||
|
|
||
|
// Create a new organization member, or update their role.
|
||
|
func (s *Service) OrganizationMemberCreateOrUpdate(organizationIdentity string, o struct {
|
||
|
Email string `json:"email"` // email address of the organization member
|
||
|
Role string `json:"role"` // role in the organization
|
||
|
}) (*OrganizationMember, error) {
|
||
|
var organizationMember OrganizationMember
|
||
|
return &organizationMember, s.Put(&organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Remove a member from the organization.
|
||
|
func (s *Service) OrganizationMemberDelete(organizationIdentity string, organizationMemberIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/organizations/%v/members/%v", organizationIdentity, organizationMemberIdentity))
|
||
|
}
|
||
|
|
||
|
// List members of the organization.
|
||
|
func (s *Service) OrganizationMemberList(organizationIdentity string, lr *ListRange) ([]*OrganizationMember, error) {
|
||
|
var organizationMemberList []*OrganizationMember
|
||
|
return organizationMemberList, s.Get(&organizationMemberList, fmt.Sprintf("/organizations/%v/members", organizationIdentity), lr)
|
||
|
}
|
||
|
|
||
|
// Plans represent different configurations of add-ons that may be added
|
||
|
// to apps. Endpoints under add-on services can be accessed without
|
||
|
// authentication.
|
||
|
type Plan struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when plan was created
|
||
|
Default bool `json:"default"` // whether this plan is the default for its addon service
|
||
|
Description string `json:"description"` // description of plan
|
||
|
ID string `json:"id"` // unique identifier of this plan
|
||
|
Name string `json:"name"` // unique name of this plan
|
||
|
Price struct {
|
||
|
Cents int `json:"cents"` // price in cents per unit of plan
|
||
|
Unit string `json:"unit"` // unit of price for plan
|
||
|
} `json:"price"` // price
|
||
|
State string `json:"state"` // release status for plan
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when plan was updated
|
||
|
}
|
||
|
|
||
|
// Info for existing plan.
|
||
|
func (s *Service) PlanInfo(addonServiceIdentity string, planIdentity string) (*Plan, error) {
|
||
|
var plan Plan
|
||
|
return &plan, s.Get(&plan, fmt.Sprintf("/addon-services/%v/plans/%v", addonServiceIdentity, planIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing plans.
|
||
|
func (s *Service) PlanList(addonServiceIdentity string, lr *ListRange) ([]*Plan, error) {
|
||
|
var planList []*Plan
|
||
|
return planList, s.Get(&planList, fmt.Sprintf("/addon-services/%v/plans", addonServiceIdentity), lr)
|
||
|
}
|
||
|
|
||
|
// Rate Limit represents the number of request tokens each account
|
||
|
// holds. Requests to this endpoint do not count towards the rate limit.
|
||
|
type RateLimit struct {
|
||
|
Remaining int `json:"remaining"` // allowed requests remaining in current interval
|
||
|
}
|
||
|
|
||
|
// Info for rate limits.
|
||
|
func (s *Service) RateLimitInfo() (*RateLimit, error) {
|
||
|
var rateLimit RateLimit
|
||
|
return &rateLimit, s.Get(&rateLimit, fmt.Sprintf("/account/rate-limits"), nil)
|
||
|
}
|
||
|
|
||
|
// A region represents a geographic location in which your application
|
||
|
// may run.
|
||
|
type Region struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when region was created
|
||
|
Description string `json:"description"` // description of region
|
||
|
ID string `json:"id"` // unique identifier of region
|
||
|
Name string `json:"name"` // unique name of region
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when region was updated
|
||
|
}
|
||
|
|
||
|
// Info for existing region.
|
||
|
func (s *Service) RegionInfo(regionIdentity string) (*Region, error) {
|
||
|
var region Region
|
||
|
return ®ion, s.Get(®ion, fmt.Sprintf("/regions/%v", regionIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing regions.
|
||
|
func (s *Service) RegionList(lr *ListRange) ([]*Region, error) {
|
||
|
var regionList []*Region
|
||
|
return regionList, s.Get(®ionList, fmt.Sprintf("/regions"), lr)
|
||
|
}
|
||
|
|
||
|
// A release represents a combination of code, config vars and add-ons
|
||
|
// for an app on Heroku.
|
||
|
type Release struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when release was created
|
||
|
Description string `json:"description"` // description of changes in this release
|
||
|
ID string `json:"id"` // unique identifier of release
|
||
|
Slug *struct {
|
||
|
ID string `json:"id"` // unique identifier of slug
|
||
|
} `json:"slug"` // slug running in this release
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when release was updated
|
||
|
User struct {
|
||
|
Email string `json:"email"` // unique email address of account
|
||
|
ID string `json:"id"` // unique identifier of an account
|
||
|
} `json:"user"` // user that created the release
|
||
|
Version int `json:"version"` // unique version assigned to the release
|
||
|
}
|
||
|
|
||
|
// Info for existing release.
|
||
|
func (s *Service) ReleaseInfo(appIdentity string, releaseIdentity string) (*Release, error) {
|
||
|
var release Release
|
||
|
return &release, s.Get(&release, fmt.Sprintf("/apps/%v/releases/%v", appIdentity, releaseIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing releases.
|
||
|
func (s *Service) ReleaseList(appIdentity string, lr *ListRange) ([]*Release, error) {
|
||
|
var releaseList []*Release
|
||
|
return releaseList, s.Get(&releaseList, fmt.Sprintf("/apps/%v/releases", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
type ReleaseCreateOpts struct {
|
||
|
Description *string `json:"description,omitempty"` // description of changes in this release
|
||
|
Slug string `json:"slug"` // unique identifier of slug
|
||
|
}
|
||
|
|
||
|
// Create new release. The API cannot be used to create releases on
|
||
|
// Bamboo apps.
|
||
|
func (s *Service) ReleaseCreate(appIdentity string, o struct {
|
||
|
Description *string `json:"description,omitempty"` // description of changes in this release
|
||
|
Slug string `json:"slug"` // unique identifier of slug
|
||
|
}) (*Release, error) {
|
||
|
var release Release
|
||
|
return &release, s.Post(&release, fmt.Sprintf("/apps/%v/releases", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
type ReleaseRollbackOpts struct {
|
||
|
Release string `json:"release"` // unique identifier of release
|
||
|
}
|
||
|
|
||
|
// Rollback to an existing release.
|
||
|
func (s *Service) ReleaseRollback(appIdentity string, o struct {
|
||
|
Release string `json:"release"` // unique identifier of release
|
||
|
}) (*Release, error) {
|
||
|
var release Release
|
||
|
return &release, s.Post(&release, fmt.Sprintf("/apps/%v/releases", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// A slug is a snapshot of your application code that is ready to run on
|
||
|
// the platform.
|
||
|
type Slug struct {
|
||
|
Blob struct {
|
||
|
Method string `json:"method"` // method to be used to interact with the slug blob
|
||
|
URL string `json:"url"` // URL to interact with the slug blob
|
||
|
} `json:"blob"` // pointer to the url where clients can fetch or store the actual
|
||
|
// release binary
|
||
|
BuildpackProvidedDescription *string `json:"buildpack_provided_description"` // description from buildpack of slug
|
||
|
Commit *string `json:"commit"` // identification of the code with your version control system (eg: SHA
|
||
|
// of the git HEAD)
|
||
|
CreatedAt time.Time `json:"created_at"` // when slug was created
|
||
|
ID string `json:"id"` // unique identifier of slug
|
||
|
ProcessTypes map[string]string `json:"process_types"` // hash mapping process type names to their respective command
|
||
|
Size *int `json:"size"` // size of slug, in bytes
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when slug was updated
|
||
|
}
|
||
|
|
||
|
// Info for existing slug.
|
||
|
func (s *Service) SlugInfo(appIdentity string, slugIdentity string) (*Slug, error) {
|
||
|
var slug Slug
|
||
|
return &slug, s.Get(&slug, fmt.Sprintf("/apps/%v/slugs/%v", appIdentity, slugIdentity), nil)
|
||
|
}
|
||
|
|
||
|
type SlugCreateOpts struct {
|
||
|
BuildpackProvidedDescription *string `json:"buildpack_provided_description,omitempty"` // description from buildpack of slug
|
||
|
Commit *string `json:"commit,omitempty"` // identification of the code with your version control system (eg: SHA
|
||
|
// of the git HEAD)
|
||
|
ProcessTypes map[string]string `json:"process_types"` // hash mapping process type names to their respective command
|
||
|
}
|
||
|
|
||
|
// Create a new slug. For more information please refer to [Deploying
|
||
|
// Slugs using the Platform
|
||
|
// API](https://devcenter.heroku.com/articles/platform-api-deploying-slug
|
||
|
// s?preview=1).
|
||
|
func (s *Service) SlugCreate(appIdentity string, o struct {
|
||
|
BuildpackProvidedDescription *string `json:"buildpack_provided_description,omitempty"` // description from buildpack of slug
|
||
|
Commit *string `json:"commit,omitempty"` // identification of the code with your version control system (eg: SHA
|
||
|
// of the git HEAD)
|
||
|
ProcessTypes map[string]string `json:"process_types"` // hash mapping process type names to their respective command
|
||
|
}) (*Slug, error) {
|
||
|
var slug Slug
|
||
|
return &slug, s.Post(&slug, fmt.Sprintf("/apps/%v/slugs", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// [SSL Endpoint](https://devcenter.heroku.com/articles/ssl-endpoint) is
|
||
|
// a public address serving custom SSL cert for HTTPS traffic to a
|
||
|
// Heroku app. Note that an app must have the `ssl:endpoint` addon
|
||
|
// installed before it can provision an SSL Endpoint using these APIs.
|
||
|
type SSLEndpoint struct {
|
||
|
CertificateChain string `json:"certificate_chain"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
|
CName string `json:"cname"` // canonical name record, the address to point a domain at
|
||
|
CreatedAt time.Time `json:"created_at"` // when endpoint was created
|
||
|
ID string `json:"id"` // unique identifier of this SSL endpoint
|
||
|
Name string `json:"name"` // unique name for SSL endpoint
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when endpoint was updated
|
||
|
}
|
||
|
type SSLEndpointCreateOpts struct {
|
||
|
CertificateChain string `json:"certificate_chain"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
|
Preprocess *bool `json:"preprocess,omitempty"` // allow Heroku to modify an uploaded public certificate chain if deemed
|
||
|
// advantageous by adding missing intermediaries, stripping unnecessary
|
||
|
// ones, etc.
|
||
|
PrivateKey string `json:"private_key"` // contents of the private key (eg .key file)
|
||
|
}
|
||
|
|
||
|
// Create a new SSL endpoint.
|
||
|
func (s *Service) SSLEndpointCreate(appIdentity string, o struct {
|
||
|
CertificateChain string `json:"certificate_chain"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
|
Preprocess *bool `json:"preprocess,omitempty"` // allow Heroku to modify an uploaded public certificate chain if deemed
|
||
|
// advantageous by adding missing intermediaries, stripping unnecessary
|
||
|
// ones, etc.
|
||
|
PrivateKey string `json:"private_key"` // contents of the private key (eg .key file)
|
||
|
}) (*SSLEndpoint, error) {
|
||
|
var sslEndpoint SSLEndpoint
|
||
|
return &sslEndpoint, s.Post(&sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints", appIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Delete existing SSL endpoint.
|
||
|
func (s *Service) SSLEndpointDelete(appIdentity string, sslEndpointIdentity string) error {
|
||
|
return s.Delete(fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity))
|
||
|
}
|
||
|
|
||
|
// Info for existing SSL endpoint.
|
||
|
func (s *Service) SSLEndpointInfo(appIdentity string, sslEndpointIdentity string) (*SSLEndpoint, error) {
|
||
|
var sslEndpoint SSLEndpoint
|
||
|
return &sslEndpoint, s.Get(&sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List existing SSL endpoints.
|
||
|
func (s *Service) SSLEndpointList(appIdentity string, lr *ListRange) ([]*SSLEndpoint, error) {
|
||
|
var sslEndpointList []*SSLEndpoint
|
||
|
return sslEndpointList, s.Get(&sslEndpointList, fmt.Sprintf("/apps/%v/ssl-endpoints", appIdentity), lr)
|
||
|
}
|
||
|
|
||
|
type SSLEndpointUpdateOpts struct {
|
||
|
CertificateChain *string `json:"certificate_chain,omitempty"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
|
Preprocess *bool `json:"preprocess,omitempty"` // allow Heroku to modify an uploaded public certificate chain if deemed
|
||
|
// advantageous by adding missing intermediaries, stripping unnecessary
|
||
|
// ones, etc.
|
||
|
PrivateKey *string `json:"private_key,omitempty"` // contents of the private key (eg .key file)
|
||
|
Rollback *bool `json:"rollback,omitempty"` // indicates that a rollback should be performed
|
||
|
}
|
||
|
|
||
|
// Update an existing SSL endpoint.
|
||
|
func (s *Service) SSLEndpointUpdate(appIdentity string, sslEndpointIdentity string, o struct {
|
||
|
CertificateChain *string `json:"certificate_chain,omitempty"` // raw contents of the public certificate chain (eg: .crt or .pem file)
|
||
|
Preprocess *bool `json:"preprocess,omitempty"` // allow Heroku to modify an uploaded public certificate chain if deemed
|
||
|
// advantageous by adding missing intermediaries, stripping unnecessary
|
||
|
// ones, etc.
|
||
|
PrivateKey *string `json:"private_key,omitempty"` // contents of the private key (eg .key file)
|
||
|
Rollback *bool `json:"rollback,omitempty"` // indicates that a rollback should be performed
|
||
|
}) (*SSLEndpoint, error) {
|
||
|
var sslEndpoint SSLEndpoint
|
||
|
return &sslEndpoint, s.Patch(&sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity), o)
|
||
|
}
|
||
|
|
||
|
// Stacks are the different application execution environments available
|
||
|
// in the Heroku platform.
|
||
|
type Stack struct {
|
||
|
CreatedAt time.Time `json:"created_at"` // when stack was introduced
|
||
|
ID string `json:"id"` // unique identifier of stack
|
||
|
Name string `json:"name"` // unique name of stack
|
||
|
State string `json:"state"` // availability of this stack: beta, deprecated or public
|
||
|
UpdatedAt time.Time `json:"updated_at"` // when stack was last modified
|
||
|
}
|
||
|
|
||
|
// Stack info.
|
||
|
func (s *Service) StackInfo(stackIdentity string) (*Stack, error) {
|
||
|
var stack Stack
|
||
|
return &stack, s.Get(&stack, fmt.Sprintf("/stacks/%v", stackIdentity), nil)
|
||
|
}
|
||
|
|
||
|
// List available stacks.
|
||
|
func (s *Service) StackList(lr *ListRange) ([]*Stack, error) {
|
||
|
var stackList []*Stack
|
||
|
return stackList, s.Get(&stackList, fmt.Sprintf("/stacks"), lr)
|
||
|
}
|
||
|
|