Skip to content

Commit

Permalink
feat(JavaScript): Add the workflow file for CI check (#1296)
Browse files Browse the repository at this point in the history
* feat(JavaScript): Add the workflow file for CI check

* Apply suggestions from code review
Co-authored-by: krahets <[email protected]>

* Test failure

* Update javascript.yml

* Test success

---------

Co-authored-by: Yudong Jin <[email protected]>
  • Loading branch information
Shyam-Chen and krahets authored Apr 22, 2024
1 parent a7f4340 commit 1a99dd4
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 1 deletion.
27 changes: 27 additions & 0 deletions .github/workflows/javascript.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: JavaScript

on:
push:
branches: ['main']
paths: ['codes/javascript/**/*.js']
pull_request:
branches: ['main']
paths: ['codes/javascript/**/*.js']
workflow_dispatch:

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20.x
- uses: denoland/setup-deno@v1
with:
deno-version: v1.x
- name: Run JavaScript Code
run: deno run -A codes/javascript/test_all.js
2 changes: 1 addition & 1 deletion .github/workflows/typescript.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
Expand Down
63 changes: 63 additions & 0 deletions codes/javascript/test_all.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import { bold, brightRed } from 'jsr:@std/fmt/colors';
import { expandGlob } from 'jsr:@std/fs';
import { relative, resolve } from 'jsr:@std/path';

/**
* @typedef {import('jsr:@std/fs').WalkEntry} WalkEntry
* @type {WalkEntry[]}
*/
const entries = [];

for await (const entry of expandGlob(
resolve(import.meta.dirname, './chapter_*/*.js')
)) {
entries.push(entry);
}

/** @type {{ status: Promise<Deno.CommandStatus>; stderr: ReadableStream<Uint8Array>; }[]} */
const processes = [];

for (const file of entries) {
const execute = new Deno.Command('node', {
args: [relative(import.meta.dirname, file.path)],
cwd: import.meta.dirname,
stdin: 'piped',
stdout: 'piped',
stderr: 'piped',
});

const process = execute.spawn();
processes.push({ status: process.status, stderr: process.stderr });
}

const results = await Promise.all(
processes.map(async (item) => {
const status = await item.status;
return { status, stderr: item.stderr };
})
);

/** @type {ReadableStream<Uint8Array>[]} */
const errors = [];

for (const result of results) {
if (!result.status.success) {
errors.push(result.stderr);
}
}

console.log(`Tested ${entries.length} files`);
console.log(`Found exception in ${errors.length} files`);

if (errors.length) {
console.log();

for (const error of errors) {
const reader = error.getReader();
const { value } = await reader.read();
const decoder = new TextDecoder();
console.log(`${bold(brightRed('error'))}: ${decoder.decode(value)}`);
}

throw new Error('Test failed');
}

0 comments on commit 1a99dd4

Please sign in to comment.