Skip to content

⚡ Bolt: [performance improvement] Remove LINQ and iterator allocations in collection mapping #964

⚡ Bolt: [performance improvement] Remove LINQ and iterator allocations in collection mapping

⚡ Bolt: [performance improvement] Remove LINQ and iterator allocations in collection mapping #964

Workflow file for this run

name: CI
on:
push:
branches: [master, main]
# Runs on all pull requests once this workflow exists on master (default branch).
# Stacked PRs whose base branch predates this file may need master merged in
# before checks appear on downstream PRs (#5–#9).
pull_request:
# Manual escape hatch: lets a run be dispatched via the Actions tab or API
# when a synchronize webhook doesn't fire (e.g. non-standard push paths).
workflow_dispatch:
permissions:
contents: read
jobs:
build-test:
name: .NET build and test
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
- name: Build
run: dotnet build QuickShell.sln -c Release -p:Platform=x64 --verbosity minimal
shell: pwsh
- name: Test
run: dotnet test QuickShell.Core.Tests/QuickShell.Core.Tests.csproj -c Release -p:Platform=x64 --no-build --verbosity minimal
shell: pwsh
- name: Test PowerShell scripts
shell: pwsh
run: |
Install-Module Pester -MinimumVersion 5.0.0 -Scope CurrentUser -Force -SkipPublisherCheck
Import-Module Pester -MinimumVersion 5.0.0
$config = New-PesterConfiguration
$config.Run.Path = 'scripts/tests'
$config.Run.Exit = $true
$config.Output.Verbosity = 'Detailed'
Invoke-Pester -Configuration $config
raycast-check:
name: Raycast lint, test, and build
# Full gate on Windows (ray CLI + dual-platform extension).
runs-on: windows-latest
defaults:
run:
working-directory: QuickShell.Raycast
shell: pwsh
steps:
- name: Prefer LF checkouts for Prettier
working-directory: .
run: git config --global core.autocrlf false
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: QuickShell.Raycast/.nvmrc
cache: npm
cache-dependency-path: QuickShell.Raycast/package-lock.json
- name: Install dependencies
run: npm ci
- name: Verify Raycast CLI
run: node scripts/verify-raycast-cli.js
- name: Test
run: npm test
- name: Lint
run: npm run lint
- name: Build
run: npm run build
raycast-check-macos:
name: Raycast lint, test, and build (macOS)
runs-on: macos-latest
defaults:
run:
working-directory: QuickShell.Raycast
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: QuickShell.Raycast/.nvmrc
cache: npm
cache-dependency-path: QuickShell.Raycast/package-lock.json
- name: Install dependencies
run: npm ci
- name: Verify Raycast CLI
run: node scripts/verify-raycast-cli.js
- name: Test
run: npm test
- name: Lint
run: npm run lint
- name: Build
run: npm run build
# Informational only: wall-clock medians vary by runner hardware. Never gate PRs on ms budgets.
# Critical-path contracts remain in build-test. Artifacts support manual regression diffs.
perf-harness:
name: Performance harness (artifacts)
runs-on: windows-latest
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
- name: Build
run: dotnet build QuickShell.sln -c Release -p:Platform=x64 --verbosity minimal
shell: pwsh
- name: Run performance measurements
env:
QUICKSHELL_PERF_OUTPUT_DIR: ${{ github.workspace }}/artifacts/perf
run: >
dotnet test QuickShell.Core.Tests/QuickShell.Core.Tests.csproj
-c Release -p:Platform=x64 --no-build
--filter Category=PerformanceMeasurement
--verbosity minimal
shell: pwsh
- name: Upload perf artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: quickshell-perf-results
path: artifacts/perf/
if-no-files-found: warn