diff --git a/pkg/credentials/git_credential.go b/pkg/credentials/git_credential.go index 2e06dfcc..ea1b30a7 100644 --- a/pkg/credentials/git_credential.go +++ b/pkg/credentials/git_credential.go @@ -7,5 +7,5 @@ type GitCredential interface { // gitCredential is the embedded struct used for Git credentials. type gitCredential struct { - CredentialType Type `json:"Type" validate:"omitempty,oneof=Anonymous Reference UsernamePassword"` + CredentialType Type `json:"Type" validate:"omitempty,oneof=Anonymous GitHub Reference UsernamePassword"` } diff --git a/pkg/credentials/github_app.go b/pkg/credentials/github_app.go new file mode 100644 index 00000000..846bf947 --- /dev/null +++ b/pkg/credentials/github_app.go @@ -0,0 +1,25 @@ +package credentials + +// GitHubApp defines a GitHub App connection Git credential. +type GitHubApp struct { + ID string `json:"Id"` + + gitCredential +} + +// NewGitHubApp creates and initializes a GitHub App Git credential. +func NewGitHubApp(id string) *GitHubApp { + return &GitHubApp{ + ID: id, + gitCredential: gitCredential{ + CredentialType: GitCredentialTypeGitHubApp, + }, + } +} + +// Type returns the type for this Git credential. +func (g *GitHubApp) Type() Type { + return g.CredentialType +} + +var _ GitCredential = &GitHubApp{} diff --git a/pkg/credentials/resource.go b/pkg/credentials/resource.go index 85f24d16..9d154164 100644 --- a/pkg/credentials/resource.go +++ b/pkg/credentials/resource.go @@ -109,6 +109,12 @@ func (r *Resource) UnmarshalJSON(b []byte) error { return err } r.Details = usernamePasswordGitCredential + case GitCredentialTypeGitHubApp: + var gitHubAppGitCredential *GitHubApp + if err := json.Unmarshal(*gitCredentials, &gitHubAppGitCredential); err != nil { + return err + } + r.Details = gitHubAppGitCredential } return nil diff --git a/pkg/credentials/types.go b/pkg/credentials/types.go index 22b959dc..bd3839f5 100644 --- a/pkg/credentials/types.go +++ b/pkg/credentials/types.go @@ -4,6 +4,7 @@ type Type string const ( GitCredentialTypeAnonymous = Type("Anonymous") + GitCredentialTypeGitHubApp = Type("GitHub") GitCredentialTypeReference = Type("Reference") GitCredentialTypeUsernamePassword = Type("UsernamePassword") ) diff --git a/pkg/projects/git_persistence_settings.go b/pkg/projects/git_persistence_settings.go index 68819509..47e1eb93 100644 --- a/pkg/projects/git_persistence_settings.go +++ b/pkg/projects/git_persistence_settings.go @@ -251,6 +251,13 @@ func (p *gitPersistenceSettings) UnmarshalJSON(b []byte) error { return err } p.credential = usernamePasswordGitCredential + case credentials.GitCredentialTypeGitHubApp: + var gitHubAppGitCredential *credentials.GitHubApp + err := json.Unmarshal(*gitCredentials, &gitHubAppGitCredential) + if err != nil { + return err + } + p.credential = gitHubAppGitCredential } var conversionState *json.RawMessage