Skip to content

Commit 074dd43

Browse files
committed
feat: add woodpecker provider
Signed-off-by: 6543 <[email protected]>
1 parent 2ce0fbc commit 074dd43

File tree

4 files changed

+179
-2
lines changed

4 files changed

+179
-2
lines changed

src/ci_providers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import * as providerLocal from './provider_local'
1616
import * as providerTeamCity from './provider_teamcity'
1717
import * as providerTravisci from './provider_travisci'
1818
import * as providerWercker from './provider_wercker'
19+
import * as providerWoodpecker from './provider_woodpecker'
1920

2021
// Please make sure provider_local is last
2122
const providerList: IProvider[] = [
@@ -34,6 +35,7 @@ const providerList: IProvider[] = [
3435
providerTeamCity,
3536
providerTravisci,
3637
providerWercker,
38+
providerWoodpecker,
3739
providerLocal,
3840
]
3941

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/**
2+
* https://woodpecker-ci.org/docs/usage/environment#built-in-environment-variables
3+
*/
4+
import { IServiceParams, UploaderEnvs, UploaderInputs } from '../types'
5+
6+
export function detect(envs: UploaderEnvs): boolean {
7+
return envs.CI === 'woodpecker'
8+
}
9+
10+
function _getBuild(inputs: UploaderInputs): string {
11+
const { args, environment: envs } = inputs
12+
return args.build || envs.CI_BUILD_NUMBER || ''
13+
}
14+
15+
function _getBuildURL(inputs: UploaderInputs): string {
16+
const { environment: envs } = inputs
17+
return envs.CI_BUILD_LINK || ''
18+
}
19+
20+
function _getBranch(inputs: UploaderInputs): string {
21+
const { args, environment: envs } = inputs
22+
return args.branch || envs.CI_COMMIT_SOURCE_BRANCH || envs.CI_COMMIT_BRANCH || ''
23+
}
24+
25+
function _getJob(inputs: UploaderInputs): string {
26+
const { environment: envs } = inputs
27+
return envs.CI_JOB_NUMBER || ''
28+
}
29+
30+
function _getPR(inputs: UploaderInputs): string {
31+
const { args, environment: envs } = inputs
32+
return args.pr || envs.CI_COMMIT_PULL_REQUEST || ''
33+
}
34+
35+
function _getService(): string {
36+
return 'woodpecker'
37+
}
38+
39+
export function getServiceName(): string {
40+
return 'Woodpecker CI'
41+
}
42+
43+
function _getSHA(inputs: UploaderInputs): string {
44+
const { args, environment: envs } = inputs
45+
return args.sha || envs.CI_COMMIT_SHA || ''
46+
}
47+
48+
function _getTag(inputs: UploaderInputs): string {
49+
const { args, environment: envs } = inputs
50+
return args.tag || envs.CI_COMMIT_TAG || ''
51+
}
52+
53+
function _getSlug(inputs: UploaderInputs): string {
54+
const { args, environment: envs } = inputs
55+
if (args.slug !== '') return args.slug
56+
return envs.CI_REPO || ''
57+
}
58+
59+
export function getServiceParams(inputs: UploaderInputs): IServiceParams {
60+
return {
61+
branch: _getBranch(inputs),
62+
build: _getBuild(inputs),
63+
buildURL: _getBuildURL(inputs),
64+
commit: _getSHA(inputs),
65+
tag: _getTag(inputs),
66+
pr: _getPR(inputs),
67+
job: _getJob(inputs),
68+
service: _getService(),
69+
slug: _getSlug(inputs),
70+
}
71+
}
72+
73+
export function getEnvVarNames(): string[] {
74+
return [
75+
'CI',
76+
'CI_BUILD_NUMBER',
77+
'CI_BUILD_LINK',
78+
'CI_COMMIT_SOURCE_BRANCH',
79+
'CI_COMMIT_BRANCH',
80+
'CI_JOB_NUMBER',
81+
'CI_COMMIT_PULL_REQUEST',
82+
'CI_COMMIT_SHA',
83+
'CI_COMMIT_TAG',
84+
'CI_REPO',
85+
]
86+
}

src/helpers/logger.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function _getTimestamp() {
1515
* @param {boolean} shouldVerbose - value of the verbose flag
1616
* @return void
1717
*/
18-
export function verbose(message: string, shouldVerbose: boolean): void {
18+
export function verbose(message: string, shouldVerbose: boolean): void {
1919
if (shouldVerbose === true) {
2020
console.debug(`[${_getTimestamp()}] ['verbose'] ${message}`)
2121
}
@@ -61,4 +61,4 @@ export class UploadLogger {
6161
static verbose(message: string) {
6262
verbose(message, UploadLogger.getInstance().logLevel === 'verbose')
6363
}
64-
}
64+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import td from 'testdouble'
2+
3+
import * as providerWoodpecker from '../../src/ci_providers/provider_woodpecker'
4+
import { IServiceParams, UploaderInputs } from '../../src/types'
5+
import { createEmptyArgs } from '../test_helpers'
6+
7+
describe('Woodpecker Params', () => {
8+
afterEach(() => {
9+
td.reset()
10+
})
11+
12+
describe('detect()', () => {
13+
it('does not run without Woodpecker env variable', () => {
14+
const inputs: UploaderInputs = {
15+
args: { ...createEmptyArgs() },
16+
environment: {},
17+
}
18+
const detected = providerWoodpecker.detect(inputs.environment)
19+
expect(detected).toBeFalsy()
20+
})
21+
22+
it('does run with Woodpecker env variable', () => {
23+
const inputs: UploaderInputs = {
24+
args: { ...createEmptyArgs() },
25+
environment: {
26+
CI: 'woodpecker',
27+
},
28+
}
29+
const detected = providerWoodpecker.detect(inputs.environment)
30+
expect(detected).toBeTruthy()
31+
})
32+
})
33+
34+
it('gets correct params', () => {
35+
const inputs: UploaderInputs = {
36+
args: { ...createEmptyArgs() },
37+
environment: {
38+
CI: 'woodpecker',
39+
CI_COMMIT_BRANCH: 'master',
40+
CI_COMMIT_SHA: 'testingsha',
41+
CI_BUILD_NUMBER: '2',
42+
CI_BUILD_LINK: 'https://ci.woodpecker-ci.org/woodpecker-ci/woodpecker/build/1629',
43+
CI_JOB_NUMBER: '12',
44+
CI_REPO: 'testOrg/testRepo',
45+
},
46+
}
47+
const expected: IServiceParams = {
48+
branch: 'master',
49+
build: '2',
50+
buildURL: 'https://ci.woodpecker-ci.org/woodpecker-ci/woodpecker/build/1629',
51+
commit: 'testingsha',
52+
pr: '',
53+
job: '12',
54+
service: 'woodpecker',
55+
slug: 'testOrg/testRepo',
56+
}
57+
const params = providerWoodpecker.getServiceParams(inputs)
58+
expect(params).toMatchObject(expected)
59+
})
60+
61+
it('gets correct params for pull request', () => {
62+
const inputs: UploaderInputs = {
63+
args: { ...createEmptyArgs() },
64+
environment: {
65+
CI: 'woodpecker',
66+
CI_COMMIT_BRANCH: 'master',
67+
CI_COMMIT_SOURCE_BRANCH: 'new-feature',
68+
CI_COMMIT_SHA: 'testingsha',
69+
CI_BUILD_NUMBER: '2',
70+
CI_JOB_NUMBER: '20',
71+
CI_COMMIT_PULL_REQUEST: '1',
72+
CI_BUILD_LINK: 'https://ci.woodpecker-ci.org/woodpecker-ci/woodpecker/build/1629',
73+
CI_REPO: 'testOrg/testRepo',
74+
},
75+
}
76+
const expected: IServiceParams = {
77+
branch: 'new-feature',
78+
build: '2',
79+
buildURL: 'https://ci.woodpecker-ci.org/woodpecker-ci/woodpecker/build/1629',
80+
commit: 'testingsha',
81+
job: '20',
82+
pr: '1',
83+
service: 'woodpecker',
84+
slug: 'testOrg/testRepo',
85+
}
86+
const params = providerWoodpecker.getServiceParams(inputs)
87+
expect(params).toMatchObject(expected)
88+
})
89+
})

0 commit comments

Comments
 (0)