semantic-release-gh
Version:
The official GitHub plugin, modified to accept repositoryUrl as a parameter
91 lines • 4.47 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PublishGitHub = void 0;
const tslib_1 = require("tslib");
const debug_1 = tslib_1.__importDefault(require("debug"));
const fs_extra_1 = require("fs-extra");
const lodash_1 = require("lodash");
const mime_1 = tslib_1.__importDefault(require("mime"));
const node_fs_1 = require("node:fs");
const node_path_1 = tslib_1.__importDefault(require("node:path"));
const constants_1 = require("./definitions/constants");
const get_client_1 = require("./get-client");
const glob_assets_1 = require("./glob-assets");
const is_prerelease_1 = require("./is-prerelease");
const parse_github_url_1 = require("./parse-github-url");
const resolve_config_1 = require("./resolve-config");
const debug = (0, debug_1.default)('semantic-release:github');
const PublishGitHub = async (pluginConfig, context) => {
const { cwd, options, branch, nextRelease: { name, gitTag, notes }, logger } = context;
(0, node_fs_1.writeFileSync)('./.release.json', JSON.stringify(context.nextRelease));
logger.log('Wrote release information to ./.release.json');
debug('options: %O', options);
const { githubToken, githubUrl, githubApiPathPrefix, proxy, assets, repositoryUrl } = (0, resolve_config_1.ResolveConfig)(pluginConfig, context);
const { owner, repo } = (0, parse_github_url_1.ParseGitHubURL)(repositoryUrl);
const github = (0, get_client_1.GetClient)({ githubApiPathPrefix, githubToken, githubUrl, proxy });
let body = notes;
try {
const packageJson = JSON.parse((0, fs_extra_1.readFileSync)('package.json').toString());
body = body.replaceAll(packageJson.blueprint.repository.gitlab, packageJson.blueprint.repository.github);
}
catch (error) {
debug('error: %O', error);
}
const release = {
body,
name,
owner,
prerelease: (0, is_prerelease_1.IsPrerelease)(branch.name),
repo,
tag_name: gitTag,
target_commitish: branch.name
};
debug('release object: %O', release);
if (!assets || assets.length === 0) {
const { data: { html_url: url, id: releaseId } } = await github.repos.createRelease(release);
logger.log('Published GitHub release: %s', url);
return { id: releaseId, name: constants_1.RELEASE_NAME, url };
}
const draftRelease = Object.assign(Object.assign({}, release), { draft: true });
const { data: { upload_url: uploadUrl, id: releaseId } } = await github.repos.createRelease(draftRelease);
const globbedAssets = await (0, glob_assets_1.GlobAssets)(context, assets);
debug('globed assets: %o', globbedAssets);
await Promise.all(globbedAssets.map(async (asset) => {
const filePath = (0, lodash_1.isPlainObject)(asset) ? asset.path : asset;
let file = '';
try {
file = await (0, fs_extra_1.stat)(node_path_1.default.resolve(cwd, filePath));
}
catch (_a) {
logger.error('The asset %s cannot be read, and will be ignored.', filePath);
return;
}
if (!file || !file.isFile()) {
logger.error('The asset %s is not a file, and will be ignored.', filePath);
return;
}
const fileName = (0, lodash_1.template)(asset.name || node_path_1.default.basename(filePath))(context);
const upload = {
data: await (0, fs_extra_1.readFile)(node_path_1.default.resolve(cwd, filePath)),
headers: {
'content-length': file.size,
'content-type': mime_1.default.getType(node_path_1.default.extname(fileName)) || 'text/plain'
},
name: fileName,
url: uploadUrl
};
debug('file path: %o', filePath);
debug('file name: %o', fileName);
if ((0, lodash_1.isPlainObject)(asset) && asset.label) {
;
upload.label = (0, lodash_1.template)(asset.label)(context);
}
const { data: { browser_download_url: downloadUrl } } = await github.repos.uploadReleaseAsset(upload);
logger.log('Published file %s', downloadUrl);
}));
const { data: { html_url: url } } = await github.repos.updateRelease({ draft: false, owner, release_id: releaseId, repo });
logger.log('Published GitHub release: %s', url);
return { id: releaseId, name: constants_1.RELEASE_NAME, url };
};
exports.PublishGitHub = PublishGitHub;
//# sourceMappingURL=publish.js.map