feat(ViSR): Controls in a collapsible drawer for spectroscopy view #272
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: Coverage | |
| on: | |
| pull_request: | |
| jobs: | |
| coverage: | |
| runs-on: ubuntu-latest | |
| env: | |
| TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} | |
| TURBO_TEAM: ${{ secrets.TURBO_TEAM }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # Required for turbo diff | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v3 | |
| with: | |
| version: 10 | |
| - name: Setup Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: "pnpm" | |
| cache-dependency-path: "**/pnpm-lock.yaml" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Identify affected projects | |
| id: affected | |
| run: | | |
| # the filter means 'projects changed since origin/main (or target branch), inc dependents' | |
| pnpm turbo run coverage \ | |
| --filter=...[origin/${{ github.base_ref }}] \ | |
| --dry=json > turbodry.json | |
| node -e " | |
| const fs = require('fs'); | |
| const data = JSON.parse(fs.readFileSync('turbodry.json')); | |
| const projects = [...new Set(data.tasks.map(task => task.package))]; | |
| console.log('Affected projects:', projects); | |
| fs.writeFileSync('affected.txt', projects.join('\n')) | |
| " | |
| if [ ! -s affected.txt ]; then | |
| echo "No affected projects" | |
| echo "has_affected=false" >> $GITHUB_ENV | |
| else | |
| echo "has_affected=true" >> $GITHUB_ENV | |
| fi | |
| # --- PR coverage (affected only) --- | |
| - name: Run PR coverage | |
| if: env.has_affected == 'true' | |
| run: | | |
| FILTERS=$(awk '{print "--filter="$0}' affected.txt | xargs) | |
| pnpm turbo run coverage $FILTERS --force --no-daemon | |
| - name: Save PR coverage | |
| if: env.has_affected == 'true' | |
| run: | | |
| mkdir pr-coverage | |
| find apps packages -path "*/coverage/coverage-summary.json" | while read file; do | |
| project=$(dirname "$(dirname "$file")") | |
| project=$(basename "$project") | |
| cp "$file" "pr-coverage/$project.json" | |
| done | |
| # --- baseline coverage --- | |
| - name: Checkout target branch | |
| if: env.has_affected == 'true' | |
| run: git checkout origin/${{ github.base_ref }} | |
| - name: Install dependencies (main) | |
| if: env.has_affected == 'true' | |
| run: pnpm install --frozen-lockfile | |
| - name: Filter out affected packages not in base | |
| if: env.has_affected == 'true' | |
| run: | | |
| pnpm m ls --depth -1 --json > workspace.json | |
| node -e " | |
| const fs = require('fs'); | |
| const affected = fs.readFileSync('affected.txt', 'utf-8').split('\n'); | |
| const workspace = JSON.parse(fs.readFileSync('workspace.json')); | |
| const availableProjects = new Set(workspace.map(project => project.name)); | |
| const filtered = affected.filter(project => availableProjects.has(project)); | |
| console.log('Filtered affected projects:', filtered); | |
| fs.writeFileSync('affected.filtered.txt', filtered.join('\n')); | |
| " | |
| if [ ! -s affected.filtered.txt ]; then | |
| echo "No affected projects" | |
| echo "has_affected=false" >> $GITHUB_ENV | |
| else | |
| echo "has_affected=true" >> $GITHUB_ENV | |
| fi | |
| - name: Run coverage (main affected) | |
| if: env.has_affected == 'true' | |
| # notice both times we --force turbo to ignore cache and execute tasks fresh | |
| run: | | |
| FILTERS=$(awk '{print "--filter="$0}' affected.filtered.txt | xargs) | |
| pnpm turbo run coverage $FILTERS --force --no-daemon | |
| - name: Save coverage (main affected) | |
| if: env.has_affected == 'true' | |
| run: | | |
| mkdir base-coverage | |
| find apps packages -path "*/coverage/coverage-summary.json" | while read file; do | |
| project=$(dirname "$(dirname "$file")") | |
| project=$(basename "$project") | |
| cp "$file" "base-coverage/$project.json" | |
| done | |
| # --- compare --- | |
| - name: Compare coverage | |
| if: env.has_affected == 'true' | |
| # the script errors (exit code 1), causing this action to fail, | |
| # if regression for any app or package is detected | |
| run: node scripts/compare-coverage.mjs pr-coverage base-coverage |