Skip to content

Commit 89a601c

Browse files
committed
feature(repo): generalize package script, remove redundant webpack.browser configs
package.json now accepts an argument to a subproject directory and will package the .vsix for that subproject. This means that packages/amazonq can now be packaged into a .vsix with `npm run package`. However, running this from the root project will only yield the toolkit.vsix for now. Also, we can reference the browser config by name instead of file, so we don't need a separate config file for CLI usage. Finally, fix an issue with the packaging script so that we always copy over the CHANGELOG.md, especially for releases.
1 parent 9ea0440 commit 89a601c

File tree

8 files changed

+53
-63
lines changed

8 files changed

+53
-63
lines changed

.gitignore

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ packages/toolkit/src/testFixtures/**/bin
3838
packages/toolkit/src/testFixtures/**/obj
3939

4040
# Generated by copyFiles.ts
41-
packages/toolkit/README*
42-
packages/toolkit/CHANGELOG.md
43-
packages/toolkit/LICENSE
44-
packages/toolkit/NOTICE
41+
packages/*/README*
42+
packages/*/CHANGELOG.md
43+
packages/*/LICENSE
44+
packages/*/NOTICE
4545

4646
# Icons
4747
packages/toolkit/resources/icons/cloud9/generated/**

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"test": "npm run test -w packages/",
2929
"testE2E": "npm run testE2E -w packages/",
3030
"testInteg": "npm run testInteg -w packages/",
31-
"package": "npm run package -w packages/",
31+
"package": "npm run package -w packages/toolkit",
3232
"newChange": "ts-node ./scripts/newChange.ts",
3333
"createRelease": "ts-node ./scripts/createRelease.ts",
3434
"format": "prettier --check plugins && npm run format -w packages/",

packages/amazonq/webpack.browser.config.js

Lines changed: 0 additions & 17 deletions
This file was deleted.

packages/amazonq/webpack.config.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
const baseConfig = require('../webpack.base.config')
1111
const baseVueConfig = require('../webpack.vue.config')
12-
const baseBrowserConfig = require('./webpack.browser.config')
12+
const baseBrowserConfig = require('../webpack.browser.config')
1313

1414
const config = {
1515
...baseConfig,
@@ -29,7 +29,11 @@ const vueConfigs = baseVueConfig.configs.map(c => {
2929
}
3030
})
3131

32-
// baseBrowserConfigs is set up in another file.
33-
const browserConfig = { ...baseBrowserConfig }
32+
const browserConfig = {
33+
...baseBrowserConfig,
34+
entry: {
35+
'src/extensionWeb': './src/extensionWeb.ts',
36+
},
37+
}
3438

3539
module.exports = [config, ...vueConfigs, browserConfig]

packages/toolkit/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4246,7 +4246,7 @@
42464246
"clean": "ts-node ../../scripts/clean.ts dist/ LICENSE NOTICE quickStart* README* CHANGELOG.md",
42474247
"copyFiles": "ts-node ./scripts/build/copyFiles.ts",
42484248
"buildScripts": "npm run generateClients && npm run generatePackage && npm run generateNonCodeFiles && npm run copyFiles",
4249-
"browserWatch": "npm run clean && npm run buildScripts && webpack --config webpack.browser.config.js --watch",
4249+
"browserWatch": "npm run clean && npm run buildScripts && webpack --config-name web --watch",
42504250
"browserRun": "npx @vscode/test-web --open-devtools --browserOption=--disable-web-security --waitForDebugger=9222 --extensionDevelopmentPath=. .",
42514251
"compile": "npm run clean && npm run buildScripts && webpack --mode development && npm run copyFiles",
42524252
"watch": "npm run clean && npm run buildScripts && tsc -watch -p ./",
@@ -4257,7 +4257,7 @@
42574257
"format": "prettier --ignore-path ../../.prettierignore --check src scripts",
42584258
"formatfix": "prettier --ignore-path ../../.prettierignore --write src scripts",
42594259
"lint": "ts-node ./scripts/lint/testLint.ts && npm run format",
4260-
"package": "ts-node ./scripts/build/package.ts",
4260+
"package": "ts-node ../../scripts/package.ts",
42614261
"install-plugin": "vsce package -o aws-toolkit-vscode-test.vsix && code --install-extension aws-toolkit-vscode-test.vsix",
42624262
"generateClients": "npm run build -w @amzn/codewhisperer-streaming && ts-node ./scripts/build/generateServiceClient.ts ",
42634263
"generatePackage": "ts-node ./scripts/build/generateIcons.ts",

packages/toolkit/webpack.browser.config.js

Lines changed: 0 additions & 18 deletions
This file was deleted.

packages/toolkit/webpack.config.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
const baseConfig = require('../webpack.base.config')
1111
const baseVueConfig = require('../webpack.vue.config')
12-
const baseBrowserConfig = require('./webpack.browser.config')
12+
const baseBrowserConfig = require('../webpack.browser.config')
1313

1414
const config = {
1515
...baseConfig,
@@ -30,7 +30,12 @@ const vueConfigs = baseVueConfig.configs.map(c => {
3030
}
3131
})
3232

33-
// baseBrowserConfigs is set up in another file.
34-
const browserConfig = { ...baseBrowserConfig }
33+
const browserConfig = {
34+
...baseBrowserConfig,
35+
entry: {
36+
'src/extensionWeb': './src/extensionWeb.ts',
37+
'src/testBrowser/testRunner': './src/testBrowser/testRunner.ts',
38+
},
39+
}
3540

3641
module.exports = [config, ...vueConfigs, browserConfig]

packages/toolkit/scripts/build/package.ts renamed to scripts/package.ts

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,9 @@
1616
// 3. restore the original package.json
1717
//
1818

19-
import type PackageJson from '../../package.json'
2019
import * as child_process from 'child_process'
2120
import * as fs from 'fs-extra'
22-
23-
// Importing from `src` isn't great but it does make things simple
24-
import { betaUrl } from '../../src/dev/config'
25-
26-
const packageJsonFile = './package.json'
27-
const webpackConfigJsFile = './webpack.base.config.js'
21+
import * as path from 'path'
2822

2923
function parseArgs() {
3024
// Invoking this script with argument "foo":
@@ -80,7 +74,15 @@ function isRelease(): boolean {
8074
* Whether or not this a private beta build
8175
*/
8276
function isBeta(): boolean {
83-
return !!betaUrl
77+
try {
78+
// This path only exists for packages/toolkit.
79+
// As noted before: "Importing from `src` isn't great but it does make things simple"
80+
// TODO: Generalize betaUrl for all packages.
81+
const betaUrl = require(path.resolve('./src/dev/config')).betaUrl
82+
return !!betaUrl
83+
} catch {
84+
return false
85+
}
8486
}
8587

