From 8ebfc96276bffe0bc1ad394c5ae6843976e01709 Mon Sep 17 00:00:00 2001 From: Sebastian Rettig Date: Fri, 1 Oct 2021 04:19:31 +0200 Subject: [PATCH] fix(publish): Bitbucket publish can have username different from owner (#6293) --- .changeset/young-roses-sniff.md | 5 +++++ .../src/publish/BitbucketPublisher.ts | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 .changeset/young-roses-sniff.md diff --git a/.changeset/young-roses-sniff.md b/.changeset/young-roses-sniff.md new file mode 100644 index 00000000000..dee7d65b70f --- /dev/null +++ b/.changeset/young-roses-sniff.md @@ -0,0 +1,5 @@ +--- +"app-builder-lib": patch +--- + +Introduced env var to allow custom username for Bitbucket publish. This allows you to user a username different from the owner. No changes to interfaces or signatures that require changes in consumers. diff --git a/packages/app-builder-lib/src/publish/BitbucketPublisher.ts b/packages/app-builder-lib/src/publish/BitbucketPublisher.ts index 78ba04c2b43..269f3130cd4 100644 --- a/packages/app-builder-lib/src/publish/BitbucketPublisher.ts +++ b/packages/app-builder-lib/src/publish/BitbucketPublisher.ts @@ -1,4 +1,4 @@ -import { Arch, InvalidConfigurationError, isEmptyOrSpaces } from "builder-util" +import { Arch, InvalidConfigurationError, isEmptyOrSpaces, log } from "builder-util" import { httpExecutor } from "builder-util/out/nodeHttpExecutor" import { ClientRequest, RequestOptions } from "http" import { HttpPublisher, PublishContext } from "electron-publish" @@ -6,6 +6,7 @@ import { BitbucketOptions } from "builder-util-runtime/out/publishOptions" import { configureRequestOptions, HttpExecutor } from "builder-util-runtime" import * as FormData from "form-data" import { readFile } from "fs/promises" + export class BitbucketPublisher extends HttpPublisher { readonly providerName = "bitbucket" readonly hostname = "api.bitbucket.org" @@ -18,11 +19,18 @@ export class BitbucketPublisher extends HttpPublisher { super(context) const token = process.env.BITBUCKET_TOKEN + const username = process.env.BITBUCKET_USERNAME + if (isEmptyOrSpaces(token)) { throw new InvalidConfigurationError(`Bitbucket token is not set using env "BITBUCKET_TOKEN" (see https://www.electron.build/configuration/publish#BitbucketOptions)`) } + + if (isEmptyOrSpaces(username)) { + log.warn('No Bitbucket username provided via "BITBUCKET_USERNAME". Defaulting to use repo owner.') + } + this.info = info - this.auth = BitbucketPublisher.convertAppPassword(this.info.owner, token) + this.auth = BitbucketPublisher.convertAppPassword(username ?? this.info.owner, token) this.basePath = `/2.0/repositories/${this.info.owner}/${this.info.slug}/downloads` } @@ -60,8 +68,8 @@ export class BitbucketPublisher extends HttpPublisher { return `Bitbucket (owner: ${owner}, slug: ${slug}, channel: ${channel})` } - static convertAppPassword(owner: string, token: string) { - const base64encodedData = Buffer.from(`${owner}:${token.trim()}`).toString("base64") + static convertAppPassword(username: string, token: string) { + const base64encodedData = Buffer.from(`${username}:${token.trim()}`).toString("base64") return `Basic ${base64encodedData}` } }