From e60ac40c9ed8d1ff66fd0145dc27177125ce6792 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 22 Aug 2026 01:21:00 +0000 Subject: [PATCH 01/12] ci: add GitHub Actions workflow with backport, lint, test, and coverage jobs Mirrors the CI setup of @grammyjs/conversations: a Deno-based workflow running backporting via deno2node, format and lint checks, tests across Linux, macOS, and Windows, and coverage upload to Codecov. Adds the corresponding deno.jsonc tasks (check, test, ok, clean, coverage, report). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XRdjcqbadQ3X3ZpXqEp22M --- .github/workflows/deno.yml | 90 ++++++++++++++++++++++++++++++++++++++ deno.jsonc | 15 ++++++- 2 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/deno.yml diff --git a/.github/workflows/deno.yml b/.github/workflows/deno.yml new file mode 100644 index 0000000..2142ce7 --- /dev/null +++ b/.github/workflows/deno.yml @@ -0,0 +1,90 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +# This workflow will install Deno and run tests across stable and nightly builds on Windows, Ubuntu and macOS. +# For more information see: https://github.com/denolib/setup-deno + +name: grammY validator + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + backport: + runs-on: ubuntu-latest + steps: + - name: Setup repo + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 24 + + - name: Install dependencies + run: npm install --ignore-scripts + + - name: Run backporting + run: npm run backport + + format-and-lint: + runs-on: ubuntu-latest + steps: + - name: Setup repo + uses: actions/checkout@v4 + + - uses: denoland/setup-deno@v2 + with: + deno-version: v2.x + + - name: Check Format + run: deno fmt --check + + - name: Lint + run: deno lint + + test: + runs-on: ${{ matrix.os }} # runs a test on Ubuntu, Windows and macOS + + strategy: + matrix: + os: [macOS-latest, windows-latest, ubuntu-latest] + + steps: + - name: Setup repo + uses: actions/checkout@v4 + + - uses: denoland/setup-deno@v2 + with: + deno-version: v2.x + + - name: Cache Dependencies + run: deno task check + + - name: Run Tests + run: deno task test + + coverage: + runs-on: ubuntu-latest + steps: + - name: Setup repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: denoland/setup-deno@v2 + with: + deno-version: v2.x + + - name: Create coverage files + run: deno task coverage + + - name: Collect coverage + uses: codecov/codecov-action@v1.0.10 # upload the report on Codecov + with: + file: ./coverage.lcov diff --git a/deno.jsonc b/deno.jsonc index b2be2d5..f66c134 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -1,10 +1,23 @@ { "lock": false, + "tasks": { + "check": "deno cache --allow-import --check=all src/mod.ts", + "test": "deno test --allow-import test", + "ok": "deno fmt && deno lint && deno task test && deno task check", + "clean": "git clean -fX out test/cov_profile test/coverage coverage.lcov", + "coverage": "deno task clean && deno task test --coverage=./test/cov_profile && deno coverage --lcov --output=./coverage.lcov ./test/cov_profile", + "report": "genhtml ./coverage.lcov --output-directory ./test/coverage/ && echo 'Point your browser to test/coverage/index.html to see the test coverage report.'" + }, "fmt": { "indentWidth": 4, "proseWrap": "preserve" }, - "exclude": ["./node_modules/", "./out/", "./package-lock.json"], + "exclude": [ + "./node_modules/", + "./out/", + "./package-lock.json", + "./test/cov_profile" + ], "imports": { "@std/assert": "jsr:@std/assert@^1.0.19" } From b3fbf0a2314e34b43df68f74cab045401e2e5e3b Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 22 Aug 2026 01:38:57 +0000 Subject: [PATCH 02/12] ci: address review findings - Ignore coverage artifacts (test/coverage, test/cov_profile, coverage.lcov) so the git clean -fX based clean task removes them, matching the conversations repo's .gitignore - Restrict the workflow GITHUB_TOKEN to contents: read - Disable checkout credential persistence in all jobs - Upgrade codecov/codecov-action from v1.0.10 (node12-based) to v7 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XRdjcqbadQ3X3ZpXqEp22M --- .github/workflows/deno.yml | 14 ++++++++++++-- .gitignore | 5 +++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deno.yml b/.github/workflows/deno.yml index 2142ce7..058d36f 100644 --- a/.github/workflows/deno.yml +++ b/.github/workflows/deno.yml @@ -14,12 +14,17 @@ on: pull_request: branches: [main] +permissions: + contents: read + jobs: backport: runs-on: ubuntu-latest steps: - name: Setup repo uses: actions/checkout@v4 + with: + persist-credentials: false - name: Setup Node uses: actions/setup-node@v4 @@ -37,6 +42,8 @@ jobs: steps: - name: Setup repo uses: actions/checkout@v4 + with: + persist-credentials: false - uses: denoland/setup-deno@v2 with: @@ -58,6 +65,8 @@ jobs: steps: - name: Setup repo uses: actions/checkout@v4 + with: + persist-credentials: false - uses: denoland/setup-deno@v2 with: @@ -76,6 +85,7 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 + persist-credentials: false - uses: denoland/setup-deno@v2 with: @@ -85,6 +95,6 @@ jobs: run: deno task coverage - name: Collect coverage - uses: codecov/codecov-action@v1.0.10 # upload the report on Codecov + uses: codecov/codecov-action@v7 # upload the report on Codecov with: - file: ./coverage.lcov + files: ./coverage.lcov diff --git a/.gitignore b/.gitignore index c21fb20..1711e84 100644 --- a/.gitignore +++ b/.gitignore @@ -20,5 +20,10 @@ package-lock.json # Output of 'npm pack' *.tgz +# Test coverage +test/coverage +test/cov_profile +coverage.lcov + # Build output out/ From 04b8fea61a4a8f26e6f0f0067c4424efc39a0d77 Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 14:56:06 +0800 Subject: [PATCH 03/12] Update deno.jsonc Co-authored-by: KnorpelSenf --- deno.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deno.jsonc b/deno.jsonc index f66c134..6022e5f 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -2,7 +2,7 @@ "lock": false, "tasks": { "check": "deno cache --allow-import --check=all src/mod.ts", - "test": "deno test --allow-import test", + "test": "deno test", "ok": "deno fmt && deno lint && deno task test && deno task check", "clean": "git clean -fX out test/cov_profile test/coverage coverage.lcov", "coverage": "deno task clean && deno task test --coverage=./test/cov_profile && deno coverage --lcov --output=./coverage.lcov ./test/cov_profile", From c8c6bfbc89e7b4771d6b406ff74986e42a651f32 Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 14:56:13 +0800 Subject: [PATCH 04/12] Update deno.jsonc Co-authored-by: KnorpelSenf --- deno.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deno.jsonc b/deno.jsonc index 6022e5f..ef8a56b 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -3,7 +3,7 @@ "tasks": { "check": "deno cache --allow-import --check=all src/mod.ts", "test": "deno test", - "ok": "deno fmt && deno lint && deno task test && deno task check", + "ok": "deno fmt --check && deno lint && deno task test && deno task check", "clean": "git clean -fX out test/cov_profile test/coverage coverage.lcov", "coverage": "deno task clean && deno task test --coverage=./test/cov_profile && deno coverage --lcov --output=./coverage.lcov ./test/cov_profile", "report": "genhtml ./coverage.lcov --output-directory ./test/coverage/ && echo 'Point your browser to test/coverage/index.html to see the test coverage report.'" From c5d6ee4f6a53d9c5a40ae8ba273cd383246dcceb Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 14:58:00 +0800 Subject: [PATCH 05/12] Upgrade checkout action and modify dependency caching Updated Deno workflow to use actions/checkout@v7 and changed cache command. --- .github/workflows/deno.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deno.yml b/.github/workflows/deno.yml index 058d36f..65e6860 100644 --- a/.github/workflows/deno.yml +++ b/.github/workflows/deno.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Setup repo - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: persist-credentials: false @@ -73,7 +73,7 @@ jobs: deno-version: v2.x - name: Cache Dependencies - run: deno task check + run: deno install - name: Run Tests run: deno task test From 3243c60239953b49a5b49bd7cac1b531a503a796 Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 14:59:31 +0800 Subject: [PATCH 06/12] Modify 'ok' task in deno.jsonc Updated the 'ok' task to remove the check for 'deno task check' and include 'deno test'. --- deno.jsonc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/deno.jsonc b/deno.jsonc index ef8a56b..3efd4f2 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -1,9 +1,7 @@ { "lock": false, "tasks": { - "check": "deno cache --allow-import --check=all src/mod.ts", - "test": "deno test", - "ok": "deno fmt --check && deno lint && deno task test && deno task check", + "ok": "deno fmt --check && deno lint && deno test", "clean": "git clean -fX out test/cov_profile test/coverage coverage.lcov", "coverage": "deno task clean && deno task test --coverage=./test/cov_profile && deno coverage --lcov --output=./coverage.lcov ./test/cov_profile", "report": "genhtml ./coverage.lcov --output-directory ./test/coverage/ && echo 'Point your browser to test/coverage/index.html to see the test coverage report.'" From 3f17c77c480c92b4d75163e692624c492a41bf75 Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 15:00:49 +0800 Subject: [PATCH 07/12] Upgrade actions/checkout to v7 and deno commands Updated checkout action version and deno commands. --- .github/workflows/deno.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deno.yml b/.github/workflows/deno.yml index 65e6860..abbe8d5 100644 --- a/.github/workflows/deno.yml +++ b/.github/workflows/deno.yml @@ -41,7 +41,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Setup repo - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: persist-credentials: false @@ -64,7 +64,7 @@ jobs: steps: - name: Setup repo - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: persist-credentials: false @@ -76,7 +76,7 @@ jobs: run: deno install - name: Run Tests - run: deno task test + run: deno test coverage: runs-on: ubuntu-latest From a772909c7ae058f099834b3f9034443f95791b36 Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 15:14:37 +0800 Subject: [PATCH 08/12] Fix coverage task command in deno.jsonc --- deno.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deno.jsonc b/deno.jsonc index 3efd4f2..bd64905 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -3,7 +3,7 @@ "tasks": { "ok": "deno fmt --check && deno lint && deno test", "clean": "git clean -fX out test/cov_profile test/coverage coverage.lcov", - "coverage": "deno task clean && deno task test --coverage=./test/cov_profile && deno coverage --lcov --output=./coverage.lcov ./test/cov_profile", + "coverage": "deno task clean && deno test --coverage=./test/cov_profile && deno coverage --lcov --output=./coverage.lcov ./test/cov_profile", "report": "genhtml ./coverage.lcov --output-directory ./test/coverage/ && echo 'Point your browser to test/coverage/index.html to see the test coverage report.'" }, "fmt": { From dc09446e0d710da12c539f5e135f4f7bb45b17a5 Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 15:42:33 +0800 Subject: [PATCH 09/12] fix: checkout v7, add deno check to CI --- .github/workflows/deno.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deno.yml b/.github/workflows/deno.yml index abbe8d5..1dca199 100644 --- a/.github/workflows/deno.yml +++ b/.github/workflows/deno.yml @@ -55,6 +55,9 @@ jobs: - name: Lint run: deno lint + - name: Type Check + run: deno check + test: runs-on: ${{ matrix.os }} # runs a test on Ubuntu, Windows and macOS @@ -82,7 +85,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Setup repo - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: fetch-depth: 0 persist-credentials: false From 2a21849d99d4dc26276815c1c0c2b53cc85499d6 Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 15:48:32 +0800 Subject: [PATCH 10/12] fix: setup node v7 --- .github/workflows/deno.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deno.yml b/.github/workflows/deno.yml index 1dca199..d9bacab 100644 --- a/.github/workflows/deno.yml +++ b/.github/workflows/deno.yml @@ -27,7 +27,7 @@ jobs: persist-credentials: false - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@v7 with: node-version: 24 From 480e4e45dbd4aca3e5dd2d16ec7fcf59a6efb81b Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 15:53:19 +0800 Subject: [PATCH 11/12] Update 'ok' task to include 'deno check' --- deno.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deno.jsonc b/deno.jsonc index bd64905..b0318bf 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -1,7 +1,7 @@ { "lock": false, "tasks": { - "ok": "deno fmt --check && deno lint && deno test", + "ok": "deno fmt --check && deno lint && deno check && deno test", "clean": "git clean -fX out test/cov_profile test/coverage coverage.lcov", "coverage": "deno task clean && deno test --coverage=./test/cov_profile && deno coverage --lcov --output=./coverage.lcov ./test/cov_profile", "report": "genhtml ./coverage.lcov --output-directory ./test/coverage/ && echo 'Point your browser to test/coverage/index.html to see the test coverage report.'" From d6fe07ff55cd1bc1d1031b7a862534e0fe184ca1 Mon Sep 17 00:00:00 2001 From: KnightNiwrem Date: Sat, 22 Aug 2026 16:40:18 +0800 Subject: [PATCH 12/12] chore: remove redundant deno task report, point coverage to lcov.info --- .github/workflows/deno.yml | 2 +- deno.jsonc | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deno.yml b/.github/workflows/deno.yml index d9bacab..502bb9d 100644 --- a/.github/workflows/deno.yml +++ b/.github/workflows/deno.yml @@ -100,4 +100,4 @@ jobs: - name: Collect coverage uses: codecov/codecov-action@v7 # upload the report on Codecov with: - files: ./coverage.lcov + files: ./test/cov_profile/lcov.info diff --git a/deno.jsonc b/deno.jsonc index b0318bf..979a550 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -3,8 +3,7 @@ "tasks": { "ok": "deno fmt --check && deno lint && deno check && deno test", "clean": "git clean -fX out test/cov_profile test/coverage coverage.lcov", - "coverage": "deno task clean && deno test --coverage=./test/cov_profile && deno coverage --lcov --output=./coverage.lcov ./test/cov_profile", - "report": "genhtml ./coverage.lcov --output-directory ./test/coverage/ && echo 'Point your browser to test/coverage/index.html to see the test coverage report.'" + "coverage": "deno task clean && deno test --coverage=./test/cov_profile && echo 'Point your browser to test/cov_profile/html/index.html to see the test coverage report.'" }, "fmt": { "indentWidth": 4,