From 14743eef458f2530519d70c6384c99cd10d46956 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sun, 19 Apr 2026 18:00:59 +0200 Subject: [PATCH] Introduce a GitHub Actions workflow for running the unit tests Note that we no longer create an empty file if the download fails because we don't want to leave traces of incorrect file contents on disk. This has never been particularly useful because it'd require a manual user action to remove the empty file to be able to retry in case of e.g. a timed out connection, but especially in the context of GitHub Actions where we cache the PDFs directory we don't want to cache invalid files to make sure that a next run will automatically retry to fetch any previously missed PDF files and update the cache. --- .github/workflows/unit_tests.yml | 72 ++++++++++++++++++++++++++++++++ test/downloadutils.mjs | 2 - 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/unit_tests.yml diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml new file mode 100644 index 000000000..5a3c605e8 --- /dev/null +++ b/.github/workflows/unit_tests.yml @@ -0,0 +1,72 @@ +name: Unit tests +on: + push: + paths: + - 'gulpfile.mjs' + - 'src/**' + - 'test/test.mjs' + - 'test/unit/**' + - 'web/**' + - '.github/workflows/unit_tests.yml' + branches: + - master + pull_request: + paths: + - 'gulpfile.mjs' + - 'src/**' + - 'test/test.mjs' + - 'test/unit/**' + - 'web/**' + - '.github/workflows/unit_tests.yml' + branches: + - master + workflow_dispatch: +permissions: + contents: read + +jobs: + test: + name: Test + + strategy: + fail-fast: false + matrix: + node-version: [lts/*] + os: [windows-latest, ubuntu-latest] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + persist-credentials: false + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Restore cached PDF files + uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + with: + path: test/pdfs/*.pdf + key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }} + restore-keys: | + cached-pdf-files- + enableCrossOsArchive: true + + - name: Run unit tests + run: npx gulp unittest --headless + + - name: Save cached PDF files + uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + with: + path: test/pdfs/*.pdf + key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }} + enableCrossOsArchive: true diff --git a/test/downloadutils.mjs b/test/downloadutils.mjs index b79ed401b..feab36d53 100644 --- a/test/downloadutils.mjs +++ b/test/downloadutils.mjs @@ -66,8 +66,6 @@ async function downloadManifestFiles(manifest) { await downloadFile(file, url); } catch (ex) { console.error(`Error during downloading of ${url}:`, ex); - fs.writeFileSync(file, ""); // making it empty file - fs.writeFileSync(`${file}.error`, ex.toString()); } } }