You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

alm-settings.ts 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2022 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. export const enum AlmKeys {
  21. Azure = 'azure',
  22. BitbucketServer = 'bitbucket',
  23. BitbucketCloud = 'bitbucketcloud',
  24. GitHub = 'github',
  25. GitLab = 'gitlab'
  26. }
  27. export type AlmBindingDefinition =
  28. | AzureBindingDefinition
  29. | GithubBindingDefinition
  30. | GitlabBindingDefinition
  31. | BitbucketServerBindingDefinition
  32. | BitbucketCloudBindingDefinition;
  33. export interface AlmBindingDefinitionBase {
  34. key: string;
  35. url?: string;
  36. }
  37. export interface AzureBindingDefinition extends AlmBindingDefinitionBase {
  38. personalAccessToken: string;
  39. url?: string;
  40. }
  41. export interface BitbucketServerBindingDefinition extends AlmBindingDefinitionBase {
  42. personalAccessToken: string;
  43. url: string;
  44. }
  45. export interface BitbucketCloudBindingDefinition extends AlmBindingDefinitionBase {
  46. clientId: string;
  47. clientSecret: string;
  48. workspace: string;
  49. }
  50. export interface GithubBindingDefinition extends AlmBindingDefinitionBase {
  51. appId: string;
  52. clientId: string;
  53. clientSecret: string;
  54. privateKey: string;
  55. url: string;
  56. }
  57. export interface GitlabBindingDefinition extends AlmBindingDefinitionBase {
  58. personalAccessToken: string;
  59. url?: string;
  60. }
  61. export interface ProjectAlmBindingResponse {
  62. alm: AlmKeys;
  63. key: string;
  64. repository?: string;
  65. slug?: string;
  66. summaryCommentEnabled?: boolean;
  67. monorepo: boolean;
  68. }
  69. export interface ProjectAzureBindingResponse extends ProjectAlmBindingResponse {
  70. alm: AlmKeys.Azure;
  71. repository: string;
  72. slug: string;
  73. url: string;
  74. }
  75. export interface ProjectBitbucketBindingResponse extends ProjectAlmBindingResponse {
  76. alm: AlmKeys.BitbucketServer;
  77. repository: string;
  78. slug: string;
  79. }
  80. export interface ProjectBitbucketCloudBindingResponse extends ProjectAlmBindingResponse {
  81. alm: AlmKeys.BitbucketCloud;
  82. repository: string;
  83. }
  84. export interface ProjectGitHubBindingResponse extends ProjectAlmBindingResponse {
  85. alm: AlmKeys.GitHub;
  86. repository: string;
  87. }
  88. export interface ProjectGitLabBindingResponse extends ProjectAlmBindingResponse {
  89. alm: AlmKeys.GitLab;
  90. repository: string;
  91. url: string;
  92. }
  93. export interface ProjectAlmBindingParams {
  94. almSetting: string;
  95. project: string;
  96. monorepo: boolean;
  97. }
  98. export interface AzureProjectAlmBindingParams extends ProjectAlmBindingParams {
  99. projectName: string;
  100. repositoryName: string;
  101. }
  102. export interface BitbucketProjectAlmBindingParams extends ProjectAlmBindingParams {
  103. repository: string;
  104. slug: string;
  105. }
  106. export interface BitbucketCloudProjectAlmBindingParams extends ProjectAlmBindingParams {
  107. repository: string;
  108. }
  109. export interface GithubProjectAlmBindingParams extends ProjectAlmBindingParams {
  110. repository: string;
  111. summaryCommentEnabled: boolean;
  112. }
  113. export interface GitlabProjectAlmBindingParams extends ProjectAlmBindingParams {
  114. repository?: string;
  115. }
  116. export interface AlmSettingsInstance {
  117. alm: AlmKeys;
  118. key: string;
  119. url?: string;
  120. }
  121. export interface AlmSettingsBindingDefinitions {
  122. [AlmKeys.Azure]: AzureBindingDefinition[];
  123. [AlmKeys.BitbucketServer]: BitbucketServerBindingDefinition[];
  124. [AlmKeys.BitbucketCloud]: BitbucketCloudBindingDefinition[];
  125. [AlmKeys.GitHub]: GithubBindingDefinition[];
  126. [AlmKeys.GitLab]: GitlabBindingDefinition[];
  127. }
  128. export interface AlmSettingsBindingStatus {
  129. alertSuccess: boolean;
  130. failureMessage: string;
  131. type: AlmSettingsBindingStatusType;
  132. }
  133. export enum AlmSettingsBindingStatusType {
  134. Validating,
  135. Success,
  136. Failure,
  137. Warning
  138. }
  139. export enum ProjectAlmBindingConfigurationErrorScope {
  140. Global = 'GLOBAL',
  141. Project = 'PROJECT',
  142. Unknown = 'UNKNOWN'
  143. }
  144. export interface ProjectAlmBindingConfigurationErrors {
  145. scope: ProjectAlmBindingConfigurationErrorScope;
  146. errors: { msg: string }[];
  147. }
  148. export function isProjectBitbucketBindingResponse(
  149. binding: ProjectAlmBindingResponse
  150. ): binding is ProjectBitbucketBindingResponse {
  151. return binding.alm === AlmKeys.BitbucketServer;
  152. }
  153. export function isProjectBitbucketCloudBindingResponse(
  154. binding: ProjectAlmBindingResponse
  155. ): binding is ProjectBitbucketBindingResponse {
  156. return binding.alm === AlmKeys.BitbucketCloud;
  157. }
  158. export function isProjectGitHubBindingResponse(
  159. binding: ProjectAlmBindingResponse
  160. ): binding is ProjectGitHubBindingResponse {
  161. return binding.alm === AlmKeys.GitHub;
  162. }
  163. export function isProjectGitLabBindingResponse(
  164. binding: ProjectAlmBindingResponse
  165. ): binding is ProjectGitLabBindingResponse {
  166. return binding.alm === AlmKeys.GitLab;
  167. }
  168. export function isProjectAzureBindingResponse(
  169. binding: ProjectAlmBindingResponse
  170. ): binding is ProjectAzureBindingResponse {
  171. return binding.alm === AlmKeys.Azure;
  172. }
  173. export function isBitbucketBindingDefinition(
  174. binding?: AlmBindingDefinitionBase & { url?: string }
  175. ): binding is BitbucketServerBindingDefinition {
  176. return binding !== undefined && binding.url !== undefined;
  177. }
  178. export function isBitbucketCloudBindingDefinition(
  179. binding?: AlmBindingDefinitionBase & { clientId?: string; workspace?: string }
  180. ): binding is BitbucketCloudBindingDefinition {
  181. return binding !== undefined && binding.clientId !== undefined && binding.workspace !== undefined;
  182. }
  183. export function isGithubBindingDefinition(
  184. binding?: AlmBindingDefinitionBase & { appId?: string; url?: string }
  185. ): binding is GithubBindingDefinition {
  186. return binding !== undefined && binding.appId !== undefined && binding.url !== undefined;
  187. }
  188. export function isGitLabBindingDefinition(
  189. binding?: AlmBindingDefinitionBase | GithubBindingDefinition | BitbucketCloudBindingDefinition
  190. ): binding is GitlabBindingDefinition {
  191. // There's too much overlap with the others. We must not only validate that certain fields are
  192. // present, we must also validate that others are NOT present. And even so, we cannot be 100%
  193. // sure, as right now, Azure, Bitbucket Server, and GitLab have the same signature.
  194. return (
  195. binding !== undefined &&
  196. (binding as GithubBindingDefinition).appId === undefined &&
  197. (binding as BitbucketCloudBindingDefinition).workspace === undefined
  198. );
  199. }