UNPKG

semantic-release-gh

Version:

The official GitHub plugin, modified to accept repositoryUrl as a parameter

91 lines 4.47 kB
"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