ci: migrate all workflows to pnpm, upgrade @vitejs/plugin-react to v6
- Replace npm ci with pnpm install --frozen-lockfile in all 5 workflows - Add pnpm/action-setup@v4 step to lint, format, testing, release, publish - Upgrade @vitejs/plugin-react 4.7.0 -> 6.0.1 (supports vite 8) - Add @rolldown/plugin-babel as required peer dependency - Remove package-lock.json (project uses pnpm-lock.yaml)
This commit is contained in:
1 parent
9c07fbc815
commit
de866a74bf
8 files changed
+451
-26791
No files matched your search
@@ -1,29 +1,34 @@
|
|||||||
name: Check formatting
|
name: Check formatting
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check:
|
check:
|
||||||
name: Prettier Format Check
|
name: Prettier Format Check
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Install pnpm
|
||||||
uses: actions/setup-node@v4
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
version: 10
|
||||||
cache: 'npm'
|
|
||||||
|
- name: Setup Node.js
|
||||||
- name: Install dependencies
|
uses: actions/setup-node@v4
|
||||||
run: npm ci
|
with:
|
||||||
|
node-version: 20
|
||||||
- name: Run format check
|
cache: 'pnpm'
|
||||||
run: npm run format
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Run format check
|
||||||
|
run: pnpm run format
|
||||||
+34
-29
@@ -1,29 +1,34 @@
|
|||||||
name: Lint
|
name: Lint
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check:
|
check:
|
||||||
name: ESLint Check
|
name: ESLint Check
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Install pnpm
|
||||||
uses: actions/setup-node@v4
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
version: 10
|
||||||
cache: 'npm'
|
|
||||||
|
- name: Setup Node.js
|
||||||
- name: Install dependencies
|
uses: actions/setup-node@v4
|
||||||
run: npm ci
|
with:
|
||||||
|
node-version: 20
|
||||||
- name: Run lint
|
cache: 'pnpm'
|
||||||
run: npm run lint
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Run lint
|
||||||
|
run: pnpm run lint
|
||||||
+229
-219
@@ -1,219 +1,229 @@
|
|||||||
name: Publish Release
|
name: Publish Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published]
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
dry_run:
|
dry_run:
|
||||||
description: 'Build artifacts only, skip uploading to GitHub Release'
|
description: 'Build artifacts only, skip uploading to GitHub Release'
|
||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
default: true
|
default: true
|
||||||
allow_update_published_release:
|
allow_update_published_release:
|
||||||
description: 'Allow uploading assets to an already published release'
|
description: 'Allow uploading assets to an already published release'
|
||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
platform: win32
|
platform: win32
|
||||||
arch: x64
|
arch: x64
|
||||||
- os: windows-11-arm
|
- os: windows-11-arm
|
||||||
platform: win32
|
platform: win32
|
||||||
arch: arm64
|
arch: arm64
|
||||||
- os: macos-15-intel
|
- os: macos-15-intel
|
||||||
platform: darwin
|
platform: darwin
|
||||||
arch: x64
|
arch: x64
|
||||||
- os: macos-14
|
- os: macos-14
|
||||||
platform: darwin
|
platform: darwin
|
||||||
arch: arm64
|
arch: arm64
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
platform: linux
|
platform: linux
|
||||||
arch: x64
|
arch: x64
|
||||||
- os: ubuntu-24.04-arm
|
- os: ubuntu-24.04-arm
|
||||||
platform: linux
|
platform: linux
|
||||||
arch: arm64
|
arch: arm64
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install Node and NPM
|
- name: Install pnpm
|
||||||
uses: actions/setup-node@v4
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
version: 10
|
||||||
cache: 'npm'
|
|
||||||
|
- name: Install Node and NPM
|
||||||
- name: Install Linux dependencies
|
uses: actions/setup-node@v4
|
||||||
if: matrix.platform == 'linux'
|
with:
|
||||||
run: |
|
node-version: 20
|
||||||
sudo apt-get update
|
cache: 'pnpm'
|
||||||
sudo apt-get install -y fakeroot rpm libsecret-1-dev pkg-config
|
|
||||||
|
- name: Install Linux dependencies
|
||||||
- name: Ensure WiX Toolset
|
if: matrix.platform == 'linux'
|
||||||
if: matrix.platform == 'win32' && matrix.arch == 'x64'
|
run: |
|
||||||
shell: powershell
|
sudo apt-get update
|
||||||
run: |
|
sudo apt-get install -y fakeroot rpm libsecret-1-dev pkg-config
|
||||||
$installed = choco list --local-only wixtoolset --exact --limit-output
|
|
||||||
if (-not $installed) {
|
- name: Ensure WiX Toolset
|
||||||
choco install wixtoolset --version=3.14.0 -y
|
if: matrix.platform == 'win32' && matrix.arch == 'x64'
|
||||||
} elseif ($installed -match '^wixtoolset\|3\.14(\.|$)') {
|
shell: powershell
|
||||||
Write-Host "WiX Toolset already compatible: $installed"
|
run: |
|
||||||
} else {
|
$installed = choco list --local-only wixtoolset --exact --limit-output
|
||||||
Write-Host "Incompatible WiX Toolset detected: $installed"
|
if (-not $installed) {
|
||||||
choco upgrade wixtoolset --version=3.14.0 --allow-downgrade -y
|
choco install wixtoolset --version=3.14.0 -y
|
||||||
}
|
} elseif ($installed -match '^wixtoolset\|3\.14(\.|$)') {
|
||||||
|
Write-Host "WiX Toolset already compatible: $installed"
|
||||||
- name: Install dependencies
|
} else {
|
||||||
run: npm ci
|
Write-Host "Incompatible WiX Toolset detected: $installed"
|
||||||
|
choco upgrade wixtoolset --version=3.14.0 --allow-downgrade -y
|
||||||
- name: Make Artifacts
|
}
|
||||||
if: matrix.platform != 'darwin'
|
|
||||||
env:
|
- name: Install dependencies
|
||||||
NODE_OPTIONS: --max-old-space-size=8192
|
run: pnpm install --frozen-lockfile
|
||||||
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
|
||||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
- name: Make Artifacts
|
||||||
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
|
if: matrix.platform != 'darwin'
|
||||||
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
|
env:
|
||||||
run: npm run make -- --platform=${{ matrix.platform }} --arch=${{ matrix.arch }}
|
NODE_OPTIONS: --max-old-space-size=8192
|
||||||
|
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
||||||
# DMG creation may be flaky on GitHub macOS runners, so retry the full darwin make.
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
- name: Make Artifacts (darwin with retry)
|
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
|
||||||
if: matrix.platform == 'darwin'
|
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
|
||||||
uses: nick-fields/retry@v3
|
run: pnpm run make -- --platform=${{ matrix.platform }} --arch=${{ matrix.arch }}
|
||||||
with:
|
|
||||||
max_attempts: 3
|
# DMG creation may be flaky on GitHub macOS runners, so retry the full darwin make.
|
||||||
timeout_minutes: 20
|
- name: Make Artifacts (darwin with retry)
|
||||||
retry_wait_seconds: 20
|
if: matrix.platform == 'darwin'
|
||||||
command: npm run make -- --platform=${{ matrix.platform }} --arch=${{ matrix.arch }}
|
uses: nick-fields/retry@v3
|
||||||
env:
|
with:
|
||||||
NODE_OPTIONS: --max-old-space-size=8192
|
max_attempts: 3
|
||||||
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
timeout_minutes: 20
|
||||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
retry_wait_seconds: 20
|
||||||
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
|
command: pnpm run make -- --platform=${{ matrix.platform }} --arch=${{ matrix.arch }}
|
||||||
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
|
env:
|
||||||
|
NODE_OPTIONS: --max-old-space-size=8192
|
||||||
- name: Upload Build Artifacts
|
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
||||||
uses: actions/upload-artifact@v4
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||||
with:
|
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
|
||||||
name: make-${{ matrix.platform }}-${{ matrix.arch }}
|
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
|
||||||
path: |
|
|
||||||
out/make/**/*.exe
|
- name: Upload Build Artifacts
|
||||||
out/make/**/*.dmg
|
uses: actions/upload-artifact@v4
|
||||||
out/make/**/*.zip
|
with:
|
||||||
out/make/**/*.AppImage
|
name: make-${{ matrix.platform }}-${{ matrix.arch }}
|
||||||
out/make/**/*.deb
|
path: |
|
||||||
out/make/**/*.rpm
|
out/make/**/*.exe
|
||||||
out/make/**/*.msi
|
out/make/**/*.dmg
|
||||||
out/make/**/*.yml
|
out/make/**/*.zip
|
||||||
out/make/**/*.txt
|
out/make/**/*.AppImage
|
||||||
if-no-files-found: error
|
out/make/**/*.deb
|
||||||
retention-days: 14
|
out/make/**/*.rpm
|
||||||
|
out/make/**/*.msi
|
||||||
- name: Dry-run summary
|
out/make/**/*.yml
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.dry_run == 'true'
|
out/make/**/*.txt
|
||||||
run: |
|
if-no-files-found: error
|
||||||
echo "Dry run enabled: build artifacts generated and uploaded; release publish step will be skipped."
|
retention-days: 14
|
||||||
|
|
||||||
publish:
|
- name: Dry-run summary
|
||||||
name: Publish Release (Manual Approval)
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.dry_run == 'true'
|
||||||
needs: build
|
run: |
|
||||||
runs-on: ubuntu-latest
|
echo "Dry run enabled: build artifacts generated and uploaded; release publish step will be skipped."
|
||||||
if: needs.build.result == 'success' && (github.event_name != 'workflow_dispatch' || github.event.inputs.dry_run != 'true')
|
|
||||||
permissions:
|
publish:
|
||||||
contents: write
|
name: Publish Release (Manual Approval)
|
||||||
# Configure the `release` environment with required reviewers in GitHub settings
|
needs: build
|
||||||
# to enforce a manual approval gate before assets are uploaded.
|
runs-on: ubuntu-latest
|
||||||
environment:
|
if: needs.build.result == 'success' && (github.event_name != 'workflow_dispatch' || github.event.inputs.dry_run != 'true')
|
||||||
name: release
|
permissions:
|
||||||
|
contents: write
|
||||||
steps:
|
# Configure the `release` environment with required reviewers in GitHub settings
|
||||||
- name: Checkout git repo
|
# to enforce a manual approval gate before assets are uploaded.
|
||||||
uses: actions/checkout@v4
|
environment:
|
||||||
|
name: release
|
||||||
- name: Download Build Artifacts
|
|
||||||
uses: actions/download-artifact@v4
|
steps:
|
||||||
with:
|
- name: Checkout git repo
|
||||||
pattern: make-*
|
uses: actions/checkout@v4
|
||||||
merge-multiple: true
|
|
||||||
path: release-assets
|
- name: Download Build Artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
- name: Install Node and NPM
|
with:
|
||||||
uses: actions/setup-node@v4
|
pattern: make-*
|
||||||
with:
|
merge-multiple: true
|
||||||
node-version: 20
|
path: release-assets
|
||||||
cache: 'npm'
|
|
||||||
|
- name: Install pnpm
|
||||||
- name: Resolve release tag
|
uses: pnpm/action-setup@v4
|
||||||
id: release_tag
|
with:
|
||||||
env:
|
version: 10
|
||||||
RELEASE_EVENT_TAG: ${{ github.event_name == 'release' && github.event.release.tag_name || '' }}
|
|
||||||
run: |
|
- name: Install Node and NPM
|
||||||
if [ -n "$RELEASE_EVENT_TAG" ]; then
|
uses: actions/setup-node@v4
|
||||||
tag="$RELEASE_EVENT_TAG"
|
with:
|
||||||
else
|
node-version: 20
|
||||||
version="$(node -e "const v=require('./package.json').version; if (!v) { throw new Error('package.json version is empty'); } process.stdout.write(v);")"
|
cache: 'pnpm'
|
||||||
tag="v$version"
|
|
||||||
fi
|
- name: Resolve release tag
|
||||||
|
id: release_tag
|
||||||
if [ -z "$tag" ]; then
|
env:
|
||||||
echo "::error::Resolved release tag is empty"
|
RELEASE_EVENT_TAG: ${{ github.event_name == 'release' && github.event.release.tag_name || '' }}
|
||||||
exit 1
|
run: |
|
||||||
fi
|
if [ -n "$RELEASE_EVENT_TAG" ]; then
|
||||||
|
tag="$RELEASE_EVENT_TAG"
|
||||||
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
else
|
||||||
echo "Using release tag: $tag"
|
version="$(node -e "const v=require('./package.json').version; if (!v) { throw new Error('package.json version is empty'); } process.stdout.write(v);")"
|
||||||
|
tag="v$version"
|
||||||
- name: Ensure release is safe to update
|
fi
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
if [ -z "$tag" ]; then
|
||||||
RELEASE_TAG: ${{ steps.release_tag.outputs.tag }}
|
echo "::error::Resolved release tag is empty"
|
||||||
ALLOW_UPDATE_PUBLISHED_RELEASE: ${{ github.event_name == 'release' && 'true' || (github.event_name == 'workflow_dispatch' && github.event.inputs.allow_update_published_release) || 'false' }}
|
exit 1
|
||||||
run: |
|
fi
|
||||||
if gh release view "$RELEASE_TAG" >/dev/null 2>&1; then
|
|
||||||
is_draft="$(gh release view "$RELEASE_TAG" --json isDraft --jq '.isDraft')"
|
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
||||||
if [ "$is_draft" != "true" ] && [ "$ALLOW_UPDATE_PUBLISHED_RELEASE" != "true" ]; then
|
echo "Using release tag: $tag"
|
||||||
echo "::error::Release $RELEASE_TAG is already published. Refusing to upload assets."
|
|
||||||
echo "::error::Re-run with workflow_dispatch input allow_update_published_release=true if you explicitly want to update it."
|
- name: Ensure release is safe to update
|
||||||
exit 1
|
env:
|
||||||
fi
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
else
|
RELEASE_TAG: ${{ steps.release_tag.outputs.tag }}
|
||||||
gh release create "$RELEASE_TAG" --title "$RELEASE_TAG" --draft --notes "Automated release draft."
|
ALLOW_UPDATE_PUBLISHED_RELEASE: ${{ github.event_name == 'release' && 'true' || (github.event_name == 'workflow_dispatch' && github.event.inputs.allow_update_published_release) || 'false' }}
|
||||||
fi
|
run: |
|
||||||
|
if gh release view "$RELEASE_TAG" >/dev/null 2>&1; then
|
||||||
- name: Upload assets to release
|
is_draft="$(gh release view "$RELEASE_TAG" --json isDraft --jq '.isDraft')"
|
||||||
env:
|
if [ "$is_draft" != "true" ] && [ "$ALLOW_UPDATE_PUBLISHED_RELEASE" != "true" ]; then
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
echo "::error::Release $RELEASE_TAG is already published. Refusing to upload assets."
|
||||||
RELEASE_TAG: ${{ steps.release_tag.outputs.tag }}
|
echo "::error::Re-run with workflow_dispatch input allow_update_published_release=true if you explicitly want to update it."
|
||||||
run: |
|
exit 1
|
||||||
mapfile -t files < <(find release-assets -type f \( \
|
fi
|
||||||
-name '*.exe' -o \
|
else
|
||||||
-name '*.dmg' -o \
|
gh release create "$RELEASE_TAG" --title "$RELEASE_TAG" --draft --notes "Automated release draft."
|
||||||
-name '*.zip' -o \
|
fi
|
||||||
-name '*.AppImage' -o \
|
|
||||||
-name '*.deb' -o \
|
- name: Upload assets to release
|
||||||
-name '*.rpm' -o \
|
env:
|
||||||
-name '*.msi' -o \
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
-name '*.yml' -o \
|
RELEASE_TAG: ${{ steps.release_tag.outputs.tag }}
|
||||||
-name '*.txt' \
|
run: |
|
||||||
\) | sort)
|
mapfile -t files < <(find release-assets -type f \( \
|
||||||
|
-name '*.exe' -o \
|
||||||
if [ "${#files[@]}" -eq 0 ]; then
|
-name '*.dmg' -o \
|
||||||
echo "::error::No release assets found under release-assets/"
|
-name '*.zip' -o \
|
||||||
exit 1
|
-name '*.AppImage' -o \
|
||||||
fi
|
-name '*.deb' -o \
|
||||||
|
-name '*.rpm' -o \
|
||||||
printf 'Uploading %s assets to %s\n' "${#files[@]}" "$RELEASE_TAG"
|
-name '*.msi' -o \
|
||||||
gh release upload "$RELEASE_TAG" "${files[@]}" --clobber
|
-name '*.yml' -o \
|
||||||
|
-name '*.txt' \
|
||||||
|
\) | sort)
|
||||||
|
|
||||||
|
if [ "${#files[@]}" -eq 0 ]; then
|
||||||
|
echo "::error::No release assets found under release-assets/"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf 'Uploading %s assets to %s\n' "${#files[@]}" "$RELEASE_TAG"
|
||||||
|
gh release upload "$RELEASE_TAG" "${files[@]}" --clobber
|
||||||
@@ -1,34 +1,39 @@
|
|||||||
name: Release
|
name: Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
issues: write
|
issues: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
name: Semantic Release
|
name: Semantic Release
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # Required for semantic-release to analyze commits
|
fetch-depth: 0
|
||||||
persist-credentials: false # We use a token in the next steps
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Install pnpm
|
||||||
uses: actions/setup-node@v4
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
version: 10
|
||||||
cache: 'npm'
|
|
||||||
|
- name: Setup Node.js
|
||||||
- name: Install dependencies
|
uses: actions/setup-node@v4
|
||||||
run: npm ci
|
with:
|
||||||
|
node-version: 20
|
||||||
- name: Release
|
cache: 'pnpm'
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} # Use GH_TOKEN to trigger other workflows
|
- name: Install dependencies
|
||||||
run: npx semantic-release
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Release
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||||
|
run: npx semantic-release
|
||||||
@@ -1,53 +1,63 @@
|
|||||||
name: Tests
|
name: Tests
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
tests-unit:
|
tests-unit:
|
||||||
name: Unit Tests
|
name: Unit Tests
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Install pnpm
|
||||||
uses: actions/setup-node@v4
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
version: 10
|
||||||
cache: 'npm'
|
|
||||||
|
- name: Setup Node.js
|
||||||
- name: Install dependencies
|
uses: actions/setup-node@v4
|
||||||
run: npm ci
|
with:
|
||||||
|
node-version: 20
|
||||||
- name: Run unit tests
|
cache: 'pnpm'
|
||||||
run: npm test
|
|
||||||
|
- name: Install dependencies
|
||||||
type-check:
|
run: pnpm install --frozen-lockfile
|
||||||
name: Type Check
|
|
||||||
runs-on: ubuntu-latest
|
- name: Run unit tests
|
||||||
steps:
|
run: pnpm test
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
type-check:
|
||||||
|
name: Type Check
|
||||||
- name: Setup Node.js
|
runs-on: ubuntu-latest
|
||||||
uses: actions/setup-node@v4
|
steps:
|
||||||
with:
|
- name: Checkout
|
||||||
node-version: 20
|
uses: actions/checkout@v4
|
||||||
cache: 'npm'
|
|
||||||
|
- name: Install pnpm
|
||||||
- name: Install dependencies
|
uses: pnpm/action-setup@v4
|
||||||
run: npm ci
|
with:
|
||||||
|
version: 10
|
||||||
- name: Run TypeScript type check
|
|
||||||
run: npm run type-check
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
# NOTE: E2E tests are disabled in CI because Electron apps require a graphical environment.
|
with:
|
||||||
# Run E2E tests locally with: npm run test:e2e
|
node-version: 20
|
||||||
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Run TypeScript type check
|
||||||
|
run: pnpm run type-check
|
||||||
|
|
||||||
|
# NOTE: E2E tests are disabled in CI because Electron apps require a graphical environment.
|
||||||
|
# Run E2E tests locally with: pnpm run test:e2e
|
||||||
Generated
-26347
File diff suppressed because it is too large.
Load diff
+2
-1
@@ -45,6 +45,7 @@
|
|||||||
"@eslint/js": "^9.39.0",
|
"@eslint/js": "^9.39.0",
|
||||||
"@pengx17/electron-forge-maker-appimage": "^1.0.2",
|
"@pengx17/electron-forge-maker-appimage": "^1.0.2",
|
||||||
"@playwright/test": "^1.56.1",
|
"@playwright/test": "^1.56.1",
|
||||||
|
"@rolldown/plugin-babel": "^0.2.3",
|
||||||
"@semantic-release/changelog": "^6.0.3",
|
"@semantic-release/changelog": "^6.0.3",
|
||||||
"@semantic-release/git": "^10.0.1",
|
"@semantic-release/git": "^10.0.1",
|
||||||
"@semantic-release/github": "^12.0.6",
|
"@semantic-release/github": "^12.0.6",
|
||||||
@@ -62,7 +63,7 @@
|
|||||||
"@types/node": "^24.10.1",
|
"@types/node": "^24.10.1",
|
||||||
"@types/react": "^19.2.2",
|
"@types/react": "^19.2.2",
|
||||||
"@types/react-dom": "^19.2.2",
|
"@types/react-dom": "^19.2.2",
|
||||||
"@vitejs/plugin-react": "^4.7.0",
|
"@vitejs/plugin-react": "^6.0.1",
|
||||||
"babel-plugin-react-compiler": "1.0.0",
|
"babel-plugin-react-compiler": "1.0.0",
|
||||||
"code-inspector-plugin": "^1.3.3",
|
"code-inspector-plugin": "^1.3.3",
|
||||||
"conventional-changelog-conventionalcommits": "^9.1.0",
|
"conventional-changelog-conventionalcommits": "^9.1.0",
|
||||||
|
|||||||
Generated
+50
-79
@@ -269,6 +269,9 @@ importers:
|
|||||||
'@playwright/test':
|
'@playwright/test':
|
||||||
specifier: ^1.56.1
|
specifier: ^1.56.1
|
||||||
version: 1.59.1
|
version: 1.59.1
|
||||||
|
'@rolldown/plugin-babel':
|
||||||
|
specifier: ^0.2.3
|
||||||
|
version: 0.2.3(@babel/[email protected])(@babel/[email protected])([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
|
||||||
'@semantic-release/changelog':
|
'@semantic-release/changelog':
|
||||||
specifier: ^6.0.3
|
specifier: ^6.0.3
|
||||||
version: 6.0.3([email protected]([email protected]))
|
version: 6.0.3([email protected]([email protected]))
|
||||||
@@ -321,8 +324,8 @@ importers:
|
|||||||
specifier: ^19.2.2
|
specifier: ^19.2.2
|
||||||
version: 19.2.3(@types/[email protected])
|
version: 19.2.3(@types/[email protected])
|
||||||
'@vitejs/plugin-react':
|
'@vitejs/plugin-react':
|
||||||
specifier: ^4.7.0
|
specifier: ^6.0.1
|
||||||
version: 4.7.0([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
|
version: 6.0.1(@rolldown/[email protected](@babel/[email protected])(@babel/[email protected])([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
|
||||||
babel-plugin-react-compiler:
|
babel-plugin-react-compiler:
|
||||||
specifier: 1.0.0
|
specifier: 1.0.0
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
@@ -536,18 +539,6 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@babel/core': ^7.0.0-0
|
'@babel/core': ^7.0.0-0
|
||||||
|
|
||||||
'@babel/[email protected]':
|
|
||||||
resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
peerDependencies:
|
|
||||||
'@babel/core': ^7.0.0-0
|
|
||||||
|
|
||||||
'@babel/[email protected]':
|
|
||||||
resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
peerDependencies:
|
|
||||||
'@babel/core': ^7.0.0-0
|
|
||||||
|
|
||||||
'@babel/[email protected]':
|
'@babel/[email protected]':
|
||||||
resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
|
resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -2779,12 +2770,29 @@ packages:
|
|||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@rolldown/plugin[email protected]':
|
'@rolldown/plugin[email protected]':
|
||||||
resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
|
resolution: {integrity: sha512-+zEk16yGlz1F9STiRr6uG9hmIXb6nprjLczV/htGptYuLoCuxb+itZ03RKCEeOhBpDDd1NU7qF6x1VLMUp62bw==}
|
||||||
|
engines: {node: '>=22.12.0 || ^24.0.0'}
|
||||||
|
peerDependencies:
|
||||||
|
'@babel/core': ^7.29.0 || ^8.0.0-rc.1
|
||||||
|
'@babel/plugin-transform-runtime': ^7.29.0 || ^8.0.0-rc.1
|
||||||
|
'@babel/runtime': ^7.27.0 || ^8.0.0-rc.1
|
||||||
|
rolldown: ^1.0.0-rc.5
|
||||||
|
vite: ^8.0.0
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@babel/plugin-transform-runtime':
|
||||||
|
optional: true
|
||||||
|
'@babel/runtime':
|
||||||
|
optional: true
|
||||||
|
vite:
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/[email protected]':
|
'@rolldown/[email protected]':
|
||||||
resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==}
|
resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==}
|
||||||
|
|
||||||
|
'@rolldown/[email protected]':
|
||||||
|
resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==}
|
||||||
|
|
||||||
'@rollup/[email protected]':
|
'@rollup/[email protected]':
|
||||||
resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
|
resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
|
||||||
engines: {node: '>=14.0.0'}
|
engines: {node: '>=14.0.0'}
|
||||||
@@ -3491,18 +3499,6 @@ packages:
|
|||||||
'@types/[email protected]':
|
'@types/[email protected]':
|
||||||
resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
|
resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
|
||||||
|
|
||||||
'@types/[email protected]':
|
|
||||||
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
|
|
||||||
|
|
||||||
'@types/[email protected]':
|
|
||||||
resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
|
|
||||||
|
|
||||||
'@types/[email protected]':
|
|
||||||
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
|
|
||||||
|
|
||||||
'@types/[email protected]':
|
|
||||||
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
|
|
||||||
|
|
||||||
'@types/[email protected]':
|
'@types/[email protected]':
|
||||||
resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==}
|
resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==}
|
||||||
|
|
||||||
@@ -3717,11 +3713,18 @@ packages:
|
|||||||
resolution: {integrity: sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg==}
|
resolution: {integrity: sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@vitejs/plugin-react@4.7.0':
|
'@vitejs/plugin-react@6.0.1':
|
||||||
resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
|
resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==}
|
||||||
engines: {node: ^14.18.0 || >=16.0.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
|
'@rolldown/plugin-babel': ^0.1.7 || ^0.2.0
|
||||||
|
babel-plugin-react-compiler: ^1.0.0
|
||||||
|
vite: ^8.0.0
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@rolldown/plugin-babel':
|
||||||
|
optional: true
|
||||||
|
babel-plugin-react-compiler:
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@vitest/[email protected]':
|
'@vitest/[email protected]':
|
||||||
resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==}
|
resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==}
|
||||||
@@ -7440,10 +7443,6 @@ packages:
|
|||||||
[email protected]:
|
[email protected]:
|
||||||
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
|
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
|
||||||
|
|
||||||
[email protected]:
|
|
||||||
resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
|
|
||||||
engines: {node: '>=0.10.0'}
|
|
||||||
|
|
||||||
[email protected]:
|
[email protected]:
|
||||||
resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
|
resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@@ -9029,16 +9028,6 @@ snapshots:
|
|||||||
'@babel/core': 7.29.0
|
'@babel/core': 7.29.0
|
||||||
'@babel/helper-plugin-utils': 7.28.6
|
'@babel/helper-plugin-utils': 7.28.6
|
||||||
|
|
||||||
'@babel/[email protected](@babel/[email protected])':
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.29.0
|
|
||||||
'@babel/helper-plugin-utils': 7.28.6
|
|
||||||
|
|
||||||
'@babel/[email protected](@babel/[email protected])':
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.29.0
|
|
||||||
'@babel/helper-plugin-utils': 7.28.6
|
|
||||||
|
|
||||||
'@babel/[email protected]': {}
|
'@babel/[email protected]': {}
|
||||||
|
|
||||||
'@babel/[email protected]':
|
'@babel/[email protected]':
|
||||||
@@ -11708,10 +11697,19 @@ snapshots:
|
|||||||
'@rolldown/[email protected]':
|
'@rolldown/[email protected]':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rolldown/plugin[email protected]': {}
|
'@rolldown/plugin[email protected](@babel/[email protected])(@babel/[email protected])([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.29.0
|
||||||
|
picomatch: 4.0.4
|
||||||
|
rolldown: 1.0.0-rc.17
|
||||||
|
optionalDependencies:
|
||||||
|
'@babel/runtime': 7.29.2
|
||||||
|
vite: 8.0.10(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
|
||||||
|
|
||||||
'@rolldown/[email protected]': {}
|
'@rolldown/[email protected]': {}
|
||||||
|
|
||||||
|
'@rolldown/[email protected]': {}
|
||||||
|
|
||||||
'@rollup/[email protected]([email protected])':
|
'@rollup/[email protected]([email protected])':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/estree': 1.0.8
|
'@types/estree': 1.0.8
|
||||||
@@ -12392,27 +12390,6 @@ snapshots:
|
|||||||
|
|
||||||
'@types/[email protected]': {}
|
'@types/[email protected]': {}
|
||||||
|
|
||||||
'@types/[email protected]':
|
|
||||||
dependencies:
|
|
||||||
'@babel/parser': 7.29.2
|
|
||||||
'@babel/types': 7.29.0
|
|
||||||
'@types/babel__generator': 7.27.0
|
|
||||||
'@types/babel__template': 7.4.4
|
|
||||||
'@types/babel__traverse': 7.28.0
|
|
||||||
|
|
||||||
'@types/[email protected]':
|
|
||||||
dependencies:
|
|
||||||
'@babel/types': 7.29.0
|
|
||||||
|
|
||||||
'@types/[email protected]':
|
|
||||||
dependencies:
|
|
||||||
'@babel/parser': 7.29.2
|
|
||||||
'@babel/types': 7.29.0
|
|
||||||
|
|
||||||
'@types/[email protected]':
|
|
||||||
dependencies:
|
|
||||||
'@babel/types': 7.29.0
|
|
||||||
|
|
||||||
'@types/[email protected]':
|
'@types/[email protected]':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 24.12.2
|
'@types/node': 24.12.2
|
||||||
@@ -12672,17 +12649,13 @@ snapshots:
|
|||||||
'@typescript-eslint/types': 8.59.1
|
'@typescript-eslint/types': 8.59.1
|
||||||
eslint-visitor-keys: 5.0.1
|
eslint-visitor-keys: 5.0.1
|
||||||
|
|
||||||
'@vitejs/plugin-react@4.7.0([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
|
'@vitejs/plugin-react@6.0.1(@rolldown/[email protected](@babel/[email protected])(@babel/[email protected])([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.0
|
'@rolldown/pluginutils': 1.0.0-rc.7
|
||||||
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/[email protected])
|
|
||||||
'@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/[email protected])
|
|
||||||
'@rolldown/pluginutils': 1.0.0-beta.27
|
|
||||||
'@types/babel__core': 7.20.5
|
|
||||||
react-refresh: 0.17.0
|
|
||||||
vite: 8.0.10(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
|
vite: 8.0.10(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
|
||||||
transitivePeerDependencies:
|
optionalDependencies:
|
||||||
- supports-color
|
'@rolldown/plugin-babel': 0.2.3(@babel/[email protected])(@babel/[email protected])([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
|
||||||
|
babel-plugin-react-compiler: 1.0.0
|
||||||
|
|
||||||
'@vitest/[email protected]':
|
'@vitest/[email protected]':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -16615,8 +16588,6 @@ snapshots:
|
|||||||
|
|
||||||
[email protected]: {}
|
[email protected]: {}
|
||||||
|
|
||||||
[email protected]: {}
|
|
||||||
|
|
||||||
[email protected](@types/[email protected])([email protected]):
|
[email protected](@types/[email protected])([email protected]):
|
||||||
dependencies:
|
dependencies:
|
||||||
react: 19.2.5
|
react: 19.2.5
|
||||||
|
|||||||
Reference in new issue
Block a user