Skip to content

Commit 0ebad85

Browse files
authored
feat: add woodpecker-ci support (#220)
1 parent 2ab058c commit 0ebad85

File tree

6 files changed

+103
-2
lines changed

6 files changed

+103
-2
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ if (isCI) {
6363
## Supported CI
6464

6565
| CI Service (`name`) | `service` | `isCi` | `branch` | `commit` | `tag` | `build` | `buildUrl` | `job` | `jobUrl` | `isPr` | `pr` | `prBranch` | `slug` | `root` |
66-
|----------------------------------------------------------------------------------------------------------------------------------------|:-----------------:|:------------------:|:---------------------------:|:------------------:|:-----------------------:|:------------------:|:------------------:|:------------------:|:------------------:|:---------------------:|:---------------------:|:---------------------:|:------------------:|:------------------:|
66+
| -------------------------------------------------------------------------------------------------------------------------------------- | :---------------: | :----------------: | :-------------------------: | :----------------: | :---------------------: | :----------------: | :----------------: | :----------------: | :----------------: | :-------------------: | :-------------------: | :-------------------: | :----------------: | :----------------: |
6767
| [AppVeyor](https://www.appveyor.com/docs/environment-variables) | `appveyor` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
6868
| [Azure Pipelines](https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables) | `azure-devops` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
6969
| [Bamboo](https://confluence.atlassian.com/bamboo/bamboo-variables-289277087.html) | `bamboo` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: |
@@ -93,6 +93,7 @@ if (isCI) {
9393
| [Vercel](https://vercel.com/docs/environment-variables) | `vercel` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :x: |
9494
| [Wercker](http://devcenter.wercker.com/docs/environment-variables/available-env-vars#hs_cos_wrapper_name) | `wercker` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: |
9595
| [JetBrains Space](https://www.jetbrains.com/space/) | `jetbrainsSpace` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :x: |
96+
| [Woodpecker CI](https://woodpecker-ci.org/docs/usage/environment#built-in-environment-variables) | `woodpecker` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
9697

9798
:warning: See [Caveats](#caveats)
9899

index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const services = {
3030
vela: require('./services/vela.js'),
3131
vercel: require('./services/vercel.js'),
3232
wercker: require('./services/wercker.js'),
33+
woodpecker: require('./services/woodpecker.js'),
3334
};
3435

3536
module.exports = ({env = process.env, cwd = process.cwd()} = {}) => {

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@
6464
"teamcity",
6565
"travis",
6666
"variable",
67-
"wercker"
67+
"wercker",
68+
"woodpecker"
6869
],
6970
"license": "MIT",
7071
"main": "index.js",

services/woodpecker.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// https://woodpecker-ci.org/docs/usage/environment#built-in-environment-variables
2+
3+
module.exports = {
4+
detect({env}) {
5+
return env.CI && env.CI === 'woodpecker';
6+
},
7+
configuration({env}) {
8+
const isPr = env.CI_BUILD_EVENT === 'pull_request';
9+
10+
return {
11+
name: 'Woodpecker CI',
12+
service: 'woodpecker',
13+
commit: env.CI_COMMIT_SHA,
14+
tag: env.CI_COMMIT_TAG,
15+
build: env.CI_BUILD_NUMBER,
16+
buildUrl: env.CI_BUILD_LINK,
17+
branch: isPr ? env.CI_COMMIT_TARGET_BRANCH : env.CI_COMMIT_BRANCH,
18+
job: env.CI_JOB_NUMBER,
19+
jobUrl: env.CI_BUILD_LINK,
20+
pr: env.CI_COMMIT_PULL_REQUEST,
21+
isPr,
22+
prBranch: isPr ? env.CI_COMMIT_SOURCE_BRANCH : undefined,
23+
slug: `${env.CI_REPO_OWNER}/${env.CI_REPO_NAME}`,
24+
root: env.CI_WORKSPACE,
25+
};
26+
},
27+
};

test/index.test.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,13 @@ test('Wercker', (t) => {
186186
t.is(service, 'wercker');
187187
});
188188

189+
test('Woodpecker CI', (t) => {
190+
const {isCi, service} = m({env: {CI: 'woodpecker'}});
191+
192+
t.is(isCi, true);
193+
t.is(service, 'woodpecker');
194+
});
195+
189196
test('Unknown CI and Git repository', async (t) => {
190197
const {cwd} = await gitRepo();
191198
await gitCommit('Test commit message', {cwd});

test/services/woodpecker.test.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
const test = require('ava');
2+
const woodpecker = require('../../services/woodpecker.js');
3+
4+
const env = {
5+
CI: 'woodpecker',
6+
CI_JOB_NUMBER: '1234',
7+
CI_BUILD_LINK: 'https://woodpecker-ci.example.com/owner/repo/91011',
8+
CI_COMMIT_SHA: '5678',
9+
CI_COMMIT_TAG: 'tag_name',
10+
CI_BUILD_NUMBER: '91011',
11+
CI_COMMIT_BRANCH: 'main',
12+
CI_REPO_OWNER: 'owner',
13+
CI_REPO_NAME: 'repo',
14+
CI_WORKSPACE: '/woodpecker/src/github.com/owner/repo',
15+
};
16+
17+
test('Push', (t) => {
18+
t.deepEqual(woodpecker.configuration({env}), {
19+
name: 'Woodpecker CI',
20+
service: 'woodpecker',
21+
commit: '5678',
22+
tag: 'tag_name',
23+
build: '91011',
24+
buildUrl: 'https://woodpecker-ci.example.com/owner/repo/91011',
25+
branch: 'main',
26+
job: '1234',
27+
jobUrl: 'https://woodpecker-ci.example.com/owner/repo/91011',
28+
pr: undefined,
29+
isPr: false,
30+
prBranch: undefined,
31+
slug: 'owner/repo',
32+
root: '/woodpecker/src/github.com/owner/repo',
33+
});
34+
});
35+
36+
test('PR', (t) => {
37+
t.deepEqual(
38+
woodpecker.configuration({
39+
env: {
40+
...env,
41+
CI_COMMIT_PULL_REQUEST: '10',
42+
CI_BUILD_EVENT: 'pull_request',
43+
CI_COMMIT_TARGET_BRANCH: 'main',
44+
CI_COMMIT_SOURCE_BRANCH: 'pr-branch',
45+
},
46+
}),
47+
{
48+
name: 'Woodpecker CI',
49+
service: 'woodpecker',
50+
commit: '5678',
51+
tag: 'tag_name',
52+
build: '91011',
53+
buildUrl: 'https://woodpecker-ci.example.com/owner/repo/91011',
54+
branch: 'main',
55+
job: '1234',
56+
jobUrl: 'https://woodpecker-ci.example.com/owner/repo/91011',
57+
pr: '10',
58+
isPr: true,
59+
prBranch: 'pr-branch',
60+
slug: 'owner/repo',
61+
root: '/woodpecker/src/github.com/owner/repo',
62+
}
63+
);
64+
});

0 commit comments

Comments
 (0)