aaerofeev / bitbucket-static-reviews

Checkstyle 集成到 stash/bitbucket 提交请求

1.0.2 2019-02-01 07:50 UTC

This package is auto-updated.

Last update: 2024-09-29 05:08:37 UTC


README

Checkstyle 格式集成到 stash / bitbucket

以下为英文版本

读取 checkstyle 格式报告并写入 stash/bitbucket 提交请求的注释

Dockerhub 镜像

功能

  • 基于 checkstyle 报告发布评论
  • 检查器仅对修改的代码或上下文进行工作模式
  • 错误分组
  • 重要性限制
  • 注释数量限制:总、按文件、按组
  • 对已修复错误的反应(游戏化)
  • 按错误模式或按文件忽略
  • 向 statsd 发送统计信息

自动添加 "已修复" / "Fixed" 标记

Fixed

错误分组 / 错误分组

Group

如何工作

所需数据:项目、仓库和分支名称。如果存在,注释将被发布到具有 OPEN 状态的拉取请求中。

  1. 传递 git diff origin/master <BRANCH> 或修订差异的结果
  2. 按顺序传递静态分析器的工作结果,格式为 checkstyle
  3. 分析和发送评论

英文

本项目读取 checkstyle 格式报告并将其写入 stash / bitbucket 拉取请求。

功能

  • 基于 checkstyle 报告发布评论
  • 可以配置为仅检查上下文或修改的代码
  • 错误分组
  • 严重性限制
  • 限制注释数量:总、按文件、按组
  • 对已修复错误的反应(游戏化)
  • 按错误模式或按文件忽略
  • 向 statsd 发送统计信息

如何工作

所需选项:项目、仓库和分支名称。如果存在,注释将被发布到具有 OPEN 状态的拉取请求中。

  1. 传递 git diff origin/master <BRANCH> 或修订差异的结果到分析器
  2. 收集静态分析器的报告
  3. 分析评论并发送到 Bitbucket API

Bitbucket API

https://docs.atlassian.com/bitbucket-server/rest/5.15.0/bitbucket-rest.html?utm_source=%2Fstatic%2Frest%2Fbitbucket-server%2Flatest%2Fbitbucket-rest.html&utm_medium=301#idm45622371276656

https://developer.atlassian.com/server/bitbucket/reference/rest-api/

配置

默认配置文件名为 .config.php

<?php

use BitbucketReviews\Config;

/**
* @see \BitbucketReviews\Config
 */
return [
    // Stash API config
    // https://<hostname>/projects/<project>/repos/<repository>/browse
    'stash'    => [
        'url'         => 'https://bitbucket.org',
        // @see https://confluence.atlassian.com/bitbucketserver/personal-access-tokens-939515499.html
        'accessToken' => '<secret-token-read-perms>',
        'project'     => '<project>',
        'repository'  => '<repository>',
        'debug'       => false,
    ],
    'analyzer' => [
        'inspect'       => Config::INSPECT_CONTEXT,
        'ignoredText'   => [
            'eslint.rules.radix',
        ],
        'ignoredFiles'  => [
            'composer.json',
            'composer.lock',
        ],
        'limit'         => Config::NO_LIMIT,
        'limitPerFile'  => Config::NO_LIMIT,
        'limitPerGroup' => Config::NO_LIMIT,
    ],
    // Optional
    'statsd'   => [
        'host'      => '<statsd-host>',
        'port'      => '<statsd-port>',
        'namespace' => 'myApp.code-analyze',
    ],
];

用法示例

/vendor/bin/bitbucket-reviews run refs/head/MY_BRANCH git-diff.txt \
    --config config.php \
    --checkstyle eslint.xml:/code/base \
    --checkstyle phan.xml \
    --checkstyle phpstan.xml
run [options] [--] <branch> <diff>

Arguments:
  branch                         Branch name, full path like `refs/heads/master`
  diff                           git diff output file path

Options:
      --diff-vsc[=DIFF-VSC]      git diff output file path [default: "git"]
  -c, --checkstyle[=CHECKSTYLE]  checkstyle file path <filename>:<root> (multiple values allowed)
  -k, --config[=CONFIG]          config file [default: ".config.php"]

高级用法

#!/usr/bin/env bash

set -x

function join { local IFS="$1"; shift; echo "$*"; }

BRANCH_NAME=$1 # my-feature
CONTEXT_LINES=$2 # 10
CODE_PATH=/code

mkdir reports

### Saving DIFF for analyzer - diff.txt

git diff -U${CONTEXT_LINES:-10} master...${BRANCH_NAME} > diff.txt

### Collecting ESLINT report - eslint.xml ###

JS_IMAGE=yarn:latest
ESLINT_FILES=$(git diff --name-only master...${BRANCH_NAME} | grep -E "\.(js|vue)$")

docker run --rm \
    --volume $(pwd):${CODE_PATH} \
    --workdir ${CODE_PATH} \
    --entrypoint=${CODE_PATH}/node_modules/.bin/eslint \
    --interactive \
    ${JS_IMAGE} \
    ${ESLINT_FILES} -o ./reports/eslint.xml -f checkstyle

### Collecting PHAN report - phan.xml ###

PHP_IMAGE=php7-cli:latest
PHAN_FILES=$(join , $(git diff --name-only origin/master...${BRANCH_NAME} | grep -E "\.php$"))

docker run --rm \
    --volume $(pwd):${CODE_PATH} \
    --workdir ${CODE_PATH} \
    --entrypoint ${CODE_PATH}/vendor/bin/phan \
    --interactive \
    ${PHP_IMAGE} \
    -k ${CODE_PATH}/.phan.php -m checkstyle -o ./reports/phan.xml --include-analysis-file-list ${PHAN_FILES}

### Static review

REVIEW_IMAGE=aaerofeev/bitbucket-static-reviews:latest

docker pull ${REVIEW_IMAGE}

docker run --rm \
    --volume $(pwd)/reports:/reports \
    --volume $(pwd)/bin/analyze/review.php:/code/config.php \
    ${REVIEW_IMAGE} \
    run -k /code/config.php -c /reports/eslint.xml:${CODE_PATH} -c /reports/phan.xml refs/heads/${BRANCH_NAME} /reports/diff.txt

exit 0