fix(markdown): render lone <svg> in a code fence; don't extract <svg> nested in real code #3701
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Linter & Test | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - .github/workflows/jan-linter-and-test.yml | |
| - 'web/**' | |
| - 'joi/**' | |
| - 'package.json' | |
| - 'node_modules/**' | |
| - 'yarn.lock' | |
| - 'core/**' | |
| - 'extensions/**' | |
| - '!README.md' | |
| - 'Makefile' | |
| pull_request: | |
| branches: | |
| - main | |
| - release/** | |
| paths: | |
| - .github/workflows/jan-linter-and-test.yml | |
| - 'web/**' | |
| - 'joi/**' | |
| - 'package.json' | |
| - 'node_modules/**' | |
| - 'yarn.lock' | |
| - 'Makefile' | |
| - 'extensions/**' | |
| - 'core/**' | |
| - 'src-tauri/**' | |
| - 'web-app/**' | |
| - '!README.md' | |
| concurrency: | |
| group: linter-test-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| base_branch_cov: | |
| if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository | |
| runs-on: ubuntu-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| with: | |
| ref: ${{ github.base_ref }} | |
| - name: Use Node.js 20.x | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | |
| with: | |
| node-version: 20 | |
| - name: 'Cleanup cache' | |
| continue-on-error: true | |
| run: | | |
| rm -rf ~/jan | |
| make clean | |
| - name: Config Yarn | |
| run: | | |
| corepack enable | |
| corepack prepare yarn@4.5.3 --activate | |
| yarn --version | |
| yarn config set -H enableImmutableInstalls false | |
| - name: Install dependencies | |
| run: | | |
| make lint | |
| - name: Run test coverage | |
| run: | | |
| yarn test:coverage | |
| - name: Upload code coverage for ref branch | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: ref-lcov.info | |
| path: coverage/lcov.info | |
| base_branch_rust_cov: | |
| if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository | |
| runs-on: ubuntu-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| with: | |
| ref: ${{ github.base_ref }} | |
| - name: Install Tauri dependencies | |
| run: | | |
| sudo apt update | |
| sudo apt install -y libglib2.0-dev libatk1.0-dev libpango1.0-dev libgtk-3-dev libsoup-3.0-dev libwebkit2gtk-4.1-dev librsvg2-dev | |
| - name: Install cargo-llvm-cov | |
| uses: taiki-e/install-action@9e57365e36de1e26dea5145e57d471261468d9f7 # cargo-llvm-cov | |
| - name: Create Tauri resource stubs for CI | |
| run: | | |
| TRIPLE=$(rustc -vV | awk '/^host:/ { print $2 }') | |
| mkdir -p src-tauri/resources/bin src-tauri/resources/pre-install src-tauri/icons | |
| touch src-tauri/resources/pre-install/.gitkeep | |
| touch src-tauri/resources/LICENSE | |
| touch src-tauri/resources/bin/jan-cli | |
| for bin in uv bun; do | |
| touch "src-tauri/resources/bin/${bin}-${TRIPLE}" | |
| done | |
| # Icons are gitignored; generate_context!() requires them at compile time | |
| for icon in 32x32.png 128x128.png 128x128@2x.png icon.icns icon.ico; do | |
| [ -f "src-tauri/icons/$icon" ] || cp src-tauri/icons/icon.png "src-tauri/icons/$icon" | |
| done | |
| - name: Run Rust test coverage | |
| run: | | |
| cargo llvm-cov clean --workspace --manifest-path src-tauri/Cargo.toml | |
| cargo llvm-cov --no-report --manifest-path src-tauri/Cargo.toml --no-default-features --features test-tauri -- --test-threads=1 | |
| cargo llvm-cov --no-report --manifest-path src-tauri/plugins/tauri-plugin-hardware/Cargo.toml | |
| cargo llvm-cov --no-report --manifest-path src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml | |
| cargo llvm-cov --no-report --manifest-path src-tauri/utils/Cargo.toml | |
| cargo llvm-cov report --lcov --output-path rust-lcov.info --manifest-path src-tauri/Cargo.toml | |
| - name: Upload Rust code coverage for ref branch | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: ref-rust-lcov.info | |
| path: rust-lcov.info | |
| test-on-macos: | |
| runs-on: 'macos-latest' | |
| if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' | |
| steps: | |
| - name: Getting the repo | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Installing node | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | |
| with: | |
| node-version: 20 | |
| - name: 'Cleanup cache' | |
| continue-on-error: true | |
| run: | | |
| rm -rf ~/jan | |
| make clean | |
| - name: Config Yarn | |
| run: | | |
| corepack enable | |
| corepack prepare yarn@4.5.3 --activate | |
| yarn --version | |
| yarn config set -H enableImmutableInstalls false | |
| - name: Set up Xcode version | |
| run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer | |
| - name: Linter and test | |
| run: | | |
| make test | |
| env: | |
| CSC_IDENTITY_AUTO_DISCOVERY: 'false' | |
| test-on-windows: | |
| if: github.event_name == 'push' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| antivirus-tools: ['mcafee', 'bit-defender'] | |
| runs-on: windows-desktop-${{ matrix.antivirus-tools }} | |
| steps: | |
| - name: Getting the repo | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Installing node | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | |
| with: | |
| node-version: 20 | |
| # Clean cache, continue on error | |
| - name: 'Cleanup cache' | |
| shell: powershell | |
| continue-on-error: true | |
| run: | | |
| $path = "$Env:APPDATA\jan" | |
| if (Test-Path $path) { | |
| Remove-Item "\\?\$path" -Recurse -Force | |
| } else { | |
| Write-Output "Folder does not exist." | |
| } | |
| make clean | |
| - name: Config Yarn | |
| run: | | |
| corepack enable | |
| corepack prepare yarn@4.5.3 --activate | |
| yarn --version | |
| yarn config set -H enableImmutableInstalls false | |
| - name: Linter and test | |
| shell: powershell | |
| run: | | |
| make test | |
| test-on-windows-pr: | |
| if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
| runs-on: 'windows-latest' | |
| steps: | |
| - name: Getting the repo | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: install dependencies | |
| run: | | |
| choco install --yes --no-progress make | |
| - name: Installing node | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | |
| with: | |
| node-version: 20 | |
| - name: 'Cleanup cache' | |
| shell: powershell | |
| continue-on-error: true | |
| run: | | |
| $path = "$Env:APPDATA\jan" | |
| if (Test-Path $path) { | |
| Remove-Item "\\?\$path" -Recurse -Force | |
| } else { | |
| Write-Output "Folder does not exist." | |
| } | |
| make clean | |
| - name: Install WebView2 Runtime (Bootstrapper) | |
| shell: powershell | |
| run: | | |
| Invoke-WebRequest -Uri 'https://go.microsoft.com/fwlink/p/?LinkId=2124703' -OutFile 'setup.exe' | |
| Start-Process -FilePath setup.exe -Verb RunAs -Wait | |
| - name: Config Yarn | |
| run: | | |
| corepack enable | |
| corepack prepare yarn@4.5.3 --activate | |
| yarn --version | |
| yarn config set -H enableImmutableInstalls false | |
| - name: Linter and test | |
| shell: powershell | |
| run: | | |
| make test | |
| env: | |
| NODE_OPTIONS: '--max-old-space-size=2048' | |
| test-on-ubuntu: | |
| runs-on: ${{ (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) && 'ubuntu-latest' || 'ubuntu-latest' }} | |
| if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' | |
| steps: | |
| - name: Getting the repo | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Free Disk Space (Ubuntu) | |
| uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 | |
| with: | |
| tool-cache: false | |
| android: true | |
| dotnet: true | |
| haskell: true | |
| large-packages: true | |
| docker-images: true | |
| swap-storage: true | |
| - name: Installing node | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | |
| with: | |
| node-version: 20 | |
| - name: Install Tauri dependencies | |
| run: | | |
| sudo apt update | |
| sudo apt install -y libglib2.0-dev libatk1.0-dev libpango1.0-dev libgtk-3-dev libsoup-3.0-dev libwebkit2gtk-4.1-dev librsvg2-dev libfuse2 webkit2gtk-driver | |
| - name: 'Cleanup cache' | |
| continue-on-error: true | |
| run: | | |
| rm -rf ~/jan | |
| make clean | |
| - name: Config Yarn | |
| run: | | |
| corepack enable | |
| corepack prepare yarn@4.5.3 --activate | |
| yarn --version | |
| yarn config set -H enableImmutableInstalls false | |
| - name: Linter and test | |
| run: | | |
| export DISPLAY=$(w -h | awk 'NR==1 {print $2}') | |
| echo -e "Display ID: $DISPLAY" | |
| make test | |
| - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| if: always() | |
| with: | |
| name: playwright-report | |
| path: electron/playwright-report/ | |
| retention-days: 2 | |
| coverage-check: | |
| if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository | |
| runs-on: ubuntu-latest | |
| needs: [base_branch_cov, base_branch_rust_cov] | |
| continue-on-error: true | |
| steps: | |
| - name: Getting the repo | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Installing node | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | |
| with: | |
| node-version: 20 | |
| - name: 'Cleanup cache' | |
| continue-on-error: true | |
| run: | | |
| rm -rf ~/jan | |
| make clean | |
| - name: Config Yarn | |
| run: | | |
| corepack enable | |
| corepack prepare yarn@4.5.3 --activate | |
| yarn --version | |
| yarn config set -H enableImmutableInstalls false | |
| - name: Install dependencies | |
| run: | | |
| make lint | |
| - name: Run TypeScript test coverage | |
| run: | | |
| yarn test:coverage | |
| - name: Install Tauri dependencies | |
| run: | | |
| sudo apt update | |
| sudo apt install -y libglib2.0-dev libatk1.0-dev libpango1.0-dev libgtk-3-dev libsoup-3.0-dev libwebkit2gtk-4.1-dev librsvg2-dev | |
| - name: Install cargo-llvm-cov | |
| uses: taiki-e/install-action@9e57365e36de1e26dea5145e57d471261468d9f7 # cargo-llvm-cov | |
| - name: Run Rust test coverage | |
| run: ./scripts/rust-coverage.sh | |
| - name: Merge coverage reports | |
| run: | | |
| cat ./coverage/lcov.info rust-lcov.info > merged-lcov.info | |
| - name: Download code coverage report from base branch | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 | |
| with: | |
| name: ref-lcov.info | |
| - name: Download Rust code coverage report from base branch | |
| id: download-rust-cov | |
| continue-on-error: true | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 | |
| with: | |
| name: ref-rust-lcov.info | |
| path: base-rust-cov | |
| - name: Merge base branch coverage reports | |
| run: | | |
| if [ -f ./base-rust-cov/rust-lcov.info ]; then | |
| cat ./lcov.info ./base-rust-cov/rust-lcov.info > base-merged-lcov.info | |
| else | |
| echo "Rust base coverage not available, using TS-only coverage" | |
| cp ./lcov.info base-merged-lcov.info | |
| fi | |
| - name: Generate Code Coverage report | |
| id: code-coverage | |
| uses: barecheck/code-coverage-action@d92cdaec187f89f0886ccec37acf11e2a6a85f70 # v1.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| lcov-file: './merged-lcov.info' | |
| base-lcov-file: './base-merged-lcov.info' | |
| send-summary-comment: true | |
| show-annotations: 'warning' |