Skip to content

Commit 0f1eb73

Browse files
committed
feat: add --log-level flag
1 parent 7054b5f commit 0f1eb73

File tree

7 files changed

+86
-28
lines changed

7 files changed

+86
-28
lines changed

.github/workflows/cd.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ jobs:
5656
- run: npm ci
5757
- run: npm test
5858
- run: npm link # consumers should use npm link wet-run or below npx wet-run ...
59-
- run: wet release ${{ inputs.version }} ${{ inputs.dryrun && '--dry-run' || '' }} ${{ inputs.prerelease && format('--prerelease {0}', inputs.prerelease) || '' }} --provenance --changelog --github-release --verbose
59+
- run: wet release ${{ inputs.version }} ${{ inputs.dryrun && '--dry-run' || '' }} ${{ inputs.prerelease && format('--prerelease {0}', inputs.prerelease) || '' }} --provenance --changelog --github-release --log-level verbose
6060
- name: Get NPM version
6161
id: npm-version
6262
uses: martinbeentjes/npm-get-version-action@v1.3.1

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ wet serve
2323

2424
- Positional: `<path>`
2525
- Flags: `--port`, `--cors`, `--redirect`, `--livereload`, `--ssl-cert`,
26-
`--ssl-key`, `--ssl-pass`
26+
`--ssl-key`, `--ssl-pass`, `--log-level`
2727

2828
## Test Run
2929

@@ -35,7 +35,7 @@ wet test
3535

3636
- Positional: `<path>`
3737
- Flags: `--port`, `--cors`, `--redirect`, `--servedir`, `--browser`,
38-
`--channel`, `--no-headless`, `--timeout`, `--coverage`
38+
`--channel`, `--no-headless`, `--timeout`, `--coverage`, `--log-level`
3939

4040
## Release
4141

@@ -46,7 +46,8 @@ wet release patch --changelog --github-release
4646
```
4747

4848
- Positional: `[<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git | from-package]`
49-
- Flags: `--prerelease`, `--preid`, `--tag`, `--access`, `--provenance`, `--changelog`, `--github-release`, `--dry-run`, `--verbose`
49+
- Flags: `--prerelease`, `--preid`, `--tag`, `--access`, `--provenance`, `--changelog`, `--github-release`, `--dry-run`, `--log-level`
50+
5051

5152
### Continuous deployment (CD)
5253

src/client/livereload.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ websocket.onmessage = (event) => {
99
let { data } = event;
1010
let { command } = JSON.parse(data);
1111

12+
if (command === 'hello') {
13+
websocket.send(JSON.stringify({ command: 'hello' }));
14+
return;
15+
}
16+
1217
if (command === 'reload') {
1318
globalThis.location.reload();
1419
}

src/release.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ export function cliRelease() {
3434
'dry-run': {
3535
type: 'boolean',
3636
},
37-
verbose: {
38-
type: 'boolean',
37+
'log-level': {
38+
type: 'string',
39+
default: 'info',
3940
},
4041
};
4142

@@ -54,7 +55,7 @@ export function cliRelease() {
5455
export async function release(bump = 'conventional', opts) {
5556
let { prerelease, preid, access, tag, provenance } = opts;
5657

57-
console.log(`Creating a ${bump}${prerelease ? ` ${prerelease}` : ''} release!`);
58+
log(`Creating a ${bump}${prerelease ? ` ${prerelease}` : ''} release!`, opts);
5859

5960
const dryRun = opts['dry-run'] ? '--dry-run' : '';
6061

@@ -84,14 +85,14 @@ export async function release(bump = 'conventional', opts) {
8485

8586
if (version !== pkg.version) {
8687
await wetCmd(`npm --no-git-tag-version version ${version}`, opts);
87-
console.log(`${version}`);
88+
log(`${version}`, opts);
8889
}
8990
else {
90-
console.log(`${version} (no change)`);
91+
log(`${version} (no change)`, opts);
9192
}
9293
}
9394
else {
94-
console.log(`${version} (from package)`);
95+
log(`${version} (from package)`, opts);
9596
}
9697

9798
// Canaries don't have Git commits, Github releases or changelogs by default.
@@ -111,8 +112,10 @@ export async function release(bump = 'conventional', opts) {
111112
try {
112113
await wetCmd(`npx --yes conventional-github-releaser@3.1.5 -p angular`, opts);
113114
} catch (err) {
114-
console.log('Failed to create a Github release');
115-
console.error(err);
115+
if (opts['log-level'] !== 'silent') {
116+
log('Failed to create a Github release', opts);
117+
console.error(err);
118+
}
116119
}
117120
}
118121
}
@@ -179,7 +182,7 @@ async function commitChangelog(version, dryRun, opts) {
179182
await wetCmd(changelogCmd, opts);
180183

181184
if (await wetCmd(`git status --porcelain CHANGELOG.md`, opts) === '') {
182-
console.log('No changes to CHANGELOG.md');
185+
log('No changes to CHANGELOG.md', opts);
183186
return;
184187
}
185188

@@ -192,7 +195,13 @@ function wetCmd(command, opts) {
192195
if (!opts['dry-run']) {
193196
return cmd(command, opts);
194197
}
195-
console.log(command);
198+
log(command, opts);
199+
}
200+
201+
function log(msg, opts = {}) {
202+
if (['info', 'verbose'].includes(opts['log-level'])) {
203+
console.log(msg);
204+
}
196205
}
197206

198207
async function getpkg(key) {

src/server.js

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import { getMimeType } from 'hono/utils/mime';
1818
import { serve as honoServe } from '@hono/node-server';
1919
import { serveStatic } from '@hono/node-server/serve-static';
2020

21-
import { isCli, getFreePort, resolvePair, sizeToString, lastModifiedToString } from './utils.js';
21+
import { isCli, getFreePort, resolvePair, sizeToString,
22+
lastModifiedToString, getNetworkAddress } from './utils.js';
2223

2324
if (await isCli(import.meta.url)) cliServe();
2425

@@ -50,6 +51,10 @@ export function cliServe() {
5051
'ssl-pass': {
5152
type: 'string',
5253
},
54+
'log-level': {
55+
type: 'string',
56+
default: 'info',
57+
},
5358
};
5459

5560
const {
@@ -104,7 +109,10 @@ export async function serve(root = '.', opts = {}) {
104109

105110
const app = new Hono();
106111
app.use('*', etag());
107-
app.use('*', logger());
112+
113+
if (['info', 'verbose'].includes(opts['log-level'])) {
114+
app.use('*', logger());
115+
}
108116

109117
if (cors) app.use('*', honoCors());
110118

@@ -175,12 +183,17 @@ export async function serve(root = '.', opts = {}) {
175183
});
176184

177185
if (livereload) {
178-
createLivereload(root, livereloadExts, { port, server });
186+
createLivereload(root, livereloadExts, { port, server, opts });
179187
}
180188

181189
const protocol = useSsl ? 'https' : 'http';
182190
const url = `${protocol}://localhost:${port}`;
183-
console.log(`Server running at ${url}\n`);
191+
const publicUrl = `${protocol}://${getNetworkAddress()}:${port}`;
192+
193+
if (opts['log-level'] !== 'silent') {
194+
console.log(` Local: ${url}`);
195+
console.log(` Network: ${publicUrl}\n`);
196+
}
184197

