From 918299f000aa6b08f35a8858379654920c1b430d Mon Sep 17 00:00:00 2001 From: Markus Tacker Date: Tue, 8 Oct 2024 23:33:58 +0200 Subject: [PATCH] ci: add tests for regex Add tests for the update bundle filename regex. Signed-off-by: Markus Tacker --- .github/workflows/lib/nameRegEx.mjs | 4 +++ .github/workflows/lib/nameRegEx.test.mjs | 34 +++++++++++++++++++ .../publish-firmware-bundles-tests.yml | 23 +++++++++++++ .../workflows/register-firmware-bundles.mjs | 10 +++--- 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/lib/nameRegEx.mjs create mode 100644 .github/workflows/lib/nameRegEx.test.mjs create mode 100644 .github/workflows/publish-firmware-bundles-tests.yml diff --git a/.github/workflows/lib/nameRegEx.mjs b/.github/workflows/lib/nameRegEx.mjs new file mode 100644 index 00000000..8e5b9c12 --- /dev/null +++ b/.github/workflows/lib/nameRegEx.mjs @@ -0,0 +1,4 @@ +export const nameRegEx = (version) => + new RegExp( + `^hello\.nrfcloud\.com-${version}(\\+(?[0-9A-Za-z.]+))?-thingy91x-nrf91-update-signed\.bin$` + ); diff --git a/.github/workflows/lib/nameRegEx.test.mjs b/.github/workflows/lib/nameRegEx.test.mjs new file mode 100644 index 00000000..704efcec --- /dev/null +++ b/.github/workflows/lib/nameRegEx.test.mjs @@ -0,0 +1,34 @@ +import { nameRegEx } from "./nameRegEx.mjs"; +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; + +describe("nameRegEx", () => { + it("should match a valid filename without configuration", () => + assert.ok( + nameRegEx("1.0.0").test( + "hello.nrfcloud.com-1.0.0-thingy91x-nrf91-update-signed.bin" + ) + )); + + it("should match a valid filename with configuration", () => + assert.ok( + nameRegEx("1.0.0").test( + "hello.nrfcloud.com-1.0.0+debug-thingy91x-nrf91-update-signed.bin" + ) + )); + + it("should not match an invalid filename", () => { + const version = "1.0.0"; + const regex = nameRegEx(version); + const filename = "invalid-filename.bin"; + assert.ok(!regex.test(filename)); + }); + + it("should not match a filename with a different version", () => { + const version = "1.0.0"; + const regex = nameRegEx(version); + const filename = + "hello.nrfcloud.com-2.0.0-thingy91x-nrf91-update-signed.bin"; + assert.ok(!regex.test(filename)); + }); +}); diff --git a/.github/workflows/publish-firmware-bundles-tests.yml b/.github/workflows/publish-firmware-bundles-tests.yml new file mode 100644 index 00000000..5da445c7 --- /dev/null +++ b/.github/workflows/publish-firmware-bundles-tests.yml @@ -0,0 +1,23 @@ +name: Publish Firmware Bundles Tests + +on: + push: + branches: + - main + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Run tests + run: node --test ./.github/workflows/**/*.test.mjs diff --git a/.github/workflows/register-firmware-bundles.mjs b/.github/workflows/register-firmware-bundles.mjs index 7cd0bb35..82a1a686 100644 --- a/.github/workflows/register-firmware-bundles.mjs +++ b/.github/workflows/register-firmware-bundles.mjs @@ -4,18 +4,16 @@ import { mkdtemp } from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import yazl from "yazl"; +import { nameRegEx } from "./lib/nameRegEx.mjs"; const version = (process.argv[process.argv.length - 1] ?? "").trim(); +const filenameRegEx = nameRegEx(version); console.log(`Publishing release version`, version); -const nameRegEx = new RegExp( - `^hello\.nrfcloud\.com-${version}(\\+(?[0-9A-Za-z.]+))?-thingy91x-nrf91-update-signed\.bin$` -); - const assets = fs .readdirSync(process.cwd()) - .filter((name) => nameRegEx.test(name)); + .filter((name) => filenameRegEx.test(name)); if (assets.length === 0) { console.error(`No assets found for release ${version}!`); @@ -25,7 +23,7 @@ if (assets.length === 0) { for (const asset of assets) { const { groups: { configuration }, - } = nameRegEx.exec(asset); + } = filenameRegEx.exec(asset); const fwversion = `${version}${ configuration !== undefined ? `+${configuration}` : ""