Skip to content

feat(ViSR): Controls in a collapsible drawer for spectroscopy view #272

feat(ViSR): Controls in a collapsible drawer for spectroscopy view

feat(ViSR): Controls in a collapsible drawer for spectroscopy view #272

Workflow file for this run

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