mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 17:31:43 +00:00
Publish native integration to npm (#5382)
This commit is contained in:
parent
e3ac21cfb7
commit
1320ad8016
@ -13,6 +13,7 @@
|
||||
"release": "yarn release:chrome",
|
||||
"release:chrome": "webstore upload --auto-publish --source build/bundles/chrome-bundle.zip --extension-id dgjhfomjieaadpoljlnidmbgkdffpack --client-id $GOOGLE_CLIENT_ID --client-secret $GOOGLE_CLIENT_SECRET --refresh-token $GOOGLE_REFRESH_TOKEN",
|
||||
"release:ff": "./scripts/release-ff.sh",
|
||||
"release:npm": "TS_NODE_COMPILER_OPTIONS=\"{\\\"module\\\":\\\"commonjs\\\"}\" ts-node ./scripts/publish-npm.ts",
|
||||
"lint": "yarn run tslint && yarn run eslint && yarn run stylelint",
|
||||
"tslint": "tslint -t stylish -c tslint.json -p tsconfig.json './**/*.ts?(x)'",
|
||||
"eslint": "eslint '**/*.[jt]s?(x)'",
|
||||
|
||||
48
browser/scripts/publish-npm.ts
Normal file
48
browser/scripts/publish-npm.ts
Normal file
@ -0,0 +1,48 @@
|
||||
import { writeFile } from 'mz/fs'
|
||||
import latestVersion from 'latest-version'
|
||||
import signale from 'signale'
|
||||
import * as semver from 'semver'
|
||||
import execa from 'execa'
|
||||
|
||||
// Publish the native integration to npm
|
||||
|
||||
async function main(): Promise<void> {
|
||||
const name = '@sourcegraph/code-host-integration'
|
||||
// Bump version
|
||||
let version: string
|
||||
try {
|
||||
const currentVersion = await latestVersion(name)
|
||||
signale.info(`Current version is ${currentVersion}`)
|
||||
version = semver.inc(currentVersion, 'patch')!
|
||||
} catch (err) {
|
||||
if (err && err.name === 'PackageNotFoundError') {
|
||||
signale.info('Package is not released yet')
|
||||
version = '0.0.0'
|
||||
} else {
|
||||
throw err
|
||||
}
|
||||
}
|
||||
const packageJson = {
|
||||
name,
|
||||
version,
|
||||
license: 'Apache-2.0',
|
||||
repository: {
|
||||
type: 'git',
|
||||
url: 'https://github.com/sourcegraph/sourcegraph',
|
||||
directory: 'browser',
|
||||
},
|
||||
}
|
||||
signale.info(`New version is ${packageJson.version}`)
|
||||
// Write package.json
|
||||
await writeFile(__dirname + '/../build/integration/package.json', JSON.stringify(packageJson, null, 2))
|
||||
if (!process.env.CI) {
|
||||
signale.warn('Not running in CI, aborting')
|
||||
return
|
||||
}
|
||||
// Publish
|
||||
await execa('npm', ['publish', '--access', 'public'], { stdio: 'inherit' })
|
||||
}
|
||||
main().catch(err => {
|
||||
process.exitCode = 1
|
||||
console.error(err)
|
||||
})
|
||||
@ -16,7 +16,7 @@ import {
|
||||
NATIVE_INTEGRATION_ACTIVATED,
|
||||
signalBrowserExtensionInstalled,
|
||||
} from '../../libs/sourcegraph/inject'
|
||||
import { DEFAULT_SOURCEGRAPH_URL } from '../../shared/util/context'
|
||||
import { DEFAULT_SOURCEGRAPH_URL, DEFAULT_ASSETS_URL } from '../../shared/util/context'
|
||||
import { featureFlags } from '../../shared/util/featureFlags'
|
||||
import { assertEnv } from '../envAssertion'
|
||||
|
||||
@ -70,9 +70,9 @@ async function main(): Promise<void> {
|
||||
return
|
||||
}
|
||||
|
||||
const sourcegraphServerUrl = items.sourcegraphURL || DEFAULT_SOURCEGRAPH_URL
|
||||
const sourcegraphURL = items.sourcegraphURL || DEFAULT_SOURCEGRAPH_URL
|
||||
|
||||
const isSourcegraphServer = checkIsSourcegraph(sourcegraphServerUrl)
|
||||
const isSourcegraphServer = checkIsSourcegraph(sourcegraphURL)
|
||||
if (isSourcegraphServer) {
|
||||
signalBrowserExtensionInstalled()
|
||||
return
|
||||
@ -100,7 +100,7 @@ async function main(): Promise<void> {
|
||||
})
|
||||
}
|
||||
|
||||
subscriptions.add(await injectCodeIntelligence(IS_EXTENSION))
|
||||
subscriptions.add(injectCodeIntelligence({ sourcegraphURL, assetsURL: DEFAULT_ASSETS_URL }, IS_EXTENSION))
|
||||
|
||||
// Clean up susbscription if the native integration gets activated
|
||||
// later in the lifetime of the content script.
|
||||
|
||||
7
browser/src/globals.d.ts
vendored
7
browser/src/globals.d.ts
vendored
@ -1,13 +1,14 @@
|
||||
interface Window {
|
||||
SOURCEGRAPH_URL: string | undefined
|
||||
SOURCEGRAPH_URL?: string
|
||||
SOURCEGRAPH_ASSETS_URL?: string
|
||||
PHABRICATOR_CALLSIGN_MAPPINGS:
|
||||
| {
|
||||
callsign: string
|
||||
path: string
|
||||
}[]
|
||||
| undefined
|
||||
SOURCEGRAPH_PHABRICATOR_EXTENSION: boolean | undefined
|
||||
SOURCEGRAPH_INTEGRATION: undefined | 'phabricator-integration' | 'bitbucket-integration'
|
||||
SOURCEGRAPH_PHABRICATOR_EXTENSION?: boolean
|
||||
SOURCEGRAPH_INTEGRATION?: 'phabricator-integration' | 'bitbucket-integration'
|
||||
SG_ENV: 'EXTENSION' | 'PAGE'
|
||||
EXTENSION_ENV: 'CONTENT' | 'BACKGROUND' | 'OPTIONS' | null
|
||||
SOURCEGRAPH_BUNDLE_URL: string | undefined // Bundle Sourcegraph URL is set from the Phabricator extension.
|
||||
|
||||
@ -14,12 +14,19 @@ setLinkComponent(({ to, children, ...props }) => (
|
||||
</a>
|
||||
))
|
||||
|
||||
async function init(): Promise<void> {
|
||||
function init(): void {
|
||||
console.log('Sourcegraph native integration is running')
|
||||
const sourcegraphURL = window.SOURCEGRAPH_URL
|
||||
if (!sourcegraphURL) {
|
||||
throw new Error('window.SOURCEGRAPH_URL is undefined')
|
||||
}
|
||||
|
||||
// Allow the assetsURL to be configurable for code hosts that self-host the integration bundle
|
||||
let assetsURL = window.SOURCEGRAPH_ASSETS_URL || new URL('/.assets/extension/', sourcegraphURL).href
|
||||
if (!assetsURL.endsWith('/')) {
|
||||
assetsURL += '/'
|
||||
}
|
||||
|
||||
if (document.getElementById(EXTENSION_MARKER_ID) !== null) {
|
||||
// If the extension marker already exists, it means the browser extension is currently executing.
|
||||
// Dispatch a custom event to signal that browser extension resources should be cleaned up.
|
||||
@ -30,15 +37,13 @@ async function init(): Promise<void> {
|
||||
const link = document.createElement('link')
|
||||
link.setAttribute('rel', 'stylesheet')
|
||||
link.setAttribute('type', 'text/css')
|
||||
link.setAttribute('href', sourcegraphURL + '/.assets/extension/css/style.bundle.css')
|
||||
link.setAttribute('href', new URL('css/style.bundle.css', assetsURL).href)
|
||||
link.id = 'sourcegraph-styles'
|
||||
document.getElementsByTagName('head')[0].appendChild(link)
|
||||
window.localStorage.setItem('SOURCEGRAPH_URL', sourcegraphURL)
|
||||
window.SOURCEGRAPH_URL = sourcegraphURL
|
||||
// TODO handle subscription
|
||||
await injectCodeIntelligence(IS_EXTENSION)
|
||||
injectCodeIntelligence({ sourcegraphURL, assetsURL }, IS_EXTENSION)
|
||||
}
|
||||
|
||||
init().catch(err => {
|
||||
console.error('Error initializing integration', err)
|
||||
})
|
||||
init()
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { DEFAULT_SOURCEGRAPH_URL } from '../../shared/util/context'
|
||||
import { DEFAULT_SOURCEGRAPH_URL, DEFAULT_ASSETS_URL } from '../../shared/util/context'
|
||||
import { initializeExtensions } from './extensions'
|
||||
|
||||
describe('Extensions controller', () => {
|
||||
@ -9,7 +9,10 @@ describe('Extensions controller', () => {
|
||||
urlToFile: () => '',
|
||||
getContext: () => ({ rawRepoName: 'foo', privateRepository: true }),
|
||||
},
|
||||
DEFAULT_SOURCEGRAPH_URL,
|
||||
{
|
||||
sourcegraphURL: DEFAULT_SOURCEGRAPH_URL,
|
||||
assetsURL: DEFAULT_ASSETS_URL,
|
||||
},
|
||||
false
|
||||
)
|
||||
return expect(
|
||||
|
||||
@ -31,7 +31,6 @@ import {
|
||||
mergeMap,
|
||||
observeOn,
|
||||
switchMap,
|
||||
take,
|
||||
withLatestFrom,
|
||||
tap,
|
||||
} from 'rxjs/operators'
|
||||
@ -75,7 +74,6 @@ import { createLSPFromExtensions, toTextDocumentIdentifier } from '../../shared/
|
||||
import { CodeViewToolbar, CodeViewToolbarClassProps } from '../../shared/components/CodeViewToolbar'
|
||||
import { resolveRev, retryWhenCloneInProgressError } from '../../shared/repo/backend'
|
||||
import { EventLogger } from '../../shared/tracking/eventLogger'
|
||||
import { observeSourcegraphURL } from '../../shared/util/context'
|
||||
import { MutationRecordLike } from '../../shared/util/dom'
|
||||
import { featureFlags } from '../../shared/util/featureFlags'
|
||||
import { bitbucketServerCodeHost } from '../bitbucket/code_intelligence'
|
||||
@ -96,6 +94,7 @@ import {
|
||||
import { handleTextFields, TextField } from './text_fields'
|
||||
import { resolveRepoNames } from './util/file_info'
|
||||
import { ViewResolver } from './views'
|
||||
import { SourcegraphIntegrationURLs } from '../../platform/context'
|
||||
|
||||
registerHighlightContributions()
|
||||
|
||||
@ -849,17 +848,19 @@ const SHOW_DEBUG = (): boolean => localStorage.getItem('debug') !== null
|
||||
const CODE_HOSTS: CodeHost[] = [bitbucketServerCodeHost, githubCodeHost, gitlabCodeHost, phabricatorCodeHost]
|
||||
export const determineCodeHost = (): CodeHost | undefined => CODE_HOSTS.find(codeHost => codeHost.check())
|
||||
|
||||
export async function injectCodeIntelligenceToCodeHost(
|
||||
export function injectCodeIntelligenceToCodeHost(
|
||||
mutations: Observable<MutationRecordLike[]>,
|
||||
codeHost: CodeHost,
|
||||
{ sourcegraphURL, assetsURL }: SourcegraphIntegrationURLs,
|
||||
isExtension: boolean,
|
||||
showGlobalDebug = SHOW_DEBUG()
|
||||
): Promise<Subscription> {
|
||||
): Subscription {
|
||||
const subscriptions = new Subscription()
|
||||
const sourcegraphURL = await observeSourcegraphURL(isExtension)
|
||||
.pipe(take(1))
|
||||
.toPromise()
|
||||
const { platformContext, extensionsController } = initializeExtensions(codeHost, sourcegraphURL, isExtension)
|
||||
const { platformContext, extensionsController } = initializeExtensions(
|
||||
codeHost,
|
||||
{ sourcegraphURL, assetsURL },
|
||||
isExtension
|
||||
)
|
||||
const telemetryService = new EventLogger(isExtension, platformContext.requestGraphQL)
|
||||
subscriptions.add(extensionsController)
|
||||
subscriptions.add(
|
||||
|
||||
@ -23,7 +23,7 @@ import {
|
||||
} from '../../../../shared/src/extensions/controller'
|
||||
import { PlatformContextProps } from '../../../../shared/src/platform/context'
|
||||
import { TelemetryProps } from '../../../../shared/src/telemetry/telemetryService'
|
||||
import { createPlatformContext } from '../../platform/context'
|
||||
import { createPlatformContext, SourcegraphIntegrationURLs } from '../../platform/context'
|
||||
import { GlobalDebug } from '../../shared/components/GlobalDebug'
|
||||
import { ShortcutProvider } from '../../shared/components/ShortcutProvider'
|
||||
import { CodeHost } from './code_intelligence'
|
||||
@ -35,10 +35,10 @@ import { DOMFunctions } from './code_views'
|
||||
*/
|
||||
export function initializeExtensions(
|
||||
{ urlToFile, getContext }: Pick<CodeHost, 'urlToFile' | 'getContext'>,
|
||||
sourcegraphURL: string,
|
||||
urls: SourcegraphIntegrationURLs,
|
||||
isExtension: boolean
|
||||
): PlatformContextProps & ExtensionsControllerProps {
|
||||
const platformContext = createPlatformContext({ urlToFile, getContext }, sourcegraphURL, isExtension)
|
||||
const platformContext = createPlatformContext({ urlToFile, getContext }, urls, isExtension)
|
||||
const extensionsController = createExtensionsController(platformContext)
|
||||
return { platformContext, extensionsController }
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ import { Observable, Subscription } from 'rxjs'
|
||||
import { startWith } from 'rxjs/operators'
|
||||
import { MutationRecordLike, observeMutations } from '../../shared/util/dom'
|
||||
import { determineCodeHost, injectCodeIntelligenceToCodeHost } from './code_intelligence'
|
||||
import { SourcegraphIntegrationURLs } from '../../platform/context'
|
||||
|
||||
/**
|
||||
* Checks if the current page is a known code host. If it is,
|
||||
@ -9,7 +10,7 @@ import { determineCodeHost, injectCodeIntelligenceToCodeHost } from './code_inte
|
||||
*
|
||||
* @param isExtension `true` when executing in the browser extension.
|
||||
*/
|
||||
export async function injectCodeIntelligence(isExtension: boolean): Promise<Subscription> {
|
||||
export function injectCodeIntelligence(urls: SourcegraphIntegrationURLs, isExtension: boolean): Subscription {
|
||||
const subscriptions = new Subscription()
|
||||
const codeHost = determineCodeHost()
|
||||
if (codeHost) {
|
||||
@ -18,7 +19,7 @@ export async function injectCodeIntelligence(isExtension: boolean): Promise<Subs
|
||||
childList: true,
|
||||
subtree: true,
|
||||
}).pipe(startWith([{ addedNodes: [document.body], removedNodes: [] }]))
|
||||
subscriptions.add(await injectCodeIntelligenceToCodeHost(mutations, codeHost, isExtension))
|
||||
subscriptions.add(injectCodeIntelligenceToCodeHost(mutations, codeHost, urls, isExtension))
|
||||
}
|
||||
return subscriptions
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import { injectCodeIntelligence } from '../code_intelligence/inject'
|
||||
import { injectExtensionMarker } from '../sourcegraph/inject'
|
||||
import { getPhabricatorCSS, getSourcegraphURLFromConduit } from './backend'
|
||||
import { metaClickOverride } from './util'
|
||||
import { DEFAULT_ASSETS_URL } from '../../shared/util/context'
|
||||
|
||||
// Just for informational purposes (see getPlatformContext())
|
||||
window.SOURCEGRAPH_PHABRICATOR_EXTENSION = true
|
||||
@ -31,20 +32,23 @@ async function init(): Promise<void> {
|
||||
)
|
||||
return
|
||||
}
|
||||
// Backwards compat: Support Legacy Phabricator extension. Check that the Phabricator integration
|
||||
// passed the bundle url. Legacy Phabricator extensions inject CSS via the loader.js script
|
||||
// so we do not need to do this here.
|
||||
if (!window.SOURCEGRAPH_BUNDLE_URL && !window.localStorage.getItem('SOURCEGRAPH_BUNDLE_URL')) {
|
||||
injectExtensionMarker()
|
||||
await injectCodeIntelligence(IS_EXTENSION)
|
||||
metaClickOverride()
|
||||
return
|
||||
}
|
||||
|
||||
const sourcegraphURL =
|
||||
window.localStorage.getItem('SOURCEGRAPH_URL') ||
|
||||
window.SOURCEGRAPH_URL ||
|
||||
(await getSourcegraphURLFromConduit())
|
||||
const assetsURL = DEFAULT_ASSETS_URL
|
||||
|
||||
// Backwards compat: Support Legacy Phabricator extension. Check that the Phabricator integration
|
||||
// passed the bundle url. Legacy Phabricator extensions inject CSS via the loader.js script
|
||||
// so we do not need to do this here.
|
||||
if (!window.SOURCEGRAPH_BUNDLE_URL && !window.localStorage.getItem('SOURCEGRAPH_BUNDLE_URL')) {
|
||||
injectExtensionMarker()
|
||||
injectCodeIntelligence({ sourcegraphURL, assetsURL }, IS_EXTENSION)
|
||||
metaClickOverride()
|
||||
return
|
||||
}
|
||||
|
||||
// eslint-disable-next-line require-atomic-updates
|
||||
window.SOURCEGRAPH_URL = sourcegraphURL
|
||||
const css = await getPhabricatorCSS(sourcegraphURL)
|
||||
@ -56,7 +60,7 @@ async function init(): Promise<void> {
|
||||
window.localStorage.setItem('SOURCEGRAPH_URL', sourcegraphURL)
|
||||
metaClickOverride()
|
||||
injectExtensionMarker()
|
||||
await injectCodeIntelligence(IS_EXTENSION)
|
||||
injectCodeIntelligence({ sourcegraphURL, assetsURL }, IS_EXTENSION)
|
||||
}
|
||||
|
||||
init().catch(err => console.error('Error initializing Phabricator integration', err))
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { gql } from '../../../shared/src/graphql/graphql'
|
||||
import { DEFAULT_SOURCEGRAPH_URL } from '../shared/util/context'
|
||||
import { DEFAULT_SOURCEGRAPH_URL, DEFAULT_ASSETS_URL } from '../shared/util/context'
|
||||
import { createPlatformContext } from './context'
|
||||
|
||||
describe('Platform Context', () => {
|
||||
@ -11,7 +11,10 @@ describe('Platform Context', () => {
|
||||
urlToFile: () => '',
|
||||
getContext: () => ({ rawRepoName: 'foo', privateRepository: true }),
|
||||
},
|
||||
DEFAULT_SOURCEGRAPH_URL,
|
||||
{
|
||||
sourcegraphURL: DEFAULT_SOURCEGRAPH_URL,
|
||||
assetsURL: DEFAULT_ASSETS_URL,
|
||||
},
|
||||
false
|
||||
)
|
||||
return expect(
|
||||
|
||||
@ -17,12 +17,28 @@ import { DEFAULT_SOURCEGRAPH_URL, observeSourcegraphURL } from '../shared/util/c
|
||||
import { createExtensionHost } from './extensionHost'
|
||||
import { editClientSettings, fetchViewerSettings, mergeCascades, storageSettingsCascade } from './settings'
|
||||
|
||||
export interface SourcegraphIntegrationURLs {
|
||||
/**
|
||||
* The URL of the configured Sourcegraph instance. Used for extensions, find-references, ...
|
||||
*/
|
||||
sourcegraphURL: string
|
||||
|
||||
/**
|
||||
* The base URL where assets will be fetched from (CSS, extension host
|
||||
* worker bundle, ...)
|
||||
*
|
||||
* This is the sourcegraph URL in most cases, but may be different for
|
||||
* native code hosts that self-host the integration bundle.
|
||||
*/
|
||||
assetsURL: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the {@link PlatformContext} for the browser extension.
|
||||
*/
|
||||
export function createPlatformContext(
|
||||
{ urlToFile, getContext }: Pick<CodeHost, 'urlToFile' | 'getContext'>,
|
||||
sourcegraphURL: string,
|
||||
{ sourcegraphURL, assetsURL }: SourcegraphIntegrationURLs,
|
||||
isExtension: boolean
|
||||
): PlatformContext {
|
||||
const updatedViewerSettings = new ReplaySubject<Pick<GQL.ISettingsCascade, 'subjects' | 'final'>>(1)
|
||||
@ -120,7 +136,7 @@ export function createPlatformContext(
|
||||
forceUpdateTooltip: () => {
|
||||
// TODO(sqs): implement tooltips on the browser extension
|
||||
},
|
||||
createExtensionHost: () => createExtensionHost(sourcegraphURL),
|
||||
createExtensionHost: () => createExtensionHost({ sourcegraphURL, assetsURL }),
|
||||
getScriptURLForExtension: async bundleURL => {
|
||||
if (isInPage) {
|
||||
return bundleURL
|
||||
|
||||
@ -3,14 +3,18 @@ import { Observable } from 'rxjs'
|
||||
import uuid from 'uuid'
|
||||
import { EndpointPair } from '../../../shared/src/platform/context'
|
||||
import { isInPage } from '../context'
|
||||
import { SourcegraphIntegrationURLs } from './context'
|
||||
|
||||
function createInPageExtensionHost(sourcegraphURL: string): Observable<EndpointPair> {
|
||||
function createInPageExtensionHost({
|
||||
sourcegraphURL,
|
||||
assetsURL,
|
||||
}: SourcegraphIntegrationURLs): Observable<EndpointPair> {
|
||||
return new Observable(subscriber => {
|
||||
// Create an iframe pointing to extensionHostFrame.html,
|
||||
// which will load the extension host worker, and forward it
|
||||
// the client endpoints.
|
||||
const frame: HTMLIFrameElement = document.createElement('iframe')
|
||||
frame.setAttribute('src', `${sourcegraphURL}/.assets/extension/extensionHostFrame.html`)
|
||||
frame.setAttribute('src', new URL('extensionHostFrame.html', assetsURL).href)
|
||||
frame.setAttribute('style', 'display: none;')
|
||||
document.body.append(frame)
|
||||
const clientAPIChannel = new MessageChannel()
|
||||
@ -65,9 +69,9 @@ function createInPageExtensionHost(sourcegraphURL: string): Observable<EndpointP
|
||||
* worker per pair of ports, and forward messages between the port objects and
|
||||
* the extension host worker's endpoints.
|
||||
*/
|
||||
export function createExtensionHost(sourcegraphURL: string): Observable<EndpointPair> {
|
||||
export function createExtensionHost(urls: SourcegraphIntegrationURLs): Observable<EndpointPair> {
|
||||
if (isInPage) {
|
||||
return createInPageExtensionHost(sourcegraphURL)
|
||||
return createInPageExtensionHost(urls)
|
||||
}
|
||||
const id = uuid.v4()
|
||||
return new Observable(subscriber => {
|
||||
|
||||
@ -3,6 +3,7 @@ import { map } from 'rxjs/operators'
|
||||
import { observeStorageKey } from '../../browser/storage'
|
||||
|
||||
export const DEFAULT_SOURCEGRAPH_URL = 'https://sourcegraph.com'
|
||||
export const DEFAULT_ASSETS_URL: string = new URL('/.assets/extension/', DEFAULT_SOURCEGRAPH_URL).href
|
||||
|
||||
export function observeSourcegraphURL(isExtension: boolean): Observable<string> {
|
||||
if (isExtension) {
|
||||
|
||||
@ -159,7 +159,6 @@ func addBrowserExtensionReleaseSteps(pipeline *bk.Pipeline) {
|
||||
|
||||
// Release to the Chrome Webstore
|
||||
pipeline.AddStep(":rocket::chrome:",
|
||||
bk.Env("FORCE_COLOR", "1"),
|
||||
bk.Cmd("yarn --frozen-lockfile --network-timeout 60000"),
|
||||
bk.Cmd("pushd browser"),
|
||||
bk.Cmd("yarn -s run build"),
|
||||
@ -168,11 +167,18 @@ func addBrowserExtensionReleaseSteps(pipeline *bk.Pipeline) {
|
||||
|
||||
// Build and self sign the FF extension and upload it to ...
|
||||
pipeline.AddStep(":rocket::firefox:",
|
||||
bk.Env("FORCE_COLOR", "1"),
|
||||
bk.Cmd("yarn --frozen-lockfile --network-timeout 60000"),
|
||||
bk.Cmd("pushd browser"),
|
||||
bk.Cmd("yarn release:ff"),
|
||||
bk.Cmd("popd"))
|
||||
|
||||
// Release to npm
|
||||
pipeline.AddStep(":rocket::npm:",
|
||||
bk.Cmd("yarn --frozen-lockfile --network-timeout 60000"),
|
||||
bk.Cmd("pushd browser"),
|
||||
bk.Cmd("yarn -s run build"),
|
||||
bk.Cmd("yarn release:npm"),
|
||||
bk.Cmd("popd"))
|
||||
}
|
||||
|
||||
// Adds a Buildkite pipeline "Wait".
|
||||
|
||||
@ -145,6 +145,7 @@
|
||||
"cross-env": "^5.2.0",
|
||||
"css-loader": "^3.2.0",
|
||||
"eslint": "^6.3.0",
|
||||
"execa": "^2.0.4",
|
||||
"fancy-log": "^1.3.3",
|
||||
"get-port": "^5.0.0",
|
||||
"gql2ts": "^1.10.1",
|
||||
@ -156,6 +157,7 @@
|
||||
"jsdom": "^15.1.1",
|
||||
"json-schema-ref-parser": "^7.1.0",
|
||||
"json-schema-to-typescript": "^6.1.0",
|
||||
"latest-version": "^5.1.0",
|
||||
"message-port-polyfill": "^0.2.0",
|
||||
"mini-css-extract-plugin": "^0.8.0",
|
||||
"mkdirp-promise": "^5.0.1",
|
||||
|
||||
103
yarn.lock
103
yarn.lock
@ -1619,7 +1619,8 @@
|
||||
integrity sha512-Te7F1RQJLBH4C8wQ2xz0nPC2vpe13F80V+Yv+c3GySOoh4DcLNN4P5u51Kh4aZPqeS5DJ7CKvHyX2SM/1EBXNg==
|
||||
|
||||
"@sourcegraph/extension-api-types@link:packages/@sourcegraph/extension-api-types":
|
||||
version "2.0.0"
|
||||
version "0.0.0"
|
||||
uid ""
|
||||
|
||||
"@sourcegraph/prettierrc@^3.0.1":
|
||||
version "3.0.1"
|
||||
@ -7440,6 +7441,21 @@ execa@^1.0.0:
|
||||
signal-exit "^3.0.0"
|
||||
strip-eof "^1.0.0"
|
||||
|
||||
execa@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.npmjs.org/execa/-/execa-2.0.4.tgz#2f5cc589c81db316628627004ea4e37b93391d8e"
|
||||
integrity sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ==
|
||||
dependencies:
|
||||
cross-spawn "^6.0.5"
|
||||
get-stream "^5.0.0"
|
||||
is-stream "^2.0.0"
|
||||
merge-stream "^2.0.0"
|
||||
npm-run-path "^3.0.0"
|
||||
onetime "^5.1.0"
|
||||
p-finally "^2.0.0"
|
||||
signal-exit "^3.0.2"
|
||||
strip-final-newline "^2.0.0"
|
||||
|
||||
execall@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45"
|
||||
@ -8310,7 +8326,7 @@ get-stream@^4.0.0, get-stream@^4.1.0:
|
||||
dependencies:
|
||||
pump "^3.0.0"
|
||||
|
||||
get-stream@^5.1.0:
|
||||
get-stream@^5.0.0, get-stream@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
|
||||
integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
|
||||
@ -9892,6 +9908,11 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
|
||||
resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
||||
|
||||
is-stream@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
|
||||
integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
|
||||
|
||||
is-svg@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
|
||||
@ -10834,6 +10855,13 @@ latest-version@^3.0.0:
|
||||
dependencies:
|
||||
package-json "^4.0.0"
|
||||
|
||||
latest-version@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
|
||||
integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
|
||||
dependencies:
|
||||
package-json "^6.3.0"
|
||||
|
||||
lazy-cache@^0.2.3:
|
||||
version "0.2.7"
|
||||
resolved "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
|
||||
@ -11530,6 +11558,11 @@ merge-stream@^1.0.1:
|
||||
dependencies:
|
||||
readable-stream "^2.0.1"
|
||||
|
||||
merge-stream@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
|
||||
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
|
||||
|
||||
merge2@^1.2.3:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5"
|
||||
@ -11612,6 +11645,11 @@ mimic-fn@^1.0.0:
|
||||
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
|
||||
|
||||
mimic-fn@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
|
||||
|
||||
mimic-response@^1.0.0, mimic-response@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
|
||||
@ -12222,6 +12260,13 @@ npm-run-path@^2.0.0:
|
||||
dependencies:
|
||||
path-key "^2.0.0"
|
||||
|
||||
npm-run-path@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5"
|
||||
integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==
|
||||
dependencies:
|
||||
path-key "^3.0.0"
|
||||
|
||||
"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||
@ -12427,6 +12472,13 @@ onetime@^2.0.0:
|
||||
dependencies:
|
||||
mimic-fn "^1.0.0"
|
||||
|
||||
onetime@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
|
||||
integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
|
||||
dependencies:
|
||||
mimic-fn "^2.1.0"
|
||||
|
||||
ono@^4.0.10:
|
||||
version "4.0.10"
|
||||
resolved "https://registry.npmjs.org/ono/-/ono-4.0.10.tgz#f7f9c6d1b76270a499d8664c95a740d44175134c"
|
||||
@ -12583,6 +12635,11 @@ p-finally@^1.0.0:
|
||||
resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
||||
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
|
||||
|
||||
p-finally@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
|
||||
integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
|
||||
|
||||
p-is-promise@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
|
||||
@ -12668,6 +12725,16 @@ package-json@^4.0.0:
|
||||
registry-url "^3.0.3"
|
||||
semver "^5.1.0"
|
||||
|
||||
package-json@^6.3.0:
|
||||
version "6.5.0"
|
||||
resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
|
||||
integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
|
||||
dependencies:
|
||||
got "^9.6.0"
|
||||
registry-auth-token "^4.0.0"
|
||||
registry-url "^5.0.0"
|
||||
semver "^6.2.0"
|
||||
|
||||
pako@~1.0.2, pako@~1.0.5:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
|
||||
@ -12839,6 +12906,11 @@ path-key@^2.0.0, path-key@^2.0.1:
|
||||
resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
|
||||
|
||||
path-key@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3"
|
||||
integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==
|
||||
|
||||
path-parse@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||
@ -13941,7 +14013,7 @@ raw-loader@^2.0.0:
|
||||
loader-utils "^1.1.0"
|
||||
schema-utils "^1.0.0"
|
||||
|
||||
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
|
||||
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8:
|
||||
version "1.2.8"
|
||||
resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
|
||||
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
|
||||
@ -14623,6 +14695,14 @@ registry-auth-token@^3.0.1:
|
||||
rc "^1.1.6"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
registry-auth-token@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be"
|
||||
integrity sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==
|
||||
dependencies:
|
||||
rc "^1.2.8"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
registry-url@^3.0.3:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
|
||||
@ -14630,6 +14710,13 @@ registry-url@^3.0.3:
|
||||
dependencies:
|
||||
rc "^1.0.1"
|
||||
|
||||
registry-url@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
|
||||
integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
|
||||
dependencies:
|
||||
rc "^1.2.8"
|
||||
|
||||
regjsgen@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
|
||||
@ -15284,7 +15371,7 @@ semver@5.5.0:
|
||||
resolved "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
||||
integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
|
||||
|
||||
semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2:
|
||||
semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||
@ -15781,7 +15868,8 @@ source-map@^0.7.2, source-map@^0.7.3:
|
||||
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
|
||||
|
||||
"sourcegraph@link:packages/sourcegraph-extension-api":
|
||||
version "23.0.1"
|
||||
version "0.0.0"
|
||||
uid ""
|
||||
|
||||
space-separated-tokens@^1.0.0:
|
||||
version "1.1.2"
|
||||
@ -16192,6 +16280,11 @@ strip-eof@^1.0.0:
|
||||
resolved "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
|
||||
|
||||
strip-final-newline@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
|
||||
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
|
||||
|
||||
strip-indent@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user