UNPKG

14.5 kBSource Map (JSON)View Raw
1{
2 "version": 3,
3 "file": "gitHubPublisher.js",
4 "sourceRoot": "",
5 "sources": [
6 "../src/gitHubPublisher.ts"
7 ],
8 "names": [],
9 "mappings": "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",
10 "sourcesContent": [
11 "import BluebirdPromise from \"bluebird-lst-c\"\nimport { configureRequestOptions, HttpError } from \"electron-builder-http\"\nimport { GithubOptions } from \"electron-builder-http/out/publishOptions\"\nimport { debug, isEmptyOrSpaces } from \"electron-builder-util\"\nimport { log, warn } from \"electron-builder-util/out/log\"\nimport { httpExecutor } from \"electron-builder-util/out/nodeHttpExecutor\"\nimport { ClientRequest } from \"http\"\nimport mime from \"mime\"\nimport { parse as parseUrl } from \"url\"\nimport { 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 tag: string\n private _releasePromise: Promise<Release>\n\n private readonly token: string\n\n readonly providerName = \"GitHub\"\n\n get releasePromise(): Promise<Release | null> {\n if (this._releasePromise == null) {\n this._releasePromise = this.token === \"__test__\" ? BluebirdPromise.resolve(<any>null) : this.getOrCreateRelease()\n }\n return this._releasePromise\n }\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\n if (isEmptyOrSpaces(token)) {\n throw new Error(`GitHub Personal Access Token is not set, neither programmatically, nor using env \"GH_TOKEN\"`)\n }\n }\n\n this.token = token!\n\n if (version.startsWith(\"v\")) {\n throw new Error(`Version must not starts with \"v\": ${version}`)\n }\n\n this.tag = info.vPrefixedTagName === false ? version : `v${version}`\n }\n\n private async getOrCreateRelease(): Promise<Release | null> {\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 if (release.draft) {\n return release\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1197\n // https://electron-builder.slack.com/archives/general/p1485961449000202\n if (this.options.draft == null || this.options.draft) {\n warn(`Release with tag ${this.tag} already exists`)\n return null\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1133\n // if release created < 2 hours — allow to upload\n const publishedAt = release.published_at == null ? null : new Date(release.published_at)\n if (publishedAt != null && (Date.now() - publishedAt.getMilliseconds()) > (2 * 3600 * 1000)) {\n // https://github.com/electron-userland/electron-builder/issues/1183#issuecomment-275867187\n warn(`Release with tag ${this.tag} published at ${publishedAt.toString()}, more than 2 hours ago`)\n return null\n }\n return release\n }\n }\n\n log(`Release with tag ${this.tag} doesn't exist, creating one`)\n return this.createRelease()\n }\n\n protected async doUpload(fileName: string, dataLength: number, requestProcessor: (request: ClientRequest, reject: (error: Error) => void) => void): Promise<void> {\n const release = await this.releasePromise\n if (release == null) {\n debug(`Release with tag ${this.tag} doesn't exist and is not created, artifact ${fileName} is not published`)\n return\n }\n\n const parsedUrl = parseUrl(release.upload_url.substring(0, release.upload_url.indexOf(\"{\")) + \"?name=\" + fileName)\n let badGatewayCount = 0\n uploadAttempt: for (let i = 0; i < 3; i++) {\n try {\n return await httpExecutor.doApiRequest<any>(configureRequestOptions({\n hostname: parsedUrl.hostname,\n path: parsedUrl.path,\n method: \"POST\",\n headers: {\n Accept: \"application/vnd.github.v3+json\",\n \"Content-Type\": mime.lookup(fileName),\n \"Content-Length\": dataLength\n }\n }, this.token), this.context.cancellationToken, requestProcessor)\n }\n catch (e) {\n if (e instanceof HttpError) {\n if (e.response.statusCode === 422 && e.description != null && e.description.errors != null && e.description.errors[0].code === \"already_exists\") {\n // delete old artifact and re-upload\n debug(`Artifact ${fileName} already exists on GitHub, overwrite one`)\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 continue uploadAttempt\n }\n }\n\n debug(`Artifact ${fileName} not found on GitHub, trying to upload again`)\n continue\n }\n else if (e.response.statusCode === 502 && badGatewayCount++ < 3) {\n continue\n }\n }\n\n throw e\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 name: this.version,\n draft: this.options.draft == null || this.options.draft,\n prerelease: this.options.prerelease != null && this.options.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._releasePromise).id}`, this.token)\n }\n\n //noinspection JSUnusedGlobalSymbols\n async deleteRelease(): Promise<any> {\n const release = await this._releasePromise\n if (release == null) {\n return\n }\n\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 }\n catch (e) {\n if (e instanceof HttpError) {\n if (e.response.statusCode === 404) {\n warn(`Cannot delete release ${release.id} — doesn't exist`)\n return\n }\n else if (e.response.statusCode === 405 || e.response.statusCode === 502) {\n continue\n }\n }\n\n throw e\n }\n }\n\n warn(`Cannot delete release ${release.id}`)\n }\n\n private githubRequest<T>(path: string, token: string | null, data: {[name: string]: any; } | null = null, method?: \"GET\" | \"DELETE\" | \"PUT\"): Promise<T> {\n return httpExecutor.request<T>(configureRequestOptions({\n host: this.info.host || \"api.github.com\",\n path: (this.info.host != null && this.info.host !== \"github.com\") ? `/api/v3/${path}` : path,\n headers: {Accept: \"application/vnd.github.v3+json\"}\n }, token, method), this.context.cancellationToken, data)\n }\n\n toString() {\n return `Github (owner: ${this.info.owner}, project: ${this.info.repo}, version: ${this.version})`\n }\n}"
12 ]
13}