@backstage-community/plugin-cicd-statistics-module-buildkite 0.0.4 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @backstage-community/plugin-cicd-statistics-module-buildkite
2
2
 
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 43cf7dc: remove unused dependencies: p-limit and luxon
8
+
9
+ ## 0.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - b0190ad: Backstage version bump to v1.34.1
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [b0190ad]
18
+ - @backstage-community/plugin-cicd-statistics@0.2.0
19
+
3
20
  ## 0.0.4
4
21
 
5
22
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"buildkite.esm.js","sources":["../../src/api/buildkite.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api';\nimport {\n CicdStatisticsApi,\n CicdState,\n CicdConfiguration,\n CicdDefaults,\n FetchBuildsOptions,\n FilterStatusType,\n} from '@backstage-community/plugin-cicd-statistics';\nimport { Entity } from '@backstage/catalog-model';\nimport { toBuilds, buildStatusMap } from './utils';\nimport { BuildkiteApi } from '@roadiehq/backstage-plugin-buildkite';\n\n/**\n * BuildkiteClient represents an initialized Buildkite client.\n *\n * @public\n */\nexport type BuildkiteClient = {\n /* the actual API */\n api: InstanceType<typeof BuildkiteApi>;\n\n /* the Buildkite organization; retrieved from the entity */\n org: string;\n\n /* the Buildkite pipeline name; retrieved from the entity */\n pipeline: string;\n};\n\n/**\n * CicdStatisticsApiBuildkiteOpts configures a new CicdStatisticsApiBuildkite.\n *\n * @public\n */\nexport type CicdStatisticsApiBuildkiteOpts = {\n /* the DiscoveryApi to use */\n discoveryApi: DiscoveryApi;\n\n /* the FetchApi to use */\n fetchApi: FetchApi;\n\n /* the CicdDefaults to use */\n cicdDefaults?: Partial<CicdDefaults>;\n\n /* the path to the Buildkite API Backstage backend proxy endpoint */\n proxyPath?: string;\n};\n\n/**\n * Extracts the CI/CD statistics from a Buildkite pipeline.\n *\n * @public\n */\nexport class CicdStatisticsApiBuildkite implements CicdStatisticsApi {\n readonly #cicdDefaults: Partial<CicdDefaults>;\n readonly #discoveryApi: DiscoveryApi;\n readonly #fetchApi: FetchApi;\n readonly #proxyPath?: string;\n\n constructor(opts: CicdStatisticsApiBuildkiteOpts) {\n this.#cicdDefaults = opts.cicdDefaults ? opts.cicdDefaults : {};\n this.#discoveryApi = opts.discoveryApi;\n this.#fetchApi = opts.fetchApi;\n this.#proxyPath = opts.proxyPath;\n }\n\n public async createBuildkiteApi(entity: Entity): Promise<BuildkiteClient> {\n const pipelineAnnotation =\n entity.metadata.annotations?.['buildkite.com/pipeline'] || '';\n const pipelineParts = pipelineAnnotation.split('/');\n const org = pipelineParts[0];\n const pipeline = pipelineParts[1] ? pipelineParts[1] : '';\n\n return {\n api: new BuildkiteApi({\n discoveryApi: this.#discoveryApi,\n fetchApi: this.#fetchApi,\n proxyPath: this.#proxyPath,\n }),\n org,\n pipeline,\n };\n }\n\n public async fetchBuilds(options: FetchBuildsOptions): Promise<CicdState> {\n const {\n entity,\n updateProgress,\n filterStatus = ['all'],\n filterType = 'all',\n } = options;\n const { api, org, pipeline } = await this.createBuildkiteApi(entity);\n updateProgress(0, 0, 0);\n\n // Note the cicd-statistics plugin regards 'master' as a generic term\n // referring to a particular default 'trunk' branch, and not necessarily\n // the literal 'master' branch name.\n const branch =\n filterType === 'master'\n ? await this.getDefaultBranch(api, org, pipeline)\n : undefined;\n const bkBuilds = await api.getBuilds(org, pipeline, 0, 25, branch);\n const builds = toBuilds(bkBuilds);\n const filteredBuilds = builds.filter(\n b => filterStatus.includes('all') || filterStatus.includes(b.status),\n );\n\n return { builds: filteredBuilds };\n }\n\n public async getConfiguration(): Promise<Partial<CicdConfiguration>> {\n return {\n availableStatuses: Object.keys(\n buildStatusMap,\n ) as ReadonlyArray<FilterStatusType>,\n defaults: this.#cicdDefaults,\n };\n }\n\n private async getDefaultBranch(\n api: BuildkiteApi,\n org: string,\n pipelineName: string,\n ): Promise<string> {\n const pipeline = await api.getPipeline(org, pipelineName);\n\n return pipeline.default_branch;\n }\n}\n"],"names":[],"mappings":";;;AAqEO,MAAM,0BAAwD,CAAA;AAAA,EAC1D,aAAA,CAAA;AAAA,EACA,aAAA,CAAA;AAAA,EACA,SAAA,CAAA;AAAA,EACA,UAAA,CAAA;AAAA,EAET,YAAY,IAAsC,EAAA;AAChD,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAK,YAAe,GAAA,IAAA,CAAK,eAAe,EAAC,CAAA;AAC9D,IAAA,IAAA,CAAK,gBAAgB,IAAK,CAAA,YAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,YAAY,IAAK,CAAA,QAAA,CAAA;AACtB,IAAA,IAAA,CAAK,aAAa,IAAK,CAAA,SAAA,CAAA;AAAA,GACzB;AAAA,EAEA,MAAa,mBAAmB,MAA0C,EAAA;AACxE,IAAA,MAAM,kBACJ,GAAA,MAAA,CAAO,QAAS,CAAA,WAAA,GAAc,wBAAwB,CAAK,IAAA,EAAA,CAAA;AAC7D,IAAM,MAAA,aAAA,GAAgB,kBAAmB,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAClD,IAAM,MAAA,GAAA,GAAM,cAAc,CAAC,CAAA,CAAA;AAC3B,IAAA,MAAM,WAAW,aAAc,CAAA,CAAC,CAAI,GAAA,aAAA,CAAc,CAAC,CAAI,GAAA,EAAA,CAAA;AAEvD,IAAO,OAAA;AAAA,MACL,GAAA,EAAK,IAAI,YAAa,CAAA;AAAA,QACpB,cAAc,IAAK,CAAA,aAAA;AAAA,QACnB,UAAU,IAAK,CAAA,SAAA;AAAA,QACf,WAAW,IAAK,CAAA,UAAA;AAAA,OACjB,CAAA;AAAA,MACD,GAAA;AAAA,MACA,QAAA;AAAA,KACF,CAAA;AAAA,GACF;AAAA,EAEA,MAAa,YAAY,OAAiD,EAAA;AACxE,IAAM,MAAA;AAAA,MACJ,MAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA,GAAe,CAAC,KAAK,CAAA;AAAA,MACrB,UAAa,GAAA,KAAA;AAAA,KACX,GAAA,OAAA,CAAA;AACJ,IAAM,MAAA,EAAE,KAAK,GAAK,EAAA,QAAA,KAAa,MAAM,IAAA,CAAK,mBAAmB,MAAM,CAAA,CAAA;AACnE,IAAe,cAAA,CAAA,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAKtB,IAAM,MAAA,MAAA,GACJ,eAAe,QACX,GAAA,MAAM,KAAK,gBAAiB,CAAA,GAAA,EAAK,GAAK,EAAA,QAAQ,CAC9C,GAAA,KAAA,CAAA,CAAA;AACN,IAAM,MAAA,QAAA,GAAW,MAAM,GAAI,CAAA,SAAA,CAAU,KAAK,QAAU,EAAA,CAAA,EAAG,IAAI,MAAM,CAAA,CAAA;AACjE,IAAM,MAAA,MAAA,GAAS,SAAS,QAAQ,CAAA,CAAA;AAChC,IAAA,MAAM,iBAAiB,MAAO,CAAA,MAAA;AAAA,MAC5B,CAAA,CAAA,KAAK,aAAa,QAAS,CAAA,KAAK,KAAK,YAAa,CAAA,QAAA,CAAS,EAAE,MAAM,CAAA;AAAA,KACrE,CAAA;AAEA,IAAO,OAAA,EAAE,QAAQ,cAAe,EAAA,CAAA;AAAA,GAClC;AAAA,EAEA,MAAa,gBAAwD,GAAA;AACnE,IAAO,OAAA;AAAA,MACL,mBAAmB,MAAO,CAAA,IAAA;AAAA,QACxB,cAAA;AAAA,OACF;AAAA,MACA,UAAU,IAAK,CAAA,aAAA;AAAA,KACjB,CAAA;AAAA,GACF;AAAA,EAEA,MAAc,gBAAA,CACZ,GACA,EAAA,GAAA,EACA,YACiB,EAAA;AACjB,IAAA,MAAM,QAAW,GAAA,MAAM,GAAI,CAAA,WAAA,CAAY,KAAK,YAAY,CAAA,CAAA;AAExD,IAAA,OAAO,QAAS,CAAA,cAAA,CAAA;AAAA,GAClB;AACF;;;;"}
1
+ {"version":3,"file":"buildkite.esm.js","sources":["../../src/api/buildkite.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api';\nimport {\n CicdStatisticsApi,\n CicdState,\n CicdConfiguration,\n CicdDefaults,\n FetchBuildsOptions,\n FilterStatusType,\n} from '@backstage-community/plugin-cicd-statistics';\nimport { Entity } from '@backstage/catalog-model';\nimport { toBuilds, buildStatusMap } from './utils';\nimport { BuildkiteApi } from '@roadiehq/backstage-plugin-buildkite';\n\n/**\n * BuildkiteClient represents an initialized Buildkite client.\n *\n * @public\n */\nexport type BuildkiteClient = {\n /* the actual API */\n api: InstanceType<typeof BuildkiteApi>;\n\n /* the Buildkite organization; retrieved from the entity */\n org: string;\n\n /* the Buildkite pipeline name; retrieved from the entity */\n pipeline: string;\n};\n\n/**\n * CicdStatisticsApiBuildkiteOpts configures a new CicdStatisticsApiBuildkite.\n *\n * @public\n */\nexport type CicdStatisticsApiBuildkiteOpts = {\n /* the DiscoveryApi to use */\n discoveryApi: DiscoveryApi;\n\n /* the FetchApi to use */\n fetchApi: FetchApi;\n\n /* the CicdDefaults to use */\n cicdDefaults?: Partial<CicdDefaults>;\n\n /* the path to the Buildkite API Backstage backend proxy endpoint */\n proxyPath?: string;\n};\n\n/**\n * Extracts the CI/CD statistics from a Buildkite pipeline.\n *\n * @public\n */\nexport class CicdStatisticsApiBuildkite implements CicdStatisticsApi {\n readonly #cicdDefaults: Partial<CicdDefaults>;\n readonly #discoveryApi: DiscoveryApi;\n readonly #fetchApi: FetchApi;\n readonly #proxyPath?: string;\n\n constructor(opts: CicdStatisticsApiBuildkiteOpts) {\n this.#cicdDefaults = opts.cicdDefaults ? opts.cicdDefaults : {};\n this.#discoveryApi = opts.discoveryApi;\n this.#fetchApi = opts.fetchApi;\n this.#proxyPath = opts.proxyPath;\n }\n\n public async createBuildkiteApi(entity: Entity): Promise<BuildkiteClient> {\n const pipelineAnnotation =\n entity.metadata.annotations?.['buildkite.com/pipeline'] || '';\n const pipelineParts = pipelineAnnotation.split('/');\n const org = pipelineParts[0];\n const pipeline = pipelineParts[1] ? pipelineParts[1] : '';\n\n return {\n api: new BuildkiteApi({\n discoveryApi: this.#discoveryApi,\n fetchApi: this.#fetchApi,\n proxyPath: this.#proxyPath,\n }),\n org,\n pipeline,\n };\n }\n\n public async fetchBuilds(options: FetchBuildsOptions): Promise<CicdState> {\n const {\n entity,\n updateProgress,\n filterStatus = ['all'],\n filterType = 'all',\n } = options;\n const { api, org, pipeline } = await this.createBuildkiteApi(entity);\n updateProgress(0, 0, 0);\n\n // Note the cicd-statistics plugin regards 'master' as a generic term\n // referring to a particular default 'trunk' branch, and not necessarily\n // the literal 'master' branch name.\n const branch =\n filterType === 'master'\n ? await this.getDefaultBranch(api, org, pipeline)\n : undefined;\n const bkBuilds = await api.getBuilds(org, pipeline, 0, 25, branch);\n const builds = toBuilds(bkBuilds);\n const filteredBuilds = builds.filter(\n b => filterStatus.includes('all') || filterStatus.includes(b.status),\n );\n\n return { builds: filteredBuilds };\n }\n\n public async getConfiguration(): Promise<Partial<CicdConfiguration>> {\n return {\n availableStatuses: Object.keys(\n buildStatusMap,\n ) as ReadonlyArray<FilterStatusType>,\n defaults: this.#cicdDefaults,\n };\n }\n\n private async getDefaultBranch(\n api: BuildkiteApi,\n org: string,\n pipelineName: string,\n ): Promise<string> {\n const pipeline = await api.getPipeline(org, pipelineName);\n\n return pipeline.default_branch;\n }\n}\n"],"names":[],"mappings":";;;AAqEO,MAAM,0BAAwD,CAAA;AAAA,EAC1D,aAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EAET,YAAY,IAAsC,EAAA;AAChD,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAK,YAAe,GAAA,IAAA,CAAK,eAAe,EAAC;AAC9D,IAAA,IAAA,CAAK,gBAAgB,IAAK,CAAA,YAAA;AAC1B,IAAA,IAAA,CAAK,YAAY,IAAK,CAAA,QAAA;AACtB,IAAA,IAAA,CAAK,aAAa,IAAK,CAAA,SAAA;AAAA;AACzB,EAEA,MAAa,mBAAmB,MAA0C,EAAA;AACxE,IAAA,MAAM,kBACJ,GAAA,MAAA,CAAO,QAAS,CAAA,WAAA,GAAc,wBAAwB,CAAK,IAAA,EAAA;AAC7D,IAAM,MAAA,aAAA,GAAgB,kBAAmB,CAAA,KAAA,CAAM,GAAG,CAAA;AAClD,IAAM,MAAA,GAAA,GAAM,cAAc,CAAC,CAAA;AAC3B,IAAA,MAAM,WAAW,aAAc,CAAA,CAAC,CAAI,GAAA,aAAA,CAAc,CAAC,CAAI,GAAA,EAAA;AAEvD,IAAO,OAAA;AAAA,MACL,GAAA,EAAK,IAAI,YAAa,CAAA;AAAA,QACpB,cAAc,IAAK,CAAA,aAAA;AAAA,QACnB,UAAU,IAAK,CAAA,SAAA;AAAA,QACf,WAAW,IAAK,CAAA;AAAA,OACjB,CAAA;AAAA,MACD,GAAA;AAAA,MACA;AAAA,KACF;AAAA;AACF,EAEA,MAAa,YAAY,OAAiD,EAAA;AACxE,IAAM,MAAA;AAAA,MACJ,MAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA,GAAe,CAAC,KAAK,CAAA;AAAA,MACrB,UAAa,GAAA;AAAA,KACX,GAAA,OAAA;AACJ,IAAM,MAAA,EAAE,KAAK,GAAK,EAAA,QAAA,KAAa,MAAM,IAAA,CAAK,mBAAmB,MAAM,CAAA;AACnE,IAAe,cAAA,CAAA,CAAA,EAAG,GAAG,CAAC,CAAA;AAKtB,IAAM,MAAA,MAAA,GACJ,eAAe,QACX,GAAA,MAAM,KAAK,gBAAiB,CAAA,GAAA,EAAK,GAAK,EAAA,QAAQ,CAC9C,GAAA,KAAA,CAAA;AACN,IAAM,MAAA,QAAA,GAAW,MAAM,GAAI,CAAA,SAAA,CAAU,KAAK,QAAU,EAAA,CAAA,EAAG,IAAI,MAAM,CAAA;AACjE,IAAM,MAAA,MAAA,GAAS,SAAS,QAAQ,CAAA;AAChC,IAAA,MAAM,iBAAiB,MAAO,CAAA,MAAA;AAAA,MAC5B,CAAA,CAAA,KAAK,aAAa,QAAS,CAAA,KAAK,KAAK,YAAa,CAAA,QAAA,CAAS,EAAE,MAAM;AAAA,KACrE;AAEA,IAAO,OAAA,EAAE,QAAQ,cAAe,EAAA;AAAA;AAClC,EAEA,MAAa,gBAAwD,GAAA;AACnE,IAAO,OAAA;AAAA,MACL,mBAAmB,MAAO,CAAA,IAAA;AAAA,QACxB;AAAA,OACF;AAAA,MACA,UAAU,IAAK,CAAA;AAAA,KACjB;AAAA;AACF,EAEA,MAAc,gBAAA,CACZ,GACA,EAAA,GAAA,EACA,YACiB,EAAA;AACjB,IAAA,MAAM,QAAW,GAAA,MAAM,GAAI,CAAA,WAAA,CAAY,KAAK,YAAY,CAAA;AAExD,IAAA,OAAO,QAAS,CAAA,cAAA;AAAA;AAEpB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.esm.js","sources":["../../src/api/utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Build,\n FilterStatusType,\n FilterBranchType,\n TriggerReason,\n Stage,\n} from '@backstage-community/plugin-cicd-statistics';\nimport { BuildkiteBuild, Job } from './types';\n\n/*\n * See https://buildkite.com/docs/pipelines/defining-steps#build-states\n */\nexport const buildStatusMap: Record<string, FilterStatusType> = {\n running: 'running',\n scheduled: 'scheduled',\n passed: 'succeeded',\n failing: 'failed',\n failed: 'failed',\n blocked: 'stalled',\n canceled: 'aborted',\n canceling: 'aborted',\n skipped: 'aborted',\n not_run: 'scheduled',\n finished: 'unknown',\n};\n\n/*\n * See https://buildkite.com/docs/pipelines/defining-steps#job-states\n */\nconst jobStatusMap: Record<string, FilterStatusType> = {\n accepted: 'scheduled',\n assigned: 'scheduled',\n blocked: 'stalled',\n blocked_failed: 'failed',\n broken: 'failed',\n canceled: 'aborted',\n canceling: 'aborted',\n expired: 'aborted',\n finished: 'unknown',\n limited: 'unknown',\n limiting: 'unknown',\n pending: 'stalled',\n running: 'running',\n scheduled: 'scheduled',\n skipped: 'aborted',\n timed_out: 'expired',\n timing_out: 'expired',\n unblocked: 'unknown',\n unblocked_failed: 'failed',\n waiting: 'scheduled',\n waiting_failed: 'failed',\n};\n\n/**\n * toBuilds transforms build objects from Buildkite to Build objects.\n *\n * @param builds - array of build objects returned from Buildkite's API.\n *\n * @public\n */\nexport function toBuilds(builds: BuildkiteBuild[]): Build[] {\n return builds.map(build => {\n return {\n id: build.id,\n status: buildStatusMap[build.state],\n // TODO: is this correct?\n branchType: build.branch as FilterBranchType,\n duration:\n new Date(build.finished_at).valueOf() -\n new Date(build.started_at).valueOf(),\n requestedAt: new Date(build.created_at),\n triggeredBy: triggeredBy(build.source),\n stages: jobsToStages(build.jobs),\n };\n });\n}\n\nexport function triggeredBy(source: string): TriggerReason {\n if (source === 'schedule') {\n return 'internal';\n }\n\n if (source === 'ui') {\n return 'manual';\n }\n\n return 'scm';\n}\n\n/**\n * jobsToStages transforms Job objects from Buildkite to Stage objects.\n *\n * @param jobs - array of job objects returned from the Buildkite API.\n *\n * @public\n */\nexport function jobsToStages(jobs: Job[]): Stage[] {\n return jobs.map(job => {\n const status = jobStatusMap[job.state]\n ? jobStatusMap[job.state]\n : 'unknown';\n const duration =\n new Date(job.finished_at).valueOf() - new Date(job.started_at).valueOf();\n\n return {\n name: job.name,\n status,\n duration,\n stages: [\n {\n name: job.name,\n status,\n duration,\n },\n ],\n };\n });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.esm.js","sources":["../../src/api/utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Build,\n FilterStatusType,\n FilterBranchType,\n TriggerReason,\n Stage,\n} from '@backstage-community/plugin-cicd-statistics';\nimport { BuildkiteBuild, Job } from './types';\n\n/*\n * See https://buildkite.com/docs/pipelines/defining-steps#build-states\n */\nexport const buildStatusMap: Record<string, FilterStatusType> = {\n running: 'running',\n scheduled: 'scheduled',\n passed: 'succeeded',\n failing: 'failed',\n failed: 'failed',\n blocked: 'stalled',\n canceled: 'aborted',\n canceling: 'aborted',\n skipped: 'aborted',\n not_run: 'scheduled',\n finished: 'unknown',\n};\n\n/*\n * See https://buildkite.com/docs/pipelines/defining-steps#job-states\n */\nconst jobStatusMap: Record<string, FilterStatusType> = {\n accepted: 'scheduled',\n assigned: 'scheduled',\n blocked: 'stalled',\n blocked_failed: 'failed',\n broken: 'failed',\n canceled: 'aborted',\n canceling: 'aborted',\n expired: 'aborted',\n finished: 'unknown',\n limited: 'unknown',\n limiting: 'unknown',\n pending: 'stalled',\n running: 'running',\n scheduled: 'scheduled',\n skipped: 'aborted',\n timed_out: 'expired',\n timing_out: 'expired',\n unblocked: 'unknown',\n unblocked_failed: 'failed',\n waiting: 'scheduled',\n waiting_failed: 'failed',\n};\n\n/**\n * toBuilds transforms build objects from Buildkite to Build objects.\n *\n * @param builds - array of build objects returned from Buildkite's API.\n *\n * @public\n */\nexport function toBuilds(builds: BuildkiteBuild[]): Build[] {\n return builds.map(build => {\n return {\n id: build.id,\n status: buildStatusMap[build.state],\n // TODO: is this correct?\n branchType: build.branch as FilterBranchType,\n duration:\n new Date(build.finished_at).valueOf() -\n new Date(build.started_at).valueOf(),\n requestedAt: new Date(build.created_at),\n triggeredBy: triggeredBy(build.source),\n stages: jobsToStages(build.jobs),\n };\n });\n}\n\nexport function triggeredBy(source: string): TriggerReason {\n if (source === 'schedule') {\n return 'internal';\n }\n\n if (source === 'ui') {\n return 'manual';\n }\n\n return 'scm';\n}\n\n/**\n * jobsToStages transforms Job objects from Buildkite to Stage objects.\n *\n * @param jobs - array of job objects returned from the Buildkite API.\n *\n * @public\n */\nexport function jobsToStages(jobs: Job[]): Stage[] {\n return jobs.map(job => {\n const status = jobStatusMap[job.state]\n ? jobStatusMap[job.state]\n : 'unknown';\n const duration =\n new Date(job.finished_at).valueOf() - new Date(job.started_at).valueOf();\n\n return {\n name: job.name,\n status,\n duration,\n stages: [\n {\n name: job.name,\n status,\n duration,\n },\n ],\n };\n });\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-cicd-statistics-module-buildkite",
3
- "version": "0.0.4",
3
+ "version": "0.1.1",
4
4
  "description": "CI/CD Statistics plugin module; Buildkite CI/CD",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin-module",
@@ -39,18 +39,16 @@
39
39
  "test": "backstage-cli package test"
40
40
  },
41
41
  "dependencies": {
42
- "@backstage-community/plugin-cicd-statistics": "^0.1.41",
43
- "@backstage/catalog-model": "^1.7.0",
44
- "@backstage/core-plugin-api": "^1.10.0",
45
- "@backstage/test-utils": "^1.7.0",
42
+ "@backstage-community/plugin-cicd-statistics": "^0.2.0",
43
+ "@backstage/catalog-model": "^1.7.2",
44
+ "@backstage/core-plugin-api": "^1.10.2",
45
+ "@backstage/test-utils": "^1.7.3",
46
46
  "@gitbeaker/browser": "^35.6.0",
47
47
  "@gitbeaker/core": "^35.6.0",
48
- "@roadiehq/backstage-plugin-buildkite": "^2.3.1",
49
- "luxon": "^3.0.0",
50
- "p-limit": "^3.1.0"
48
+ "@roadiehq/backstage-plugin-buildkite": "^2.3.1"
51
49
  },
52
50
  "devDependencies": {
53
- "@backstage/cli": "^0.28.0",
51
+ "@backstage/cli": "^0.29.4",
54
52
  "@types/react": "^16.13.1 || ^17.0.0",
55
53
  "@types/react-dom": "^18.2.19",
56
54
  "react": "^16.13.1 || ^17.0.0 || ^18.0.0",
@@ -62,5 +60,12 @@
62
60
  "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
63
61
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
64
62
  },
63
+ "typesVersions": {
64
+ "*": {
65
+ "index": [
66
+ "dist/index.d.ts"
67
+ ]
68
+ }
69
+ },
65
70
  "module": "./dist/index.esm.js"
66
71
  }