185198
return {
186199
server,
@@ -189,19 +202,24 @@ export async function serve(root = '.', opts = {}) {
189202
};
190203
}
191204

192-
function createLivereload(root, exts, { server }) {
205+
function createLivereload(root, exts, { server, opts }) {
193206

194207
const wss = new WebSocketServer({
195208
server,
196209
});
197210

198211
wss.on('connection', (ws) => {
199-
ws.on('error', console.error);
212+
213+
if (opts['log-level'] !== 'silent') {
214+
ws.on('error', console.error);
215+
}
200216

201217
ws.on('message', (data) => {
202218
const message = JSON.parse(data);
203219
if (message.command === 'hello') {
204-
console.log('Livereload client connected');
220+
if (['verbose'].includes(opts['log-level'])) {
221+
console.log('Livereload client connected');
222+
}
205223
}
206224
});
207225

@@ -227,7 +245,10 @@ function createLivereload(root, exts, { server }) {
227245
if (filename) {
228246
const ext = path.extname(filename).slice(1);
229247
if (exts.includes(ext)) {
230-
console.log(` <-- WS /${filename}`);
248+
249+
if (['info', 'verbose'].includes(opts['log-level'])) {
250+
console.log(` <-- WS /${filename}`);
251+
}
231252

232253
for (const client of wss.clients) {
233254
if (client.readyState === WebSocket.OPEN) {
@@ -243,11 +264,15 @@ function createLivereload(root, exts, { server }) {
243264
}
244265
});
245266

246-
fileWatcher.on('error', console.error);
267+
if (opts['log-level'] !== 'silent') {
268+
fileWatcher.on('error', console.error);
269+
}
247270
fileWatcher.unref();
248271
}
249272
catch (err) {
250-
console.error(err);
273+
if (opts['log-level'] !== 'silent') {
274+
console.error(err);
275+
}
251276
}
252277
}
253278

src/test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ export function cliTest() {
4141
timeout: {
4242
type: 'string',
4343
},
44-
verbose: {
45-
type: 'boolean',
44+
'log-level': {
45+
type: 'string',
46+
default: 'info',
4647
},
4748
};
4849

src/utils.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { argv } from 'node:process';
22
import { realpath } from 'node:fs/promises'
33
import { fileURLToPath } from 'node:url';
44
import net from 'node:net';
5+
import { networkInterfaces } from 'node:os';
56
import child_process from 'node:child_process';
67
import { promisify } from 'node:util';
78

@@ -13,6 +14,18 @@ export async function isCli(metaUrl) {
1314
return nodePath === modulePath;
1415
}
1516

17+
export function getNetworkAddress() {
18+
const interfaces = networkInterfaces();
19+
for (const name of Object.keys(interfaces)) {
20+
for (const ifc of interfaces[name]) {
21+
const { address, family, internal } = ifc;
22+
if (family === 'IPv4' && !internal) {
23+
return address;
24+
}
25+
}
26+
}
27+
}
28+
1629
export async function getFreePort(base = 8000) {
1730
for (let port = base; port < base + 10; port++) {
1831
if (await isPortAvailable(port)) return port;
@@ -41,12 +54,16 @@ export function isPortAvailable(port) {
4154
export async function cmd(command, opts) {
4255
command = command.trim().replace(/\s+/g, ' ');
4356

44-
if (opts.verbose) console.log(`${command}`);
57+
if (opts['log-level'] === 'verbose') {
58+
console.log(`${command}`);
59+
}
4560

4661
const { stdout, stderr } = await exec(command);
4762

4863
if (stderr) {
49-
console.error(`\n${stderr}`);
64+
if (opts['log-level'] !== 'silent') {
65+
console.error(`\n${stderr}`);
66+
}
5067
}
5168

5269
return stdout.trim();

0 commit comments

Comments
 (0)