* Fix CVEs

- Removed build config from task.js
- Bumped task-lib
- Fixed tests

* print debug info always for tests
This commit is contained in:
Dmitrii Bobreshev 2024-09-02 13:13:30 +02:00 коммит произвёл GitHub
Родитель 245772b60d
Коммит fdce582d08
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
22 изменённых файлов: 1414 добавлений и 2004 удалений

Просмотреть файл

@ -34,55 +34,49 @@ describe('app-store-promote L0 Suite', function () {
fs.rmdirSync(dir);
};
it('enforce darwin', (done: Mocha.Done) => {
it('enforce darwin', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0EnforceDarwin.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert.equal(true, tr.createdErrorIssue('Error: loc_mock_DarwinOnly'));
assert(tr.failed, 'task should have failed');
done();
});
it('username+password with deliver', (done: Mocha.Done) => {
it('username+password with deliver', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0UserPassDeliver.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 3,
'should have run gem install, gem update and fastlane deliver.'
);
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('username+password - no fastlane install', (done: Mocha.Done) => {
it('username+password - no fastlane install', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0NoFastlaneInstall.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 1, 'should have only run fastlane deliver.');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('username+password - specific fastlane install', (done: Mocha.Done) => {
it('username+password - specific fastlane install', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0SpecificFastlaneInstall.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran('/usr/bin/gem uninstall fastlane -a -I'),
'gem uninstall fastlane should have been run.'
@ -96,33 +90,29 @@ describe('app-store-promote L0 Suite', function () {
'should have run gem uninstall, gem install and fastlane deliver.'
);
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('username+password - specific fastlane install - no version', (done: Mocha.Done) => {
it('username+password - specific fastlane install - no version', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0SpecificFastlaneInstallNoVersion.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.stdout.indexOf('Input required: fastlaneToolsSpecificVersion') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('additional fastlane arguments', (done: Mocha.Done) => {
it('additional fastlane arguments', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0AdditionalFastlaneArguments.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 1, 'should have run fastlane deliver.');
assert(
tr.ran(
@ -135,27 +125,23 @@ describe('app-store-promote L0 Suite', function () {
'should have sent app-version parameter as a separate argument'
);
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('service endpoint with deliver', (done: Mocha.Done) => {
it('service endpoint with deliver', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ServiceEndpointDeliver.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 3,
'should have run gem install, gem update and fastlane deliver.'
);
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('service endpoint with api key', (done: Mocha.Done) => {
it('service endpoint with api key', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ApiKeyEndPoint.js');
@ -168,7 +154,7 @@ describe('app-store-promote L0 Suite', function () {
fs.mkdirSync(tempPath);
}
tr.run();
await tr.runAsync();
// Check api_key file first, so we can read it and clean up before other assertions
assert(fs.existsSync(keyFilePath), 'api_key.json file should have been created');
@ -201,11 +187,9 @@ describe('app-store-promote L0 Suite', function () {
assert(apiKey.key === 'dummy_string', 'key should be correct');
assert(apiKey.in_house === false, 'in_house should be correct');
assert(apiKey.is_key_content_base64 === true, 'is_key_content_base64 should be correct');
done();
});
it('api key with deliver', (done: Mocha.Done) => {
it('api key with deliver', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ApiKeyDeliver.js');
@ -218,7 +202,7 @@ describe('app-store-promote L0 Suite', function () {
fs.mkdirSync(tempPath);
}
tr.run();
await tr.runAsync();
// Check api_key file first, so we can read it and clean up before other assertions
assert(fs.existsSync(keyFilePath), 'api_key.json file should have been created');
@ -254,17 +238,15 @@ describe('app-store-promote L0 Suite', function () {
assert(apiKey.key === 'dummy_string', 'key should be correct');
assert(apiKey.in_house === false, 'in_house should be correct');
assert(apiKey.is_key_content_base64 === true, 'is_key_content_base64 should be correct');
done();
});
it('app specific password', (done: Mocha.Done) => {
it('app specific password', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0AppSpecificPassword.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 1, 'should have run fastlane deliver.');
assert(
tr.succeeded,
@ -278,17 +260,15 @@ describe('app-store-promote L0 Suite', function () {
tr.stdout.indexOf('Clearing two-factor authentication environment variables') !== -1,
'Task should have cleared the app-specific password'
);
done();
});
it('app specific password using service end point', (done: Mocha.Done) => {
it('app specific password using service end point', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0AppSpecificPasswordEndPoint.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 1,
'should have run fastlane deliver. Stdout: [' + tr.stdout + '] err[' + tr.stderr + ']'
@ -302,78 +282,68 @@ describe('app-store-promote L0 Suite', function () {
tr.stdout.indexOf('Clearing two-factor authentication environment variables') !== -1,
'Task should have cleared the app-specific password'
);
done();
});
it('two factor authentication using service end point without fastlane session', (done: Mocha.Done) => {
it('two factor authentication using service end point without fastlane session', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0AppSpecificPasswordEndPointIncomplete.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert.equal(true, tr.createdErrorIssue('Error: loc_mock_FastlaneSessionEmpty'));
assert(tr.failed, 'task should have failed');
done();
});
it('two factor authenitcation app specific password without fastlane session', (done: Mocha.Done) => {
it('two factor authenitcation app specific password without fastlane session', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0AppSpecificPasswordNoFastlaneSession.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.stdout.indexOf('Input required: fastlaneSession') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('no bundle id', (done: Mocha.Done) => {
it('no bundle id', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0NoBundleId.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.stdout.indexOf('Input required: appIdentifier') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('no choose build', (done: Mocha.Done) => {
it('no choose build', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0NoChooseBuild.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.stdout.indexOf('Input required: chooseBuild') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('latest build', (done: Mocha.Done) => {
it('latest build', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0LatestBuild.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver submit_build -u creds-username -a com.microsoft.test.appId --skip_binary_upload true --skip_metadata true --skip_screenshots true --force'
@ -387,17 +357,15 @@ describe('app-store-promote L0 Suite', function () {
// warnings from some dependent module when running with node8 https://github.com/nodejs/node/issues/16746 are written to stderr
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('should auto release', (done: Mocha.Done) => {
it('should auto release', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ShouldAutoRelease.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver submit_build -u creds-username -a com.microsoft.test.appId --skip_binary_upload true --skip_metadata true --skip_screenshots true --automatic_release --force'
@ -410,17 +378,15 @@ describe('app-store-promote L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('team id', (done: Mocha.Done) => {
it('team id', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TeamId.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver submit_build -u creds-username -a com.microsoft.test.appId --skip_binary_upload true --skip_metadata true --skip_screenshots true -k teamId --force'
@ -433,17 +399,15 @@ describe('app-store-promote L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('team name', (done: Mocha.Done) => {
it('team name', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TeamName.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver submit_build -u creds-username -a com.microsoft.test.appId --skip_binary_upload true --skip_metadata true --skip_screenshots true --team_name teamName --force'
@ -456,17 +420,15 @@ describe('app-store-promote L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('team id and team name', (done: Mocha.Done) => {
it('team id and team name', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TeamIdTeamName.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver submit_build -u creds-username -a com.microsoft.test.appId --skip_binary_upload true --skip_metadata true --skip_screenshots true -k teamId --team_name teamName --force'
@ -479,17 +441,15 @@ describe('app-store-promote L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('build number', (done: Mocha.Done) => {
it('build number', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0BuildNumber.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver submit_build -u creds-username -a com.microsoft.test.appId -n 42 --skip_binary_upload true --skip_metadata true --skip_screenshots true --force'
@ -502,18 +462,16 @@ describe('app-store-promote L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('custom GEM_CACHE environment variable', (done: Mocha.Done) => {
it('custom GEM_CACHE environment variable', async () => {
this.timeout(1000);
//L0GemCacheEnvVar.ts sets the GEM_CACHE env var and expects it to be used when fastlane is updated.
let tp = path.join(__dirname, 'L0GemCacheEnvVar.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver submit_build -u creds-username -a com.microsoft.test.appId -n 42 --skip_binary_upload true --skip_metadata true --skip_screenshots true --force'
@ -527,7 +485,5 @@ describe('app-store-promote L0 Suite', function () {
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
assert(tr.ran('/usr/bin/gem update fastlane -i /usr/bin/customGemCache'));
done();
});
});

407
Tasks/AppStorePromote/package-lock.json сгенерированный
Просмотреть файл

@ -11,28 +11,12 @@
"dependencies": {
"@types/mocha": "^5.2.7",
"@types/node": "^20.11.0",
"azure-pipelines-task-lib": "^4.2.0"
"azure-pipelines-task-lib": "^4.17.0"
},
"devDependencies": {
"typescript": "5.1.6"
}
},
"node_modules/@types/concat-stream": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
"integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/form-data": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
"integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/mocha": {
"version": "5.2.7",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
@ -46,32 +30,39 @@
"undici-types": "~5.26.4"
}
},
"node_modules/@types/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
"node_modules/adm-zip": {
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz",
"integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
"license": "MIT",
"engines": {
"node": ">=12.0"
}
},
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
"node_modules/agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"license": "MIT",
"dependencies": {
"debug": "4"
},
"engines": {
"node": ">= 6.0.0"
}
},
"node_modules/azure-pipelines-task-lib": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.2.0.tgz",
"integrity": "sha512-WUj3XxTWVKxcphLaIHB8OULXC1GT18EAHkibvF5nQ86+dhOtn/KQW44axV8D+udDSM5HAMZxOLe93CPGBqcC5w==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.0.tgz",
"integrity": "sha512-WSopDnRAQAnxqKf7SEVHQS88NjCUNDQAc3qE6xqQWEwo8UeaK3UISxHXrVlaW0frjrgMhs3m+RhZPDlyIGYmhA==",
"license": "MIT",
"dependencies": {
"adm-zip": "^0.5.10",
"minimatch": "3.0.5",
"mockery": "^2.1.0",
"nodejs-file-downloader": "^4.11.1",
"q": "^1.5.1",
"semver": "^5.1.0",
"semver": "^5.7.2",
"shelljs": "^0.8.5",
"sync-request": "6.1.0",
"uuid": "^3.0.1"
}
},
@ -89,82 +80,46 @@
"concat-map": "0.0.1"
}
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"node_modules/concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"engines": [
"node >= 0.8"
],
"node_modules/debug": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/form-data": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
"ms": "2.1.2"
},
"engines": {
"node": ">= 0.12"
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/fs.realpath": {
@ -177,27 +132,6 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"node_modules/get-intrinsic": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
"integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-port": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
"integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==",
"engines": {
"node": ">=4"
}
},
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@ -239,44 +173,19 @@
"node": ">= 0.4.0"
}
},
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/http-basic": {
"version": "8.1.3",
"resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
"integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
"node_modules/https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"license": "MIT",
"dependencies": {
"caseless": "^0.12.0",
"concat-stream": "^1.6.2",
"http-response-object": "^3.0.1",
"parse-cache-control": "^1.0.1"
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">=6.0.0"
"node": ">= 6"
}
},
"node_modules/http-response-object": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
"integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
"dependencies": {
"@types/node": "^10.0.3"
}
},
"node_modules/http-response-object/node_modules/@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@ -310,15 +219,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
@ -327,6 +232,7 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@ -345,17 +251,22 @@
"node": "*"
}
},
"node_modules/mockery": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
"integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"license": "MIT"
},
"node_modules/object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
"node_modules/nodejs-file-downloader": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz",
"integrity": "sha512-nI2fKnmJWWFZF6SgMPe1iBodKhfpztLKJTtCtNYGhm/9QXmWa/Pk9Sv00qHgzEvNLe1x7hjGDRor7gcm/ChaIQ==",
"license": "ISC",
"dependencies": {
"follow-redirects": "^1.15.6",
"https-proxy-agent": "^5.0.0",
"mime-types": "^2.1.27",
"sanitize-filename": "^1.6.3"
}
},
"node_modules/once": {
@ -366,11 +277,6 @@
"wrappy": "1"
}
},
"node_modules/parse-cache-control": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
"integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@ -384,19 +290,6 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"node_modules/promise": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
"integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
"dependencies": {
"asap": "~2.0.6"
}
},
"node_modules/q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
@ -406,34 +299,6 @@
"teleport": ">=0.2.0"
}
},
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dependencies": {
"side-channel": "^1.0.4"
},
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/rechoir": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
@ -461,15 +326,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"node_modules/sanitize-filename": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz",
"integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==",
"license": "WTFPL OR ISC",
"dependencies": {
"truncate-utf8-bytes": "^1.0.0"
}
},
"node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"version": "5.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"license": "ISC",
"bin": {
"semver": "bin/semver"
}
@ -490,27 +360,6 @@
"node": ">=4"
}
},
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@ -522,58 +371,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/sync-request": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
"integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
"node_modules/truncate-utf8-bytes": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
"integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
"license": "WTFPL",
"dependencies": {
"http-response-object": "^3.0.1",
"sync-rpc": "^1.2.1",
"then-request": "^6.0.0"
},
"engines": {
"node": ">=8.0.0"
"utf8-byte-length": "^1.0.1"
}
},
"node_modules/sync-rpc": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
"integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
"dependencies": {
"get-port": "^3.1.0"
}
},
"node_modules/then-request": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
"integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
"dependencies": {
"@types/concat-stream": "^1.6.0",
"@types/form-data": "0.0.33",
"@types/node": "^8.0.0",
"@types/qs": "^6.2.31",
"caseless": "~0.12.0",
"concat-stream": "^1.6.0",
"form-data": "^2.2.0",
"http-basic": "^8.1.1",
"http-response-object": "^3.0.1",
"promise": "^8.0.0",
"qs": "^6.4.0"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/then-request/node_modules/@types/node": {
"version": "8.10.66",
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
"integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
},
"node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
"node_modules/typescript": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
@ -592,10 +398,11 @@
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
"node_modules/utf8-byte-length": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz",
"integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==",
"license": "(WTFPL OR MIT)"
},
"node_modules/uuid": {
"version": "3.4.0",

Просмотреть файл

@ -4,7 +4,7 @@
"description": "Azure Pipelines task to promote a build in the Apple App Store",
"main": "app-store-promote.js",
"dependencies": {
"azure-pipelines-task-lib": "^4.2.0",
"azure-pipelines-task-lib": "^4.17.0",
"@types/node": "^20.11.0",
"@types/mocha": "^5.2.7"
},

Просмотреть файл

@ -13,7 +13,7 @@
"demands": [ "xcode" ],
"version": {
"Major": "1",
"Minor": "234",
"Minor": "245",
"Patch": "0"
},
"minimumAgentVersion": "2.182.1",
@ -255,9 +255,5 @@
"SuccessfullySubmitted": "Build successfully submitted for review.",
"FastlaneSessionEmpty": "'Fastlane Session' is not set in the service connection configured for two-step verification.",
"PrecheckInAppPurchasesDisabled": "Precheck will not check In-app purchases because Fastlane doesn't support it with the App Store Connect API Key."
},
"_buildConfigMapping": {
"Default": "1.233.0",
"Node20-228": "1.234.0"
}
}

Просмотреть файл

@ -15,7 +15,7 @@
],
"version": {
"Major": "1",
"Minor": "234",
"Minor": "245",
"Patch": "0"
},
"minimumAgentVersion": "2.182.1",
@ -257,9 +257,5 @@
"SuccessfullySubmitted": "ms-resource:loc.messages.SuccessfullySubmitted",
"FastlaneSessionEmpty": "ms-resource:loc.messages.FastlaneSessionEmpty",
"PrecheckInAppPurchasesDisabled": "ms-resource:loc.messages.PrecheckInAppPurchasesDisabled"
},
"_buildConfigMapping": {
"Default": "1.233.0",
"Node20-228": "1.234.0"
}
}

Просмотреть файл

@ -34,75 +34,67 @@ describe('app-store-release L0 Suite', function () {
fs.rmdirSync(dir);
};
it('enforce darwin', (done: Mocha.Done) => {
it('enforce darwin', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0EnforceDarwin.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.createdErrorIssue('Error: loc_mock_DarwinOnly'), 'Should have written error message');
assert(tr.failed, 'task should have failed');
done();
});
it('no authtype', (done: Mocha.Done) => {
it('no authtype', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0NoAuthType.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.stdout.indexOf('Input required: authType') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('no service endpoint', (done: Mocha.Done) => {
it('no service endpoint', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0NoEndpoint.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.stdout.indexOf('Input required: serviceEndpoint') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('no username+password', (done: Mocha.Done) => {
it('no username+password', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0NoUserPass.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
// When no username+password is provided, username fails first
assert(
tr.stdout.indexOf('Input required: username') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('app specific password', (done: Mocha.Done) => {
it('app specific password', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0AppSpecificPassword.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 1, 'should have run fastlane pilot.');
assert(tr.succeeded, 'task should have succeeded');
assert(
@ -113,17 +105,15 @@ describe('app-store-release L0 Suite', function () {
tr.stdout.indexOf('Clearing two-factor authentication environment variables') !== -1,
'Task should have cleared the app-specific password'
);
done();
});
it('app specific password using service endpoint', (done: Mocha.Done) => {
it('app specific password using service endpoint', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0AppSpecificPasswordEndPoint.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 1,
'should have run fastlane pilot. std=' + tr.stdout + ' err=' + tr.stderr
@ -137,36 +127,31 @@ describe('app-store-release L0 Suite', function () {
tr.stdout.indexOf('Clearing two-factor authentication environment variables') !== -1,
'Task should have cleared the app-specific password'
);
done();
});
it('two factor authentication using service endpoint without fastlane session', (done: Mocha.Done) => {
it('two factor authentication using service endpoint without fastlane session', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0AppSpecificPasswordEndPointIncomplete.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('two factor authenitcation app specific password without fastlane session', (done: Mocha.Done) => {
it('two factor authenitcation app specific password without fastlane session', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0AppSpecificPasswordNoFastlaneSession.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('api key using service endpoint', (done: Mocha.Done) => {
it('api key using service endpoint', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ApiKeyEndPoint.js');
@ -179,7 +164,7 @@ describe('app-store-release L0 Suite', function () {
fs.mkdirSync(tempPath);
}
tr.run();
await tr.runAsync();
// Check api_key file first, so we can read it and clean up before other assertions
assert(fs.existsSync(keyFilePath), 'api_key.json file should have been created');
@ -210,67 +195,59 @@ describe('app-store-release L0 Suite', function () {
assert(apiKey.key === 'dummy_string', 'key should be correct');
assert(apiKey.in_house === false, 'in_house should be correct');
assert(apiKey.is_key_content_base64 === true, 'is_key_content_base64 should be correct');
done();
});
it('custom GEM_CACHE env var', (done: Mocha.Done) => {
it('custom GEM_CACHE env var', async () => {
this.timeout(1000);
//L0GemCacheEnvVar.ts sets the GEM_CACHE env var and expects it to be used when fastlane is updated.
let tp = path.join(__dirname, 'L0GemCacheEnvVar.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 3,
'should have run gem install, gem update and fastlane pilot.'
);
assert(tr.succeeded, 'task should have succeeded');
assert(tr.ran('/usr/bin/gem update fastlane -i /usr/bin/customGemCache'));
done();
});
it('testflight - username+password', (done: Mocha.Done) => {
it('testflight - username+password', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightUserPass.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 3,
'should have run gem install, gem update and fastlane pilot.'
);
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - username+password distribute only', (done: Mocha.Done) => {
it('testflight - username+password distribute only', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightUserPassDistributeOnly.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 3,
'should have run gem install, gem update and fastlane pilot.'
);
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - username+password distribute only with build_number', (done: Mocha.Done) => {
it('testflight - username+password distribute only with build_number', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightUserPassDistributeOnlyBuildNumber.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 3,
@ -283,11 +260,9 @@ describe('app-store-release L0 Suite', function () {
'fastlane pilot distribute with build_number should have been run.'
);
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - api key', (done: Mocha.Done) => {
it('testflight - api key', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightApiKey.js');
@ -300,7 +275,7 @@ describe('app-store-release L0 Suite', function () {
fs.mkdirSync(tempPath);
}
tr.run();
await tr.runAsync();
// Check api_key file first, so we can read it and clean up before other assertions
assert(fs.existsSync(keyFilePath), 'api_key.json file should have been created');
@ -334,11 +309,9 @@ describe('app-store-release L0 Suite', function () {
assert(apiKey.key === 'dummy_string', 'key should be correct');
assert(apiKey.in_house === false, 'in_house should be correct');
assert(apiKey.is_key_content_base64 === true, 'is_key_content_base64 should be correct');
done();
});
it('testflight - api key distribute only', (done: Mocha.Done) => {
it('testflight - api key distribute only', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightApiKeyDistributeOnly.js');
@ -351,7 +324,7 @@ describe('app-store-release L0 Suite', function () {
fs.mkdirSync(tempPath);
}
tr.run();
await tr.runAsync();
// Check api_key file first, so we can read it and clean up before other assertions
assert(fs.existsSync(keyFilePath), 'api_key.json file should have been created');
@ -387,30 +360,26 @@ describe('app-store-release L0 Suite', function () {
assert(apiKey.key === 'dummy_string', 'key should be correct');
assert(apiKey.in_house === false, 'in_house should be correct');
assert(apiKey.is_key_content_base64 === true, 'is_key_content_base64 should be correct');
done();
});
it('testflight - username+password - no fastlane install', (done: Mocha.Done) => {
it('testflight - username+password - no fastlane install', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightNoFastlaneInstall.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 1, 'should have only run fastlane pilot.');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - username+password - specific fastlane install', (done: Mocha.Done) => {
it('testflight - username+password - specific fastlane install', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightSpecificFastlaneInstall.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran('/usr/bin/gem uninstall fastlane -a -I'),
'gem uninstall fastlane should have been run.'
@ -424,65 +393,57 @@ describe('app-store-release L0 Suite', function () {
'should have run gem uninstall, gem install and fastlane pilot.'
);
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - username+password - specific fastlane install - no version', (done: Mocha.Done) => {
it('testflight - username+password - specific fastlane install - no version', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightSpecificFastlaneInstallNoVersion.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.stdout.indexOf('Input required: fastlaneToolsSpecificVersion') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('testflight - service endpoint', (done: Mocha.Done) => {
it('testflight - service endpoint', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightServiceEndpoint.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 3,
'should have run gem install, gem update and fastlane pilot.'
);
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - no ipa path', (done: Mocha.Done) => {
it('testflight - no ipa path', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightNoIpaPath.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.stdout.indexOf('Error: loc_mock_IpaPathNotSpecified') >= 0,
'IPA path not specified error should be thrown'
);
assert(tr.failed, 'task should have failed');
done();
});
it('testflight - team id', (done: Mocha.Done) => {
it('testflight - team id', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightTeamId.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane pilot upload -u creds-username -i mypackage.ipa -q teamId -a com.microsoft.test.appId'
@ -495,17 +456,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - team name', (done: Mocha.Done) => {
it('testflight - team name', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightTeamName.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran('fastlane pilot upload -u creds-username -i mypackage.ipa -r teamName'),
'fastlane pilot upload with teamName should have been run.'
@ -516,17 +475,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - team id and team name', (done: Mocha.Done) => {
it('testflight - team id and team name', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightTeamIdTeamName.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran('fastlane pilot upload -u creds-username -i mypackage.ipa -q teamId -r teamName'),
'fastlane pilot upload with teamId and teamName should have been run.'
@ -537,17 +494,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - should skip submission', (done: Mocha.Done) => {
it('testflight - should skip submission', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightShouldSkipSubmission.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran('fastlane pilot upload -u creds-username -i mypackage.ipa --skip_submission true'),
'fastlane pilot upload with skip_submission should have been run.'
@ -558,17 +513,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - should skip waiting for processing', (done: Mocha.Done) => {
it('testflight - should skip waiting for processing', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightShouldSkipWaitingForProcessing.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane pilot upload -u creds-username -i mypackage.ipa --skip_waiting_for_build_processing true'
@ -581,45 +534,41 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - distribute external no release notes', (done: Mocha.Done) => {
it('testflight - distribute external no release notes', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightDistributeToExternalTestersNoReleaseNotes.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 0, 'should not have run any tools.');
assert(
tr.stdout.indexOf('Error: loc_mock_ReleaseNotesRequiredForExternalTesting') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('testflight - distribute external with groups', (done: Mocha.Done) => {
it('testflight - distribute external with groups', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightDistributeToExternalTestersWithGroups.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 1, 'should have run fastlane pilot.');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - one ipa file', (done: Mocha.Done) => {
it('testflight - one ipa file', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightOneIpaFile.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran('fastlane pilot upload -u creds-username -i mypackage.ipa'),
'fastlane pilot upload with one ip file should have been run.'
@ -630,51 +579,45 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - multiple ipa files', (done: Mocha.Done) => {
it('testflight - multiple ipa files', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightMultipleIpaFiles.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 0, 'should not have run any tools.');
assert(
tr.stdout.indexOf('Error: loc_mock_MultipleIpaFilesFound') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('testflight - zero ipa files', (done: Mocha.Done) => {
it('testflight - zero ipa files', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightZeroIpaFiles.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 0, 'should not have run any tools.');
assert(
tr.stdout.indexOf('Error: loc_mock_NoIpaFilesFound') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('testflight - additional arguments', (done: Mocha.Done) => {
it('testflight - additional arguments', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightFastlaneArguments.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran('fastlane pilot upload -u creds-username -i mypackage.ipa -args someadditioanlargs'),
'fastlane pilot upload with one ip file should have been run.'
@ -685,39 +628,33 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('testflight - fastlane macOS', (done: Mocha.Done) => {
it('testflight - fastlane macOS', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightFastlaneMacOS.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(`fastlane pilot upload -u creds-username -P mypackage.pkg`),
'fastlane pilot upload with pkg file should have been run.'
);
done();
});
it('testflight - fastlane too old', (done: Mocha.Done) => {
it('testflight - fastlane too old', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0TestFlightFastlaneTooOld.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 0, 'should not have run any tools.');
assert(tr.failed, 'task should have failed');
done();
});
it('production - api key', (done: Mocha.Done) => {
it('production - api key', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionApiKey.js');
@ -730,7 +667,7 @@ describe('app-store-release L0 Suite', function () {
fs.mkdirSync(tempPath);
}
tr.run();
await tr.runAsync();
// Check api_key file first, so we can read it and clean up before other assertions
assert(fs.existsSync(keyFilePath), 'api_key.json file should have been created');
@ -766,50 +703,44 @@ describe('app-store-release L0 Suite', function () {
assert(apiKey.key === 'dummy_string', 'key should be correct');
assert(apiKey.in_house === false, 'in_house should be correct');
assert(apiKey.is_key_content_base64 === true, 'is_key_content_base64 should be correct');
done();
});
it('production - no bundle id', (done: Mocha.Done) => {
it('production - no bundle id', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionNoBundleId.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 2, 'should have run gem install and gem update.');
assert(
tr.stdout.indexOf('Input required: appIdentifier') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('production - no ipa path', (done: Mocha.Done) => {
it('production - no ipa path', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionNoIpaPath.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.stdout.indexOf('Error: loc_mock_IpaPathNotSpecified') >= 0,
'IPA path not specified error should be thrown'
);
assert(tr.failed, 'task should have failed');
done();
});
it('production - should skip binary upload', (done: Mocha.Done) => {
it('production - should skip binary upload', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionShouldSkipBinaryUpload.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId --skip_binary_upload true -j ios --skip_metadata true --skip_screenshots true --automatic_release false'
@ -822,17 +753,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - team id', (done: Mocha.Done) => {
it('production - team id', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionTeamId.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId -i mypackage.ipa -j ios --skip_metadata true --skip_screenshots true -k teamId --automatic_release false'
@ -845,17 +774,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - team name', (done: Mocha.Done) => {
it('production - team name', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionTeamName.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId -i mypackage.ipa -j ios --skip_metadata true --skip_screenshots true --team_name teamName --automatic_release false'
@ -868,17 +795,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - team id and team name', (done: Mocha.Done) => {
it('production - team id and team name', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionTeamIdTeamName.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId -i mypackage.ipa -j ios --skip_metadata true --skip_screenshots true -k teamId --team_name teamName --automatic_release false'
@ -891,17 +816,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - should submit for review', (done: Mocha.Done) => {
it('production - should submit for review', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionShouldSubmitForReview.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId -i mypackage.ipa -j ios --skip_metadata true --skip_screenshots true --submit_for_review true --automatic_release false'
@ -914,17 +837,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - automatic release', (done: Mocha.Done) => {
it('production - automatic release', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionShouldAutoRelease.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId -i mypackage.ipa -j ios --skip_metadata true --skip_screenshots true --automatic_release true'
@ -937,17 +858,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - upload metadata with metadata path', (done: Mocha.Done) => {
it('production - upload metadata with metadata path', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionUploadMetadataMetadataPath.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId -i mypackage.ipa -j ios -m <path> --skip_screenshots true --automatic_release false'
@ -960,17 +879,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - upload screenshots with screenshots path', (done: Mocha.Done) => {
it('production - upload screenshots with screenshots path', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionUploadScreenshotsScreenshotsPath.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId -i mypackage.ipa -j ios --skip_metadata true -w <path> --automatic_release false'
@ -983,85 +900,75 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - one ipa file', (done: Mocha.Done) => {
it('production - one ipa file', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionOneIpaFile.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 3,
'should have run gem install, gem update and fastlane deliver.'
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - multiple ipa files', (done: Mocha.Done) => {
it('production - multiple ipa files', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionMultipleIpaFiles.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 0, 'should not have run any tools.');
assert(
tr.stdout.indexOf('Error: loc_mock_MultipleIpaFilesFound') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('production - zero ipa files', (done: Mocha.Done) => {
it('production - zero ipa files', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionZeroIpaFiles.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(tr.invokedToolCount === 0, 'should not have run any tools.');
assert(
tr.stdout.indexOf('Error: loc_mock_NoIpaFilesFound') !== -1,
'Task should have written to stdout'
);
assert(tr.failed, 'task should have failed');
done();
});
it('production - fastlane arguments', (done: Mocha.Done) => {
it('production - fastlane arguments', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionFastlaneArguments.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.invokedToolCount === 3,
'should have run gem install, gem update and fastlane deliver.'
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - macOS app', (done: Mocha.Done) => {
it('production - macOS app', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionMacApp.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId -c mypackage.app -j osx --skip_metadata true --skip_screenshots true --submit_for_review true --automatic_release false'
@ -1074,17 +981,15 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
it('production - tvOS app', (done: Mocha.Done) => {
it('production - tvOS app', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0ProductionTVApp.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
tr.run();
await tr.runAsync();
assert(
tr.ran(
'fastlane deliver --force -u creds-username -a com.microsoft.test.appId -i mypackage.ipa -j appletvos --skip_metadata true --skip_screenshots true --submit_for_review true --automatic_release false'
@ -1097,8 +1002,6 @@ describe('app-store-release L0 Suite', function () {
);
//assert(tr.stderr.length === 0, 'should not have written to stderr');
assert(tr.succeeded, 'task should have succeeded');
done();
});
//No tests for every combination of uploadMetadata and metadataPath (one true, one false)

407
Tasks/AppStoreRelease/package-lock.json сгенерированный
Просмотреть файл

@ -11,28 +11,12 @@
"dependencies": {
"@types/mocha": "^5.2.7",
"@types/node": "^20.11.0",
"azure-pipelines-task-lib": "^4.2.0"
"azure-pipelines-task-lib": "^4.17.0"
},
"devDependencies": {
"typescript": "5.1.6"
}
},
"node_modules/@types/concat-stream": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
"integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/form-data": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
"integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/mocha": {
"version": "5.2.7",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
@ -46,32 +30,39 @@
"undici-types": "~5.26.4"
}
},
"node_modules/@types/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
"node_modules/adm-zip": {
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz",
"integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
"license": "MIT",
"engines": {
"node": ">=12.0"
}
},
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
"node_modules/agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"license": "MIT",
"dependencies": {
"debug": "4"
},
"engines": {
"node": ">= 6.0.0"
}
},
"node_modules/azure-pipelines-task-lib": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.2.0.tgz",
"integrity": "sha512-WUj3XxTWVKxcphLaIHB8OULXC1GT18EAHkibvF5nQ86+dhOtn/KQW44axV8D+udDSM5HAMZxOLe93CPGBqcC5w==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.0.tgz",
"integrity": "sha512-WSopDnRAQAnxqKf7SEVHQS88NjCUNDQAc3qE6xqQWEwo8UeaK3UISxHXrVlaW0frjrgMhs3m+RhZPDlyIGYmhA==",
"license": "MIT",
"dependencies": {
"adm-zip": "^0.5.10",
"minimatch": "3.0.5",
"mockery": "^2.1.0",
"nodejs-file-downloader": "^4.11.1",
"q": "^1.5.1",
"semver": "^5.1.0",
"semver": "^5.7.2",
"shelljs": "^0.8.5",
"sync-request": "6.1.0",
"uuid": "^3.0.1"
}
},
@ -89,82 +80,46 @@
"concat-map": "0.0.1"
}
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"node_modules/concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"engines": [
"node >= 0.8"
],
"node_modules/debug": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/form-data": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
"ms": "2.1.2"
},
"engines": {
"node": ">= 0.12"
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/fs.realpath": {
@ -177,27 +132,6 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"node_modules/get-intrinsic": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
"integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-port": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
"integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==",
"engines": {
"node": ">=4"
}
},
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@ -239,44 +173,19 @@
"node": ">= 0.4.0"
}
},
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/http-basic": {
"version": "8.1.3",
"resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
"integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
"node_modules/https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"license": "MIT",
"dependencies": {
"caseless": "^0.12.0",
"concat-stream": "^1.6.2",
"http-response-object": "^3.0.1",
"parse-cache-control": "^1.0.1"
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">=6.0.0"
"node": ">= 6"
}
},
"node_modules/http-response-object": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
"integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
"dependencies": {
"@types/node": "^10.0.3"
}
},
"node_modules/http-response-object/node_modules/@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@ -310,15 +219,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
@ -327,6 +232,7 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@ -345,17 +251,22 @@
"node": "*"
}
},
"node_modules/mockery": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
"integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"license": "MIT"
},
"node_modules/object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
"node_modules/nodejs-file-downloader": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz",
"integrity": "sha512-nI2fKnmJWWFZF6SgMPe1iBodKhfpztLKJTtCtNYGhm/9QXmWa/Pk9Sv00qHgzEvNLe1x7hjGDRor7gcm/ChaIQ==",
"license": "ISC",
"dependencies": {
"follow-redirects": "^1.15.6",
"https-proxy-agent": "^5.0.0",
"mime-types": "^2.1.27",
"sanitize-filename": "^1.6.3"
}
},
"node_modules/once": {
@ -366,11 +277,6 @@
"wrappy": "1"
}
},
"node_modules/parse-cache-control": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
"integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@ -384,19 +290,6 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"node_modules/promise": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
"integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
"dependencies": {
"asap": "~2.0.6"
}
},
"node_modules/q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
@ -406,34 +299,6 @@
"teleport": ">=0.2.0"
}
},
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dependencies": {
"side-channel": "^1.0.4"
},
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/rechoir": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
@ -461,15 +326,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"node_modules/sanitize-filename": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz",
"integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==",
"license": "WTFPL OR ISC",
"dependencies": {
"truncate-utf8-bytes": "^1.0.0"
}
},
"node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"version": "5.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"license": "ISC",
"bin": {
"semver": "bin/semver"
}
@ -490,27 +360,6 @@
"node": ">=4"
}
},
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@ -522,58 +371,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/sync-request": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
"integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
"node_modules/truncate-utf8-bytes": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
"integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
"license": "WTFPL",
"dependencies": {
"http-response-object": "^3.0.1",
"sync-rpc": "^1.2.1",
"then-request": "^6.0.0"
},
"engines": {
"node": ">=8.0.0"
"utf8-byte-length": "^1.0.1"
}
},
"node_modules/sync-rpc": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
"integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
"dependencies": {
"get-port": "^3.1.0"
}
},
"node_modules/then-request": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
"integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
"dependencies": {
"@types/concat-stream": "^1.6.0",
"@types/form-data": "0.0.33",
"@types/node": "^8.0.0",
"@types/qs": "^6.2.31",
"caseless": "~0.12.0",
"concat-stream": "^1.6.0",
"form-data": "^2.2.0",
"http-basic": "^8.1.1",
"http-response-object": "^3.0.1",
"promise": "^8.0.0",
"qs": "^6.4.0"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/then-request/node_modules/@types/node": {
"version": "8.10.66",
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
"integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
},
"node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
"node_modules/typescript": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
@ -592,10 +398,11 @@
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
"node_modules/utf8-byte-length": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz",
"integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==",
"license": "(WTFPL OR MIT)"
},
"node_modules/uuid": {
"version": "3.4.0",

Просмотреть файл

@ -6,7 +6,7 @@
"dependencies": {
"@types/node": "^20.11.0",
"@types/mocha": "^5.2.7",
"azure-pipelines-task-lib": "^4.2.0"
"azure-pipelines-task-lib": "^4.17.0"
},
"devDependencies": {
"typescript": "5.1.6"

Просмотреть файл

@ -13,7 +13,7 @@
"demands": [ "xcode" ],
"version": {
"Major": "1",
"Minor": "236",
"Minor": "245",
"Patch": "0"
},
"minimumAgentVersion": "2.182.1",
@ -426,9 +426,5 @@
"ReleaseNotesRequiresFastlaneSession": "You specified releaseNotes - so you need to provide fastlane session, app specific password only won't work",
"PrecheckInAppPurchasesDisabled": "Precheck will not check In-app purchases because Fastlane doesn't support it with the App Store Connect API Key.",
"FastlaneTooOld": "Testflight upload for macOS apps requires fastlane 2.193.1 or newer."
},
"_buildConfigMapping": {
"Default": "1.233.0",
"Node20-228": "1.234.0"
}
}

Просмотреть файл

@ -15,7 +15,7 @@
],
"version": {
"Major": "1",
"Minor": "236",
"Minor": "245",
"Patch": "0"
},
"minimumAgentVersion": "2.182.1",
@ -428,9 +428,5 @@
"ReleaseNotesRequiresFastlaneSession": "ms-resource:loc.messages.ReleaseNotesRequiresFastlaneSession",
"PrecheckInAppPurchasesDisabled": "ms-resource:loc.messages.PrecheckInAppPurchasesDisabled",
"FastlaneTooOld": "ms-resource:loc.messages.FastlaneTooOld"
},
"_buildConfigMapping": {
"Default": "1.233.0",
"Node20-228": "1.234.0"
}
}

Просмотреть файл

@ -21,24 +21,22 @@ describe('ipa-resign L0 Suite', function () {
/* tslint:enable:no-empty */
this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000);
it('enforce darwin', (done:Mocha.Done) => {
it('enforce darwin', async () => {
this.timeout(1000);
let tp = path.join(__dirname, 'L0EnforceDarwin.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
try {
tr.run();
await tr.runAsync();
assert.equal(true, tr.createdErrorIssue('Error: loc_mock_DarwinOnly'), 'Expected error message was not found');
assert(tr.failed, 'Task should have failed');
done();
} catch (err) {
console.log(tr.stdout);
console.log(tr.stderr);
console.log(err);
done(err);
throw err;
}
});
});

407
Tasks/IpaResign/package-lock.json сгенерированный
Просмотреть файл

@ -11,28 +11,12 @@
"dependencies": {
"@types/mocha": "^5.2.7",
"@types/node": "^20.11.0",
"azure-pipelines-task-lib": "^4.2.0"
"azure-pipelines-task-lib": "^4.17.0"
},
"devDependencies": {
"typescript": "5.1.6"
}
},
"node_modules/@types/concat-stream": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
"integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/form-data": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
"integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/mocha": {
"version": "5.2.7",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
@ -46,32 +30,39 @@
"undici-types": "~5.26.4"
}
},
"node_modules/@types/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
"node_modules/adm-zip": {
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz",
"integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
"license": "MIT",
"engines": {
"node": ">=12.0"
}
},
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
"node_modules/agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"license": "MIT",
"dependencies": {
"debug": "4"
},
"engines": {
"node": ">= 6.0.0"
}
},
"node_modules/azure-pipelines-task-lib": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.2.0.tgz",
"integrity": "sha512-WUj3XxTWVKxcphLaIHB8OULXC1GT18EAHkibvF5nQ86+dhOtn/KQW44axV8D+udDSM5HAMZxOLe93CPGBqcC5w==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.0.tgz",
"integrity": "sha512-WSopDnRAQAnxqKf7SEVHQS88NjCUNDQAc3qE6xqQWEwo8UeaK3UISxHXrVlaW0frjrgMhs3m+RhZPDlyIGYmhA==",
"license": "MIT",
"dependencies": {
"adm-zip": "^0.5.10",
"minimatch": "3.0.5",
"mockery": "^2.1.0",
"nodejs-file-downloader": "^4.11.1",
"q": "^1.5.1",
"semver": "^5.1.0",
"semver": "^5.7.2",
"shelljs": "^0.8.5",
"sync-request": "6.1.0",
"uuid": "^3.0.1"
}
},
@ -89,82 +80,46 @@
"concat-map": "0.0.1"
}
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"node_modules/concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"engines": [
"node >= 0.8"
],
"node_modules/debug": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/form-data": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
"ms": "2.1.2"
},
"engines": {
"node": ">= 0.12"
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/fs.realpath": {
@ -177,27 +132,6 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"node_modules/get-intrinsic": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
"integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-port": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
"integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==",
"engines": {
"node": ">=4"
}
},
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@ -239,44 +173,19 @@
"node": ">= 0.4.0"
}
},
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/http-basic": {
"version": "8.1.3",
"resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
"integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
"node_modules/https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"license": "MIT",
"dependencies": {
"caseless": "^0.12.0",
"concat-stream": "^1.6.2",
"http-response-object": "^3.0.1",
"parse-cache-control": "^1.0.1"
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">=6.0.0"
"node": ">= 6"
}
},
"node_modules/http-response-object": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
"integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
"dependencies": {
"@types/node": "^10.0.3"
}
},
"node_modules/http-response-object/node_modules/@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@ -310,15 +219,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
@ -327,6 +232,7 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@ -345,17 +251,22 @@
"node": "*"
}
},
"node_modules/mockery": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
"integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"license": "MIT"
},
"node_modules/object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
"node_modules/nodejs-file-downloader": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz",
"integrity": "sha512-nI2fKnmJWWFZF6SgMPe1iBodKhfpztLKJTtCtNYGhm/9QXmWa/Pk9Sv00qHgzEvNLe1x7hjGDRor7gcm/ChaIQ==",
"license": "ISC",
"dependencies": {
"follow-redirects": "^1.15.6",
"https-proxy-agent": "^5.0.0",
"mime-types": "^2.1.27",
"sanitize-filename": "^1.6.3"
}
},
"node_modules/once": {
@ -366,11 +277,6 @@
"wrappy": "1"
}
},
"node_modules/parse-cache-control": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
"integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@ -384,19 +290,6 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"node_modules/promise": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
"integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
"dependencies": {
"asap": "~2.0.6"
}
},
"node_modules/q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
@ -406,34 +299,6 @@
"teleport": ">=0.2.0"
}
},
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dependencies": {
"side-channel": "^1.0.4"
},
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/rechoir": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
@ -461,15 +326,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"node_modules/sanitize-filename": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz",
"integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==",
"license": "WTFPL OR ISC",
"dependencies": {
"truncate-utf8-bytes": "^1.0.0"
}
},
"node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"version": "5.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"license": "ISC",
"bin": {
"semver": "bin/semver"
}
@ -490,27 +360,6 @@
"node": ">=4"
}
},
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@ -522,58 +371,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/sync-request": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
"integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
"node_modules/truncate-utf8-bytes": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
"integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
"license": "WTFPL",
"dependencies": {
"http-response-object": "^3.0.1",
"sync-rpc": "^1.2.1",
"then-request": "^6.0.0"
},
"engines": {
"node": ">=8.0.0"
"utf8-byte-length": "^1.0.1"
}
},
"node_modules/sync-rpc": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
"integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
"dependencies": {
"get-port": "^3.1.0"
}
},
"node_modules/then-request": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
"integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
"dependencies": {
"@types/concat-stream": "^1.6.0",
"@types/form-data": "0.0.33",
"@types/node": "^8.0.0",
"@types/qs": "^6.2.31",
"caseless": "~0.12.0",
"concat-stream": "^1.6.0",
"form-data": "^2.2.0",
"http-basic": "^8.1.1",
"http-response-object": "^3.0.1",
"promise": "^8.0.0",
"qs": "^6.4.0"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/then-request/node_modules/@types/node": {
"version": "8.10.66",
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
"integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
},
"node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
"node_modules/typescript": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
@ -592,10 +398,11 @@
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
"node_modules/utf8-byte-length": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz",
"integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==",
"license": "(WTFPL OR MIT)"
},
"node_modules/uuid": {
"version": "3.4.0",

Просмотреть файл

@ -4,7 +4,7 @@
"description": "Azure Pipelines task to resign an ipa file",
"main": "ipa-resign.js",
"dependencies": {
"azure-pipelines-task-lib": "^4.2.0",
"azure-pipelines-task-lib": "^4.17.0",
"@types/node": "^20.11.0",
"@types/mocha": "^5.2.7"
},

Просмотреть файл

@ -12,7 +12,7 @@
"demands": [ "xcode" ],
"version": {
"Major": "1",
"Minor": "234",
"Minor": "245",
"Patch": "0"
},
"minimumAgentVersion": "2.182.1",
@ -233,9 +233,5 @@
"MultipleFilesFound": "Multiple matching files were found with search pattern: %s. The pattern must match exactly one file.",
"P12FilePathNotAPath": "Path provided for P12 file is not a path: %s",
"ProvisionFilePathNotAPath": "Path provided for provisioning profile is not a path: %s"
},
"_buildConfigMapping": {
"Default": "1.233.0",
"Node20-228": "1.234.0"
}
}

Просмотреть файл

@ -14,7 +14,7 @@
],
"version": {
"Major": "1",
"Minor": "234",
"Minor": "245",
"Patch": "0"
},
"minimumAgentVersion": "2.182.1",
@ -236,9 +236,5 @@
"P12FilePathNotAPath": "ms-resource:loc.messages.P12FilePathNotAPath",
"ProvisionFilePathNotAPath": "ms-resource:loc.messages.ProvisionFilePathNotAPath"
},
"_buildConfigMapping": {
"Default": "1.233.0",
"Node20-228": "1.234.0"
},
"helpMarkDown": "ms-resource:loc.helpMarkDown"
}

Просмотреть файл

@ -2,7 +2,7 @@
"manifestVersion": 1,
"id": "app-store",
"name": "Apple App Store",
"version": "1.234.0",
"version": "1.245.0",
"publisher": "ms-vsclient",
"description": "Provides tasks for publishing to Apple's App Store from a TFS/Azure DevOps build or release pipeline",
"categories": [

Просмотреть файл

@ -40,7 +40,7 @@ extends:
steps:
- task: NodeTool@0
inputs:
versionSpec: '20.11.x'
versionSpec: '20.x'
- task: Npm@0
displayName: 'npm install'

Просмотреть файл

@ -4,7 +4,9 @@
*/
/** Target mocha version for running tests */
exports.MOCHA_TARGET_VERSION = '6.2.3';
exports.MOCHA_TARGET_VERSION = '10.7.3';
/** Minimum node version for MOCHA_TARGET_VERSION */
exports.MOCHA_NODE_VERSION = 14;
/** Current typescript version */
exports.TSC_CURRENT_VERSION = '5.1.6';
/** Minimum supported node version */

Просмотреть файл

@ -24,6 +24,7 @@ const constants = require('./dev-dependencies-constants');
const MOCHA_TARGET_VERSION = constants.MOCHA_TARGET_VERSION;
const TSC_CURRENT_VERSION = constants.TSC_CURRENT_VERSION;
const MOCHA_NODE_VERSION = constants.MOCHA_NODE_VERSION;
const allowedTypescriptVersions = [TSC_CURRENT_VERSION];
@ -993,7 +994,7 @@ exports.storeNonAggregatedZip = storeNonAggregatedZip;
var installNode = async function (nodeVersion) {
const versions = {
20: 'v20.11.0',
20: 'v20.17.0',
16: 'v16.17.1',
14: 'v14.10.1',
10: 'v10.24.1',
@ -1051,11 +1052,11 @@ var installNode = async function (nodeVersion) {
exports.installNode = installNode;
var getTaskNodeVersion = function(buildPath, taskName) {
const nodes = [];
let nodes = [];
var taskJsonPath = path.join(buildPath, taskName, "task.json");
if (!fs.existsSync(taskJsonPath)) {
console.warn('Unable to find task.json, defaulting to use Node 14');
nodes.push(14);
console.warn('Unable to find task.json, defaulting to use Node 20');
nodes.push(20);
return nodes;
}
var taskJsonContents = fs.readFileSync(taskJsonPath, { encoding: 'utf-8' });
@ -1069,11 +1070,12 @@ var getTaskNodeVersion = function(buildPath, taskName) {
nodes.push(parseInt(version) || 6);
}
nodes = nodes.filter( version => version > MOCHA_NODE_VERSION);
if (nodes.length) {
return nodes;
}
console.warn('Unable to determine execution type from task.json, defaulting to use Node 10');
console.warn('Unable to determine execution type from task.json, defaulting to use Node 20');
nodes.push(20);
return nodes;
}

Просмотреть файл

@ -170,6 +170,7 @@ target.build = async function() {
target.test = async function() {
ensureTool('tsc', '--version', `Version ${TSC_CURRENT_VERSION}`);
ensureTool('mocha', '--version', MOCHA_TARGET_VERSION);
process.env['SYSTEM_DEBUG'] = 'true';
// run the tests
var suiteType = options.suite || 'L0';

1683
package-lock.json сгенерированный

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -14,20 +14,20 @@
},
"homepage": "https://github.com/Microsoft/app-store-vsts-extension",
"devDependencies": {
"@types/mocha": "^5.2.7",
"@types/mocha": "^10.0.7",
"@types/node": "^20.11.0",
"@types/q": "^1.0.7",
"adm-zip": "^0.4.13",
"del": "^3.0.0",
"minimatch": "3.0.4",
"minimatch": "^3.1.2",
"minimist": "^1.2.6",
"mocha": "6.2.3",
"mocha": "^10.7.3",
"node-uuid": "1.4.6",
"q": "1.4.1",
"semver": "4.3.3",
"shelljs": "^0.8.5",
"nodejs-file-downloader": "^4.11.1",
"tfx-cli": "^0.11.0",
"q": "1.4.1",
"semver": "^7.6.3",
"shelljs": "^0.8.5",
"tfx-cli": "^0.17.0",
"tslint": "^5.20.1",
"typescript": "5.1.6",
"validator": "13.7.0",