@qiwi/semantic-release-gh-pages-plugin
Version:
gh-pages publishing plugin for semantic-release
57 lines (56 loc) • 2.15 kB
JavaScript
/** @module semantic-release-gh-pages-plugin */
import { __awaiter } from "tslib";
import AggregateError from 'aggregate-error';
import { isEqual } from 'lodash';
import path from 'node:path';
import { resolveConfig } from './config';
import { publish as ghpagesPublish } from './ghpages';
import { render } from './tpl';
import { isDirectory } from './util';
export * from './defaults';
let _config;
export const verifyConditions = (pluginConfig, context) => __awaiter(void 0, void 0, void 0, function* () {
const { logger } = context;
const config = yield resolveConfig(pluginConfig, context, undefined, 'publish');
const { token, repo, src, ciBranch, docsBranch } = config;
if (!docsBranch) {
logger.log(`gh-pages [skipped]: 'docsBranch' is empty for ${ciBranch}`);
return;
}
logger.log('verify gh-pages config');
if (!token) {
throw new AggregateError(['env.GH_TOKEN is required by gh-pages plugin']);
}
if (!repo) {
throw new AggregateError(['package.json repository.url does not match github.com pattern']);
}
if (!isDirectory(src)) {
logger.error('Resolved docs src path=', path.resolve(src));
throw new AggregateError(['docs source directory does not exist']);
}
Object.assign(pluginConfig, config);
_config = config;
});
export const publish = (pluginConfig, context) => __awaiter(void 0, void 0, void 0, function* () {
const config = yield resolveConfig(pluginConfig, context, undefined, 'publish');
const { logger, env, cwd } = context;
const { msg, docsBranch, ciBranch } = config;
const message = render(msg, context, logger);
const pushOpts = Object.assign(Object.assign({}, config), { message,
logger,
env,
cwd });
if (!docsBranch) {
logger.log(`gh-pages [skipped]: 'docsBranch' is empty for ${ciBranch}`);
return;
}
if (!isEqual(_config, config)) {
yield verifyConditions(pluginConfig, context);
}
logger.log('Publishing docs via gh-pages');
return ghpagesPublish(pushOpts);
});
export default {
verifyConditions,
publish
};