github.com/expr-lang/expr@v1.16.9/.github/scripts/coverage.mjs (about)

     1  #!/usr/bin/env zx
     2  
     3  const expected = 90
     4  const exclude = [
     5    'expr/test',
     6    'checker/mock',
     7    'vm/func_types',
     8    'vm/runtime/helpers',
     9    'internal/difflib',
    10    'internal/spew',
    11    'internal/testify',
    12  ]
    13  
    14  cd(path.resolve(__dirname, '..', '..'))
    15  
    16  await spinner('Running tests', async () => {
    17    await $`go test -coverprofile=coverage.out -coverpkg=github.com/expr-lang/expr/... ./...`
    18    const coverage = fs.readFileSync('coverage.out').toString()
    19      .split('\n')
    20      .filter(line => {
    21        for (const ex of exclude)
    22          if (line.includes(ex)) return false
    23        return true
    24      })
    25      .join('\n')
    26    fs.writeFileSync('coverage.out', coverage)
    27    await $`go tool cover -html=coverage.out -o coverage.html`
    28  })
    29  
    30  const cover = await $({verbose: true})`go tool cover -func=coverage.out`
    31  const total = +cover.stdout.match(/total:\s+\(statements\)\s+(\d+\.\d+)%/)[1]
    32  if (total < expected) {
    33    echo(chalk.red(`Coverage is too low: ${total}% < ${expected}% (expected)`))
    34    process.exit(1)
    35  } else {
    36    echo(`Coverage is good: ${chalk.green(total + '%')} >= ${expected}% (expected)`)
    37  }