本指南解释了如何使用 bitbucket pipelines 将 eslint 结果集成到 bitbucket pull 请求中。您将学习如何生成 json 格式的 eslint 报告,使用 bitbucket 报告和注释 api 将这些报告作为内联注释发布,以及配置 bitbucket 管道以自动运行 eslint。
生成 json 格式的 eslint 报告
首先,您需要运行 eslint 并以 json 格式输出结果。该文件稍后将用于创建报告和注释。
将 -f 和 -o 参数添加到 eslint 命令中。例如:
eslint . --ext .ts -f json -o eslint-report.json
登录后复制
将 eslint 报告和注释发布到 bitbucket
要直接在拉取请求中显示 eslint 结果,您将使用 bitbucket 的报告 api 和注释 api。
- 阅读 eslint json 报告。
- 生成包含错误和警告总数的报告。
- 基于 eslint 消息发布内联注释。
const fs = require('fs') const path = require('path') const util = require('util') // external id must be unique per report on a commit const external_id = 'com.yorcompany.reports.eslint' const bb_user = 'your_user' const bb_repo = 'your_repo' const bb_url = 'https://api.bitbucket.org/2.0' // this is available by default in the pipeline. const commit = process.env.bitbucket_commit // for this to be availble you need to create an access token with read access to the repo // and set it an environment variable in the pipeline. const token = process.env.bitbucket_token // map eslint severities to bitbucket report severities const severities = { 0: 'low', 1: 'medium', 2: 'high' } // read the eslint json report const data = await util.promisify(fs.readfile)(path.join(process.cwd(), 'eslint-report.json'), 'utf8') .catch(err => { console.error('error reading eslint-report.json:', err) throw err }) const eslintoutput = json.parse(data) let totalerrorcount = 0 let totalwarningcount = 0 const annotations = [] let i = 1 eslintoutput.foreach(file => { totalerrorcount += file.errorcount totalwarningcount += file.warningcount const relativepath = path.relative(process.cwd(), file.filepath) file.messages.foreach(message => { annotations.push({ external_id: `${external_id}.${commit}.${i++}`, path: relativepath, annotation_type: 'code_smell', summary: message.message, line: message.line, severity: severities[message.severity] }) }) }) // prepare the report const report = { title: 'eslint report', details: 'results from eslint analysis', report_type: 'test', logourl: 'https://eslint.org/img/logo.svg', data: [ { title: 'error count', type: 'number', value: totalerrorcount }, { title: 'warning count', type: 'number', value: totalwarningcount } ] } try { // post the report to bitbucket const reporturl = `${bb_url}/repositories/${bb_user}/${bb_repo}/commit/${commit}/reports/${external_id}` let response = await fetch(reporturl, { method: 'put', body: json.stringify(report), headers: { 'content-type': 'application/json', 'accept': 'application/json', 'authorization': `bearer ${token}` } }) if (!response.ok) { console.error(await response.text()) throw new error(`error posting report: ${response.statustext}`) } console.log('report posted successfully!') console.log(await response.json()) // post annotations if any if (annotations.length > 0) { const annotationsurl = `${bb_url}/repositories/${bb_user}/${bb_repo}/commit/${commit}/reports/${external_id}/annotations` response = await fetch(annotationsurl, { method: 'post', body: json.stringify(annotations), headers: { 'content-type': 'application/json', 'accept': 'application/json', 'authorization': `bearer ${token}` } }) if (!response.ok) { console.error(await response.text()) throw new error(`error posting annotations: ${response.statustext}`) } console.log('annotations posted successfully!') console.log(await response.json()) } } catch (error) { console.error('error posting insights:', error.response ? error.response.data : error.message) }
登录后复制
配置 bitbucket 管道
要将此过程自动化为 ci/cd 工作流程的一部分,您可以设置 bitbucket 管道来运行 eslint、生成 json 报告并发布结果。下面是一个示例 bitbucket-pipelines.yml 文件,可帮助您入门:
image: node:18.13.0 pipelines: default: - step: name: ESLint caches: - node script: - npm install - npx eslint . --ext .ts -f json -o eslint-report.json # Run ESLint and save the report after-script: - node post-eslint-results.js # Post results to Bitbucket artifacts: - eslint-report.json
登录后复制
笔记
报告在后脚本中发布到 bitbucket,因为如果 eslint 返回非 0 退出代码(如果 eslint 有错误),后续脚本将不会被调用。
以上就是来自 Bitbucket 管道的 Eslint 代码洞察的详细内容,更多请关注抖狐科技其它相关文章!
-
如何定义 Golang 中带有匿名函数作为参数的函数?
go中定义带有匿名函数参数的函数语法如下:定义caller函数,其参数为接受整型并返回整型和error的匿名函数。在caller函数中,调用匿名函数并处理返回结果。定义实现特定操作的匿名函数,例如增值...
-
Win10专业版怎么使用分屏快捷键
win10 专业版分屏快捷键使用指南众所周知,win10 专业版引入诸多实用功能,其中就包括分屏功能,它可以让我们在同一屏幕上同时处理多个任务,大大提升工作效率。但许多人还不太清楚,win10 专业版...
-
苹果16有哪些优势
苹果 16 的优势包括:强大的 a16 仿生芯片、出色的 super retina xdr 显示屏、令人印象深刻的相机系统、超长的续航时间、先进的安全性、用户友好的 ios 16 界面以及广泛的支持生...
-
linux常用命令pp是什么意思
pp 是一个 linux 命令,用于显示 c 和 c++ 程序的预处理输出。其用法为:pp [选项] 文件名。常用选项包括:-c(包含注释)、-e(仅预处理)、-p(打印宏定义)、-i(包含头文件)。...
-
如何在Java中定义带输入参数的函数
在 java 中定义带输入参数的函数步骤如下:定义函数名后的小括号内输入参数列表,包括数据类型和名称。函数返回值类型指定在函数名的前面。在函数内通过名称访问输入参数,编写函数逻辑。返回最终结果。如何在...