From 7712ca52bfd803943a1a418e1b5a7fda20b2f0bd Mon Sep 17 00:00:00 2001 From: Ferran Buireu Date: Wed, 11 Sep 2024 07:29:32 +0200 Subject: [PATCH] ci: add release --- .github/workflows/e2e.yml | 106 ++++++++++---------- .github/workflows/release.yml | 53 ++++++++++ .github/workflows/ut.yml | 36 +++---- package.json | 6 +- src/pages/index.astro | 1 - yarn.lock | 179 +++++++++++++++++----------------- 6 files changed, 219 insertions(+), 162 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index c8448e09..689f8a43 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -1,56 +1,56 @@ -name: E2E Tests - Playwright +name: E2E Tests on: - workflow_dispatch: - pull_request: - branches: [main] + workflow_dispatch: + pull_request: + branches: [main] env: - CI: true - E2E_URL: ${{ github.event_name == 'workflow_dispatch' && 'https://biancafiore.me' || 'http://localhost:4321' }} + CI: true + E2E_URL: ${{ github.event_name == 'workflow_dispatch' && 'https://biancafiore.me' || 'http://localhost:4321' }} jobs: - e2e-tests: - timeout-minutes: 60 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Use Node.js version from .nvmrc - id: nvmrc - run: echo "NODE_VERSION=$(cat .nvmrc)" >> $GITHUB_ENV - - uses: actions/setup-node@v4 - with: - node-version: ${{ env.NODE_VERSION }} - - name: Install dependencies - run: yarn install --frozen-lockfile - - name: Install Playwright Browsers - run: yarn playwright install --with-deps - - name: Start application (for PRs only) - if: github.event_name != 'workflow_dispatch' - run: | - yarn start & - echo $! > .pidfile - - name: Wait for application to be ready (for PRs only) - if: github.event_name != 'workflow_dispatch' - run: | - echo "Waiting for application to start..." - npx wait-on ${{ env.E2E_URL }} - - name: Run E2E Tests - Playwright for PRs - if: github.event_name == 'pull_request' - run: yarn test:e2e:changed - env: - CI: ${{ env.CI }} - E2E_URL: ${{ env.E2E_URL }} - - name: Run E2E Tests - Playwright for Workflow Dispatch event - if: github.event_dispatch == 'workflow_dispatch' - run: yarn test:e2e - env: - CI: ${{ env.CI }} - E2E_URL: ${{ env.E2E_URL }} - - name: Stop application (for PRs only) - if: always() && github.event_name != 'workflow_dispatch' - run: | - kill $(cat .pidfile) - - uses: actions/upload-artifact@v4 - if: always() - with: - name: playwright-report - path: playwright-report/ - retention-days: 30 + e2e-tests: + timeout-minutes: 60 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Use Node.js version from .nvmrc + id: nvmrc + run: echo "NODE_VERSION=$(cat .nvmrc)" >> $GITHUB_ENV + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + - name: Install dependencies + run: yarn install --frozen-lockfile + - name: Install Playwright Browsers + run: yarn playwright install --with-deps + - name: Start application (for PRs only) + if: github.event_name != 'workflow_dispatch' + run: | + yarn start & + echo $! > .pidfile + - name: Wait for application to be ready (for PRs only) + if: github.event_name != 'workflow_dispatch' + run: | + echo "Waiting for application to start..." + npx wait-on ${{ env.E2E_URL }} + - name: Run E2E Tests - Playwright for PRs + if: github.event_name == 'pull_request' + run: yarn test:e2e:changed + env: + CI: ${{ env.CI }} + E2E_URL: ${{ env.E2E_URL }} + - name: Run E2E Tests - Playwright for Workflow Dispatch event + if: github.event_dispatch == 'workflow_dispatch' + run: yarn test:e2e + env: + CI: ${{ env.CI }} + E2E_URL: ${{ env.E2E_URL }} + - name: Stop application (for PRs only) + if: always() && github.event_name != 'workflow_dispatch' + run: | + kill $(cat .pidfile) + - uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..1a0035de --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,53 @@ +name: Release +on: + workflow_dispatch: + inputs: + tag_name: + description: 'Tag name for the release' + required: true + push: + tags: + - '*' + workflow_run: + workflows: ["E2E Tests", "Unit Tests"] + types: [completed] +env: + TAG_NAME: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag_name || github.ref_name }} +jobs: + check-tag: + name: Check Tag + runs-on: ubuntu-latest + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} + steps: + - name: Check out the repository + uses: actions/checkout@v4 + - name: Check if tag exists + id: check_tag + run: | + git fetch --tags + if git rev-parse "${{ env.tag_name }}" >/dev/null 2>&1; then + echo "Tag already exists. Cancelling the release." + exit 1 + create-release: + name: Create Release + runs-on: ubuntu-latest + needs: check-tag + steps: + - name: Check out the repository + uses: actions/checkout@v4 + - name: Create Tag (only for workflow_dispatch) + if: ${{ github.event_name == 'workflow_dispatch' }} + run: | + git config user.name "github-actions" + git config user.email "github-actions@github.com" + git tag ${{ env.TAG_NAME }} + git push origin ${{ env.TAG_NAME }} + - name: Set up GitHub CLI + run: | + sudo apt-get install -y gh + echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token + - name: Create Release with GitHub CLI + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create ${{ env.TAG_NAME }} --title "Release ${{ env.TAG_NAME }}" --notes "Release notes generated automatically." --generate-notes diff --git a/.github/workflows/ut.yml b/.github/workflows/ut.yml index fa37d00a..ae18ce0b 100644 --- a/.github/workflows/ut.yml +++ b/.github/workflows/ut.yml @@ -1,20 +1,20 @@ -name: Unit Tests - Vitest +name: Unit Tests on: - workflow_dispatch: - pull_request: - branches: [main] + workflow_dispatch: + pull_request: + branches: [main] jobs: - ut-tests: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Use Node.js version from .nvmrc - id: nvmrc - run: echo "NODE_VERSION=$(cat .nvmrc)" >> $GITHUB_ENV - - uses: actions/setup-node@v4 - with: - node-version: ${{ env.NODE_VERSION }} - - name: Install dependencies - run: yarn install --frozen-lockfile - - name: Execute Unit tests - run: yarn test:ut \ No newline at end of file + ut-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Use Node.js version from .nvmrc + id: nvmrc + run: echo "NODE_VERSION=$(cat .nvmrc)" >> $GITHUB_ENV + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + - name: Install dependencies + run: yarn install --frozen-lockfile + - name: Execute Unit tests + run: yarn test:ut diff --git a/package.json b/package.json index 4b9b8ab9..65a90caa 100644 --- a/package.json +++ b/package.json @@ -56,11 +56,11 @@ "@fontsource-variable/nunito-sans": "^5.0.16", "@fontsource/baskervville": "^5.0.22", "@hookform/resolvers": "^3.9.0", - "@million/lint": "1.0.0-rc.82-beta.50", - "algoliasearch": "^5.3.2", + "@million/lint": "1.0.0-rc.84", + "algoliasearch": "^5.4.0", "astro": "^4.15.4", "clsx": "^2.1.1", - "contentful": "^10.15.0", + "contentful": "^10.15.1", "firebase": "^10.13.1", "firebase-admin": "^12.4.0", "gsap": "^3.12.5", diff --git a/src/pages/index.astro b/src/pages/index.astro index 7aec98cf..5178fd9f 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -5,7 +5,6 @@ import MyWork from "@modules/home/components/myWork/MyWork.astro"; import Testimonials from "@modules/home/components/testimonials/Testimonials.astro"; import Welcome from "@modules/home/components/welcome/Welcome.astro"; -// todo: ci for release // check responsive // todo: add signature email // todo: add small transitions & animations diff --git a/yarn.lock b/yarn.lock index d596b6e4..6efcb04b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,54 +5,58 @@ __metadata: version: 8 cacheKey: 10c0 -"@algolia/client-abtesting@npm:5.3.2": - version: 5.3.2 - resolution: "@algolia/client-abtesting@npm:5.3.2" +"@algolia/client-abtesting@npm:5.4.0": + version: 5.4.0 + resolution: "@algolia/client-abtesting@npm:5.4.0" dependencies: - "@algolia/client-common": "npm:5.3.2" - "@algolia/requester-browser-xhr": "npm:5.3.2" - "@algolia/requester-node-http": "npm:5.3.2" - checksum: 10c0/7c2e73c522f9372671d9f768e030ac7959cef3a499be7336903915e2c756db8687499889becdbe1f8182f997dc801c3142612768d373cc99b5ac01a3be63c56e + "@algolia/client-common": "npm:5.4.0" + "@algolia/requester-browser-xhr": "npm:5.4.0" + "@algolia/requester-fetch": "npm:5.4.0" + "@algolia/requester-node-http": "npm:5.4.0" + checksum: 10c0/f1d40ac20201d8a9d8574b217957a9e8aadba87a853a4033b221a5c0e0c9540832e6fa9b32cb5350057586445a00c17cbaecadad0fbce8fdb24cc42158f48ff1 languageName: node linkType: hard -"@algolia/client-analytics@npm:5.3.2": - version: 5.3.2 - resolution: "@algolia/client-analytics@npm:5.3.2" +"@algolia/client-analytics@npm:5.4.0": + version: 5.4.0 + resolution: "@algolia/client-analytics@npm:5.4.0" dependencies: - "@algolia/client-common": "npm:5.3.2" - "@algolia/requester-browser-xhr": "npm:5.3.2" - "@algolia/requester-node-http": "npm:5.3.2" - checksum: 10c0/e66acd5799352f7569f4ff97a2542adc25f99962d96ecdc419151f1d6179c23862548cf31c681668ad42faa87f7452fde8f6d37b2a188ee7e181ae4e42a50215 + "@algolia/client-common": "npm:5.4.0" + "@algolia/requester-browser-xhr": "npm:5.4.0" + "@algolia/requester-fetch": "npm:5.4.0" + "@algolia/requester-node-http": "npm:5.4.0" + checksum: 10c0/240b9f59708c940cbaa8691ef2f11f26dbaa1b1ddf75a8fea06511c887d2071cf4a0316ec8f7a8a1611af0107fa001008d6ad575ac3c17ac445fec33d03c738e languageName: node linkType: hard -"@algolia/client-common@npm:5.3.2": - version: 5.3.2 - resolution: "@algolia/client-common@npm:5.3.2" - checksum: 10c0/55571917f52ffd90167d900652c0769c8ba4ddd3e7db41309da66a6f0ef645eca49fc80c44f738fc0870f4b14d8e3378cb04883e79670d4aecc59b0d9d74c808 +"@algolia/client-common@npm:5.4.0": + version: 5.4.0 + resolution: "@algolia/client-common@npm:5.4.0" + checksum: 10c0/f5503254ead56e4ad6996f51861ed5203a63ed6c4db9506a9547056c7f4ec612fee14a2912795f3c99caad35a1db794c15f25380b7423bb7c6726bc0e1b2c800 languageName: node linkType: hard -"@algolia/client-personalization@npm:5.3.2": - version: 5.3.2 - resolution: "@algolia/client-personalization@npm:5.3.2" +"@algolia/client-personalization@npm:5.4.0": + version: 5.4.0 + resolution: "@algolia/client-personalization@npm:5.4.0" dependencies: - "@algolia/client-common": "npm:5.3.2" - "@algolia/requester-browser-xhr": "npm:5.3.2" - "@algolia/requester-node-http": "npm:5.3.2" - checksum: 10c0/a01aa7560a580ee21e2134a731f00ba6567f6bf7a8c7351e116ac482759527a5660c25e8be190ba60224d321e6a6549d5c85580acf2442a39c85f90b3195f6da + "@algolia/client-common": "npm:5.4.0" + "@algolia/requester-browser-xhr": "npm:5.4.0" + "@algolia/requester-fetch": "npm:5.4.0" + "@algolia/requester-node-http": "npm:5.4.0" + checksum: 10c0/82bffdd0ea1d0ba9e55f513613a19950777c01d5cff9b10428cecded2f567a9bbafb17c7e9db76ff0de023f3bca72cb7ddf3fb1b49d332cdab679f7d8ebec15a languageName: node linkType: hard -"@algolia/client-search@npm:5.3.2": - version: 5.3.2 - resolution: "@algolia/client-search@npm:5.3.2" +"@algolia/client-search@npm:5.4.0": + version: 5.4.0 + resolution: "@algolia/client-search@npm:5.4.0" dependencies: - "@algolia/client-common": "npm:5.3.2" - "@algolia/requester-browser-xhr": "npm:5.3.2" - "@algolia/requester-node-http": "npm:5.3.2" - checksum: 10c0/93f30646e840a0041d9951758da4fbd7ef412ee144b6ae3c4d65eb3a2079048f5911521993c891ad99dba76bc047bdc5cbfac027e1e44a95381d8afbef9f3dd4 + "@algolia/client-common": "npm:5.4.0" + "@algolia/requester-browser-xhr": "npm:5.4.0" + "@algolia/requester-fetch": "npm:5.4.0" + "@algolia/requester-node-http": "npm:5.4.0" + checksum: 10c0/e1fcb488e84ef742da16ef0f89d0f330ce917ad4518fcd4c87025a09689d8a2e5cb39d7008cdfc9796a1f66906bca9191a4a294a7d55c1bfec25c927fa64fa25 languageName: node linkType: hard @@ -63,32 +67,42 @@ __metadata: languageName: node linkType: hard -"@algolia/recommend@npm:5.3.2": - version: 5.3.2 - resolution: "@algolia/recommend@npm:5.3.2" +"@algolia/recommend@npm:5.4.0": + version: 5.4.0 + resolution: "@algolia/recommend@npm:5.4.0" dependencies: - "@algolia/client-common": "npm:5.3.2" - "@algolia/requester-browser-xhr": "npm:5.3.2" - "@algolia/requester-node-http": "npm:5.3.2" - checksum: 10c0/e679d387b1858f3a639ef6628ffae97b3bc93cd677ae37475fbee9a9efeb1272b01a21fc91960d63e5f0a9ea23702dd3bd889c142d87ade55befe2c04e025a6e + "@algolia/client-common": "npm:5.4.0" + "@algolia/requester-browser-xhr": "npm:5.4.0" + "@algolia/requester-fetch": "npm:5.4.0" + "@algolia/requester-node-http": "npm:5.4.0" + checksum: 10c0/60225328d48674aa4365815ba54a387fa7160ddbe5cd4e31f21a3c1668ea9a045acb8901f36a63c554e6cdb89c6188f08ff502cbfaf888f022c7c54a9d53015a languageName: node linkType: hard -"@algolia/requester-browser-xhr@npm:5.3.2": - version: 5.3.2 - resolution: "@algolia/requester-browser-xhr@npm:5.3.2" +"@algolia/requester-browser-xhr@npm:5.4.0": + version: 5.4.0 + resolution: "@algolia/requester-browser-xhr@npm:5.4.0" dependencies: - "@algolia/client-common": "npm:5.3.2" - checksum: 10c0/0a49a110ce9a100068666777e6f985c98c3c1bd932322ae217663748a00f6fc4c344077e20199d7b404d7cbdf0516f4317473edcb23ccb0aad98e2389607fa3e + "@algolia/client-common": "npm:5.4.0" + checksum: 10c0/c49328eab4e100269cc4c6df00f7e9c148e02ef82b7ba70649052d83cb6888c2ac24c60e74441f8717f21077fc69aaee3739b8d6165f4ac6743cf73d2dd5d2fd languageName: node linkType: hard -"@algolia/requester-node-http@npm:5.3.2": - version: 5.3.2 - resolution: "@algolia/requester-node-http@npm:5.3.2" +"@algolia/requester-fetch@npm:5.4.0": + version: 5.4.0 + resolution: "@algolia/requester-fetch@npm:5.4.0" + dependencies: + "@algolia/client-common": "npm:5.4.0" + checksum: 10c0/522300a9ebd1df3fd31b7a533f36e3bb008192e05ab4e96ad72fdd78e8dc0c775c2e80e4b1fe56c36b2e4d4690a5ed0bb5c53a5491bc45b7e50e50e5bb7b98a3 + languageName: node + linkType: hard + +"@algolia/requester-node-http@npm:5.4.0": + version: 5.4.0 + resolution: "@algolia/requester-node-http@npm:5.4.0" dependencies: - "@algolia/client-common": "npm:5.3.2" - checksum: 10c0/4993a825280a2435fc0b20f34b21e7f804b6e59596b5601362200f58692a45ce3a1bad2f9395e43ce6aaa9592022fa4d7b79142607d8c0ba736f4d6e4a3d2d09 + "@algolia/client-common": "npm:5.4.0" + checksum: 10c0/ed283ef53f9201340f0d19a62afceacc6ca95748d8baa09b8ae5abde4b61f283c914bf2ef77623a51a7519df06b5f554f986b3c8ff102427f6c4bd1bbd5fa4c0 languageName: node linkType: hard @@ -2830,9 +2844,9 @@ __metadata: languageName: node linkType: hard -"@million/lint@npm:1.0.0-rc.82-beta.50": - version: 1.0.0-rc.82-beta.50 - resolution: "@million/lint@npm:1.0.0-rc.82-beta.50" +"@million/lint@npm:1.0.0-rc.84": + version: 1.0.0-rc.84 + resolution: "@million/lint@npm:1.0.0-rc.84" dependencies: "@axiomhq/js": "npm:1.0.0-rc.3" "@babel/core": "npm:7.24.6" @@ -2844,8 +2858,7 @@ __metadata: babel-plugin-syntax-hermes-parser: "npm:^0.21.1" ci-info: "npm:^4.0.0" esbuild: "npm:^0.20.1" - faster-babel-types: "npm:^0.1.0" - hono: "npm:4.3.2" + hono: "npm:^4.3.2" isomorphic-fetch: "npm:^3.0.0" nanoid: "npm:^5.0.7" pako: "npm:^2.1.0" @@ -2861,7 +2874,7 @@ __metadata: update-notifier-cjs: "npm:^5.1.6" bin: lint: cli.js - checksum: 10c0/8b78bce261c043d54abd76a44666202fba9003106660b1f3b9cb458c66c41d404d49a54c62e0fc9a8453a38b8722d617f15c98635b38a4f9d5d715ce24dd3f9a + checksum: 10c0/fadf5ca0695939ee10cc28ae7585d8c4e67ec94901e1fd13842ced2739f501690c2c06448374713dd5f121a84cfa88a64521fa2c056a61a1b11b2656c2005660 languageName: node linkType: hard @@ -4087,19 +4100,20 @@ __metadata: languageName: node linkType: hard -"algoliasearch@npm:^5.3.2": - version: 5.3.2 - resolution: "algoliasearch@npm:5.3.2" +"algoliasearch@npm:^5.4.0": + version: 5.4.0 + resolution: "algoliasearch@npm:5.4.0" dependencies: - "@algolia/client-abtesting": "npm:5.3.2" - "@algolia/client-analytics": "npm:5.3.2" - "@algolia/client-common": "npm:5.3.2" - "@algolia/client-personalization": "npm:5.3.2" - "@algolia/client-search": "npm:5.3.2" - "@algolia/recommend": "npm:5.3.2" - "@algolia/requester-browser-xhr": "npm:5.3.2" - "@algolia/requester-node-http": "npm:5.3.2" - checksum: 10c0/173f1bb99b7d1b808e32bcde81d1c748d55d28adf00ed0b3b291dba6b047d2b58c604efa9df6e59447aacb464c2a4e46dac4095380a3f09377c38e7d9b572da9 + "@algolia/client-abtesting": "npm:5.4.0" + "@algolia/client-analytics": "npm:5.4.0" + "@algolia/client-common": "npm:5.4.0" + "@algolia/client-personalization": "npm:5.4.0" + "@algolia/client-search": "npm:5.4.0" + "@algolia/recommend": "npm:5.4.0" + "@algolia/requester-browser-xhr": "npm:5.4.0" + "@algolia/requester-fetch": "npm:5.4.0" + "@algolia/requester-node-http": "npm:5.4.0" + checksum: 10c0/e483c7195cce523a02a29693f537b7775e63c790c6ef1efcf78059e5b8705ff368fb06cf99bb3fdaa71953d7c5b9789b24bd616947cfe4c6b6f9196407304ad3 languageName: node linkType: hard @@ -4468,7 +4482,7 @@ __metadata: "@fontsource-variable/nunito-sans": "npm:^5.0.16" "@fontsource/baskervville": "npm:^5.0.22" "@hookform/resolvers": "npm:^3.9.0" - "@million/lint": "npm:1.0.0-rc.82-beta.50" + "@million/lint": "npm:1.0.0-rc.84" "@playwright/test": "npm:^1.47.0" "@testing-library/react": "npm:^16.0.1" "@testing-library/react-hooks": "npm:^8.0.1" @@ -4478,10 +4492,10 @@ __metadata: "@types/react": "npm:^18.3.5" "@types/react-dom": "npm:^18.3.0" "@types/three": "npm:^0.168.0" - algoliasearch: "npm:^5.3.2" + algoliasearch: "npm:^5.4.0" astro: "npm:^4.15.4" clsx: "npm:^2.1.1" - contentful: "npm:^10.15.0" + contentful: "npm:^10.15.1" conventional-changelog-atom: "npm:^5.0.0" firebase: "npm:^10.13.1" firebase-admin: "npm:^12.4.0" @@ -5048,9 +5062,9 @@ __metadata: languageName: node linkType: hard -"contentful@npm:^10.15.0": - version: 10.15.0 - resolution: "contentful@npm:10.15.0" +"contentful@npm:^10.15.1": + version: 10.15.1 + resolution: "contentful@npm:10.15.1" dependencies: "@contentful/content-source-maps": "npm:^0.11.0" "@contentful/rich-text-types": "npm:^16.0.2" @@ -5059,7 +5073,7 @@ __metadata: contentful-sdk-core: "npm:^8.3.1" json-stringify-safe: "npm:^5.0.1" type-fest: "npm:^4.0.0" - checksum: 10c0/d86fe0d58e25223b124bb72a9e1c779d0e6a13640d8db1b4e002bbcc735553a26a286851b821b7ad601839f13637885ff012a2136c48b83db4f29e86dd9810b1 + checksum: 10c0/09c399b33482c3c1b5c12da9bcba6a1a90707b2f26909dd681a5ad380ae7825ab5c7d07a472081c7ff726d7a2b35382d8c139a0240aacf8bc626e2572b765b1f languageName: node linkType: hard @@ -6295,15 +6309,6 @@ __metadata: languageName: node linkType: hard -"faster-babel-types@npm:^0.1.0": - version: 0.1.0 - resolution: "faster-babel-types@npm:0.1.0" - peerDependencies: - "@babel/types": ^7 - checksum: 10c0/e73f27146458d8af39582231e2b65643f1d74a3cc184ed68a684c3c74cb8b8d054773c174fb6a0bb7a85523af91f10a11ae6f542766d5be6d7b570680c2bb256 - languageName: node - linkType: hard - "fastest-levenshtein@npm:^1.0.16": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" @@ -7218,10 +7223,10 @@ __metadata: languageName: node linkType: hard -"hono@npm:4.3.2": - version: 4.3.2 - resolution: "hono@npm:4.3.2" - checksum: 10c0/a87ed147773620f2f37317e5074a04046b6c13f099da8f2393a3c017d41708a3b5e34e46c9303665cfdfb1a36bbb992d3136cbfc5dd8ce6c6b19ea46d9419156 +"hono@npm:^4.3.2": + version: 4.5.11 + resolution: "hono@npm:4.5.11" + checksum: 10c0/839c90273b17ed3797d34a19d12dc577d6f98590a4261bf87488880db13137c0c84a165e7810dc50af2ce4680c8fc915c0bb65673bf5fc54c6d951f18454b2c5 languageName: node linkType: hard