UNPKG

19.5 kBSource Map (JSON)View Raw
1{"version":3,"file":"gitHubPublisher.js","sourceRoot":"","sources":["../src/gitHubPublisher.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, InvalidConfigurationError, isEmptyOrSpaces, isEnvTrue, isTokenCharValid, log } from \"builder-util\"\nimport { configureRequestOptions, GithubOptions, HttpError, parseJson } from \"builder-util-runtime\"\nimport { Fields } from \"builder-util/out/log\"\nimport { httpExecutor } from \"builder-util/out/nodeHttpExecutor\"\nimport { ClientRequest } from \"http\"\nimport { Lazy } from \"lazy-val\"\nimport * as mime from \"mime\"\nimport { parse as parseUrl, UrlWithStringQuery } from \"url\"\nimport { getCiTag, HttpPublisher, PublishContext, PublishOptions } from \"./publisher\"\n\nexport interface Release {\n id: number\n tag_name: string\n\n draft: boolean\n prerelease: boolean\n\n published_at: string\n\n upload_url: string\n}\n\ninterface Asset {\n id: number\n name: string\n}\n\nexport class GitHubPublisher extends HttpPublisher {\n private readonly tag: string\n readonly _release = new Lazy(() => (this.token === \"__test__\" ? Promise.resolve(null as any) : this.getOrCreateRelease()))\n\n private readonly token: string\n\n readonly providerName = \"github\"\n\n private readonly releaseType: \"draft\" | \"prerelease\" | \"release\"\n\n private releaseLogFields: Fields | null = null\n\n constructor(context: PublishContext, private readonly info: GithubOptions, private readonly version: string, private readonly options: PublishOptions = {}) {\n super(context, true)\n\n let token = info.token\n if (isEmptyOrSpaces(token)) {\n token = process.env.GH_TOKEN || process.env.GITHUB_TOKEN\n if (isEmptyOrSpaces(token)) {\n throw new InvalidConfigurationError(`GitHub Personal Access Token is not set, neither programmatically, nor using env \"GH_TOKEN\"`)\n }\n\n token = token.trim()\n\n if (!isTokenCharValid(token)) {\n throw new InvalidConfigurationError(`GitHub Personal Access Token (${JSON.stringify(token)}) contains invalid characters, please check env \"GH_TOKEN\"`)\n }\n }\n\n this.token = token\n\n if (version.startsWith(\"v\")) {\n throw new InvalidConfigurationError(`Version must not start with \"v\": ${version}`)\n }\n\n this.tag = info.vPrefixedTagName === false ? version : `v${version}`\n\n if (isEnvTrue(process.env.EP_DRAFT)) {\n this.releaseType = \"draft\"\n log.info({ reason: \"env EP_DRAFT is set to true\" }, \"GitHub provider release type is set to draft\")\n } else if (isEnvTrue(process.env.EP_PRE_RELEASE) || isEnvTrue(process.env.EP_PRELEASE) /* https://github.com/electron-userland/electron-builder/issues/2878 */) {\n this.releaseType = \"prerelease\"\n log.info({ reason: \"env EP_PRE_RELEASE is set to true\" }, \"GitHub provider release type is set to prerelease\")\n } else if (info.releaseType != null) {\n this.releaseType = info.releaseType\n } else if ((options as any).prerelease) {\n this.releaseType = \"prerelease\"\n } else {\n // noinspection PointlessBooleanExpressionJS\n this.releaseType = (options as any).draft === false ? \"release\" : \"draft\"\n }\n }\n\n private async getOrCreateRelease(): Promise<Release | null> {\n const logFields = {\n tag: this.tag,\n version: this.version,\n }\n\n // we don't use \"Get a release by tag name\" because \"tag name\" means existing git tag, but we draft release and don't create git tag\n const releases = await this.githubRequest<Array<Release>>(`/repos/${this.info.owner}/${this.info.repo}/releases`, this.token)\n for (const release of releases) {\n if (!(release.tag_name === this.tag || release.tag_name === this.version)) {\n continue\n }\n\n if (release.draft) {\n return release\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1197\n // https://github.com/electron-userland/electron-builder/issues/2072\n if (this.releaseType === \"draft\") {\n this.releaseLogFields = {\n reason: \"existing type not compatible with publishing type\",\n ...logFields,\n existingType: release.prerelease ? \"pre-release\" : \"release\",\n publishingType: this.releaseType,\n }\n log.warn(this.releaseLogFields, \"GitHub release not created\")\n return null\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1133\n // https://github.com/electron-userland/electron-builder/issues/2074\n // if release created < 2 hours — allow to upload\n const publishedAt = release.published_at == null ? null : Date.parse(release.published_at)\n if (!isEnvTrue(process.env.EP_GH_IGNORE_TIME) && publishedAt != null && Date.now() - publishedAt > 2 * 3600 * 1000) {\n // https://github.com/electron-userland/electron-builder/issues/1183#issuecomment-275867187\n this.releaseLogFields = {\n reason: \"existing release published more than 2 hours ago\",\n ...logFields,\n date: new Date(publishedAt).toString(),\n }\n log.warn(this.releaseLogFields, \"GitHub release not created\")\n return null\n }\n return release\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1835\n if (this.options.publish === \"always\" || getCiTag() != null) {\n log.info(\n {\n reason: \"release doesn't exist\",\n ...logFields,\n },\n `creating GitHub release`\n )\n return this.createRelease()\n }\n\n this.releaseLogFields = {\n reason: 'release doesn\\'t exist and not created because \"publish\" is not \"always\" and build is not on tag',\n ...logFields,\n }\n return null\n }\n\n private async overwriteArtifact(fileName: string, release: Release) {\n // delete old artifact and re-upload\n log.warn({ file: fileName, reason: \"already exists on GitHub\" }, \"overwrite published file\")\n\n const assets = await this.githubRequest<Array<Asset>>(`/repos/${this.info.owner}/${this.info.repo}/releases/${release.id}/assets`, this.token, null)\n for (const asset of assets) {\n if (asset.name === fileName) {\n await this.githubRequest<void>(`/repos/${this.info.owner}/${this.info.repo}/releases/assets/${asset.id}`, this.token, null, \"DELETE\")\n return\n }\n }\n\n log.debug({ file: fileName, reason: \"not found on GitHub\" }, \"trying to upload again\")\n }\n\n protected async doUpload(fileName: string, arch: Arch, dataLength: number, requestProcessor: (request: ClientRequest, reject: (error: Error) => void) => void): Promise<any> {\n const release = await this._release.value\n if (release == null) {\n log.warn({ file: fileName, ...this.releaseLogFields }, \"skipped publishing\")\n return\n }\n\n const parsedUrl = parseUrl(`${release.upload_url.substring(0, release.upload_url.indexOf(\"{\"))}?name=${fileName}`)\n return await this.doUploadFile(0, parsedUrl, fileName, dataLength, requestProcessor, release)\n }\n\n private doUploadFile(\n attemptNumber: number,\n parsedUrl: UrlWithStringQuery,\n fileName: string,\n dataLength: number,\n requestProcessor: (request: ClientRequest, reject: (error: Error) => void) => void,\n release: any\n ): Promise<any> {\n return httpExecutor\n .doApiRequest(\n configureRequestOptions(\n {\n protocol: parsedUrl.protocol,\n hostname: parsedUrl.hostname,\n path: parsedUrl.path,\n method: \"POST\",\n headers: {\n accept: \"application/vnd.github.v3+json\",\n \"Content-Type\": mime.getType(fileName) || \"application/octet-stream\",\n \"Content-Length\": dataLength,\n },\n },\n this.token\n ),\n this.context.cancellationToken,\n requestProcessor\n )\n .catch(e => {\n if (e.statusCode === 422 && e.description != null && e.description.errors != null && e.description.errors[0].code === \"already_exists\") {\n return this.overwriteArtifact(fileName, release).then(() => this.doUploadFile(attemptNumber, parsedUrl, fileName, dataLength, requestProcessor, release))\n }\n\n if (attemptNumber > 3) {\n return Promise.reject(e)\n } else {\n return new Promise((resolve, reject) => {\n const newAttemptNumber = attemptNumber + 1\n setTimeout(() => {\n this.doUploadFile(newAttemptNumber, parsedUrl, fileName, dataLength, requestProcessor, release).then(resolve).catch(reject)\n }, newAttemptNumber * 2000)\n })\n }\n })\n }\n\n private createRelease() {\n return this.githubRequest<Release>(`/repos/${this.info.owner}/${this.info.repo}/releases`, this.token, {\n tag_name: this.tag,\n draft: this.releaseType === \"draft\",\n prerelease: this.releaseType === \"prerelease\",\n })\n }\n\n // test only\n //noinspection JSUnusedGlobalSymbols\n async getRelease(): Promise<any> {\n return this.githubRequest<Release>(`/repos/${this.info.owner}/${this.info.repo}/releases/${(await this._release.value)!.id}`, this.token)\n }\n\n //noinspection JSUnusedGlobalSymbols\n async deleteRelease(): Promise<any> {\n if (!this._release.hasValue) {\n return\n }\n\n const release = await this._release.value\n for (let i = 0; i < 3; i++) {\n try {\n return await this.githubRequest(`/repos/${this.info.owner}/${this.info.repo}/releases/${release.id}`, this.token, null, \"DELETE\")\n } catch (e) {\n if (e instanceof HttpError) {\n if (e.statusCode === 404) {\n log.warn({ releaseId: release.id, reason: \"doesn't exist\" }, \"cannot delete release\")\n return\n } else if (e.statusCode === 405 || e.statusCode === 502) {\n continue\n }\n }\n\n throw e\n }\n }\n\n log.warn({ releaseId: release.id }, \"cannot delete release\")\n }\n\n private githubRequest<T>(path: string, token: string | null, data: { [name: string]: any } | null = null, method?: \"GET\" | \"DELETE\" | \"PUT\"): Promise<T> {\n // host can contains port, but node http doesn't support host as url does\n const baseUrl = parseUrl(`https://${this.info.host || \"api.github.com\"}`)\n return parseJson(\n httpExecutor.request(\n configureRequestOptions(\n {\n protocol: baseUrl.protocol,\n hostname: baseUrl.hostname,\n port: baseUrl.port as any,\n path: this.info.host != null && this.info.host !== \"github.com\" ? `/api/v3${path.startsWith(\"/\") ? path : `/${path}`}` : path,\n headers: { accept: \"application/vnd.github.v3+json\" },\n },\n token,\n method\n ),\n this.context.cancellationToken,\n data\n )\n )\n }\n\n toString() {\n return `Github (owner: ${this.info.owner}, project: ${this.info.repo}, version: ${this.version})`\n }\n}\n"]}
\No newline at end of file