8688
/**
@@ -103,6 +105,14 @@ function getVersionSuffix(feature: string, debug: boolean): string {
103105

104106
function main() {
105107
const args = parseArgs()
108+
// It is expected that this will package from a packages/{subproject} folder.
109+
// There is a base config in packages/
110+
const packageJsonFile = './package.json'
111+
const webpackConfigJsFile = '../webpack.base.config.js'
112+
if (!fs.existsSync(packageJsonFile)) {
113+
throw new Error(`package.json not found, cannot package this directory: ${process.cwd()}`)
114+
}
115+
106116
let release = true
107117

108118
try {
@@ -113,12 +123,10 @@ function main() {
113123
}
114124

115125
if (!release || args.debug) {
116-
// Create backup files so we can restore the originals later.
126+
// Create backup file so we can restore the originals later.
117127
fs.copyFileSync(packageJsonFile, `${packageJsonFile}.bk`)
118-
fs.copyFileSync(webpackConfigJsFile, `${webpackConfigJsFile}.bk`)
119-
fs.copyFileSync('../../CHANGELOG.md', 'CHANGELOG.md')
120128

121-
const packageJson: typeof PackageJson = JSON.parse(fs.readFileSync(packageJsonFile, { encoding: 'utf-8' }))
129+
const packageJson = JSON.parse(fs.readFileSync(packageJsonFile, { encoding: 'utf-8' }))
122130
const versionSuffix = getVersionSuffix(args.feature, args.debug)
123131
const version = packageJson.version
124132
if (isBeta()) {
@@ -138,26 +146,34 @@ function main() {
138146
fs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, undefined, ' '))
139147

140148
if (args.debug) {
149+
fs.copyFileSync(webpackConfigJsFile, `${webpackConfigJsFile}.bk`)
141150
const webpackConfigJs = fs.readFileSync(webpackConfigJsFile, { encoding: 'utf-8' })
142151
fs.writeFileSync(webpackConfigJsFile, webpackConfigJs.replace(/minimize: true/, 'minimize: false'))
143152
}
144153
}
154+
// Always include CHANGELOG.md until we can have separate changelogs for packages
155+
fs.copyFileSync('../../CHANGELOG.md', 'CHANGELOG.md')
145156

146157
child_process.execSync(`vsce package`, { stdio: 'inherit' })
147158
const packageJson = JSON.parse(fs.readFileSync(packageJsonFile, { encoding: 'utf-8' }))
148159
console.log(`VSIX Version: ${packageJson.version}`)
149160

150-
const vsixName = `aws-toolkit-vscode-${packageJson.version}.vsix`
161+
// Hoist .vsix to root folder, because the release infra expects it to be there.
162+
// TODO: Once we can support releasing multiple artifacts,
163+
// let's just keep the .vsix in its respective project folder in packages/
164+
const vsixName = `${packageJson.name}-${packageJson.version}.vsix`
151165
fs.moveSync(vsixName, `../../${vsixName}`, { overwrite: true })
152166
} catch (e) {
153167
console.log(e)
154168
throw Error('package.ts: failed')
155169
} finally {
170+
// Restore the original files.
156171
if (!release) {
157-
// Restore the original files.
158172
fs.copyFileSync(`${packageJsonFile}.bk`, packageJsonFile)
159-
fs.copyFileSync(`${webpackConfigJsFile}.bk`, webpackConfigJsFile)
160173
fs.unlinkSync(`${packageJsonFile}.bk`)
174+
}
175+
if (args.debug) {
176+
fs.copyFileSync(`${webpackConfigJsFile}.bk`, webpackConfigJsFile)
161177
fs.unlinkSync(`${webpackConfigJsFile}.bk`)
162178
}
163179
}

0 commit comments

Comments
 (0)