Skip to content

Commit

Permalink
Merge pull request #18 from lifeomic/add-artifact-apis
Browse files Browse the repository at this point in the history
Add API to list builds for an app
  • Loading branch information
mdlavin committed Sep 17, 2019
2 parents 633bc96 + cc2d13a commit fe0e623
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 2 deletions.
32 changes: 32 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,38 @@ declare interface App {
* include a git tag or a commit hash, a branch or a workfow ID.
*/
triggerBuild(buildParams?: BuildOptions): Promise<Build>;

/**
* @see https://api-docs.bitrise.io/#/builds/build-list
*
* @param listParams Parameters for the builds to list.
*/
listBuilds(listParams?: ListBuildOptions): Promise<BuildList>;
}

declare interface ListBuildOptions {
readonly sort_by?: string;
readonly branch?: string;
readonly workflow?: string;
readonly commit_message?: string;
readonly trigger_event_type?: string;
readonly pull_request_id?: number;
readonly build_number?: number;
readonly after?: number;
readonly before?: number;
readonly status?: number;
readonly next?: string;
readonly limit?: number;
}

declare interface BuildList {
readonly builds: Build[];
readonly paging: PageInfo;
}

declare interface PageInfo {
readonly next?: string;
readonly total_item_count: number;
}

declare interface AbortOptions {
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
"dependencies": {
"axios": "^0.18.0",
"axios-retry": "^3.1.1",
"lodash": "^4.17.10"
"lodash": "^4.17.10",
"query-string": "^6.8.3"
},
"devDependencies": {
"@lifeomic/eslint-plugin-node": "^2.0.1",
Expand Down
18 changes: 18 additions & 0 deletions src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const isNil = require('lodash/isNil');
const negate = require('lodash/negate');
const pickBy = require('lodash/pickBy');
const project = require('../package.json');
const queryString = require('query-string');

const buildEnvironment = (environment) => {
if (!environment) {
Expand Down Expand Up @@ -65,8 +66,25 @@ const triggerBuild = async ({ client, slug }, options = {}) => {
return build({ appSlug: slug, client, buildSlug: response.data.build_slug });
};

const listBuilds = async ({ client, slug }, options = {}) => {
const query = queryString.stringify(options);
const queryPart = query ? `?${query}` : '';

const response = await client.get(`/apps/${slug}/builds${queryPart}`);

const builds = response.data.data.map((buildInfo) => {
return build({ appSlug: slug, client, buildSlug: buildInfo.slug });
});

return {
builds,
paging: response.data.paging
};
};

module.exports = ({ client, slug }) => {
const app = { slug };
app.triggerBuild = triggerBuild.bind(app, { client, slug });
app.listBuilds = listBuilds.bind(app, { client, slug });
return app;
};
27 changes: 26 additions & 1 deletion test/app.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const sinon = require('sinon');
const test = require('ava');
const uuid = require('uuid/v4');

const { stubTriggerBuild } = require('./stubs');
const { stubTriggerBuild, stubListBuilds } = require('./stubs');

test.beforeEach((test) => {
const client = axios.create();
Expand Down Expand Up @@ -280,3 +280,28 @@ test('environment variables can be supplied to a build', async (test) => {
})
);
});

test('an app can list builds', async (test) => {
const { app, client, slug } = test.context;
const stub = stubListBuilds({ appSlug: slug, axios: client });

const buildList = await app.listBuilds();
test.is(buildList.builds.length, 2);
test.is(buildList.builds[0].appSlug, slug);
test.is(buildList.builds[0].buildSlug, stub.builds[0].build_slug);
test.is(buildList.builds[1].appSlug, slug);
test.is(buildList.builds[1].buildSlug, stub.builds[1].build_slug);
});

test('an app can list a second page of builds', async (test) => {
const { app, client, slug } = test.context;
const next = uuid();
const stub = stubListBuilds({ appSlug: slug, axios: client, next });

const buildList = await app.listBuilds({ next });
test.is(buildList.builds.length, 2);
test.is(buildList.builds[0].appSlug, slug);
test.is(buildList.builds[0].buildSlug, stub.builds[0].build_slug);
test.is(buildList.builds[1].appSlug, slug);
test.is(buildList.builds[1].buildSlug, stub.builds[1].build_slug);
});
30 changes: 30 additions & 0 deletions test/stubs.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,33 @@ exports.stubTriggerBuild = ({ appSlug, axios, body }) => {
stub.build = build;
return stub;
};

exports.stubListBuilds = ({ appSlug, axios, next }) => {
const build1 = generateBuild();
const build2 = generateBuild();

const urlParts = [`/apps/${appSlug}/builds`];
if (next) {
urlParts.push(`?next=${next}`);
}
const url = urlParts.join('');

const stub = getStub(axios, 'get')
.withArgs(url)
.resolves({
data: {
data: [
{ slug: build1.build_slug },
{ slug: build2.build_slug }
],
paging: {
page_item_limit: 2,
total_item_count: 2
}
},
status: 200
});

stub.builds = [build1, build2];
return stub;
};
19 changes: 19 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4069,6 +4069,15 @@ qs@~6.5.2:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==

query-string@^6.8.3:
version "6.8.3"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.8.3.tgz#fd9fb7ffb068b79062b43383685611ee47777d4b"
integrity sha512-llcxWccnyaWlODe7A9hRjkvdCKamEKTh+wH8ITdTc3OhchaqUZteiSCX/2ablWHVrkVIe04dntnaZJ7BdyW0lQ==
dependencies:
decode-uri-component "^0.2.0"
split-on-first "^1.0.0"
strict-uri-encode "^2.0.0"

randomatic@^3.0.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
Expand Down Expand Up @@ -4606,6 +4615,11 @@ spdx-license-ids@^3.0.0:
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==

split-on-first@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==

split-string@^3.0.1, split-string@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
Expand Down Expand Up @@ -4646,6 +4660,11 @@ static-extend@^0.1.1:
define-property "^0.2.5"
object-copy "^0.1.0"

strict-uri-encode@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=

string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
Expand Down

0 comments on commit fe0e623

Please sign in to comment.