@lamantin/fastpush
Version:
Typed fastlane frontend for pushing builds to store
148 lines • 6.82 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.publish = exports.defaultHooks = void 0;
const shelljs_1 = __importDefault(require("shelljs"));
const utils_1 = require("./cli/utils");
const fastlane_1 = require("./fastlane");
const android_1 = require("./fastlane/android");
const gym_1 = require("./fastlane/ios/gym");
const match_1 = require("./fastlane/ios/match");
const pilot_1 = require("./fastlane/ios/pilot");
const incrementPackageJson_1 = require("./utils/increment/incrementPackageJson");
const platform_1 = require("./utils/platform");
const AndroidPlatform_1 = require("./utils/platform/AndroidPlatform");
const ui_1 = require("./ui");
const utils_2 = require("./utils");
const git_1 = require("./utils/git/git");
exports.defaultHooks = {
onFinish: null,
onStart: (options) => __awaiter(void 0, void 0, void 0, function* () {
if (options.env) {
if (!options.silent) {
ui_1.ui.message('Add environment file:' + options.env);
}
utils_2.env.add(options.env);
}
if (options.silent) {
// don't assert clean
// don't assert environment
}
else {
yield git_1.git.assertClean();
yield utils_2.env.assert();
}
}),
provideAndroidLanes: (options) => {
const buildPayload = {
build_type: 'Release',
};
if (options.flavor) {
// const flavorCapitalized = options.flavor.charAt(0).toUpperCase() + options.flavor.substring(1)
buildPayload.flavor = options.flavor;
}
return [
android_1.gradle('clean'),
// todo: validate GradleArgTask
android_1.gradle(options.build, buildPayload),
android_1.supply({
track: options.track,
skip_upload_changelogs: options.skip,
skip_upload_images: options.skip,
skip_upload_metadata: options.skip,
skip_upload_screenshots: options.skip,
}),
];
},
provideIOSLanes: (options) => {
return [
match_1.match('appstore'),
gym_1.gym({ clean: true, scheme: options.scheme }),
pilot_1.pilot({ skip_waiting_for_build_processing: true, skip_submission: true }),
];
},
onPostPublish: (platform, versions, buildNumbers) => __awaiter(void 0, void 0, void 0, function* () {
const [oldVersion, version] = versions;
const [oldBuild, build] = buildNumbers;
const tag = `${platform.type}/${version}-${build}`;
const whoami = process.env.USER || '';
git_1.git.commit(`Up version ${tag}`);
git_1.git.tag(tag, `Up version by ${whoami}`);
git_1.git.push();
}),
};
function publish(options, passedHooks) {
var _a, _b, _c;
return __awaiter(this, void 0, void 0, function* () {
ui_1.ui.success('==fastpush==');
ui_1.ui.success('Setup for project: ' + options.project);
shelljs_1.default.cd(options.project);
// child_process.execSync('cd ' + options.project)
const hooks = Object.assign(Object.assign({}, exports.defaultHooks), passedHooks);
yield ((_a = hooks.onStart) === null || _a === void 0 ? void 0 : _a.call(hooks, options));
let platforms = [];
if (options.android) {
platforms.push('android');
}
if (options.ios) {
platforms.push('ios');
}
ui_1.ui.success(`Publishing for: [${platforms.join(', ')}]`);
try {
if (options.silent) {
// don't apply changes to platforms
if (!platforms || platforms.length <= 0) {
throw 'You should specify at least 1 platform for processing: ' + platform_1.platformTypes;
}
}
else {
platforms = yield utils_1.assertPlatforms(platforms);
}
const [oldVersion, newVersion] = yield incrementPackageJson_1.incrementPackageJson(options.increment, `${options.project}/package.json`);
ui_1.ui.success(`Up package.json version from [${oldVersion}] -> [${newVersion}]`);
if (platforms.includes('android')) {
const androidPlatform = new AndroidPlatform_1.AndroidPlatform(options.project);
yield distribute(options, androidPlatform, newVersion, hooks);
}
if (platforms.includes('ios')) {
yield distribute(options, new platform_1.IOSPlatform(options.project), newVersion, hooks);
}
yield ((_b = hooks.onFinish) === null || _b === void 0 ? void 0 : _b.call(hooks));
}
catch (e) {
yield ((_c = hooks.onError) === null || _c === void 0 ? void 0 : _c.call(hooks, e));
}
});
}
exports.publish = publish;
function distribute(options, platform, version, hooks) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const [oldBuildNumber, newBuildNumber] = yield platform.incrementBuildNumber();
ui_1.ui.success(`Update ${platform.type} versionCode [${oldBuildNumber}] -> [${newBuildNumber}]`);
const [oldVersion, newVersion] = yield platform.setVersionName(version);
ui_1.ui.success(`Update ${platform.type} versionName [${oldVersion}] -> [${newVersion}]`);
if (platform.type === 'ios') {
yield fastlane_1.ios(hooks.provideIOSLanes(options), options.project);
}
else if (platform.type === 'android') {
yield android_1.android(hooks.provideAndroidLanes(options), options.project);
}
else {
throw `Unexpected platform type ${platform.type}`;
}
yield ((_a = hooks.onPostPublish) === null || _a === void 0 ? void 0 : _a.call(hooks, platform, [oldVersion, newVersion], [oldBuildNumber, newBuildNumber]));
});
}
//# sourceMappingURL=publish.js.map