Skip to content

Commit f5dc2c7

Browse files
committed
feat: release UI beta
1 parent ee05a76 commit f5dc2c7

21 files changed

+2921
-271
lines changed

jest.config.cjs

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ module.exports = {
5959
'/node_modules/',
6060
'/src/cli.ts',
6161
'/src/command-line-arguments.ts',
62+
'/src/interactive-ui.ts',
6263
],
6364

6465
// Indicates which provider should be used to instrument code for coverage

package.json

+10-2
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,28 @@
1414
"dist/"
1515
],
1616
"scripts": {
17-
"build": "tsc --project tsconfig.build.json",
17+
"build": "tsc --project tsconfig.build.json && npm run build:ui-static",
1818
"build:clean": "rimraf dist && yarn build",
1919
"lint": "yarn lint:eslint && yarn lint:misc --check",
2020
"lint:eslint": "eslint . --cache --ext js,ts",
2121
"lint:fix": "yarn lint:eslint --fix && yarn lint:misc --write",
2222
"lint:misc": "prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern",
2323
"prepack": "./scripts/prepack.sh",
2424
"test": "jest && jest-it-up --config jest.config.cjs",
25-
"test:watch": "jest --watch"
25+
"test:watch": "jest --watch",
26+
"build:ui-static": "cp src/ui/index.html dist/ui"
2627
},
2728
"dependencies": {
2829
"@metamask/action-utils": "^1.0.0",
2930
"@metamask/auto-changelog": "^4.0.0",
3031
"@metamask/utils": "^9.0.0",
3132
"debug": "^4.3.4",
3233
"execa": "^8.0.1",
34+
"express": "^4.21.2",
3335
"pony-cause": "^2.1.9",
36+
"react": "^19.0.0",
37+
"react-dom": "^19.0.0",
38+
"react-markdown": "^9.0.3",
3439
"semver": "^7.5.4",
3540
"validate-npm-package-name": "^5.0.0",
3641
"which": "^3.0.0",
@@ -48,10 +53,13 @@
4853
"@metamask/eslint-config-nodejs": "^10.0.0",
4954
"@metamask/eslint-config-typescript": "^10.0.0",
5055
"@types/debug": "^4.1.7",
56+
"@types/express": "^5.0.0",
5157
"@types/jest": "^29.5.10",
5258
"@types/jest-when": "^3.5.2",
5359
"@types/node": "^17.0.23",
5460
"@types/prettier": "^2.7.3",
61+
"@types/react": "^19.0.8",
62+
"@types/react-dom": "^19.0.3",
5563
"@types/rimraf": "^4.0.5",
5664
"@types/validate-npm-package-name": "^4.0.2",
5765
"@types/which": "^3.0.0",

src/command-line-arguments.ts

+15
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ export type CommandLineArguments = {
77
reset: boolean;
88
backport: boolean;
99
defaultBranch: string;
10+
interactive: boolean;
11+
port: number;
1012
};
1113

1214
/**
@@ -51,6 +53,19 @@ export async function readCommandLineArguments(
5153
default: 'main',
5254
type: 'string',
5355
})
56+
.option('interactive', {
57+
alias: 'i',
58+
describe:
59+
'Start an interactive web UI for selecting package versions to release',
60+
type: 'boolean',
61+
default: false,
62+
})
63+
.option('port', {
64+
describe:
65+
'Port to run the interactive web UI server (only used with --interactive)',
66+
type: 'number',
67+
default: 3000,
68+
})
5469
.help()
5570
.strict()
5671
.parse();

src/initial-parameters.test.ts

+18
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ describe('initial-parameters', () => {
3636
reset: true,
3737
backport: false,
3838
defaultBranch: 'main',
39+
interactive: false,
40+
port: 3000,
3941
});
4042
jest
4143
.spyOn(envModule, 'getEnvironmentVariables')
@@ -56,6 +58,8 @@ describe('initial-parameters', () => {
5658
reset: true,
5759
releaseType: 'ordinary',
5860
defaultBranch: 'main',
61+
interactive: false,
62+
port: 3000,
5963
});
6064
});
6165

@@ -72,6 +76,8 @@ describe('initial-parameters', () => {
7276
reset: true,
7377
backport: false,
7478
defaultBranch: 'main',
79+
interactive: false,
80+
port: 3000,
7581
});
7682
jest
7783
.spyOn(envModule, 'getEnvironmentVariables')
@@ -102,6 +108,8 @@ describe('initial-parameters', () => {
102108
reset: true,
103109
backport: false,
104110
defaultBranch: 'main',
111+
interactive: false,
112+
port: 3000,
105113
});
106114
jest
107115
.spyOn(envModule, 'getEnvironmentVariables')
@@ -132,6 +140,8 @@ describe('initial-parameters', () => {
132140
reset: true,
133141
backport: false,
134142
defaultBranch: 'main',
143+
interactive: false,
144+
port: 3000,
135145
});
136146
jest
137147
.spyOn(envModule, 'getEnvironmentVariables')
@@ -162,6 +172,8 @@ describe('initial-parameters', () => {
162172
reset: true,
163173
backport: false,
164174
defaultBranch: 'main',
175+
interactive: false,
176+
port: 3000,
165177
});
166178
jest
167179
.spyOn(envModule, 'getEnvironmentVariables')
@@ -190,6 +202,8 @@ describe('initial-parameters', () => {
190202
reset: false,
191203
backport: false,
192204
defaultBranch: 'main',
205+
interactive: false,
206+
port: 3000,
193207
});
194208
jest
195209
.spyOn(envModule, 'getEnvironmentVariables')
@@ -218,6 +232,8 @@ describe('initial-parameters', () => {
218232
reset: false,
219233
backport: true,
220234
defaultBranch: 'main',
235+
interactive: false,
236+
port: 3000,
221237
});
222238
jest
223239
.spyOn(envModule, 'getEnvironmentVariables')
@@ -246,6 +262,8 @@ describe('initial-parameters', () => {
246262
reset: false,
247263
backport: false,
248264
defaultBranch: 'main',
265+
interactive: false,
266+
port: 3000,
249267
});
250268
jest
251269
.spyOn(envModule, 'getEnvironmentVariables')

src/initial-parameters.ts

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ type InitialParameters = {
2121
reset: boolean;
2222
releaseType: ReleaseType;
2323
defaultBranch: string;
24+
interactive: boolean;
25+
port: number;
2426
};
2527

2628
/**
@@ -61,5 +63,7 @@ export async function determineInitialParameters({
6163
reset: args.reset,
6264
defaultBranch: args.defaultBranch,
6365
releaseType: args.backport ? 'backport' : 'ordinary',
66+
interactive: args.interactive,
67+
port: args.port,
6468
};
6569
}

0 commit comments

Comments
 (0)