From bb1bf8cbd5d0d385ab64e99a23d3968c4757bb9a Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 07:47:41 -0600 Subject: [PATCH 01/48] ci: add initial ci scripts Add test & preflight CI scripts to test that I'm doing this right lol --- .github/workflows/ci.yaml | 28 ++++++++++++++++++++++++++++ .github/workflows/preflight.yaml | 19 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/preflight.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..ec35e68 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,28 @@ +name: CI + +on: [push, pull_request] + +jobs: + setup: + name: Setup + runs-on: ubuntu-latest + steps: + - name: Set up Deno + uses: denoland/setup-deno@v2 + with: + cache: true + # This should warm up the Deno cache for subsequent jobs + - name: Install dependencies + run: deno install + test-cache: + name: Test caching + needs: [setup] + runs-on: ubuntu-latest + steps: + # Now the Deno cache should be warmed up, so this should be much faster + - name: Set up Deno + uses: denoland/setup-deno@v2 + with: + cache: true + - name: Install dependencies + run: deno install diff --git a/.github/workflows/preflight.yaml b/.github/workflows/preflight.yaml new file mode 100644 index 0000000..1fa8182 --- /dev/null +++ b/.github/workflows/preflight.yaml @@ -0,0 +1,19 @@ +name: Preflight + +on: + push: + branches: + # - main + # - dev + # This allows us to test our actions as soon as we push them + - actions/**/* + +jobs: + main: + name: Main + runs-on: ubuntu-latest + steps: + - name: Log event name + run: echo "This workflow was automatically triggered by a ${{ github.event_name }} event" + - name: Log ref data + run: echo "The ref that triggered this workflow is ${{ github.ref }}" \ No newline at end of file From 4bb8397f04769ed75a563e14e05cea49a8f02d35 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 07:51:14 -0600 Subject: [PATCH 02/48] ci: add repo checkout steps (duh) --- .github/workflows/ci.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ec35e68..aa6542f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -11,6 +11,7 @@ jobs: uses: denoland/setup-deno@v2 with: cache: true + - uses: actions/checkout@v5 # This should warm up the Deno cache for subsequent jobs - name: Install dependencies run: deno install @@ -24,5 +25,6 @@ jobs: uses: denoland/setup-deno@v2 with: cache: true + - uses: actions/checkout@v5 - name: Install dependencies run: deno install From 39b7c249dfc3c769e56d43cce4084eff9cdf791a Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 08:36:34 -0600 Subject: [PATCH 03/48] ci: add dependency caching, polish other steps --- .github/workflows/ci.yaml | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index aa6542f..1294894 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -2,6 +2,12 @@ name: CI on: [push, pull_request] +env: + # Used to forcefully bust the cache + CACHE_VERSION: v1 + # Used to differentiate from other slices of the cache for other workflow runs + CACHE_SLICE_NAME: ci + jobs: setup: name: Setup @@ -11,8 +17,16 @@ jobs: uses: denoland/setup-deno@v2 with: cache: true - - uses: actions/checkout@v5 - # This should warm up the Deno cache for subsequent jobs + - name: Checkout repository + uses: actions/checkout@v5 + - name: Set up Deno dependencies cache + uses: actions/cache@v3 + with: + # Don't add more paths below, since they'll be invalidated whenever Deno deps change + path: ~/.deno + key: ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }}-${{ hashFiles('deno.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }} - name: Install dependencies run: deno install test-cache: @@ -24,7 +38,18 @@ jobs: - name: Set up Deno uses: denoland/setup-deno@v2 with: + deno-version: 2.x cache: true - - uses: actions/checkout@v5 + - name: Checkout repository + uses: actions/checkout@v5 + - name: Set up or restore Deno dependencies cache + uses: actions/cache@v3 + with: + # Don't add more paths below, since they'll be invalidated whenever Deno deps change + path: ~/.deno + key: ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }}-${{ hashFiles('deno.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }} + # Now the Deno dependencies cache should be warmed up, so this should be much faster - name: Install dependencies run: deno install From 31a99838f2c3b8ccc1e410ec478c5d2880980e9b Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 08:37:37 -0600 Subject: [PATCH 04/48] ci: add fn-setup reusable workflow Add fn-setup to encapsulate all setup steps and DRY up the main ci workflow --- .github/workflows/fn-setup.yaml | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/fn-setup.yaml diff --git a/.github/workflows/fn-setup.yaml b/.github/workflows/fn-setup.yaml new file mode 100644 index 0000000..d7ff3d9 --- /dev/null +++ b/.github/workflows/fn-setup.yaml @@ -0,0 +1,39 @@ +name: Setup + +on: + workflow_call: + inputs: + cache-version: + description: A string to forcefully bust the cache + type: string + required: false + default: v1 + cache-slice-name: + description: A string to differentiate from other slices of the cache for other workflow runs + type: string + required: false + +jobs: + setup: + name: Setup + runs-on: ubuntu-latest + steps: + - name: Set up Deno + uses: denoland/setup-deno@v2 + with: + cache: true + + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up Deno dependencies cache + uses: actions/cache@v3 + with: + # Don't add more paths below, since they'll be invalidated whenever Deno deps change + path: ~/.deno + key: ${{ runner.os }}-${{ inputs.cache-slice-name }}@${{ inputs.cache-version }}-${{ hashFiles('deno.lock') }} + restore-keys: | + ${{ runner.os }}-${{ inputs.cache-slice-name }}@${{ inputs.cache-version }} + + - name: Install dependencies + run: deno install From 84a3dcecd36e17eea77ddba2474f5643a5e3aeca Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 08:40:21 -0600 Subject: [PATCH 05/48] ci: debug deno directory --- .github/workflows/ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1294894..5f2abef 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -29,6 +29,7 @@ jobs: ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }} - name: Install dependencies run: deno install + - run: echo $DENO_DIR test-cache: name: Test caching needs: [setup] From 00aae3a10b668651467b2eea5c5eade8dc221081 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 08:55:16 -0600 Subject: [PATCH 06/48] ci: test out whether specifying DENO_DIR makes caching work properly --- .github/workflows/ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5f2abef..5bf9ca8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -7,6 +7,7 @@ env: CACHE_VERSION: v1 # Used to differentiate from other slices of the cache for other workflow runs CACHE_SLICE_NAME: ci + DENO_DIR: ~/.deno jobs: setup: From 45994396fe21ad1411cbdd3157b314018e39d3f4 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 08:59:11 -0600 Subject: [PATCH 07/48] ci: add DENO_DIR env variable to Set up Deno action --- .github/workflows/ci.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5bf9ca8..91ebd4a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -17,7 +17,10 @@ jobs: - name: Set up Deno uses: denoland/setup-deno@v2 with: + deno-version: 2.x cache: true + env: + DENO_DIR: ${{ env.DENO_DIR }} - name: Checkout repository uses: actions/checkout@v5 - name: Set up Deno dependencies cache From 36f608dbb108eb1ca51c2baf5226b15a05c8efb6 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 09:00:40 -0600 Subject: [PATCH 08/48] ci: switch up debugging, remove DENO_DIR --- .github/workflows/ci.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 91ebd4a..9b0819a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -7,7 +7,6 @@ env: CACHE_VERSION: v1 # Used to differentiate from other slices of the cache for other workflow runs CACHE_SLICE_NAME: ci - DENO_DIR: ~/.deno jobs: setup: @@ -19,8 +18,6 @@ jobs: with: deno-version: 2.x cache: true - env: - DENO_DIR: ${{ env.DENO_DIR }} - name: Checkout repository uses: actions/checkout@v5 - name: Set up Deno dependencies cache @@ -33,7 +30,7 @@ jobs: ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }} - name: Install dependencies run: deno install - - run: echo $DENO_DIR + - run: which deno test-cache: name: Test caching needs: [setup] From fa9d20368a53f06992412bab86f89869e66dbf30 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 09:13:14 -0600 Subject: [PATCH 09/48] ci: change debug command --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9b0819a..6c2e531 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,7 +30,7 @@ jobs: ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }} - name: Install dependencies run: deno install - - run: which deno + - run: which deno | ls test-cache: name: Test caching needs: [setup] From 0c1e197fe34e57d22e17e96b2d0985b0ca01d63c Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 09:21:11 -0600 Subject: [PATCH 10/48] ci: try using cache dir from cache action docs --- .github/workflows/ci.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6c2e531..8f235eb 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -24,7 +24,10 @@ jobs: uses: actions/cache@v3 with: # Don't add more paths below, since they'll be invalidated whenever Deno deps change - path: ~/.deno + # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux + path: | + ~/.deno + ~/.cache/deno key: ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }}-${{ hashFiles('deno.lock') }} restore-keys: | ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }} @@ -48,7 +51,10 @@ jobs: uses: actions/cache@v3 with: # Don't add more paths below, since they'll be invalidated whenever Deno deps change - path: ~/.deno + # https://github.com/actions/cache/blob/main/examples.md#linux + path: | + ~/.deno + ~/.cache/deno key: ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }}-${{ hashFiles('deno.lock') }} restore-keys: | ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }} From 28d3fcd014d1b5ad68ca1f5682092d0f615cb40e Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:45:16 -0600 Subject: [PATCH 11/48] ci: update setup fn workflow with fixes from ci workflow --- .github/workflows/fn-setup.yaml | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/.github/workflows/fn-setup.yaml b/.github/workflows/fn-setup.yaml index d7ff3d9..450f383 100644 --- a/.github/workflows/fn-setup.yaml +++ b/.github/workflows/fn-setup.yaml @@ -4,15 +4,25 @@ on: workflow_call: inputs: cache-version: - description: A string to forcefully bust the cache + description: A string to forcefully bust the cache when changed type: string required: false default: v1 - cache-slice-name: - description: A string to differentiate from other slices of the cache for other workflow runs + deno-deps-cache-slice-name: + description: + A string to differentiate the Deno dependencies slice from other slices of the cache. \ + This is needed only if there are other slices that shouldn't be confused with this slice. type: string required: false +env: + DENO_CACHE_SLICE_NAME: deno + # Don't add more paths below, since they'll be invalidated whenever Deno deps change + # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux + DENO_DEPS_CACHE_PATH: | + ~/.deno + ~/.cache/deno + jobs: setup: name: Setup @@ -21,7 +31,9 @@ jobs: - name: Set up Deno uses: denoland/setup-deno@v2 with: + deno-version: 2.x cache: true + cache-hash: ${{ runner.os }}-${{ env.DENO_CACHE_SLICE_NAME }}@${{ inputs.cache-version }} - name: Checkout repository uses: actions/checkout@v5 @@ -29,11 +41,10 @@ jobs: - name: Set up Deno dependencies cache uses: actions/cache@v3 with: - # Don't add more paths below, since they'll be invalidated whenever Deno deps change - path: ~/.deno - key: ${{ runner.os }}-${{ inputs.cache-slice-name }}@${{ inputs.cache-version }}-${{ hashFiles('deno.lock') }} + path: ${{ env.DENO_DEPS_CACHE_PATH }} + key: ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }}-${{ hashFiles('deno.lock') }} restore-keys: | - ${{ runner.os }}-${{ inputs.cache-slice-name }}@${{ inputs.cache-version }} + ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }} - name: Install dependencies run: deno install From 2b4d0c10071c2109194a8f904a7a614e7116c4f5 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:45:48 -0600 Subject: [PATCH 12/48] ci: refactor ci workflow to use setup fn workflow and run tests --- .github/workflows/ci.yaml | 54 +++++++++------------------------------ 1 file changed, 12 insertions(+), 42 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8f235eb..b3decc8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -13,51 +13,21 @@ jobs: name: Setup runs-on: ubuntu-latest steps: - - name: Set up Deno - uses: denoland/setup-deno@v2 + - name: Set up Repository + uses: ./.github/workflows/fn-setup.yaml with: - deno-version: 2.x - cache: true - - name: Checkout repository - uses: actions/checkout@v5 - - name: Set up Deno dependencies cache - uses: actions/cache@v3 - with: - # Don't add more paths below, since they'll be invalidated whenever Deno deps change - # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux - path: | - ~/.deno - ~/.cache/deno - key: ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }}-${{ hashFiles('deno.lock') }} - restore-keys: | - ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }} - - name: Install dependencies - run: deno install - - run: which deno | ls - test-cache: - name: Test caching + cache-version: ${{ env.CACHE_VERSION }} + deno-deps-cache-slice-name: ${{ env.CACHE_SLICE_NAME }} + test: + name: Test needs: [setup] runs-on: ubuntu-latest steps: # Now the Deno cache should be warmed up, so this should be much faster - - name: Set up Deno - uses: denoland/setup-deno@v2 - with: - deno-version: 2.x - cache: true - - name: Checkout repository - uses: actions/checkout@v5 - - name: Set up or restore Deno dependencies cache - uses: actions/cache@v3 + - name: Set up Repository + uses: ./.github/workflows/fn-setup.yaml with: - # Don't add more paths below, since they'll be invalidated whenever Deno deps change - # https://github.com/actions/cache/blob/main/examples.md#linux - path: | - ~/.deno - ~/.cache/deno - key: ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }}-${{ hashFiles('deno.lock') }} - restore-keys: | - ${{ runner.os }}-${{ env.CACHE_SLICE_NAME }}@${{ env.CACHE_VERSION }} - # Now the Deno dependencies cache should be warmed up, so this should be much faster - - name: Install dependencies - run: deno install + cache-version: ${{ env.CACHE_VERSION }} + deno-deps-cache-slice-name: ${{ env.CACHE_SLICE_NAME }} + - name: Test + run: deno test --allow-read From b9894378cbba9f807803d2b61984c0a548a76f59 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:47:28 -0600 Subject: [PATCH 13/48] ci: move checkout action to outside workflow fn --- .github/workflows/ci.yaml | 4 ++++ .github/workflows/fn-setup.yaml | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b3decc8..480b762 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -13,6 +13,8 @@ jobs: name: Setup runs-on: ubuntu-latest steps: + - name: Checkout repository + uses: actions/checkout@v5 - name: Set up Repository uses: ./.github/workflows/fn-setup.yaml with: @@ -23,6 +25,8 @@ jobs: needs: [setup] runs-on: ubuntu-latest steps: + - name: Checkout repository + uses: actions/checkout@v5 # Now the Deno cache should be warmed up, so this should be much faster - name: Set up Repository uses: ./.github/workflows/fn-setup.yaml diff --git a/.github/workflows/fn-setup.yaml b/.github/workflows/fn-setup.yaml index 450f383..76a2945 100644 --- a/.github/workflows/fn-setup.yaml +++ b/.github/workflows/fn-setup.yaml @@ -35,9 +35,6 @@ jobs: cache: true cache-hash: ${{ runner.os }}-${{ env.DENO_CACHE_SLICE_NAME }}@${{ inputs.cache-version }} - - name: Checkout repository - uses: actions/checkout@v5 - - name: Set up Deno dependencies cache uses: actions/cache@v3 with: From 7c8a60817ccb754efe24e76a1faef9179c2c9998 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:55:43 -0600 Subject: [PATCH 14/48] ci: fix using workflow fn --- .github/workflows/ci.yaml | 16 ++++++---------- .github/workflows/fn-setup.yaml | 2 +- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 480b762..e5ae5a2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -10,16 +10,12 @@ env: jobs: setup: - name: Setup - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v5 - - name: Set up Repository - uses: ./.github/workflows/fn-setup.yaml - with: - cache-version: ${{ env.CACHE_VERSION }} - deno-deps-cache-slice-name: ${{ env.CACHE_SLICE_NAME }} + name: Setup Repository + uses: ./.github/workflows/fn-setup.yaml + with: + cache-version: v1 + deno-deps-cache-slice-name: ci + test: name: Test needs: [setup] diff --git a/.github/workflows/fn-setup.yaml b/.github/workflows/fn-setup.yaml index 76a2945..ed2f28a 100644 --- a/.github/workflows/fn-setup.yaml +++ b/.github/workflows/fn-setup.yaml @@ -10,7 +10,7 @@ on: default: v1 deno-deps-cache-slice-name: description: - A string to differentiate the Deno dependencies slice from other slices of the cache. \ + A string to differentiate the Deno dependencies slice from other slices of the cache. This is needed only if there are other slices that shouldn't be confused with this slice. type: string required: false From 0186cd58a7496c0c9263b57e2cb9a81ac66c839b Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 11:03:13 -0600 Subject: [PATCH 15/48] ci: remove preflight --- .github/workflows/preflight.yaml | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 .github/workflows/preflight.yaml diff --git a/.github/workflows/preflight.yaml b/.github/workflows/preflight.yaml deleted file mode 100644 index 1fa8182..0000000 --- a/.github/workflows/preflight.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: Preflight - -on: - push: - branches: - # - main - # - dev - # This allows us to test our actions as soon as we push them - - actions/**/* - -jobs: - main: - name: Main - runs-on: ubuntu-latest - steps: - - name: Log event name - run: echo "This workflow was automatically triggered by a ${{ github.event_name }} event" - - name: Log ref data - run: echo "The ref that triggered this workflow is ${{ github.ref }}" \ No newline at end of file From 5191bf3bc9849fc762002e26fad218749eb66ce6 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 11:03:41 -0600 Subject: [PATCH 16/48] ci: rename CI workflow to proper file extension --- .github/workflows/{ci.yaml => ci.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{ci.yaml => ci.yml} (100%) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yml similarity index 100% rename from .github/workflows/ci.yaml rename to .github/workflows/ci.yml From 7a82caecc2d2d709ad6c2297bbddc1a3f50f58e2 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 11:06:51 -0600 Subject: [PATCH 17/48] ci: rename setup fn workflow to proper file extension --- .github/workflows/{fn-setup.yaml => fn-setup.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{fn-setup.yaml => fn-setup.yml} (100%) diff --git a/.github/workflows/fn-setup.yaml b/.github/workflows/fn-setup.yml similarity index 100% rename from .github/workflows/fn-setup.yaml rename to .github/workflows/fn-setup.yml From fff4dbd7c98c57535268f396c7e89a8d1f0a42c3 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 11:24:51 -0600 Subject: [PATCH 18/48] ci: create fn-setup composite workflow --- .github/actions/fn-setup/action.yml | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/actions/fn-setup/action.yml diff --git a/.github/actions/fn-setup/action.yml b/.github/actions/fn-setup/action.yml new file mode 100644 index 0000000..9c0e1b4 --- /dev/null +++ b/.github/actions/fn-setup/action.yml @@ -0,0 +1,40 @@ +name: Setup +description: Setup the repository + +inputs: + cache-version: + description: A string to forcefully bust the cache when changed + required: false + default: v1 + deno-deps-cache-slice-name: + description: A string to differentiate the Deno dependencies slice from other slices of the cache. This is needed only if there are other slices that shouldn't be confused with this slice. + required: false + +runs: + using: composite + steps: + - name: Set up Deno + uses: denoland/setup-deno@v2 + env: + DENO_CACHE_SLICE_NAME: deno + # Don't add more paths below, since they'll be invalidated whenever Deno deps change + # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux + DENO_DEPS_CACHE_PATH: | + ~/.deno + ~/.cache/deno + with: + deno-version: 2.x + cache: true + cache-hash: ${{ runner.os }}-${{ env.DENO_CACHE_SLICE_NAME }}@${{ inputs.cache-version }} + + - name: Set up Deno dependencies cache + uses: actions/cache@v3 + with: + path: ${{ env.DENO_DEPS_CACHE_PATH }} + key: ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }}-${{ hashFiles('deno.lock') }} + restore-keys: | + ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }} + + - name: Install dependencies + run: deno install + shell: bash From b4ebb94b1ba0064c5222bf6b98164e5d8997daab Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 11:25:09 -0600 Subject: [PATCH 19/48] ci: try using composite workflow instead of reusable workflow --- .github/workflows/ci.yml | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e5ae5a2..f54a0a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,11 +10,17 @@ env: jobs: setup: - name: Setup Repository - uses: ./.github/workflows/fn-setup.yaml - with: - cache-version: v1 - deno-deps-cache-slice-name: ci + name: Setup + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up Repository + uses: ./.github/actions/fn-setup + with: + cache-version: ${{ env.CACHE_VERSION }} + deno-deps-cache-slice-name: ${{ env.CACHE_SLICE_NAME }} test: name: Test @@ -23,11 +29,13 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v5 + # Now the Deno cache should be warmed up, so this should be much faster - name: Set up Repository - uses: ./.github/workflows/fn-setup.yaml + uses: ./.github/actions/fn-setup with: cache-version: ${{ env.CACHE_VERSION }} deno-deps-cache-slice-name: ${{ env.CACHE_SLICE_NAME }} + - name: Test run: deno test --allow-read From 6da686decc554b54462ab496690912be5ddf2011 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 11:32:02 -0600 Subject: [PATCH 20/48] ci: supply paths to deno deps cache action --- .github/actions/fn-setup/action.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/actions/fn-setup/action.yml b/.github/actions/fn-setup/action.yml index 9c0e1b4..adeb537 100644 --- a/.github/actions/fn-setup/action.yml +++ b/.github/actions/fn-setup/action.yml @@ -17,11 +17,6 @@ runs: uses: denoland/setup-deno@v2 env: DENO_CACHE_SLICE_NAME: deno - # Don't add more paths below, since they'll be invalidated whenever Deno deps change - # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux - DENO_DEPS_CACHE_PATH: | - ~/.deno - ~/.cache/deno with: deno-version: 2.x cache: true @@ -29,6 +24,12 @@ runs: - name: Set up Deno dependencies cache uses: actions/cache@v3 + env: + # Don't add more paths below, since they'll be invalidated whenever Deno deps change + # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux + DENO_DEPS_CACHE_PATH: | + ~/.deno + ~/.cache/deno with: path: ${{ env.DENO_DEPS_CACHE_PATH }} key: ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }}-${{ hashFiles('deno.lock') }} From 35b1746807c262deaeb25200fd322bfe82e15d40 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 11:40:58 -0600 Subject: [PATCH 21/48] ci: clean up naming --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f54a0a7..8a7605d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v5 - - name: Set up Repository + - name: Set up repository uses: ./.github/actions/fn-setup with: cache-version: ${{ env.CACHE_VERSION }} @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@v5 # Now the Deno cache should be warmed up, so this should be much faster - - name: Set up Repository + - name: Set up repository uses: ./.github/actions/fn-setup with: cache-version: ${{ env.CACHE_VERSION }} From 58604d5890f4fd1c6ca0a7cddd3d73cce85c98fa Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 12:16:12 -0600 Subject: [PATCH 22/48] ci: debug: what happens when we remove the deps cache --- .github/actions/fn-setup/action.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/actions/fn-setup/action.yml b/.github/actions/fn-setup/action.yml index adeb537..4948153 100644 --- a/.github/actions/fn-setup/action.yml +++ b/.github/actions/fn-setup/action.yml @@ -22,19 +22,19 @@ runs: cache: true cache-hash: ${{ runner.os }}-${{ env.DENO_CACHE_SLICE_NAME }}@${{ inputs.cache-version }} - - name: Set up Deno dependencies cache - uses: actions/cache@v3 - env: - # Don't add more paths below, since they'll be invalidated whenever Deno deps change - # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux - DENO_DEPS_CACHE_PATH: | - ~/.deno - ~/.cache/deno - with: - path: ${{ env.DENO_DEPS_CACHE_PATH }} - key: ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }}-${{ hashFiles('deno.lock') }} - restore-keys: | - ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }} + # - name: Set up Deno dependencies cache + # uses: actions/cache@v3 + # env: + # # Don't add more paths below, since they'll be invalidated whenever Deno deps change + # # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux + # DENO_DEPS_CACHE_PATH: | + # ~/.deno + # ~/.cache/deno + # with: + # path: ${{ env.DENO_DEPS_CACHE_PATH }} + # key: ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }}-${{ hashFiles('deno.lock') }} + # restore-keys: | + # ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }} - name: Install dependencies run: deno install From 4bd3d879af564bd0b084fafc68a80a473f616943 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 12:20:10 -0600 Subject: [PATCH 23/48] ci: debug: now what happens if we take away the cache hash --- .github/actions/fn-setup/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/fn-setup/action.yml b/.github/actions/fn-setup/action.yml index 4948153..e673fe7 100644 --- a/.github/actions/fn-setup/action.yml +++ b/.github/actions/fn-setup/action.yml @@ -20,7 +20,7 @@ runs: with: deno-version: 2.x cache: true - cache-hash: ${{ runner.os }}-${{ env.DENO_CACHE_SLICE_NAME }}@${{ inputs.cache-version }} + # cache-hash: ${{ runner.os }}-${{ env.DENO_CACHE_SLICE_NAME }}@${{ inputs.cache-version }} # - name: Set up Deno dependencies cache # uses: actions/cache@v3 From 136600fa95a5761ce96e6b79a79d94dfdaffdc3f Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:37:46 -0600 Subject: [PATCH 24/48] ci: simplify everything back down to a single CI workflow --- .github/actions/fn-setup/action.yml | 41 ---------------------- .github/workflows/ci.yml | 53 +++++++++++++++++++++-------- .github/workflows/fn-setup.yml | 47 ------------------------- 3 files changed, 39 insertions(+), 102 deletions(-) delete mode 100644 .github/actions/fn-setup/action.yml delete mode 100644 .github/workflows/fn-setup.yml diff --git a/.github/actions/fn-setup/action.yml b/.github/actions/fn-setup/action.yml deleted file mode 100644 index e673fe7..0000000 --- a/.github/actions/fn-setup/action.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Setup -description: Setup the repository - -inputs: - cache-version: - description: A string to forcefully bust the cache when changed - required: false - default: v1 - deno-deps-cache-slice-name: - description: A string to differentiate the Deno dependencies slice from other slices of the cache. This is needed only if there are other slices that shouldn't be confused with this slice. - required: false - -runs: - using: composite - steps: - - name: Set up Deno - uses: denoland/setup-deno@v2 - env: - DENO_CACHE_SLICE_NAME: deno - with: - deno-version: 2.x - cache: true - # cache-hash: ${{ runner.os }}-${{ env.DENO_CACHE_SLICE_NAME }}@${{ inputs.cache-version }} - - # - name: Set up Deno dependencies cache - # uses: actions/cache@v3 - # env: - # # Don't add more paths below, since they'll be invalidated whenever Deno deps change - # # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux - # DENO_DEPS_CACHE_PATH: | - # ~/.deno - # ~/.cache/deno - # with: - # path: ${{ env.DENO_DEPS_CACHE_PATH }} - # key: ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }}-${{ hashFiles('deno.lock') }} - # restore-keys: | - # ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }} - - - name: Install dependencies - run: deno install - shell: bash diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a7605d..222a6a8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,24 +3,34 @@ name: CI on: [push, pull_request] env: - # Used to forcefully bust the cache - CACHE_VERSION: v1 - # Used to differentiate from other slices of the cache for other workflow runs - CACHE_SLICE_NAME: ci + # Used to differentiate from other slices of the cache for other workflow runs, and to forcefully bust the cache when renamed + CACHE_KEY_BASE: ci@v1 jobs: setup: name: Setup runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v5 + - name: Set up Deno + id: deno-install-and-cache + uses: denoland/setup-deno@v2 + with: + deno-version: 2.x + cache: true - - name: Set up repository - uses: ./.github/actions/fn-setup + - name: Set up Deno dependencies cache + id: deno-deps-cache + uses: actions/cache@v3 with: - cache-version: ${{ env.CACHE_VERSION }} - deno-deps-cache-slice-name: ${{ env.CACHE_SLICE_NAME }} + path: | + ~/.deno + ~/.cache/deno + key: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + restore-keys: ${{ env.CACHE_KEY_BASE }} + + - name: Install dependencies + id: deno-deps-install + run: deno install test: name: Test @@ -31,11 +41,26 @@ jobs: uses: actions/checkout@v5 # Now the Deno cache should be warmed up, so this should be much faster - - name: Set up repository - uses: ./.github/actions/fn-setup + - name: Set up Deno + id: deno-install-and-cache + uses: denoland/setup-deno@v2 with: - cache-version: ${{ env.CACHE_VERSION }} - deno-deps-cache-slice-name: ${{ env.CACHE_SLICE_NAME }} + deno-version: 2.x + cache: true + + - name: Set up Deno dependencies cache + id: deno-deps-cache + uses: actions/cache@v3 + with: + path: | + ~/.deno + ~/.cache/deno + key: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + restore-keys: ${{ env.CACHE_KEY_BASE }} + + - name: Install dependencies + id: deno-deps-install + run: deno install - name: Test run: deno test --allow-read diff --git a/.github/workflows/fn-setup.yml b/.github/workflows/fn-setup.yml deleted file mode 100644 index ed2f28a..0000000 --- a/.github/workflows/fn-setup.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Setup - -on: - workflow_call: - inputs: - cache-version: - description: A string to forcefully bust the cache when changed - type: string - required: false - default: v1 - deno-deps-cache-slice-name: - description: - A string to differentiate the Deno dependencies slice from other slices of the cache. - This is needed only if there are other slices that shouldn't be confused with this slice. - type: string - required: false - -env: - DENO_CACHE_SLICE_NAME: deno - # Don't add more paths below, since they'll be invalidated whenever Deno deps change - # Yoinked from https://github.com/actions/cache/blob/main/examples.md#linux - DENO_DEPS_CACHE_PATH: | - ~/.deno - ~/.cache/deno - -jobs: - setup: - name: Setup - runs-on: ubuntu-latest - steps: - - name: Set up Deno - uses: denoland/setup-deno@v2 - with: - deno-version: 2.x - cache: true - cache-hash: ${{ runner.os }}-${{ env.DENO_CACHE_SLICE_NAME }}@${{ inputs.cache-version }} - - - name: Set up Deno dependencies cache - uses: actions/cache@v3 - with: - path: ${{ env.DENO_DEPS_CACHE_PATH }} - key: ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }}-${{ hashFiles('deno.lock') }} - restore-keys: | - ${{ runner.os }}-${{ inputs.deno-deps-cache-slice-name }}@${{ inputs.cache-version }} - - - name: Install dependencies - run: deno install From ae2c41f4031f24eec27975ba8cb60a6eaf05c349 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:39:21 -0600 Subject: [PATCH 25/48] ci: be sure to check out repository again --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 222a6a8..153a726 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,9 @@ jobs: name: Setup runs-on: ubuntu-latest steps: + - name: Checkout repository + uses: actions/checkout@v5 + - name: Set up Deno id: deno-install-and-cache uses: denoland/setup-deno@v2 From 0a62ace16c3d8527600634253c42f32b0f33f811 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:42:38 -0600 Subject: [PATCH 26/48] ci: debug: what happens when we remove deps cache --- .github/workflows/ci.yml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 153a726..c67afe7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,15 +21,15 @@ jobs: deno-version: 2.x cache: true - - name: Set up Deno dependencies cache - id: deno-deps-cache - uses: actions/cache@v3 - with: - path: | - ~/.deno - ~/.cache/deno - key: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - restore-keys: ${{ env.CACHE_KEY_BASE }} + # - name: Set up Deno dependencies cache + # id: deno-deps-cache + # uses: actions/cache@v3 + # with: + # path: | + # ~/.deno + # ~/.cache/deno + # key: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + # restore-keys: ${{ env.CACHE_KEY_BASE }} - name: Install dependencies id: deno-deps-install @@ -51,15 +51,15 @@ jobs: deno-version: 2.x cache: true - - name: Set up Deno dependencies cache - id: deno-deps-cache - uses: actions/cache@v3 - with: - path: | - ~/.deno - ~/.cache/deno - key: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - restore-keys: ${{ env.CACHE_KEY_BASE }} + # - name: Set up Deno dependencies cache + # id: deno-deps-cache + # uses: actions/cache@v3 + # with: + # path: | + # ~/.deno + # ~/.cache/deno + # key: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + # restore-keys: ${{ env.CACHE_KEY_BASE }} - name: Install dependencies id: deno-deps-install From 3e2132ca7bead43f8ae122fe1b137964acadbac6 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:46:13 -0600 Subject: [PATCH 27/48] ci: debug: what happens when we take out explicit caching and only specify a hash --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c67afe7..4952582 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: uses: denoland/setup-deno@v2 with: deno-version: 2.x - cache: true + cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} # - name: Set up Deno dependencies cache # id: deno-deps-cache From 712ad90c0edc5283062b9043c20ed37e8560ca38 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:47:51 -0600 Subject: [PATCH 28/48] ci: debug: what happens when we use it for both --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4952582..b4fdc09 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,7 @@ jobs: uses: denoland/setup-deno@v2 with: deno-version: 2.x - cache: true + cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} # - name: Set up Deno dependencies cache # id: deno-deps-cache From 6e787e1578fe09fb94218d9621f3d937d27ff16c Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:53:45 -0600 Subject: [PATCH 29/48] ci: officially remove vestigial caching --- .github/workflows/ci.yml | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4fdc09..98f762b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,16 +21,6 @@ jobs: deno-version: 2.x cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - # - name: Set up Deno dependencies cache - # id: deno-deps-cache - # uses: actions/cache@v3 - # with: - # path: | - # ~/.deno - # ~/.cache/deno - # key: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - # restore-keys: ${{ env.CACHE_KEY_BASE }} - - name: Install dependencies id: deno-deps-install run: deno install @@ -51,16 +41,6 @@ jobs: deno-version: 2.x cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - # - name: Set up Deno dependencies cache - # id: deno-deps-cache - # uses: actions/cache@v3 - # with: - # path: | - # ~/.deno - # ~/.cache/deno - # key: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - # restore-keys: ${{ env.CACHE_KEY_BASE }} - - name: Install dependencies id: deno-deps-install run: deno install From 084c16e6cc4aaf907ef7b20a75b8ed97feb0c99c Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:54:35 -0600 Subject: [PATCH 30/48] ci: debug: what happens when we disable caching for test job --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98f762b..14ca3ae 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,8 @@ jobs: uses: denoland/setup-deno@v2 with: deno-version: 2.x - cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + cache: false + # cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - name: Install dependencies id: deno-deps-install From 5f65b7e8ad337c273460a2fa605e5d2496ccb420 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:56:11 -0600 Subject: [PATCH 31/48] ci: reactivate test job caching --- .github/workflows/ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 14ca3ae..98f762b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,8 +39,7 @@ jobs: uses: denoland/setup-deno@v2 with: deno-version: 2.x - cache: false - # cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - name: Install dependencies id: deno-deps-install From 0ca723291b38948dddbc1c9fb00a28653fe38afe Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:58:01 -0600 Subject: [PATCH 32/48] ci: remove redundant runner.os parameter --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98f762b..c0915bc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: uses: denoland/setup-deno@v2 with: deno-version: 2.x - cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - name: Install dependencies id: deno-deps-install @@ -39,7 +39,7 @@ jobs: uses: denoland/setup-deno@v2 with: deno-version: 2.x - cache-hash: ${{ runner.os }}-${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - name: Install dependencies id: deno-deps-install From ac36641718074ebee2adcbb2ba68b5eb890773c1 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:01:26 -0600 Subject: [PATCH 33/48] ci: debug: what happens when we omit installing deps in test job --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c0915bc..5ec9adf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,9 +41,9 @@ jobs: deno-version: 2.x cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - - name: Install dependencies - id: deno-deps-install - run: deno install + # - name: Install dependencies + # id: deno-deps-install + # run: deno install - name: Test run: deno test --allow-read From 3d4e730db8e3bcebf5a103e015231b82e1cf149f Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:02:53 -0600 Subject: [PATCH 34/48] ci: officially remove vestigial deno install --- .github/workflows/ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5ec9adf..619e9cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,9 +41,5 @@ jobs: deno-version: 2.x cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - # - name: Install dependencies - # id: deno-deps-install - # run: deno install - - name: Test run: deno test --allow-read From 026ac440f4defac803e58c70fc949184880511d5 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:08:30 -0600 Subject: [PATCH 35/48] ci: remove vestigial id props --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 619e9cc..c64073a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,14 +15,12 @@ jobs: uses: actions/checkout@v5 - name: Set up Deno - id: deno-install-and-cache uses: denoland/setup-deno@v2 with: deno-version: 2.x cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - name: Install dependencies - id: deno-deps-install run: deno install test: @@ -35,7 +33,6 @@ jobs: # Now the Deno cache should be warmed up, so this should be much faster - name: Set up Deno - id: deno-install-and-cache uses: denoland/setup-deno@v2 with: deno-version: 2.x From 5290965984d5d601e68dc2da17254b2b1c8dee34 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:09:44 -0600 Subject: [PATCH 36/48] ci: add biome linting step --- .github/workflows/ci.yml | 18 ++++++++++++++++++ deno.lock | 1 + 2 files changed, 19 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c64073a..d5b4026 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,3 +40,21 @@ jobs: - name: Test run: deno test --allow-read + + lint: + name: Lint + needs: [setup] + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + # Now the Deno cache should be warmed up, so this should be much faster + - name: Set up Deno + uses: denoland/setup-deno@v2 + with: + deno-version: 2.x + cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + + - name: Test + run: deno run --allow-read --allow-env --allow-run npm:@biomejs/biome ci diff --git a/deno.lock b/deno.lock index 025bcef..a563605 100644 --- a/deno.lock +++ b/deno.lock @@ -16,6 +16,7 @@ "jsr:@std/path@^1.1.1": "1.1.2", "jsr:@std/path@^1.1.2": "1.1.2", "jsr:@std/testing@*": "1.0.16", + "npm:@biomejs/biome@*": "2.2.6", "npm:@biomejs/biome@2.2.6": "2.2.6", "npm:@types/node@*": "24.2.0", "npm:chevrotain@^11.0.3": "11.0.3" From 53b9431e9e3157260585a7f07c91e423fa1a08aa Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:35:44 -0600 Subject: [PATCH 37/48] ci: clarify when CI workflow runs --- .github/workflows/ci.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d5b4026..3238963 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,17 @@ name: CI -on: [push, pull_request] +on: + push: + branches: + - "*" + tags: + - "*" + pull_request: + types: + - opened + - reopened + branches: + - "*" env: # Used to differentiate from other slices of the cache for other workflow runs, and to forcefully bust the cache when renamed From c47d4edcfa3eba6d526cc75d4b2f1af9be97da37 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:36:10 -0600 Subject: [PATCH 38/48] ci: make deno permissions stricter --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3238963..5ad3181 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - name: Test - run: deno test --allow-read + run: deno test --allow-read --no-prompt lint: name: Lint @@ -67,5 +67,5 @@ jobs: deno-version: 2.x cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - - name: Test - run: deno run --allow-read --allow-env --allow-run npm:@biomejs/biome ci + - name: Lint + run: deno run --allow-env --allow-run --no-prompt npm:@biomejs/biome ci From 64fd474775b2ef73d1e53d1a7319c9d51f2eb9ef Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:37:09 -0600 Subject: [PATCH 39/48] ci: broaden scopes to original breadth --- .github/workflows/ci.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5ad3181..3407ede 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,16 +2,7 @@ name: CI on: push: - branches: - - "*" - tags: - - "*" pull_request: - types: - - opened - - reopened - branches: - - "*" env: # Used to differentiate from other slices of the cache for other workflow runs, and to forcefully bust the cache when renamed From 6cbc34b7ba613e6a58be9ea799b872aaf9dd217c Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:45:35 -0600 Subject: [PATCH 40/48] ci: add check command --- .github/workflows/ci.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3407ede..6d81b54 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,3 +60,21 @@ jobs: - name: Lint run: deno run --allow-env --allow-run --no-prompt npm:@biomejs/biome ci + + check: + name: Check + needs: [setup] + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + # Now the Deno cache should be warmed up, so this should be much faster + - name: Set up Deno + uses: denoland/setup-deno@v2 + with: + deno-version: 2.x + cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} + + - name: Lint + run: deno check From 7fdba8d284768bef5f694c7cc4a5a158ce29b7e1 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:31:25 -0600 Subject: [PATCH 41/48] chore: upgrade dependencies --- biome.jsonc | 2 +- deno.jsonc | 14 +++---- deno.lock | 111 +++++++++++++++++++++++----------------------------- 3 files changed, 58 insertions(+), 69 deletions(-) diff --git a/biome.jsonc b/biome.jsonc index 3c72fa0..cdb60e8 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.6/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.6/schema.json", "vcs": { "enabled": true, "clientKind": "git", diff --git a/deno.jsonc b/deno.jsonc index 785841e..4b7f5a9 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -11,13 +11,13 @@ // Import alias "@root/": "./", // External dependencies - "@biomejs/biome": "npm:@biomejs/biome@2.2.6", - "@std/assert": "jsr:@std/assert", - "@std/testing": "jsr:@std/testing", - "@std/fmt": "jsr:@std/fmt", - "@std/cli": "jsr:@std/cli", - "@std/fs": "jsr:@std/fs", - "@std/path": "jsr:@std/path", + "@biomejs/biome": "npm:@biomejs/biome@2.3.6", + "@std/assert": "jsr:@std/assert@1.0.16", + "@std/testing": "jsr:@std/testing@1.0.16", + "@std/fmt": "jsr:@std/fmt@1.0.8", + "@std/cli": "jsr:@std/cli@1.0.24", + "@std/fs": "jsr:@std/fs@1.0.20", + "@std/path": "jsr:@std/path@1.1.3", "chevrotain": "npm:chevrotain@^11.0.3" }, diff --git a/deno.lock b/deno.lock index a563605..3bd68b1 100644 --- a/deno.lock +++ b/deno.lock @@ -1,56 +1,46 @@ { "version": "5", "specifiers": { - "jsr:@std/assert@*": "1.0.14", - "jsr:@std/assert@^1.0.15": "1.0.15", - "jsr:@std/async@^1.0.15": "1.0.15", - "jsr:@std/cli@*": "1.0.22", + "jsr:@std/assert@1.0.16": "1.0.16", + "jsr:@std/assert@^1.0.15": "1.0.16", + "jsr:@std/cli@1.0.24": "1.0.24", "jsr:@std/data-structures@^1.0.9": "1.0.9", - "jsr:@std/fmt@*": "1.0.8", - "jsr:@std/fs@*": "1.0.19", - "jsr:@std/fs@^1.0.19": "1.0.19", - "jsr:@std/internal@^1.0.10": "1.0.12", + "jsr:@std/fmt@1.0.8": "1.0.8", + "jsr:@std/fs@1.0.20": "1.0.20", + "jsr:@std/fs@^1.0.19": "1.0.20", "jsr:@std/internal@^1.0.12": "1.0.12", - "jsr:@std/internal@^1.0.9": "1.0.12", - "jsr:@std/path@*": "1.1.2", - "jsr:@std/path@^1.1.1": "1.1.2", - "jsr:@std/path@^1.1.2": "1.1.2", - "jsr:@std/testing@*": "1.0.16", - "npm:@biomejs/biome@*": "2.2.6", - "npm:@biomejs/biome@2.2.6": "2.2.6", + "jsr:@std/path@1.1.3": "1.1.3", + "jsr:@std/path@^1.1.2": "1.1.3", + "jsr:@std/path@^1.1.3": "1.1.3", + "jsr:@std/testing@1.0.16": "1.0.16", + "npm:@biomejs/biome@2.3.6": "2.3.6", "npm:@types/node@*": "24.2.0", "npm:chevrotain@^11.0.3": "11.0.3" }, "jsr": { - "@std/assert@1.0.14": { - "integrity": "68d0d4a43b365abc927f45a9b85c639ea18a9fab96ad92281e493e4ed84abaa4", + "@std/assert@1.0.16": { + "integrity": "6a7272ed1eaa77defe76e5ff63ca705d9c495077e2d5fd0126d2b53fc5bd6532", "dependencies": [ - "jsr:@std/internal@^1.0.10" + "jsr:@std/internal" ] }, - "@std/assert@1.0.15": { - "integrity": "d64018e951dbdfab9777335ecdb000c0b4e3df036984083be219ce5941e4703b", + "@std/cli@1.0.24": { + "integrity": "b655a5beb26aa94f98add6bc8889f5fb9bc3ee2cc3fc954e151201f4c4200a5e", "dependencies": [ - "jsr:@std/internal@^1.0.12" + "jsr:@std/internal" ] }, - "@std/async@1.0.15": { - "integrity": "55d1d9d04f99403fe5730ab16bdcc3c47f658a6bf054cafb38a50f046238116e" - }, - "@std/cli@1.0.22": { - "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" - }, "@std/data-structures@1.0.9": { "integrity": "033d6e17e64bf1f84a614e647c1b015fa2576ae3312305821e1a4cb20674bb4d" }, "@std/fmt@1.0.8": { "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" }, - "@std/fs@1.0.19": { - "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06", + "@std/fs@1.0.20": { + "integrity": "e953206aae48d46ee65e8783ded459f23bec7dd1f3879512911c35e5484ea187", "dependencies": [ - "jsr:@std/internal@^1.0.9", - "jsr:@std/path@^1.1.1" + "jsr:@std/internal", + "jsr:@std/path@^1.1.3" ] }, "@std/internal@1.0.10": { @@ -59,27 +49,26 @@ "@std/internal@1.0.12": { "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" }, - "@std/path@1.1.2": { - "integrity": "c0b13b97dfe06546d5e16bf3966b1cadf92e1cc83e56ba5476ad8b498d9e3038", + "@std/path@1.1.3": { + "integrity": "b015962d82a5e6daea980c32b82d2c40142149639968549c649031a230b1afb3", "dependencies": [ - "jsr:@std/internal@^1.0.10" + "jsr:@std/internal" ] }, "@std/testing@1.0.16": { "integrity": "a917ffdeb5924c9be436dc78bc32e511760e14d3a96e49c607fc5ecca86d0092", "dependencies": [ "jsr:@std/assert@^1.0.15", - "jsr:@std/async", "jsr:@std/data-structures", "jsr:@std/fs@^1.0.19", - "jsr:@std/internal@^1.0.12", + "jsr:@std/internal", "jsr:@std/path@^1.1.2" ] } }, "npm": { - "@biomejs/biome@2.2.6": { - "integrity": "sha512-yKTCNGhek0rL5OEW1jbLeZX8LHaM8yk7+3JRGv08my+gkpmtb5dDE+54r2ZjZx0ediFEn1pYBOJSmOdDP9xtFw==", + "@biomejs/biome@2.3.6": { + "integrity": "sha512-oqUhWyU6tae0MFsr/7iLe++QWRg+6jtUhlx9/0GmCWDYFFrK366sBLamNM7D9Y+c7YSynUFKr8lpEp1r6Sk7eA==", "optionalDependencies": [ "@biomejs/cli-darwin-arm64", "@biomejs/cli-darwin-x64", @@ -92,43 +81,43 @@ ], "bin": true }, - "@biomejs/cli-darwin-arm64@2.2.6": { - "integrity": "sha512-UZPmn3M45CjTYulgcrFJFZv7YmK3pTxTJDrFYlNElT2FNnkkX4fsxjExTSMeWKQYoZjvekpH5cvrYZZlWu3yfA==", + "@biomejs/cli-darwin-arm64@2.3.6": { + "integrity": "sha512-P4JWE5d8UayBxYe197QJwyW4ZHp0B+zvRIGCusOm1WbxmlhpAQA1zEqQuunHgSIzvyEEp4TVxiKGXNFZPg7r9Q==", "os": ["darwin"], "cpu": ["arm64"] }, - "@biomejs/cli-darwin-x64@2.2.6": { - "integrity": "sha512-HOUIquhHVgh/jvxyClpwlpl/oeMqntlteL89YqjuFDiZ091P0vhHccwz+8muu3nTyHWM5FQslt+4Jdcd67+xWQ==", + "@biomejs/cli-darwin-x64@2.3.6": { + "integrity": "sha512-I4rTebj+F/L9K93IU7yTFs8nQ6EhaCOivxduRha4w4WEZK80yoZ8OAdR1F33m4yJ/NfUuTUbP/Wjs+vKjlCoWA==", "os": ["darwin"], "cpu": ["x64"] }, - "@biomejs/cli-linux-arm64-musl@2.2.6": { - "integrity": "sha512-TjCenQq3N6g1C+5UT3jE1bIiJb5MWQvulpUngTIpFsL4StVAUXucWD0SL9MCW89Tm6awWfeXBbZBAhJwjyFbRQ==", + "@biomejs/cli-linux-arm64-musl@2.3.6": { + "integrity": "sha512-oK1NpIXIixbJ/4Tcx40cwiieqah6rRUtMGOHDeK2ToT7yUFVEvXUGRKqH0O4hqZ9tW8TcXNZKfgRH6xrsjVtGg==", "os": ["linux"], "cpu": ["arm64"] }, - "@biomejs/cli-linux-arm64@2.2.6": { - "integrity": "sha512-BpGtuMJGN+o8pQjvYsUKZ+4JEErxdSmcRD/JG3mXoWc6zrcA7OkuyGFN1mDggO0Q1n7qXxo/PcupHk8gzijt5g==", + "@biomejs/cli-linux-arm64@2.3.6": { + "integrity": "sha512-JjYy83eVBnvuINZiqyFO7xx72v8Srh4hsgaacSBCjC22DwM6+ZvnX1/fj8/SBiLuUOfZ8YhU2pfq2Dzakeyg1A==", "os": ["linux"], "cpu": ["arm64"] }, - "@biomejs/cli-linux-x64-musl@2.2.6": { - "integrity": "sha512-1ZcBux8zVM3JhWN2ZCPaYf0+ogxXG316uaoXJdgoPZcdK/rmRcRY7PqHdAos2ExzvjIdvhQp72UcveI98hgOog==", + "@biomejs/cli-linux-x64-musl@2.3.6": { + "integrity": "sha512-QvxB8GHQeaO4FCtwJpJjCgJkbHBbWxRHUxQlod+xeaYE6gtJdSkYkuxdKAQUZEOIsec+PeaDAhW9xjzYbwmOFA==", "os": ["linux"], "cpu": ["x64"] }, - "@biomejs/cli-linux-x64@2.2.6": { - "integrity": "sha512-1HaM/dpI/1Z68zp8ZdT6EiBq+/O/z97a2AiHMl+VAdv5/ELckFt9EvRb8hDHpk8hUMoz03gXkC7VPXOVtU7faA==", + "@biomejs/cli-linux-x64@2.3.6": { + "integrity": "sha512-ZjPXzy5yN9wusIoX+8Zp4p6cL8r0NzJCXg/4r1KLVveIPXd2jKVlqZ6ZyzEq385WwU3OX5KOwQYLQsOc788waQ==", "os": ["linux"], "cpu": ["x64"] }, - "@biomejs/cli-win32-arm64@2.2.6": { - "integrity": "sha512-h3A88G8PGM1ryTeZyLlSdfC/gz3e95EJw9BZmA6Po412DRqwqPBa2Y9U+4ZSGUAXCsnSQE00jLV8Pyrh0d+jQw==", + "@biomejs/cli-win32-arm64@2.3.6": { + "integrity": "sha512-YM7hLHpwjdt8R7+O2zS1Vo2cKgqEeptiXB1tWW1rgjN5LlpZovBVKtg7zfwfRrFx3i08aNZThYpTcowpTlczug==", "os": ["win32"], "cpu": ["arm64"] }, - "@biomejs/cli-win32-x64@2.2.6": { - "integrity": "sha512-yx0CqeOhPjYQ5ZXgPfu8QYkgBhVJyvWe36as7jRuPrKPO5ylVDfwVtPQ+K/mooNTADW0IhxOZm3aPu16dP8yNQ==", + "@biomejs/cli-win32-x64@2.3.6": { + "integrity": "sha512-psgNEYgMAobY5h+QHRBVR9xvg2KocFuBKm6axZWB/aD12NWhQjiVFQUjV6wMXhlH4iT0Q9c3yK5JFRiDC/rzHA==", "os": ["win32"], "cpu": ["x64"] }, @@ -182,13 +171,13 @@ }, "workspace": { "dependencies": [ - "jsr:@std/assert@*", - "jsr:@std/cli@*", - "jsr:@std/fmt@*", - "jsr:@std/fs@*", - "jsr:@std/path@*", - "jsr:@std/testing@*", - "npm:@biomejs/biome@2.2.6", + "jsr:@std/assert@1.0.16", + "jsr:@std/cli@1.0.24", + "jsr:@std/fmt@1.0.8", + "jsr:@std/fs@1.0.20", + "jsr:@std/path@1.1.3", + "jsr:@std/testing@1.0.16", + "npm:@biomejs/biome@2.3.6", "npm:chevrotain@^11.0.3" ] } From b83510b436f5d1276aa4af18485ae2ae62f262b4 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:31:50 -0600 Subject: [PATCH 42/48] chore: add permissions --- deno.jsonc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/deno.jsonc b/deno.jsonc index 4b7f5a9..4a1a905 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -21,6 +21,19 @@ "chevrotain": "npm:chevrotain@^11.0.3" }, + "test": { + "permissions": { + "read": true + } + }, + + "permissions": { + "biome": { + "env": true, + "run": true + } + }, + // Loosely ported from .prettierrc "fmt": { "useTabs": false, From 55f32008a21ce55f349f83285f11643c0630ccd9 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:58:27 -0600 Subject: [PATCH 43/48] chore: add coverage to .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index f3ec6e3..e5a6b7c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Deno coverage report directory +coverage + hide* .vscode *.s From 3fa25039d9694485a679bc1bdf869900910c9828 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:58:41 -0600 Subject: [PATCH 44/48] ci: add coverage reporting --- .github/workflows/ci.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6d81b54..5f06ef1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,8 @@ jobs: name: Test needs: [setup] runs-on: ubuntu-latest + permissions: + pull-requests: write steps: - name: Checkout repository uses: actions/checkout@v5 @@ -41,7 +43,22 @@ jobs: cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - name: Test - run: deno test --allow-read --no-prompt + run: deno test -P --no-prompt --coverage + + - name: Report code coverage + uses: zgosalvez/github-actions-report-lcov@v4 + with: + coverage-files: coverage/lcov.*.info + minimum-coverage: 50 + artifact-name: coverage-report + github-token: ${{ secrets.GITHUB_TOKEN }} + update-comment: true + + - name: Upload coverage reports + uses: actions/upload-artifact@v4 + with: + name: raw-coverage-reports + path: coverage lint: name: Lint From 595ec690c45991c02fbaed0ff4504d6917fc87ef Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 18:01:26 -0600 Subject: [PATCH 45/48] ci: prevent coverage guard action from uploading coverage report --- .github/workflows/ci.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f06ef1..355197f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,14 +50,13 @@ jobs: with: coverage-files: coverage/lcov.*.info minimum-coverage: 50 - artifact-name: coverage-report github-token: ${{ secrets.GITHUB_TOKEN }} update-comment: true - - name: Upload coverage reports + - name: Upload coverage report uses: actions/upload-artifact@v4 with: - name: raw-coverage-reports + name: coverage-report path: coverage lint: From b88f0de49939a87cd0791ebbf499e40d40b975a3 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 18:06:46 -0600 Subject: [PATCH 46/48] ci: remove coverage guard action --- .github/workflows/ci.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 355197f..ec091e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,14 +45,6 @@ jobs: - name: Test run: deno test -P --no-prompt --coverage - - name: Report code coverage - uses: zgosalvez/github-actions-report-lcov@v4 - with: - coverage-files: coverage/lcov.*.info - minimum-coverage: 50 - github-token: ${{ secrets.GITHUB_TOKEN }} - update-comment: true - - name: Upload coverage report uses: actions/upload-artifact@v4 with: From e32dcb23598787f25791c0269fd383f7546c8ab7 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 18:12:34 -0600 Subject: [PATCH 47/48] ci: split coverage report artifacts --- .github/workflows/ci.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ec091e3..c7fd09a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,15 @@ jobs: uses: actions/upload-artifact@v4 with: name: coverage-report - path: coverage + path: | + coverage/html + coverage/lcov.info + + - name: Upload raw coverage files + uses: actions/upload-artifact@v4 + with: + name: coverage-report-raw + path: coverage/*.json lint: name: Lint From 6a4b813a98a5f67abbc449d4aaef76a15eb78758 Mon Sep 17 00:00:00 2001 From: Benjamin Laird <86321957+ben-laird@users.noreply.github.com> Date: Mon, 17 Nov 2025 18:17:27 -0600 Subject: [PATCH 48/48] ci: shuffle deno tests in CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c7fd09a..5b29a5f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,7 +43,7 @@ jobs: cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - name: Test - run: deno test -P --no-prompt --coverage + run: deno test -P --no-prompt --coverage --shuffle - name: Upload coverage report uses: actions/upload-artifact@v4