UNPKG

appcenter-cli

Version:

Command line tool for Visual Studio App Center

92 lines (91 loc) 5.04 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const commandline_1 = require("../../../util/commandline"); const generate_command_1 = require("../lib/generate-command"); const help_messages_1 = require("../lib/help-messages"); const pfs = require("../../../util/misc/promisfied-fs"); const request = require("request"); const path = require("path"); let GenerateUITestCommand = class GenerateUITestCommand extends generate_command_1.GenerateCommand { constructor(args) { super(args); this.templatePathAndroid = path.join(__dirname, "../lib/templates/uitest/android"); this.templatePathiOS = path.join(__dirname, "../lib/templates/uitest/ios"); } processTemplate() { return __awaiter(this, void 0, void 0, function* () { const platform = this.isIOS() ? "iOS" : "Android"; const packageFilePath = path.join(this.outputPath, `AppCenter.UITest.${platform}/packages.config`); const projectFilePath = path.join(this.outputPath, `AppCenter.UITest.${platform}/AppCenter.UITest.${platform}.csproj`); let latestVersion; try { latestVersion = yield this.getLatestUITestVersionNumber(); } catch (e) { console.warn("Can't retrieve latest UITest version. Using default version from template. Details: " + e); return; } try { // Replace version inside packages.config file yield this.replaceVersionInFile(packageFilePath, /(id="Xamarin\.UITest" version=")(\d+(\.\d+)+)/, latestVersion); // Replace version inside *.csproj file yield this.replaceVersionInFile(projectFilePath, /(packages\\Xamarin\.UITest\.)(\d+(\.\d+)+)/, latestVersion); } catch (e) { yield this.copyTemplates(); console.warn("Can't update UITest version. Using default templates. Details: " + e); return; } }); } getLatestUITestVersionNumber() { return __awaiter(this, void 0, void 0, function* () { // Retrieve the latest stable version number of Xamarin.UITest via NuGet api return new Promise((resolve, reject) => { const UITestNugetApiUrl = "https://api.nuget.org/v3-flatcontainer/Xamarin.UITest/index.json"; request({ url: UITestNugetApiUrl, json: true }, (error, response, body) => { if (!error && response.statusCode === 200) { const stableVersions = body.versions.filter((version) => version.indexOf("dev") === -1 && version.indexOf("beta") === -1); if (stableVersions.length) { resolve(stableVersions[stableVersions.length - 1]); } else { reject("Can't load latest UITest NuGet version number: response does not contain valid versions"); } } else { reject(`Can't load latest UITest NuGet version number: ${response.statusCode}: ${error}`); } }); }); }); } replaceVersionInFile(filePath, regex, version) { return __awaiter(this, void 0, void 0, function* () { let fileContent = yield pfs.readFile(filePath, "utf8"); fileContent = fileContent.replace(regex, `$1${version}`); yield pfs.writeFile(filePath, fileContent); }); } }; GenerateUITestCommand = __decorate([ commandline_1.help(help_messages_1.Messages.TestCloud.Commands.GenerateUITest) ], GenerateUITestCommand); exports.default = GenerateUITestCommand;