Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

@lifeomic/bitrise

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@lifeomic/bitrise - npm Package Compare versions

Comparing version 0.6.0 to 0.7.0

src/artifact.js

64

index.d.ts

@@ -21,4 +21,36 @@ import { AxiosInstance } from 'axios';

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 {

@@ -72,2 +104,9 @@ readonly reason?: string;

/**
* @see https://api-docs.bitrise.io/#/build-artifact/artifact-list
*
* @param listParams Parameters for the artifacts to list.
*/
listArtifacts(listParams?: ListArtifactsOptions): Promise<ArtifactList>;
follow(options?: FollowOptions): Promise<void>;

@@ -78,2 +117,27 @@

declare interface ArtifactDescription {
readonly artifact_meta: object
readonly artifact_type: string
readonly expiring_download_url: string
readonly file_size_bytes: number
readonly is_public_page_enabled: boolean
readonly public_install_page_url: string
readonly slug: string
readonly title: string
}
declare interface Artifact {
describe(): Promise<ArtifactDescription>;
}
declare interface ListArtifactsOptions {
readonly next?: string;
readonly limit?: number;
}
declare interface ArtifactList {
readonly artifacts: Artifact[];
readonly paging: PageInfo;
}
declare interface CommitPathsFilter {

@@ -80,0 +144,0 @@ readonly added?: string[];

5

package.json
{
"name": "@lifeomic/bitrise",
"version": "0.6.0",
"version": "0.7.0",
"description": "Bitrise API client",

@@ -26,3 +26,4 @@ "main": "src/client.js",

"axios-retry": "^3.1.1",
"lodash": "^4.17.10"
"lodash": "^4.17.10",
"query-string": "^6.8.3"
},

@@ -29,0 +30,0 @@ "devDependencies": {

@@ -6,2 +6,3 @@ const build = require('./build');

const project = require('../package.json');
const queryString = require('query-string');

@@ -69,6 +70,23 @@ const buildEnvironment = (environment) => {

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;
};
const isNil = require('lodash/isNil');
const negate = require('lodash/negate');
const pickBy = require('lodash/pickBy');
const queryString = require('query-string');
const artifact = require('./artifact');

@@ -72,2 +74,18 @@ const abortBuild = async ({ appSlug, buildSlug, client }, options = {}) => {

const listArtifacts = async ({ appSlug, buildSlug, client }, options = {}) => {
const query = queryString.stringify(options);
const queryPart = query ? `?${query}` : '';
const response = await client.get(`/apps/${appSlug}/builds/${buildSlug}/artifacts${queryPart}`);
const artifacts = response.data.data.map((artifactDescription) => {
const artifactSlug = artifactDescription.slug;
return artifact({ appSlug, buildSlug, client, artifactSlug });
});
return {
artifacts,
paging: response.data.paging
};
};
const isFinished = async ({ appSlug, buildSlug, client }) => {

@@ -86,2 +104,3 @@ const attributes = await describeBuild({ appSlug, buildSlug, client });

build.describe = describeBuild.bind(build, state);
build.listArtifacts = listArtifacts.bind(build, state);
build.follow = followBuild.bind(build, state);

@@ -88,0 +107,0 @@ build.isFinished = isFinished.bind(build, state);

27

test/app.test.js

@@ -7,3 +7,3 @@ const app = require('../src/app');

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

@@ -284,1 +284,26 @@ test.beforeEach((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);
});

@@ -8,3 +8,3 @@ const axios = require('axios');

const { DateTime } = require('luxon');
const { stubAbortBuild, stubArchivedBuildLog, stubBuildLogStream, stubGetBuild } = require('./stubs');
const { stubAbortBuild, stubArchivedBuildLog, stubBuildLogStream, stubGetBuild, stubListArtifacts } = require('./stubs');

@@ -242,1 +242,30 @@ test.beforeEach((test) => {

});
test('an build can list artifacts', async (test) => {
const { build, client, appSlug, buildSlug } = test.context;
const stub = stubListArtifacts({ appSlug, buildSlug, axios: client });
const artifactList = await build.listArtifacts();
test.is(artifactList.artifacts.length, 2);
test.is(artifactList.artifacts[0].appSlug, appSlug);
test.is(artifactList.artifacts[0].buildSlug, buildSlug);
test.is(artifactList.artifacts[0].artifactSlug, stub.artifacts[0].slug);
test.is(artifactList.artifacts[1].appSlug, appSlug);
test.is(artifactList.artifacts[1].buildSlug, buildSlug);
test.is(artifactList.artifacts[1].artifactSlug, stub.artifacts[1].slug);
});
test('a build can list a second page of artifacts', async (test) => {
const { build, client, appSlug, buildSlug } = test.context;
const next = uuid();
const stub = stubListArtifacts({ appSlug, buildSlug, axios: client, next });
const artifactList = await build.listArtifacts({ next });
test.is(artifactList.artifacts.length, 2);
test.is(artifactList.artifacts[0].appSlug, appSlug);
test.is(artifactList.artifacts[0].buildSlug, buildSlug);
test.is(artifactList.artifacts[0].artifactSlug, stub.artifacts[0].slug);
test.is(artifactList.artifacts[1].appSlug, appSlug);
test.is(artifactList.artifacts[1].buildSlug, buildSlug);
test.is(artifactList.artifacts[1].artifactSlug, stub.artifacts[1].slug);
});

@@ -21,2 +21,13 @@ const get = require('lodash/get');

const generateArtifact = (options = {}) => ({
artifact_meta: {},
artifact_type: 'android-apk',
expiring_download_url: `https://example.com/downloads/${uuid()}`,
file_size_bytes: 100,
is_public_page_enabled: true,
public_install_page_url: `https://example.com/install/${uuid()}`,
slug: options.artifactSlug,
title: `Artifact ${uuid()}`
});
const unmatchedRequest = async (...args) => {

@@ -102,2 +113,16 @@ throw new Error(

exports.stubGetArtifact = ({ appSlug, axios, buildSlug, artifactSlug }) => {
const artifact = generateArtifact({ appSlug, buildSlug, artifactSlug });
const stub = getStub(axios, 'get')
.withArgs(`/apps/${appSlug}/builds/${buildSlug}/artifacts/${artifactSlug}`)
.resolves({
data: { data: artifact },
status: 200
});
stub.artifact = artifact;
return stub;
};
exports.stubTriggerBuild = ({ appSlug, axios, body }) => {

@@ -119,1 +144,61 @@ const build = generateBuild();

};
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;
};
exports.stubListArtifacts = ({ appSlug, buildSlug, axios, next }) => {
const artifact1 = generateArtifact();
const artifact2 = generateArtifact();
const urlParts = [`/apps/${appSlug}/builds/${buildSlug}/artifacts`];
if (next) {
urlParts.push(`?next=${next}`);
}
const url = urlParts.join('');
const stub = getStub(axios, 'get')
.withArgs(url)
.resolves({
data: {
data: [
{ slug: artifact1.slug },
{ slug: artifact2.slug }
],
paging: {
page_item_limit: 2,
total_item_count: 2
}
},
status: 200
});
stub.artifacts = [artifact1, artifact2];
return stub;
};

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc