From 58ae5f053b1732d262495e1226c594fc86e88405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?brooklin=28=E6=9E=97=E6=8C=AF=E6=B6=9B=29?= Date: Fri, 2 Oct 2020 15:52:15 +0800 Subject: [PATCH 1/8] init --- src/backend/README.md | 311 +++++++++ build.gradle => src/backend/build.gradle | 0 {core => src/backend/core}/build.gradle | 0 .../com/tencent/devops/api/CodeccApi.kt | 0 .../com/tencent/devops/api/CodeccReportApi.kt | 0 .../com/tencent/devops/api/CodeccSdkApi.kt | 0 .../com/tencent/devops/api/CredentialApi.kt | 0 .../devops/api/PipelineTaskResourceApi.kt | 0 .../com/tencent/devops/api/RepositoryApi.kt | 0 .../com/tencent/devops/common/api/SubBuild.kt | 0 .../tencent/devops/common/api/SubReport.kt | 0 .../com/tencent/devops/common/api/SubScan.kt | 0 .../devops/common/api/SubScanComposer.kt | 0 .../tencent/devops/common/api/SubSdkApi.kt | 0 .../devops/common/docker/CommonSubBuild.kt | 0 .../devops/common/docker/CommonSubScan.kt | 0 .../common/docker/CommonSubScanComposer.kt | 0 .../common/factory/SubProcessorFactory.kt | 0 .../devops/common/utils/CommonSubReport.kt | 0 .../devops/common/utils/CommonSubSdkApi.kt | 0 .../kotlin/com/tencent/devops/docker/Build.kt | 0 .../com/tencent/devops/docker/DockerRun.kt | 0 .../com/tencent/devops/docker/LocalParam.kt | 0 .../kotlin/com/tencent/devops/docker/Scan.kt | 0 .../com/tencent/devops/docker/ScanComposer.kt | 0 .../devops/docker/pojo/AnalyzeConfigInfo.kt | 0 .../devops/docker/pojo/CodeRepoInfoVO.kt | 0 .../tencent/devops/docker/pojo/CodeRepoVO.kt | 0 .../tencent/devops/docker/pojo/CodeYaml.kt | 0 .../devops/docker/pojo/CommandParam.kt | 0 .../tencent/devops/docker/pojo/CommonVO.kt | 0 .../devops/docker/pojo/DefectsEntity.kt | 0 .../tencent/devops/docker/pojo/FileDefects.kt | 0 .../tencent/devops/docker/pojo/FileIndex.kt | 0 .../com/tencent/devops/docker/pojo/Gather.kt | 0 .../tencent/devops/docker/pojo/ImageParam.kt | 0 .../tencent/devops/docker/pojo/LandunParam.kt | 0 .../devops/docker/pojo/OpenCheckerVO.kt | 0 .../com/tencent/devops/docker/pojo/Result.kt | 0 .../tencent/devops/docker/pojo/ScanType.kt | 0 .../tencent/devops/docker/pojo/TaskBaseVO.kt | 0 .../tencent/devops/docker/pojo/TaskLogVO.kt | 0 .../docker/pojo/ToolConfigPlatformVO.kt | 0 .../devops/docker/pojo/ToolConstants.kt | 0 .../devops/docker/pojo/ToolMetaBaseVO.kt | 0 .../devops/docker/pojo/ToolMetaDetailVO.kt | 0 .../tencent/devops/docker/pojo/ToolOptions.kt | 0 .../devops/docker/scan/ToolOutputItem.kt | 0 .../com/tencent/devops/docker/scm/Scm.kt | 0 .../com/tencent/devops/docker/scm/ScmBlame.kt | 0 .../com/tencent/devops/docker/scm/ScmDiff.kt | 0 .../tencent/devops/docker/scm/ScmIncrement.kt | 0 .../com/tencent/devops/docker/scm/ScmInfo.kt | 0 .../devops/docker/scm/pojo/ScmDiffItem.kt | 0 .../devops/docker/scm/pojo/ScmDiffJson.kt | 0 .../docker/scm/pojo/ScmIncrementItem.kt | 0 .../docker/scm/pojo/ScmIncrementJson.kt | 0 .../docker/scm/pojo/ScmIncrementParam.kt | 0 .../devops/docker/scm/pojo/ScmInfoItem.kt | 0 .../devops/docker/scm/pojo/ScmInfoJson.kt | 0 .../devops/docker/scm/pojo/ScmInfoParam.kt | 0 .../tencent/devops/docker/tools/AESUtil.kt | 0 .../tencent/devops/docker/tools/FileUtil.kt | 0 .../tencent/devops/docker/tools/LogUtils.kt | 0 .../devops/docker/utils/CodeccConfig.kt | 0 .../tencent/devops/docker/utils/CodeccWeb.kt | 0 .../devops/docker/utils/CommonUtils.kt | 0 .../tencent/devops/docker/utils/YAMLParse.kt | 0 .../tencent/devops/pojo/BuildScriptType.kt | 0 .../com/tencent/devops/pojo/BuildType.kt | 0 .../devops/pojo/CodeccCheckAtomParam.kt | 0 .../devops/pojo/CodeccCheckAtomParamV2.kt | 0 .../devops/pojo/CodeccCheckAtomParamV3.kt | 0 .../devops/pojo/CodeccExecuteConfig.kt | 0 .../devops/pojo/CoverityProjectType.kt | 0 .../com/tencent/devops/pojo/CoverityResult.kt | 0 .../tencent/devops/pojo/LinuxCodeccConfig.kt | 0 .../devops/pojo/LinuxCodeccConstants.kt | 0 .../kotlin/com/tencent/devops/pojo/OSType.kt | 0 .../devops/pojo/OpenScanConfigParam.kt | 0 .../tencent/devops/pojo/ProjectLanguage.kt | 0 .../devops/pojo/WindowsCodeccConstants.kt | 0 .../kotlin/com/tencent/devops/pojo/env/Env.kt | 0 .../com/tencent/devops/pojo/env/LogMode.kt | 0 .../devops/pojo/env/ThirdPartyBuildInfo.kt | 0 .../exception/CodeccDependentException.kt | 0 .../devops/pojo/exception/CodeccException.kt | 0 .../exception/CodeccRepoServiceException.kt | 0 .../pojo/exception/CodeccTaskExecException.kt | 0 .../pojo/exception/CodeccTimeOutException.kt | 0 .../exception/CodeccUserConfigException.kt | 0 .../devops/pojo/process/BuildStatus.kt | 0 .../pojo/process/ElementAdditionalOptions.kt | 0 .../tencent/devops/pojo/process/IdValue.kt | 0 .../devops/pojo/process/NameAndValue.kt | 0 .../pojo/process/PipelineBuildTaskInfo.kt | 0 .../devops/pojo/repo/CodeGitRepository.kt | 0 .../devops/pojo/repo/CodeGitlabRepository.kt | 0 .../tencent/devops/pojo/repo/CodeSvnRegion.kt | 0 .../devops/pojo/repo/CodeSvnRepository.kt | 0 .../devops/pojo/repo/CodeTGitRepository.kt | 0 .../devops/pojo/repo/GithubRepository.kt | 0 .../tencent/devops/pojo/repo/RepoAuthType.kt | 0 .../tencent/devops/pojo/repo/Repository.kt | 0 .../devops/pojo/repo/RepositoryConfig.kt | 0 .../devops/pojo/repo/RepositoryType.kt | 0 .../devops/pojo/report/CodeccCallback.kt | 0 .../devops/pojo/report/ReportConstant.kt | 0 .../devops/pojo/report/TaskFailReportReq.kt | 0 .../tencent/devops/pojo/script/BuildEnv.kt | 0 .../devops/pojo/sdk/CodeYmlFilterPathVO.kt | 0 .../devops/pojo/sdk/FilterPathInput.kt | 0 .../tencent/devops/pojo/sdk/NotifyCustom.kt | 0 .../devops/pojo/sdk/ScanConfiguration.kt | 0 .../devops/pojo/ticket/CredentialInfo.kt | 0 .../devops/pojo/ticket/CredentialType.kt | 0 .../tencent/devops/pojo/ticket/DHKeyPair.kt | 0 .../tencent/devops/utils/CodeccConfigUtils.kt | 0 .../tencent/devops/utils/CodeccEnvHelper.kt | 0 .../devops/utils/CodeccExecuteHelper.kt | 0 .../tencent/devops/utils/CodeccInstaller.kt | 0 .../devops/utils/CodeccParamsHelper.kt | 0 .../tencent/devops/utils/CodeccRepoHelper.kt | 0 .../tencent/devops/utils/CodeccReportUtils.kt | 0 .../devops/utils/CodeccReportUtilsV2.kt | 0 .../tencent/devops/utils/CodeccScriptUtils.kt | 0 .../tencent/devops/utils/CodeccSdkUtils.kt | 0 .../com/tencent/devops/utils/CodeccUtils.kt | 0 .../com/tencent/devops/utils/CompressUtils.kt | 0 .../com/tencent/devops/utils/HashUtil.kt | 0 .../devops/utils/WindowsCodeccUtils.kt | 0 .../tencent/devops/utils/common/AgentEnv.kt | 0 .../tencent/devops/utils/common/AtomUtils.kt | 0 .../devops/utils/common/CredentialUtils.kt | 0 .../com/tencent/devops/utils/common/DHUtil.kt | 0 .../tencent/devops/utils/common/EnvUtils.kt | 0 .../devops/utils/common/RepositoryUtils.kt | 0 .../tencent/devops/utils/common/SvnUtil.kt | 0 .../common/ThirdPartyAgentBuildInfoUtils.kt | 0 .../devops/utils/script/BatScriptUtil.kt | 0 .../utils/script/CommandLineExecutor.kt | 0 .../devops/utils/script/CommandLineUtils.kt | 0 .../devops/utils/script/ScriptUtils.kt | 0 .../utils/script/SensitiveLineParser.kt | 0 .../tencent/devops/utils/script/ShellUtil.kt | 0 .../com/tencent/devops/v3/CodeccCheckAtom.kt | 0 .../com.tencent.bk.devops.atom.spi.TaskAtom | 0 .../core}/src/main/resources/chart-option.js | 0 .../src/main/resources/codecc-options.json | 0 .../core}/src/main/resources/config.json | 0 .../src/main/resources/config.properties | 0 .../core}/src/main/resources/index.css | 0 .../main/resources/lint-codecc-options.json | 0 .../core}/src/main/resources/test-report.json | 0 .../src/main/resources/test-report1.json | 0 .../kotlin/com/tencent/devops/MainTest.kt | 0 .../com/tencent/devops/ScmIncrementTest.kt | 0 .../test/kotlin/com/tencent/devops/ScmTest.kt | 0 .../backend/settings.gradle | 0 settings.xml => src/backend/settings.xml | 0 src/frontend/.babelrc | 23 + src/frontend/.gitignore | 19 + src/frontend/README.md | 1 + src/frontend/package.json | 50 ++ src/frontend/src/Atom.vue | 219 ++++++ src/frontend/src/components/Async.vue | 72 ++ .../src/components/AuthorTransfer.vue | 131 ++++ src/frontend/src/components/Basic.vue | 304 +++++++++ .../src/components/CodeccAccordion.vue | 165 +++++ src/frontend/src/components/ItemEdit.vue | 129 ++++ src/frontend/src/components/RadioGroup.vue | 61 ++ src/frontend/src/components/Report.vue | 113 ++++ src/frontend/src/components/RuleSetDialog.vue | 623 ++++++++++++++++++ src/frontend/src/components/RuleSetSelect.vue | 169 +++++ src/frontend/src/components/Scan.vue | 87 +++ src/frontend/src/components/Shield.vue | 69 ++ src/frontend/src/components/TaskSelect.vue | 176 +++++ src/frontend/src/components/WeekSelector.vue | 102 +++ src/frontend/src/css/conf.scss | 6 + src/frontend/src/data/LocalAtom.vue | 68 ++ src/frontend/src/data/PublicAtom.vue | 96 +++ src/frontend/src/data/task.json | 412 ++++++++++++ src/frontend/src/images/empty.png | Bin 0 -> 2717 bytes src/frontend/src/index.html | 18 + src/frontend/src/main.js | 44 ++ src/frontend/src/store/index.js | 118 ++++ src/frontend/src/utils/bus.js | 8 + src/frontend/src/utils/customRules.js | 74 +++ src/frontend/src/utils/request.js | 67 ++ src/frontend/src/utils/util.js | 22 + src/frontend/src/utils/validDictionary.js | 34 + src/frontend/webpack.config.js | 82 +++ 192 files changed, 3873 insertions(+) create mode 100644 src/backend/README.md rename build.gradle => src/backend/build.gradle (100%) rename {core => src/backend/core}/build.gradle (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/api/CodeccApi.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/api/CodeccReportApi.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/api/CredentialApi.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/api/RepositoryApi.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/api/SubBuild.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/api/SubReport.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/api/SubScan.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/api/SubScanComposer.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/api/SubSdkApi.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/docker/CommonSubBuild.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScan.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScanComposer.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/factory/SubProcessorFactory.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/utils/CommonSubReport.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/common/utils/CommonSubSdkApi.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/Build.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/DockerRun.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/LocalParam.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/Scan.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/ScanComposer.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/AnalyzeConfigInfo.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoInfoVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/CodeYaml.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/CommandParam.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/CommonVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/DefectsEntity.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/FileDefects.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/FileIndex.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/Gather.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/ImageParam.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/LandunParam.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/OpenCheckerVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/Result.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/ScanType.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/TaskBaseVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/TaskLogVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConfigPlatformVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConstants.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaBaseVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaDetailVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/pojo/ToolOptions.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scan/ToolOutputItem.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/Scm.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/ScmBlame.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/ScmDiff.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/ScmIncrement.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/ScmInfo.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffItem.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffJson.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementItem.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementJson.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementParam.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoItem.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoJson.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoParam.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/tools/AESUtil.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/tools/FileUtil.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/tools/LogUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/utils/CodeccConfig.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/utils/CommonUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/docker/utils/YAMLParse.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/BuildScriptType.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/BuildType.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParam.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV2.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV3.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/CodeccExecuteConfig.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/CoverityProjectType.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/CoverityResult.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConfig.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConstants.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/OSType.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/OpenScanConfigParam.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/ProjectLanguage.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/WindowsCodeccConstants.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/env/Env.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/env/LogMode.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/env/ThirdPartyBuildInfo.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccDependentException.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccException.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccRepoServiceException.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTaskExecException.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTimeOutException.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccUserConfigException.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/process/BuildStatus.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/process/ElementAdditionalOptions.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/process/IdValue.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/process/NameAndValue.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/process/PipelineBuildTaskInfo.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitRepository.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitlabRepository.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRegion.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRepository.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/CodeTGitRepository.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/GithubRepository.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/RepoAuthType.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/Repository.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryConfig.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryType.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/report/CodeccCallback.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/report/ReportConstant.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/report/TaskFailReportReq.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/script/BuildEnv.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/sdk/CodeYmlFilterPathVO.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/sdk/FilterPathInput.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/sdk/NotifyCustom.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/sdk/ScanConfiguration.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialInfo.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialType.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/pojo/ticket/DHKeyPair.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccConfigUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccEnvHelper.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccExecuteHelper.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccInstaller.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccParamsHelper.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtilsV2.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccScriptUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CodeccUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/CompressUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/HashUtil.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/WindowsCodeccUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/common/AgentEnv.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/common/CredentialUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/common/DHUtil.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/common/EnvUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/common/RepositoryUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/common/SvnUtil.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/common/ThirdPartyAgentBuildInfoUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/script/BatScriptUtil.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/script/CommandLineExecutor.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/script/CommandLineUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/script/ScriptUtils.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/script/SensitiveLineParser.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/utils/script/ShellUtil.kt (100%) rename {core => src/backend/core}/src/main/kotlin/com/tencent/devops/v3/CodeccCheckAtom.kt (100%) rename {core => src/backend/core}/src/main/resources/META-INF/services/com.tencent.bk.devops.atom.spi.TaskAtom (100%) rename {core => src/backend/core}/src/main/resources/chart-option.js (100%) rename {core => src/backend/core}/src/main/resources/codecc-options.json (100%) rename {core => src/backend/core}/src/main/resources/config.json (100%) rename {core => src/backend/core}/src/main/resources/config.properties (100%) rename {core => src/backend/core}/src/main/resources/index.css (100%) rename {core => src/backend/core}/src/main/resources/lint-codecc-options.json (100%) rename {core => src/backend/core}/src/main/resources/test-report.json (100%) rename {core => src/backend/core}/src/main/resources/test-report1.json (100%) rename {core => src/backend/core}/src/test/kotlin/com/tencent/devops/MainTest.kt (100%) rename {core => src/backend/core}/src/test/kotlin/com/tencent/devops/ScmIncrementTest.kt (100%) rename {core => src/backend/core}/src/test/kotlin/com/tencent/devops/ScmTest.kt (100%) rename settings.gradle => src/backend/settings.gradle (100%) rename settings.xml => src/backend/settings.xml (100%) create mode 100644 src/frontend/.babelrc create mode 100644 src/frontend/.gitignore create mode 100644 src/frontend/README.md create mode 100644 src/frontend/package.json create mode 100644 src/frontend/src/Atom.vue create mode 100644 src/frontend/src/components/Async.vue create mode 100644 src/frontend/src/components/AuthorTransfer.vue create mode 100644 src/frontend/src/components/Basic.vue create mode 100644 src/frontend/src/components/CodeccAccordion.vue create mode 100644 src/frontend/src/components/ItemEdit.vue create mode 100644 src/frontend/src/components/RadioGroup.vue create mode 100644 src/frontend/src/components/Report.vue create mode 100644 src/frontend/src/components/RuleSetDialog.vue create mode 100644 src/frontend/src/components/RuleSetSelect.vue create mode 100644 src/frontend/src/components/Scan.vue create mode 100644 src/frontend/src/components/Shield.vue create mode 100644 src/frontend/src/components/TaskSelect.vue create mode 100644 src/frontend/src/components/WeekSelector.vue create mode 100644 src/frontend/src/css/conf.scss create mode 100644 src/frontend/src/data/LocalAtom.vue create mode 100644 src/frontend/src/data/PublicAtom.vue create mode 100644 src/frontend/src/data/task.json create mode 100644 src/frontend/src/images/empty.png create mode 100644 src/frontend/src/index.html create mode 100644 src/frontend/src/main.js create mode 100644 src/frontend/src/store/index.js create mode 100644 src/frontend/src/utils/bus.js create mode 100644 src/frontend/src/utils/customRules.js create mode 100644 src/frontend/src/utils/request.js create mode 100644 src/frontend/src/utils/util.js create mode 100644 src/frontend/src/utils/validDictionary.js create mode 100644 src/frontend/webpack.config.js diff --git a/src/backend/README.md b/src/backend/README.md new file mode 100644 index 0000000..6af1e6a --- /dev/null +++ b/src/backend/README.md @@ -0,0 +1,311 @@ +# 使用java开发插件示例 + +可以按照如下步骤一一开发插件,修改配置后体验插件开发流程 +示例插件代码库地址: + +### Step 1. 登录蓝盾插件市场-插件工作台初始化插件 + +- [点此登录插件工作台]() +- 新增插件时,系统将自动创建代码库并将样例工程添加至你的代码库中,可在插件概览页面复制代码库链接 + + + +### Step 2. 引入项目所需的jar包 + +- 将maven的setting.xml的配置改为蓝鲸提供的,配置文件内容如下: + +``` + + + + + + + bk_mirror + + true + + + + bk_mirror + + + + + + bk_mirror + + + + + + + + bk_mirror + + +``` + + + +- java-atom-sdk为官方提供的sdk包,初始化版本为1.0.0(详见:[java版插件开发sdk]()) +- sdk-dependencies为官方提供的sdk依赖的包,初始化版本为1.0.0 + + + +``` + + + 4.0.0 + + + com.tencent.bk.devops.atom + sdk-dependencies + 1.0.0 + + + atomDemoJava + 1.0.0 + + + + 1.0.0 + 1.8 + ${java.version} + ${java.version} + + UTF-8 + + + + + + com.tencent.bk.devops.atom + java-atom-sdk + ${sdk.version} + + + junit + junit + 4.12 + + + + + ${project.name} + + + org.apache.maven.plugins + maven-assembly-plugin + + + + + +``` + + + +### Step 3. 修改代码库根目录下的pom.xml文件 + +- 将artifactId节点的ATOM_CODE替换为你的插件标识名称(初始化插件时填写的英文标识) +- 将java.version节点的内容替换为你插件所需要的sdk版本(详见:[java版插件开发sdk]()) + +``` + + + 4.0.0 + + + com.tencent.bk.devops.atom + sdk-dependencies + 1.0.0 + + + ATOM_CODE + 1.0.0 + + + + 1.0.0 + 1.8 + ${java.version} + ${java.version} + + UTF-8 + + + + + + com.tencent.bk.devops.atom + java-atom-sdk + ${sdk.version} + + + junit + junit + 4.12 + + + + + ${project.name} + + + org.apache.maven.plugins + maven-assembly-plugin + + + + + +``` + + + + + + + +### Step 4. 代码库根目录下添加蓝盾插件配置文件:task.json + +task.jaon配置规则详见:[插件开发规范]() + +task.json简单示例如下: + +- 必填项: + +1. 修改atomCode为你的插件标识名称(初始化插件时填写的英文标识) +2. 修改执行配置execution.target为你的插件启动命令 +3. 修改输入输出字段定义 + +- 非必填项: + +1. 若调起执行前需安装依赖则无需填写执行配置execution.demands + +``` +{ + "atomCode": "ATOM_CODE, + "execution": { + "language": "java", + "minimumVersion": "1.8", + "demands": [], + "target": "java -jar ATOM_CODE-jar-with-dependencies.jar" + }, + "input": { + "desc": { + "label": "描述", + "default": "", + "placeholder": "请输入描述信息", + "type": "vuex-input", + "desc": "描述", + "required": true, + "disabled": false, + "hidden": false, + "isSensitive": false + } + }, + "output": { + "testResult": { + "description": "升级是否成功", + "type": "string", + "isSensitive": false + } + } +} +``` + + + +### Step 5. 定义继承sdk包中的AtomBaseParam插件基本参数类的插件参数类 + +- 参数类需统一加上lombok框架的@Data注解(IDE开发工具需安装lombok插件),参数类定义的参数类型统一为String格式 + +``` +@Data +@EqualsAndHashCode(callSuper = true) +public class AtomParam extends AtomBaseParam { + /** + * 以下请求参数只是示例,具体可以删除修改成你要的参数 + */ + private String desc; //描述信息 +} +``` + + + +### Step 6. 定义实现sdk包中的TaskAtom接口的插件任务类 + +- 插件任务类必须实现sdk包中的TaskAtom接口 +- 插件任务类必须加上“@AtomService(paramClass = AtomParam.class)”注解才能被sdk识别和执行(paramClass对应的值为定义的参数类文件名) + +``` +@AtomService(paramClass = AtomParam.class) +public class DemoAtom implements TaskAtom { + + private final static Logger logger = LoggerFactory.getLogger(DemoAtom.class); + + /** + * 执行主入口 + * @param atomContext 插件上下文 + */ + @Override + public void execute(AtomContext atomContext) { + // 1.1 拿到请求参数 + AtomParam param = atomContext.getParam(); + logger.info("the param is :{}", JsonUtil.toJson(param)); + // 1.2 拿到初始化好的返回结果对象 + AtomResult result = atomContext.getResult(); + // 2. 校验参数失败直接返回 + checkParam(param, result); + if (result.getStatus() != Status.success) { + return; + } + // 3. 模拟处理插件业务逻辑 + logger.info("the desc is :{}", param.getDesc()); //打印描述信息 + // 4. 输出参数,如果有的话 + // 输出参数是一个Map,Key是参数名, value是值对象 + Map data = result.getData(); + // 假设这个是输出参数的内容 + StringData testResult = new StringData("hello"); + // 设置一个名称为testResult的出参 + data.put("testResult", testResult); + logger.info("the testResult is :{}", JsonUtil.toJson(testResult)); + // 结束。 + } + + /** + * 检查参数 + * @param param 请求参数 + * @param result 结果 + */ + private void checkParam(AtomParam param, AtomResult result) { + // 参数检查 + if (StringUtils.isBlank(param.getDesc())) { + result.setStatus(Status.failure);// 状态设置为失败 + result.setMessage("描述不能为空!"); // 失败信息回传给插件执行框架会打印出结果 + } + + /* + 其他比如判空等要自己业务检测处理,否则后面执行可能会抛出异常,状态将会是 Status.error + 这种属于插件处理不到位,算是bug行为,需要插件的开发去定位 + */ + } + +} +``` + + + +### Step 7. 配置TaskAtom接口的spi实现类 + +1. 在 src/main/resources/ 下建立 /META-INF/services 目录, 新增一个以接口命名的文件 com.tencent.bk.devops.atom.spi.TaskAtom +2. 文件里面的内容是定义的实现spi接口的插件任务类,如:com.tencent.bk.devops.atom.task.DemoAtom + diff --git a/build.gradle b/src/backend/build.gradle similarity index 100% rename from build.gradle rename to src/backend/build.gradle diff --git a/core/build.gradle b/src/backend/core/build.gradle similarity index 100% rename from core/build.gradle rename to src/backend/core/build.gradle diff --git a/core/src/main/kotlin/com/tencent/devops/api/CodeccApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccApi.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/api/CodeccApi.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccApi.kt diff --git a/core/src/main/kotlin/com/tencent/devops/api/CodeccReportApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccReportApi.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/api/CodeccReportApi.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccReportApi.kt diff --git a/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt diff --git a/core/src/main/kotlin/com/tencent/devops/api/CredentialApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CredentialApi.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/api/CredentialApi.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/api/CredentialApi.kt diff --git a/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt diff --git a/core/src/main/kotlin/com/tencent/devops/api/RepositoryApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/RepositoryApi.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/api/RepositoryApi.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/api/RepositoryApi.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/api/SubBuild.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubBuild.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/api/SubBuild.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubBuild.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/api/SubReport.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubReport.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/api/SubReport.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubReport.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/api/SubScan.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubScan.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/api/SubScan.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubScan.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/api/SubScanComposer.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubScanComposer.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/api/SubScanComposer.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubScanComposer.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/api/SubSdkApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubSdkApi.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/api/SubSdkApi.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/api/SubSdkApi.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubBuild.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubBuild.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubBuild.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubBuild.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScan.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScan.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScan.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScan.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScanComposer.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScanComposer.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScanComposer.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/docker/CommonSubScanComposer.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/factory/SubProcessorFactory.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/factory/SubProcessorFactory.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/factory/SubProcessorFactory.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/factory/SubProcessorFactory.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/utils/CommonSubReport.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/utils/CommonSubReport.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/utils/CommonSubReport.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/utils/CommonSubReport.kt diff --git a/core/src/main/kotlin/com/tencent/devops/common/utils/CommonSubSdkApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/common/utils/CommonSubSdkApi.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/common/utils/CommonSubSdkApi.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/common/utils/CommonSubSdkApi.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/Build.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Build.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/Build.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/Build.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/DockerRun.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/DockerRun.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/DockerRun.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/DockerRun.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/LocalParam.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/LocalParam.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/LocalParam.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/LocalParam.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/Scan.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/ScanComposer.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/ScanComposer.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/ScanComposer.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/ScanComposer.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/AnalyzeConfigInfo.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/AnalyzeConfigInfo.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/AnalyzeConfigInfo.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/AnalyzeConfigInfo.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoInfoVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoInfoVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoInfoVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoInfoVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeRepoVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeYaml.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeYaml.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeYaml.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CodeYaml.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/CommandParam.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CommandParam.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/CommandParam.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CommandParam.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/CommonVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CommonVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/CommonVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/CommonVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/DefectsEntity.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/DefectsEntity.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/DefectsEntity.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/DefectsEntity.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/FileDefects.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/FileDefects.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/FileDefects.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/FileDefects.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/FileIndex.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/FileIndex.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/FileIndex.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/FileIndex.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/Gather.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/Gather.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/Gather.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/Gather.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/ImageParam.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ImageParam.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/ImageParam.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ImageParam.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/LandunParam.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/LandunParam.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/LandunParam.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/LandunParam.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/OpenCheckerVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/OpenCheckerVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/OpenCheckerVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/OpenCheckerVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/Result.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/Result.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/Result.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/Result.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/ScanType.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ScanType.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/ScanType.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ScanType.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/TaskBaseVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/TaskBaseVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/TaskBaseVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/TaskBaseVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/TaskLogVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/TaskLogVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/TaskLogVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/TaskLogVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConfigPlatformVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConfigPlatformVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConfigPlatformVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConfigPlatformVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConstants.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConstants.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConstants.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolConstants.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaBaseVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaBaseVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaBaseVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaBaseVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaDetailVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaDetailVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaDetailVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolMetaDetailVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolOptions.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolOptions.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolOptions.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/ToolOptions.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scan/ToolOutputItem.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scan/ToolOutputItem.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scan/ToolOutputItem.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scan/ToolOutputItem.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/Scm.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/Scm.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/Scm.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/Scm.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmBlame.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmBlame.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/ScmBlame.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmBlame.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmDiff.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmDiff.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/ScmDiff.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmDiff.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmIncrement.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmIncrement.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/ScmIncrement.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmIncrement.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmInfo.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmInfo.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/ScmInfo.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmInfo.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffItem.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffItem.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffItem.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffItem.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffJson.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffJson.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffJson.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmDiffJson.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementItem.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementItem.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementItem.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementItem.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementJson.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementJson.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementJson.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementJson.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementParam.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementParam.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementParam.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmIncrementParam.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoItem.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoItem.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoItem.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoItem.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoJson.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoJson.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoJson.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoJson.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoParam.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoParam.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoParam.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/pojo/ScmInfoParam.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/tools/AESUtil.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/tools/AESUtil.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/tools/AESUtil.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/tools/AESUtil.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/tools/FileUtil.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/tools/FileUtil.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/tools/FileUtil.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/tools/FileUtil.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/tools/LogUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/tools/LogUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/tools/LogUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/tools/LogUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccConfig.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccConfig.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccConfig.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccConfig.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/utils/CommonUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CommonUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/utils/CommonUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CommonUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/docker/utils/YAMLParse.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/YAMLParse.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/docker/utils/YAMLParse.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/YAMLParse.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/BuildScriptType.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/BuildScriptType.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/BuildScriptType.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/BuildScriptType.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/BuildType.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/BuildType.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/BuildType.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/BuildType.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParam.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParam.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParam.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParam.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV2.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV2.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV2.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV2.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV3.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV3.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV3.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccCheckAtomParamV3.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/CodeccExecuteConfig.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccExecuteConfig.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/CodeccExecuteConfig.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccExecuteConfig.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/CoverityProjectType.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CoverityProjectType.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/CoverityProjectType.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CoverityProjectType.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/CoverityResult.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CoverityResult.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/CoverityResult.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CoverityResult.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConfig.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConfig.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConfig.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConfig.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConstants.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConstants.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConstants.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/LinuxCodeccConstants.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/OSType.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/OSType.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/OSType.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/OSType.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/OpenScanConfigParam.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/OpenScanConfigParam.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/OpenScanConfigParam.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/OpenScanConfigParam.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/ProjectLanguage.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/ProjectLanguage.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/ProjectLanguage.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/ProjectLanguage.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/WindowsCodeccConstants.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/WindowsCodeccConstants.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/WindowsCodeccConstants.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/WindowsCodeccConstants.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/env/Env.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/env/Env.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/env/Env.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/env/Env.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/env/LogMode.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/env/LogMode.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/env/LogMode.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/env/LogMode.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/env/ThirdPartyBuildInfo.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/env/ThirdPartyBuildInfo.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/env/ThirdPartyBuildInfo.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/env/ThirdPartyBuildInfo.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccDependentException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccDependentException.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccDependentException.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccDependentException.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccException.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccException.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccException.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccRepoServiceException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccRepoServiceException.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccRepoServiceException.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccRepoServiceException.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTaskExecException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTaskExecException.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTaskExecException.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTaskExecException.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTimeOutException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTimeOutException.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTimeOutException.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTimeOutException.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccUserConfigException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccUserConfigException.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccUserConfigException.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccUserConfigException.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/process/BuildStatus.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/BuildStatus.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/process/BuildStatus.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/BuildStatus.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/process/ElementAdditionalOptions.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/ElementAdditionalOptions.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/process/ElementAdditionalOptions.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/ElementAdditionalOptions.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/process/IdValue.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/IdValue.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/process/IdValue.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/IdValue.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/process/NameAndValue.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/NameAndValue.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/process/NameAndValue.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/NameAndValue.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/process/PipelineBuildTaskInfo.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/PipelineBuildTaskInfo.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/process/PipelineBuildTaskInfo.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/process/PipelineBuildTaskInfo.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitRepository.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitRepository.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitRepository.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitRepository.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitlabRepository.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitlabRepository.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitlabRepository.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeGitlabRepository.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRegion.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRegion.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRegion.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRegion.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRepository.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRepository.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRepository.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeSvnRepository.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeTGitRepository.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeTGitRepository.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeTGitRepository.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/CodeTGitRepository.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/GithubRepository.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/GithubRepository.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/GithubRepository.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/GithubRepository.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepoAuthType.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepoAuthType.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/RepoAuthType.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepoAuthType.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/Repository.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/Repository.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/Repository.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/Repository.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryConfig.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryConfig.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryConfig.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryConfig.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryType.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryType.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryType.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryType.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/report/CodeccCallback.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/report/CodeccCallback.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/report/CodeccCallback.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/report/CodeccCallback.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/report/ReportConstant.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/report/ReportConstant.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/report/ReportConstant.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/report/ReportConstant.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/report/TaskFailReportReq.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/report/TaskFailReportReq.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/report/TaskFailReportReq.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/report/TaskFailReportReq.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/script/BuildEnv.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/script/BuildEnv.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/script/BuildEnv.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/script/BuildEnv.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/sdk/CodeYmlFilterPathVO.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/sdk/CodeYmlFilterPathVO.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/sdk/CodeYmlFilterPathVO.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/sdk/CodeYmlFilterPathVO.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/sdk/FilterPathInput.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/sdk/FilterPathInput.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/sdk/FilterPathInput.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/sdk/FilterPathInput.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/sdk/NotifyCustom.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/sdk/NotifyCustom.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/sdk/NotifyCustom.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/sdk/NotifyCustom.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/sdk/ScanConfiguration.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/sdk/ScanConfiguration.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/sdk/ScanConfiguration.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/sdk/ScanConfiguration.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialInfo.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialInfo.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialInfo.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialInfo.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialType.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialType.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialType.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/ticket/CredentialType.kt diff --git a/core/src/main/kotlin/com/tencent/devops/pojo/ticket/DHKeyPair.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/ticket/DHKeyPair.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/pojo/ticket/DHKeyPair.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/pojo/ticket/DHKeyPair.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccConfigUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccConfigUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccConfigUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccConfigUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccEnvHelper.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccEnvHelper.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccEnvHelper.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccEnvHelper.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccExecuteHelper.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccExecuteHelper.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccExecuteHelper.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccExecuteHelper.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccInstaller.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccInstaller.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccInstaller.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccInstaller.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccParamsHelper.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccParamsHelper.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccParamsHelper.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccParamsHelper.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtilsV2.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtilsV2.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtilsV2.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtilsV2.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccScriptUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccScriptUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccScriptUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccScriptUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CodeccUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CompressUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CompressUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/CompressUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/CompressUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/HashUtil.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/HashUtil.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/HashUtil.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/HashUtil.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/WindowsCodeccUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/WindowsCodeccUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/WindowsCodeccUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/WindowsCodeccUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/common/AgentEnv.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AgentEnv.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/common/AgentEnv.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AgentEnv.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/common/CredentialUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/CredentialUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/common/CredentialUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/CredentialUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/common/DHUtil.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/DHUtil.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/common/DHUtil.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/DHUtil.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/common/EnvUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/EnvUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/common/EnvUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/EnvUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/common/RepositoryUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/RepositoryUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/common/RepositoryUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/RepositoryUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/common/SvnUtil.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/SvnUtil.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/common/SvnUtil.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/SvnUtil.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/common/ThirdPartyAgentBuildInfoUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/ThirdPartyAgentBuildInfoUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/common/ThirdPartyAgentBuildInfoUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/ThirdPartyAgentBuildInfoUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/script/BatScriptUtil.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/BatScriptUtil.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/script/BatScriptUtil.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/BatScriptUtil.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/script/CommandLineExecutor.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/CommandLineExecutor.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/script/CommandLineExecutor.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/CommandLineExecutor.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/script/CommandLineUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/CommandLineUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/script/CommandLineUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/CommandLineUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/script/ScriptUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/ScriptUtils.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/script/ScriptUtils.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/ScriptUtils.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/script/SensitiveLineParser.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/SensitiveLineParser.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/script/SensitiveLineParser.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/SensitiveLineParser.kt diff --git a/core/src/main/kotlin/com/tencent/devops/utils/script/ShellUtil.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/ShellUtil.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/utils/script/ShellUtil.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/utils/script/ShellUtil.kt diff --git a/core/src/main/kotlin/com/tencent/devops/v3/CodeccCheckAtom.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/v3/CodeccCheckAtom.kt similarity index 100% rename from core/src/main/kotlin/com/tencent/devops/v3/CodeccCheckAtom.kt rename to src/backend/core/src/main/kotlin/com/tencent/devops/v3/CodeccCheckAtom.kt diff --git a/core/src/main/resources/META-INF/services/com.tencent.bk.devops.atom.spi.TaskAtom b/src/backend/core/src/main/resources/META-INF/services/com.tencent.bk.devops.atom.spi.TaskAtom similarity index 100% rename from core/src/main/resources/META-INF/services/com.tencent.bk.devops.atom.spi.TaskAtom rename to src/backend/core/src/main/resources/META-INF/services/com.tencent.bk.devops.atom.spi.TaskAtom diff --git a/core/src/main/resources/chart-option.js b/src/backend/core/src/main/resources/chart-option.js similarity index 100% rename from core/src/main/resources/chart-option.js rename to src/backend/core/src/main/resources/chart-option.js diff --git a/core/src/main/resources/codecc-options.json b/src/backend/core/src/main/resources/codecc-options.json similarity index 100% rename from core/src/main/resources/codecc-options.json rename to src/backend/core/src/main/resources/codecc-options.json diff --git a/core/src/main/resources/config.json b/src/backend/core/src/main/resources/config.json similarity index 100% rename from core/src/main/resources/config.json rename to src/backend/core/src/main/resources/config.json diff --git a/core/src/main/resources/config.properties b/src/backend/core/src/main/resources/config.properties similarity index 100% rename from core/src/main/resources/config.properties rename to src/backend/core/src/main/resources/config.properties diff --git a/core/src/main/resources/index.css b/src/backend/core/src/main/resources/index.css similarity index 100% rename from core/src/main/resources/index.css rename to src/backend/core/src/main/resources/index.css diff --git a/core/src/main/resources/lint-codecc-options.json b/src/backend/core/src/main/resources/lint-codecc-options.json similarity index 100% rename from core/src/main/resources/lint-codecc-options.json rename to src/backend/core/src/main/resources/lint-codecc-options.json diff --git a/core/src/main/resources/test-report.json b/src/backend/core/src/main/resources/test-report.json similarity index 100% rename from core/src/main/resources/test-report.json rename to src/backend/core/src/main/resources/test-report.json diff --git a/core/src/main/resources/test-report1.json b/src/backend/core/src/main/resources/test-report1.json similarity index 100% rename from core/src/main/resources/test-report1.json rename to src/backend/core/src/main/resources/test-report1.json diff --git a/core/src/test/kotlin/com/tencent/devops/MainTest.kt b/src/backend/core/src/test/kotlin/com/tencent/devops/MainTest.kt similarity index 100% rename from core/src/test/kotlin/com/tencent/devops/MainTest.kt rename to src/backend/core/src/test/kotlin/com/tencent/devops/MainTest.kt diff --git a/core/src/test/kotlin/com/tencent/devops/ScmIncrementTest.kt b/src/backend/core/src/test/kotlin/com/tencent/devops/ScmIncrementTest.kt similarity index 100% rename from core/src/test/kotlin/com/tencent/devops/ScmIncrementTest.kt rename to src/backend/core/src/test/kotlin/com/tencent/devops/ScmIncrementTest.kt diff --git a/core/src/test/kotlin/com/tencent/devops/ScmTest.kt b/src/backend/core/src/test/kotlin/com/tencent/devops/ScmTest.kt similarity index 100% rename from core/src/test/kotlin/com/tencent/devops/ScmTest.kt rename to src/backend/core/src/test/kotlin/com/tencent/devops/ScmTest.kt diff --git a/settings.gradle b/src/backend/settings.gradle similarity index 100% rename from settings.gradle rename to src/backend/settings.gradle diff --git a/settings.xml b/src/backend/settings.xml similarity index 100% rename from settings.xml rename to src/backend/settings.xml diff --git a/src/frontend/.babelrc b/src/frontend/.babelrc new file mode 100644 index 0000000..8c66f4c --- /dev/null +++ b/src/frontend/.babelrc @@ -0,0 +1,23 @@ +{ + "presets": [ + [ + "env", + { + "modules": "commonjs", + "targets": { + "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] + }, + "debug": false, + "useBuiltIns": true + } + ], + "stage-2" + ], + "plugins": ["transform-runtime", "transform-object-assign", "lodash", "syntax-dynamic-import", "transform-vue-jsx"], + "env": { + "test": { + "presets": ["env", "stage-2"], + "plugins": ["istanbul"] + } + } +} \ No newline at end of file diff --git a/src/frontend/.gitignore b/src/frontend/.gitignore new file mode 100644 index 0000000..f86b1c8 --- /dev/null +++ b/src/frontend/.gitignore @@ -0,0 +1,19 @@ +.DS_Store +node_modules/ +webpack_cache/ +dist/ +yarn-debug.log* +yarn-error.log* +yarn.lock +test/unit/coverage +*.bak* +.vscode/ +commitInfo.js +package-lock.json + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln diff --git a/src/frontend/README.md b/src/frontend/README.md new file mode 100644 index 0000000..bf896fb --- /dev/null +++ b/src/frontend/README.md @@ -0,0 +1 @@ +# devops-remote-atom diff --git a/src/frontend/package.json b/src/frontend/package.json new file mode 100644 index 0000000..5caae75 --- /dev/null +++ b/src/frontend/package.json @@ -0,0 +1,50 @@ +{ + "name": "devops-atom-remote", + "version": "1.0.0", + "description": "working at pipeline of bkci", + "author": "bkci", + "scripts": { + "dev": "webpack-dev-server --mode development --progress --env.name=dev", + "public": "rimraf dist && webpack --mode production" + }, + "dependencies": { + "bk-magic-vue": "^2.2.4", + "bkci-atom-components": "^1.0.0", + "axios": "^0.16.2", + "vee-validate": "^2.0.3", + "vue": "^2.6.10", + "vue-router": "^2.8.1", + "vuex": "^2.4.0" + }, + "devDependencies": { + "babel-core": "^6.26.3", + "babel-loader": "^7.1.4", + "babel-plugin-istanbul": "^4.1.6", + "babel-plugin-lodash": "^3.3.2", + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "babel-plugin-transform-object-assign": "^6.22.0", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-plugin-transform-vue-jsx": "^3.5.1", + "babel-preset-env": "^1.6.1", + "babel-preset-stage-2": "^6.24.1", + "css-loader": "^0.28.11", + "html-webpack-plugin": "^3.2.0", + "node-sass": "^4.9.4", + "rimraf": "^3.0.2", + "sass-loader": "^6.0.7", + "style-loader": "^1.0.0", + "url-loader": "^1.1.2", + "vue-loader": "^15.0.9", + "vue-template-compiler": "^2.5.16", + "webpack": "^4.8.1", + "webpack-bundle-analyzer": "^2.11.1", + "webpack-cli": "^3.1.1", + "webpack-dev-server": "^3.1.10" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 8" + ] +} diff --git a/src/frontend/src/Atom.vue b/src/frontend/src/Atom.vue new file mode 100644 index 0000000..0c1a678 --- /dev/null +++ b/src/frontend/src/Atom.vue @@ -0,0 +1,219 @@ + + + + + + \ No newline at end of file diff --git a/src/frontend/src/components/Async.vue b/src/frontend/src/components/Async.vue new file mode 100644 index 0000000..3751fd7 --- /dev/null +++ b/src/frontend/src/components/Async.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/src/frontend/src/components/AuthorTransfer.vue b/src/frontend/src/components/AuthorTransfer.vue new file mode 100644 index 0000000..a5ab45a --- /dev/null +++ b/src/frontend/src/components/AuthorTransfer.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/src/frontend/src/components/Basic.vue b/src/frontend/src/components/Basic.vue new file mode 100644 index 0000000..9c2f9ed --- /dev/null +++ b/src/frontend/src/components/Basic.vue @@ -0,0 +1,304 @@ + + + + + diff --git a/src/frontend/src/components/CodeccAccordion.vue b/src/frontend/src/components/CodeccAccordion.vue new file mode 100644 index 0000000..1ae6ce5 --- /dev/null +++ b/src/frontend/src/components/CodeccAccordion.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/src/frontend/src/components/ItemEdit.vue b/src/frontend/src/components/ItemEdit.vue new file mode 100644 index 0000000..dc73c76 --- /dev/null +++ b/src/frontend/src/components/ItemEdit.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/src/frontend/src/components/RadioGroup.vue b/src/frontend/src/components/RadioGroup.vue new file mode 100644 index 0000000..3ad4374 --- /dev/null +++ b/src/frontend/src/components/RadioGroup.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/frontend/src/components/Report.vue b/src/frontend/src/components/Report.vue new file mode 100644 index 0000000..f9ec318 --- /dev/null +++ b/src/frontend/src/components/Report.vue @@ -0,0 +1,113 @@ + + + + + \ No newline at end of file diff --git a/src/frontend/src/components/RuleSetDialog.vue b/src/frontend/src/components/RuleSetDialog.vue new file mode 100644 index 0000000..74a057a --- /dev/null +++ b/src/frontend/src/components/RuleSetDialog.vue @@ -0,0 +1,623 @@ + + + + diff --git a/src/frontend/src/components/RuleSetSelect.vue b/src/frontend/src/components/RuleSetSelect.vue new file mode 100644 index 0000000..0627519 --- /dev/null +++ b/src/frontend/src/components/RuleSetSelect.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/src/frontend/src/components/Scan.vue b/src/frontend/src/components/Scan.vue new file mode 100644 index 0000000..928b2db --- /dev/null +++ b/src/frontend/src/components/Scan.vue @@ -0,0 +1,87 @@ + + + \ No newline at end of file diff --git a/src/frontend/src/components/Shield.vue b/src/frontend/src/components/Shield.vue new file mode 100644 index 0000000..32ee987 --- /dev/null +++ b/src/frontend/src/components/Shield.vue @@ -0,0 +1,69 @@ + + + \ No newline at end of file diff --git a/src/frontend/src/components/TaskSelect.vue b/src/frontend/src/components/TaskSelect.vue new file mode 100644 index 0000000..b0d9137 --- /dev/null +++ b/src/frontend/src/components/TaskSelect.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/src/frontend/src/components/WeekSelector.vue b/src/frontend/src/components/WeekSelector.vue new file mode 100644 index 0000000..bee16df --- /dev/null +++ b/src/frontend/src/components/WeekSelector.vue @@ -0,0 +1,102 @@ + + + + + \ No newline at end of file diff --git a/src/frontend/src/css/conf.scss b/src/frontend/src/css/conf.scss new file mode 100644 index 0000000..bf96737 --- /dev/null +++ b/src/frontend/src/css/conf.scss @@ -0,0 +1,6 @@ +.remote-atom { + font-size: 12px; + .bk-label, .bk-checkbox-text, .bk-radio-text, .bk-tab-label { + font-size: 12px !important; + } +} \ No newline at end of file diff --git a/src/frontend/src/data/LocalAtom.vue b/src/frontend/src/data/LocalAtom.vue new file mode 100644 index 0000000..95608c8 --- /dev/null +++ b/src/frontend/src/data/LocalAtom.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/src/frontend/src/data/PublicAtom.vue b/src/frontend/src/data/PublicAtom.vue new file mode 100644 index 0000000..6b5e399 --- /dev/null +++ b/src/frontend/src/data/PublicAtom.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/src/frontend/src/data/task.json b/src/frontend/src/data/task.json new file mode 100644 index 0000000..c30d7c5 --- /dev/null +++ b/src/frontend/src/data/task.json @@ -0,0 +1,412 @@ +{ + "input": { + "languages": { + "rule": {}, + "type": "atom-checkbox-list", + "required": true, + "label": "工程语言", + "list": [], + "default": [], + "desc": "不同代码语言,可选择相匹配的工具", + "tabName": "basic" + }, + "tools": { + "rule": {}, + "required": true, + "hidden": true, + "type": "atom-checkbox-list", + "label": "代码检查工具", + "list": [], + "default": [], + "tabName": "basic" + }, + "asyncTask": { + "rule": {}, + "type": "enum-input", + "label": "执行方式", + "list": [ + { + "value": false, + "label": "同步" + }, + { + "value": true, + "label": "异步" + } + ], + "default": false, + "desc": "", + "tabName": "main", + "inline": true + }, + "asyncTaskId": { + "rule": { + "asyncTaskRequired": true + }, + "type": "task-select", + "label": "任务", + "required": true, + "tabName": "async", + "inline": true, + "list": {}, + "default": "", + "rely": {}, + "desc": "可选择CodeCC服务中自建任务,也可以直接输入任务ID。ID可从CodeCC链接中获取到,例如/codecc/myproj/task/25324/中的数字。支持流水线变量。" + }, + "goPath": { + "rule": {}, + "type": "vuex-input", + "label": "GOPATH", + "default": "", + "required": false, + "desc": "可帮助工具查找依赖库代码路径,更好地扫描告警", + "placeholder": "${WORKSPACE}下相对路径,多路径请用英文逗号分割,支持使用流水线变量", + "tabName": "basic", + "inline": true, + "rely": { + "operation": "AND", + "expression": [ + { + "key": "tools", + "value": "GOML" + } + ] + } + }, + "pyVersion": { + "rule": {}, + "type": "enum-input", + "label": "Python版本", + "required": true, + "list": [ + { + "label": "Python2", + "value": "py2" + }, + { + "label": "Python3", + "value": "py3" + } + ], + "default": "py3", + "tabName": "basic", + "inline": true, + "rely": { + "operation": "AND", + "expression": [ + { + "key": "tools", + "value": "PYLINT" + } + ] + } + }, + "scriptType": { + "rule": {}, + "type": "enum-input", + "label": "脚本类型", + "required": true, + "hidden": false, + "list": [ + { + "id": "sh", + "value": "SHELL", + "label": "Shell" + } + ], + "default": "SHELL", + "tabName": "basic", + "lang": "sh", + "inline": true + }, + "script": { + "rule": { + "scriptRequired": true + }, + "label": "脚本内容", + "hidden": false, + "default": "# Coverity/Klocwork将通过调用编译脚本来编译您的代码,以追踪深层次的缺陷\n# 请使用依赖的构建工具如maven/cmake等写一个编译脚本build.sh\n# 确保build.sh能够编译代码\n# cd path/to/build.sh\n# sh build.sh", + "required": true, + "type": "atom-ace-editor", + "desc": "相应工具将使用该脚本编译代码,以便追踪编译过程,发现代码缺陷", + "tabName": "basic" + }, + "languageRuleSetMap": { + "hidden": true, + "default": {} + }, + "C_CPP_RULE": { + "rule": { + "ruleSetRequired": true + }, + "type": "rule-set-select", + "label": "C/C++", + "required": true, + "tabName": "basic", + "inline": true, + "list": {}, + "default": [], + "rely": { + "operation": "AND", + "expression": [ + { + "key": "languages", + "value": "C_CPP" + } + ] + } + }, + "rtxReceiverType": { + "type": "selector", + "label": "接收人", + "default": "0", + "options": [ + { + "id": "0", + "name": "所有人员" + }, + { + "id": "1", + "name": "仅管理员" + }, + { + "id": "2", + "name": "自定义" + }, + { + "id": "3", + "name": "无(不发送)" + } + ], + "inline": true + }, + "rtxReceiverList": { + "type": "user-input", + "label": "自定义接收人", + "default": [], + "rely": { + "operation": "AND", + "expression": [ + { + "key": "rtxReceiverType", + "value": "2" + } + ] + }, + "inline": true + }, + "botWebhookUrl": { + "label": "Webhook地址", + "placeholder": "代码检查完成后推送Coverity、Klocwork遗留告警数至群中", + "type": "vuex-input", + "default": "", + "inline": true + }, + "botContent": { + "label": "通知内容" + }, + "botRemindRange": { + "type": "enum-input", + "default": "1", + "label": "告警", + "list": [ + { + "value": "1", + "label": "新增" + }, + { + "value": "2", + "label": "遗留" + } + ], + "innerTab": true, + "inline": true + }, + "botRemindSeverity": { + "type": "selector", + "default": "7", + "options": [ + { + "id": "7", + "name": "总告警数" + }, + { + "id": "3", + "name": "严重 + 一般告警数" + }, + { + "id": "1", + "name": "严重告警数" + } + ], + "innerTab": true, + "inline": true + }, + "botRemaindTools": { + "type": "selector", + "default": [], + "label": "工具", + "innerTab": true, + "inline": true, + "optionsConf": { + "multiple": true + } + }, + "emailReceiverType": { + "type": "selector", + "label": "接收人", + "default": "0", + "options": [ + { + "id": "0", + "name": "所有人员" + }, + { + "id": "1", + "name": "仅管理员" + }, + { + "id": "2", + "name": "自定义" + }, + { + "id": "3", + "name": "无(不发送)" + } + ], + "inline": true + }, + "emailReceiverList": { + "type": "user-input", + "label": "自定义接收人", + "default": [], + "rely": { + "operation": "AND", + "expression": [ + { + "key": "emailReceiverType", + "value": "2" + } + ] + }, + "inline": true + }, + "emailCCReceiverList": { + "type": "user-input", + "label": "抄送人", + "default": [], + "inline": true, + "inputType": "all" + }, + "instantReportStatus": { + "label": "即时报告", + "default": "2", + "type": "enum-input", + "inline": true, + "list": [ + { + "value": "1", + "label": "启用" + }, + { + "value": "2", + "label": "停用" + } + ] + }, + "timerEmail": { + "label": "定时报告" + }, + "reportDate": { + "default": [], + "label": "每周", + "type": "week-selector", + "innerTab": true, + "inline": true + }, + "reportTime": { + "default": "", + "label": "时间", + "innerTab": true, + "inline": true + }, + "reportTools": { + "type": "selector", + "default": [], + "label": "工具", + "innerTab": true, + "inline": true, + "optionsConf": { + "multiple": true + } + }, + "toolScanType": { + "rule": {}, + "type": "radio-group", + "label": "扫描方式", + "required": true, + "list": [ + { + "label": "增量扫描(推荐)", + "value": "1" + }, + { + "label": "MR/PR扫描", + "value": "2" + }, + { + "label": "全量扫描", + "value": "0" + } + ], + "default": "1", + "desc": "增量扫描:扫描本次构建与上次构建的差异代码。首次为全量扫描。\nMR/PR扫描:扫描MR/PR的源分支与目标分支的差异代码。源分支代码需拉取到工作空间。\n全量扫描:扫描全部代码。Klocwork、Pinpoint、Gometalinter、重复率仅支持该扫描方式。" + }, + "mrCommentEnable": { + "label": "", + "default": true, + "type": "atom-checkbox", + "text": "将扫描出的问题同步到工蜂代码查看页面" + }, + "newDefectJudgeFromDate": { + "default": "", + "label": "新告警判定", + "desc": "所选日期之后产生的告警为新告警" + }, + "transferAuthorList": { + "default": [], + "type": "author-transfer", + "label": "处理人转换", + "desc": "各工具原处理人的告警都将自动转给新处理人" + }, + "path": { + "default": [], + "type": "item-edit" + }, + "customPath": { + "default": [], + "type": "item-edit" + }, + "openScanPrj": { + "label": "", + "default": false, + "placeholder": "", + "type": "atom-checkbox", + "text": "是否是开源扫描项目", + "desc": "选中则走开源扫描流程", + "required": false, + "disabled": false, + "hidden": true + } + }, + "output": { + "BK_CI_CODECC_TASK_ID": { + "type": "string", + "description": "CodeCC的任务id" + }, + "BK_CI_CODECC_TASK_STATUS": { + "type": "string", + "description": "CodeCC任务是否运行成功,成功则未true,不然取不到" + } + } +} \ No newline at end of file diff --git a/src/frontend/src/images/empty.png b/src/frontend/src/images/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..6e54eebc965a9ece403799c7eb3d1f2576a19f37 GIT binary patch literal 2717 zcmaJ@dpwkB8y*p1#zwYPs4=y2h&f=U8OC9aacbl+W>|$eyqIAQX2#60wk?$}TTUy- z!Bmr!LXw=8Qq;CWiZ601Y^?J}XXzVlwcj6K-~0Q$?{h!T@4l}4y6@-u<4y7PaffJa z)&hY*5Kj++zj6&xzSwo@%5Sh1^*80RN#qtJ3gAVEBs2j4a$)l50MwI1iv;`u8Z$oj z4&VR+shYCLL82hiZXAQhv8Ju&SW7v4B^m^BaFX(AjA%dvr2~;HE*>`Dcnt<+G4U{} z9SK3=y8=-xj|2e_kl;gRBt$c?Oqi1+)Io|<5^w+!4JzftaD_N29`=D3r;JyR;V|fj z6j3xD_P3}Yk}uSiCjg*!)@UmR0*!%Uu+~UB48|6-6N*A0?cfL-xDCPzWrMRt;A~OQ zj}J^)O~8!6`4fmAYbkelSd>V_$HCzeiNsoBW6cvp!jV`k7LGu{Q79{AhLtd$E22rQ zxWa9p7zlunAz<-EEFKrS%1ER0;zW3uQt96xOfJqeaIM5Gm z<5*wRf+l{E?<1D^Wi5y=V&O_L@YT!xugm^)q;$|~_}RM3&1driT&3d$N^8eYT<-ya zG$5V?7qaxxOrdv-VW56;`pA51%1G6Q9aXXhh%Y%*Pc1NJeG(*QQhmD`T}96g=>2-? z=e5v{z?I2b z5boX_EM0MAGbuFElC-&WQ}+O{-6(5|1h#}AjK@XgK5$yqGx7d>60`cv}3mrm>Zz~8qGNjBG%;d^Ek zL4suenTIbHze(!iZm+S;XPN0Ks#>oYjEo%0j9AgFKrEDQdPS~z8$j9X9$%z=>V5Fl zvh;qwTs!Uub2;31yJN>nL(LQCkt7aG-tN<#!YT;+?VbwS8hshs$yToz(wbpkd=oh5 zIJtzo6LarDYPUf?7{`_job&6w<#M^EfA^tGO^a-A5#sS7Sz->gXh18bt${ebX56^l zV99mxMIE1Mzjgf>L=rnH3REj#xYmA@r)Sjk*4 zLP>skU*DMI0h3*PHsV3gA90zX7fum#z0RL0?nM9ojh3xJT9%?FC9$^iX?k8qd(B}; z^*ds@|JtuE$wMQY@Onl1`Ty!*pK5{`1ZH%N_AkLwtG=3#5oQdrbz=-(F+vWO*SV*? zGpWseAxZFP*Dx|j%_1sHU(Gg|ZdVD_$vaR~5E35!GNX-&cvfZ!9+ZS#7&?c(VK2>W z+=_D$uf@>1Q~t!_3})6JjICsw>6N~2+iCo0#QgUS57lp6`PKhb5!Luld!yeevqS@1 z|3V&CPy3!tq4(|A_iKv6=7D>)s%HySpVlo*XdH6%x5!RkEUV0yown#(Rw>+^3&wG( z*MTk9X1)o+&Wi>@qAI=BcE6uJz#6sP)zh0CSP6}yME8e1)7eUNZcXDY=wufTuTA9s z5~!Jnn>AM1P`@k5bXv`DI$D<0VYp>tZql*y+te9r-*B($pR^XvD<~JHbhMhUol$wf z3enE<(AbA&-VqgJUvSpRFuQIH?Wl{YstqFOM#Rv)_NHO-Q{yxekc|Xna%!kW{5~|T z*L5bs&loJOJKs-lEm@3(>5=2HheAppni!l^>xk@K zO#H6sY41E;=NUvl@5Sq(nZfett%OsWb{Xs)ho2<)+7^Zr^v{@nm5&^Ceaip?PQ%t2RPG#{UrcW{Ww6qDYn0O`mDV{n%`BOgJbrLt456LL2Roy z(ofhI{Y@?6sjXW|r*ASwb3&@SFHOs<%{O}Ah`WATWium#PI2EiZ9Muk+ue1)pY5K` zyT>%C4&W=YBjHE$v#l!wdgLVq>SXV#fW%;jV@amooz*}eDkc~;lW-zo$5&|s+ldU% zyAA=Td{2l^T6~S=kYHnd=VfVPeYA5I{OP#|6B`j{^ylUZJkGW%4%ekbbk*wyUAfK5 zGFmDF#)49M3TLYS0GU@6mXl6+bRG@Z%Qi8695iSAtDTOceV9eAc-+TB&GOYO-_``X z&~rX@tkL;iVmb+JUK9-SDtyKkshpDm$~&X9`X-CKGQR6n6i>O zVG%A53pLmOD^YRrk@ovm)#l}Ag_q~~lelZU>`}!R-`tV}8)`eaGe&uyok@#qw4ku# z9s9lSiBY2}Aouc*4|Vr+>PeqX%Uh_e=K?QfPp}=wUZhbJlu=DH{hpFMfJ>(RqSms0 zkLv_g%fqD^6m@lK(D)Ly?cNXdKgb5O2OH{H%;U0+E82+T;p?{Ui|vknLp`7Z662cB UFTBLAto|^1y7>?)z6($K4?Z`OOaK4? literal 0 HcmV?d00001 diff --git a/src/frontend/src/index.html b/src/frontend/src/index.html new file mode 100644 index 0000000..33f1ef2 --- /dev/null +++ b/src/frontend/src/index.html @@ -0,0 +1,18 @@ + + + + + + + + + remote atom + + +
+ + + diff --git a/src/frontend/src/main.js b/src/frontend/src/main.js new file mode 100644 index 0000000..ea01187 --- /dev/null +++ b/src/frontend/src/main.js @@ -0,0 +1,44 @@ +/** + * @file main entry + */ + +import Vue from 'vue' +import LocalAtom from './data/LocalAtom' +import PublicAtom from './data/PublicAtom' +import bkMagic from 'bk-magic-vue' +import bkciAtoms from 'bkci-atom-components' +import VeeValidate from 'vee-validate' +import request from '@/utils/request' +import validDictionary from './utils/validDictionary' +import ExtendsCustomRules from './utils/customRules' +import store from './store/index' + +// 全量引入 bk-magic-vue 样式 +require('bk-magic-vue/dist/bk-magic-vue.min.css') +// 如需用到代码编辑组件atom-ace-editor时需引用,如果不需要用到则可不引入这个文件 +require('bkci-atom-components/dist/brace.js') + +require('./css/conf.scss') + +Vue.use(bkMagic) +Vue.use(bkciAtoms) + +Vue.prototype.$ajax = request + + +VeeValidate.Validator.localize(validDictionary) +Vue.use(VeeValidate, { + fieldsBagName: 'veeFields', + locale: 'cn' +}) +ExtendsCustomRules(VeeValidate.Validator.extend) + +global.atomVue = new Vue({ + el: '#pipeline-atom', + components: { + PublicAtom, + LocalAtom + }, + store, + template: `${ISLOCAL ? '' : ''}` +}) diff --git a/src/frontend/src/store/index.js b/src/frontend/src/store/index.js new file mode 100644 index 0000000..3655a2a --- /dev/null +++ b/src/frontend/src/store/index.js @@ -0,0 +1,118 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import request from '../utils/request' + +Vue.use(Vuex) + +const AJAX_URL_PREFIX = `${CODECC_SITE_URL}/ms` + +const store = new Vuex.Store({ + state: { + projectId: '', + toolMeta: '', + toolList: [], + extraHeight: 130, + categoryList: [], + codeLangs: [], + checkerSetLanguage: [] + }, + getters: { + }, + mutations: { + updateToolMeta(state, toolMeta) { + state.toolMeta = Object.assign({}, toolMeta) + }, + updateToolList(state, toolList) { + state.toolList = Object.assign({}, toolList) + }, + updateProjectId (state, projectId) { + state.projectId = projectId + }, + updateExtraHeight(state, height) { + state.extraHeight = height + }, + updateCategoryList(state, categoryList) { + state.categoryList = categoryList + }, + updateCodeLangs(state, codeLangs) { + state.codeLangs = codeLangs + }, + updateCheckerSetLanguage(state, checkerSetLanguage) { + state.checkerSetLanguage = checkerSetLanguage + } + }, + actions: { + getToolMeta ({ commit, state }) { + const params = { metadataType: 'LANG;TOOL_TYPE;TOOL_PATTERN;PARAM_TYPE' } + return request.get(`${AJAX_URL_PREFIX}/task/api/user/metadatas`, { params }).then(res => { + const toolMeta = res.data || {} + commit('updateToolMeta', toolMeta) + return toolMeta + }).catch(e => { + console.error(e) + }) + }, + getToolList ({ commit, state }) { + const params = { isDetail: false } + return request.get(`${AJAX_URL_PREFIX}/ms/task/api/user/toolList`, { params }).then(res => { + const toolList = res.data || {} + commit('updateToolList', toolList) + return toolList + }).catch(e => { + console.error(e) + }) + }, + count ({ commit }, params) { + return request.post(`${AJAX_URL_PREFIX}/defect/api/user/checkerSet/count`, params).then(res => { + const checkerSetLanguage = res.data || [] + commit('updateCheckerSetLanguage', checkerSetLanguage) + return checkerSetLanguage + }).catch(e => { + console.error(e) + }) + }, + params ({ commit }) { + return request.get(`${AJAX_URL_PREFIX}/defect/api/user/checkerSet/params`).then(res => { + const categoryList = res.data.catatories || [] + const codeLangs = res.data.codeLangs || [] + commit('updateCategoryList', categoryList) + commit('updateCodeLangs', codeLangs) + return categoryList + }).catch(e => { + console.error(e) + }) + }, + listPageable ({ commit }, params) { + return request.post(`${AJAX_URL_PREFIX}/defect/api/user/checkerSet/listPageable`, params).then(res => { + return res.data || {} + }).catch(e => { + console.error(e) + }) + }, + otherList ({ commit }, params) { + return request.post(`${AJAX_URL_PREFIX}/defect/api/user/checkerSet/otherList`, params).then(res => { + return res.data || {} + }).catch(e => { + console.error(e) + }) + }, + install ({ commit }, params) { + const checkerSetId = params.checkerSetId + delete params.checkerSetId + return request.post(`${AJAX_URL_PREFIX}/defect/api/user/checkerSet/${checkerSetId}/relationships`, params).then(res => { + return res || {} + }).catch(e => { + console.error(e) + }) + }, + taskList ({ commit }, params) { + return request.post(`${AJAX_URL_PREFIX}/task/api/user/task/taskSortType/CREATE_DATE`, params).then(res => { + return res.data || {} + }).catch(e => { + console.error(e) + }) + } + } +}) + +export default store diff --git a/src/frontend/src/utils/bus.js b/src/frontend/src/utils/bus.js new file mode 100644 index 0000000..f1d35c3 --- /dev/null +++ b/src/frontend/src/utils/bus.js @@ -0,0 +1,8 @@ +/** + * @file event bus + */ + +import Vue from 'vue' + +// Use a bus for components communication, +export const bus = new Vue() diff --git a/src/frontend/src/utils/customRules.js b/src/frontend/src/utils/customRules.js new file mode 100644 index 0000000..2e86527 --- /dev/null +++ b/src/frontend/src/utils/customRules.js @@ -0,0 +1,74 @@ +/* + * Tencent is pleased to support the open source community by making BK-CI 蓝鲸持续集成平台 available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * BK-CI 蓝鲸持续集成平台 is licensed under the MIT license. + * + * A copy of the MIT License is included in this file. + * + * + * Terms of the MIT License: + * --------------------------------------------------- + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +const customeRules = { + string: { + validate: function (value, args) { + return /^[\w,\d,\-_\(\)]+$/i.test(value) + } + }, + unique: { + validate: function (value, args) { + let repeatNum = 0 + for (let i = 0; i < args.length; i++) { + if (repeatNum > 2) return false + if (args[i] === value) { + repeatNum++ + } + } + return repeatNum <= 1 + } + }, + ruleSetRequired: { + validate: function (value, args) { + return typeof value === 'object' && value.length + } + }, + asyncTaskRequired: { + validate: function (value, args) { + return value + } + }, + scriptRequired: { + validate: function (value, args) { + const defValue1 = '# Coverity/Klocwork将通过调用编译脚本来编译您的代码,以追踪深层次的缺陷\n# 请使用依赖的构建工具如maven/cmake等写一个编译脚本build.sh\n# 确保build.sh能够编译代码\n# cd path/to/build.sh\n# sh build.sh' + const defValue2 = '# Coverity/Klocwork将通过调用编译脚本来编译您的代码,以追踪深层次的缺陷\n# 请使用依赖的构建工具如maven/cmake等写一个编译脚本build.bat\n# 确保build.bat能够编译代码\n# cd path/to/build.bat\n# call build.bat' + return value !== defValue1 && value !== defValue2 + } + } + // customPath: { + // validate: function (value, args) { + // return /^\.\*.*/gi.test(value) + // } + // } +} + +function ExtendsCustomRules (_extends) { + if (typeof _extends !== 'function') { + console.warn('VeeValidate.Validator.extend must be a function') + return + } + for (const key in customeRules) { + if (customeRules.hasOwnProperty(key)) { + _extends(key, customeRules[key]) + } + } +} + +export default ExtendsCustomRules diff --git a/src/frontend/src/utils/request.js b/src/frontend/src/utils/request.js new file mode 100644 index 0000000..94ec89c --- /dev/null +++ b/src/frontend/src/utils/request.js @@ -0,0 +1,67 @@ +import axios from 'axios' +import Vue from 'vue' +import { bus } from './bus' +import store from '../store' +import cookie from 'cookie' + +const request = axios.create({ + baseURL: '', + validateStatus: status => { + if (status > 400) { + console.warn(`HTTP 请求出错 status: ${status}`) + } + return status >= 200 && status <= 503 + }, + withCredentials: true +}) + +function errorHandler (error) { + return Promise.reject(error) +} + +request.interceptors.request.use(config => { + const url = new URL(config.url) + config.headers = { + ...config.headers, + 'X-DEVOPS-PROJECT-ID': store.state.projectId || '' + } + return config +}, function (error) { + return Promise.reject(error) +}) + +request.interceptors.response.use(response => { + injectCSRFTokenToHeaders() // 注入csrfToken + const { data: { status, message, code, result } } = response + const httpStatus = response.status + if (httpStatus === 401) { + bus.$toggleLoginDialog(true) + } else if (httpStatus === 503) { + const errMsg = { + status: httpStatus, + message: '服务正在部署中,请稍候...' + } + return Promise.reject(errMsg) + } else if ((typeof status !== 'undefined' && status !== 0) || (typeof result !== 'undefined' && !result)) { + const errorMsg = { httpStatus, message, code: code || status } + return Promise.reject(errorMsg) + } else if (httpStatus === 400) { + const errorMsg = { httpStatus, message: '内部服务异常' } + return Promise.reject(errorMsg) + } + + return response.data +}, errorHandler) + +const injectCSRFTokenToHeaders = () => { + const CSRFToken = cookie.parse(document.cookie).backend_csrftoken + if (CSRFToken !== undefined) { + request.defaults.headers.post['X-CSRFToken'] = CSRFToken + } else { + console.warn('Can not find backend_csrftoken in document.cookie') + } +} + +Vue.prototype.$ajax = request + +export default request diff --git a/src/frontend/src/utils/util.js b/src/frontend/src/utils/util.js new file mode 100644 index 0000000..a86f0bd --- /dev/null +++ b/src/frontend/src/utils/util.js @@ -0,0 +1,22 @@ +export function urlJoin (...args) { + return args.filter(arg => arg).join('/').replace(/([^:]\/)\/+/g, '$1') +} + +export function getQueryParams(urlStr) { + let url = '' + if (typeof urlStr === "undefined") { + url = decodeURI(location.search) + } else { + url = "?" + urlStr.split("?")[1] + } + let queryObj = new Object() + if (url.indexOf("?") != -1) { + const str = url.substr(1) + const strs = str.split("&") + for (let i = 0; i < strs.length; i++) { + queryObj[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1]) + } + } + return queryObj +} + diff --git a/src/frontend/src/utils/validDictionary.js b/src/frontend/src/utils/validDictionary.js new file mode 100644 index 0000000..2b2a41b --- /dev/null +++ b/src/frontend/src/utils/validDictionary.js @@ -0,0 +1,34 @@ +const dictionary = { + cn: { + messages: { + alpha: field => '字段只能包含字母', + required: field => '字段不能为空', + unique: field => '字段不能重复', + excludeComma: field => '字段不能包含英文逗号', + string: field => '字段只能包含数字,字母和下划线', + varRule: field => `只能以字母和下划线开头,同时只包含字母,数字以及下划线`, + numeric: field => '字段只能包含数字', + regex: (field, regex) => { + return `字段不符合(${regex})正则表达式规则` + }, + max: (field, args) => { + return `字段长度不能超过${args}个字符` + }, + min: (field, args) => { + return `字段长度不能少于${args}个字符` + }, + max_value: (field, args) => { + return `最大不能超过${args}` + }, + min_value: (field, args) => { + return `最小不能少于${args}` + }, + ruleSetRequired: field => '规则集字段不能为空', + scriptRequired: field => '字段不能为空', + asyncTaskRequired: field => '字段不能为空' + // customPath: field => '路径请以 .* 开头' + } + } +} + +export default dictionary diff --git a/src/frontend/webpack.config.js b/src/frontend/webpack.config.js new file mode 100644 index 0000000..ff14326 --- /dev/null +++ b/src/frontend/webpack.config.js @@ -0,0 +1,82 @@ +const path = require('path') +const webpack = require('webpack') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const VueLoaderPlugin = require('vue-loader/lib/plugin') + +const resolve = dist => { + return path.resolve(__dirname, dist) +} + +module.exports = (env, argv) => { + const isProd = argv.mode === 'production' + + return { + devtool: '#source-map', + entry: { + remoteAtom: './src/main.js' + }, + output: { + filename: '[name].[contentHash].js', + chunkFilename: 'js/[name].[chunkHash:8].js' + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.css', '.scss'], + alias: { + 'vue': 'vue/dist/vue.esm.js', + '@': resolve('src') + } + }, + module: { + rules: [ + { + test: /\.vue$/, + include: resolve('src'), + use: 'vue-loader' + }, + { + test: /\.js$/, + include: path.resolve('src'), + use: [ + { + loader: 'babel-loader' + } + ] + }, + { + test: /\.css$/, + loader: ['style-loader', 'css-loader'] + }, + { + test: /.scss$/, + use: ['style-loader', 'css-loader', 'sass-loader'] + }, + { + test: /\.(png|jpe?g|gif|svg|cur)(\?.*)?$/, + loader: 'url-loader' + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader' + } + ] + }, + plugins: [ + new VueLoaderPlugin(), + new webpack.DefinePlugin({ + ISLOCAL: JSON.stringify(!isProd) + }), + new HtmlWebpackPlugin({ + filename: 'index.html', + template: './src/index.html', + inject: true + }) + ], + devServer: { + port: 8002, + contentBase: path.join(__dirname, 'dist'), + historyApiFallback: true, + noInfo: false, + disableHostCheck: true + } + } +} From cae25b1559a66ad34dc4385807bcb92544c610ed Mon Sep 17 00:00:00 2001 From: linjun-ddddd <654548718@qq.com> Date: Fri, 9 Oct 2020 15:24:04 +0800 Subject: [PATCH 2/8] feat: fix gradle problem --- build.gradle | 45 ++++++++++++++++++++++++++++++++++++++++----- gradle.properties | 3 +++ 2 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 gradle.properties diff --git a/build.gradle b/build.gradle index 88d1f8a..73c167b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,15 @@ buildscript { + def mavenRepoUrl = System.getProperty("mavenRepoUrl") + if (mavenRepoUrl == null) { + mavenRepoUrl = System.getenv("mavenRepoUrl") + } + if (mavenRepoUrl == null) { + mavenRepoUrl = MAVEN_REPO_URL + } + println("mavenRepoUrl=" + mavenRepoUrl) repositories { mavenLocal() - maven { url " " } //仓库地址 + maven { url mavenRepoUrl } } dependencies { @@ -30,11 +38,38 @@ apply plugin: "com.github.johnrengelman.shadow" apply plugin: "application" group 'com.tencent.bk.devops' +static def getValue(String key, Object defaultValue) { + def value = System.getProperty(key) + if (value == null) { + value = System.getenv(key) + } + if (value == null) { + value = defaultValue.toString() + } + return value +} + +def mavenCredUserName = getValue("mavenCredUserName", getProperty("MAVEN_CRED_USERNAME")) +def mavenCredPassword = getValue("mavenCredPassword", getProperty("MAVEN_CRED_PASSWORD")) + repositories { + def mavenRepoUrl = System.getProperty("mavenRepoUrl") + if (mavenRepoUrl == null) { + mavenRepoUrl = System.getenv("mavenRepoUrl") + } + if (mavenRepoUrl == null) { + mavenRepoUrl = MAVEN_REPO_URL + } + println("mavenRepoUrl=" + mavenRepoUrl) mavenLocal() - maven { url "" } - maven { url "" } - maven { url "" } + maven { + url "https://maven.pkg.github.com/ci-plugins/java-plugin-sdk" + credentials { + username = mavenCredUserName + password = mavenCredPassword + } + } + maven { url mavenRepoUrl } } dependencies { @@ -87,7 +122,7 @@ shadowJar { // baseName为插件默认打包名+".jar",bkdevops-plugin.jar // 如果修改,则要一同修改插件task.json中的target启动命令 // 为了省事,建议不用修改 - baseName = "bkdevops-plugin" + baseName = "CodeccCheckAtom" classifier = null zip64 true } diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..871d346 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,3 @@ +MAVEN_CRED_USERNAME= +MAVEN_CRED_PASSWORD= +MAVEN_REPO_URL= From eed03e94da7716bcf1dc97b865a4fda915def7c2 Mon Sep 17 00:00:00 2001 From: linjun-ddddd <654548718@qq.com> Date: Fri, 9 Oct 2020 19:54:41 +0800 Subject: [PATCH 3/8] =?UTF-8?q?feat:=20=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 132 ++++++------------ core/build.gradle | 3 - .../com/tencent/devops/api/CodeccSdkApi.kt | 2 +- .../tencent/devops/utils/CodeccRepoHelper.kt | 2 +- settings.gradle | 2 +- task.json | 2 +- 6 files changed, 48 insertions(+), 95 deletions(-) diff --git a/build.gradle b/build.gradle index 73c167b..d27b55a 100644 --- a/build.gradle +++ b/build.gradle @@ -27,16 +27,6 @@ buildscript { } } -configurations { - ktlint -} -//plugins { -// id 'org.jetbrains.kotlin.jvm' version '1.3.0' -//} -apply plugin: "kotlin" -apply plugin: "com.github.johnrengelman.shadow" -apply plugin: "application" -group 'com.tencent.bk.devops' static def getValue(String key, Object defaultValue) { def value = System.getProperty(key) @@ -52,61 +42,6 @@ static def getValue(String key, Object defaultValue) { def mavenCredUserName = getValue("mavenCredUserName", getProperty("MAVEN_CRED_USERNAME")) def mavenCredPassword = getValue("mavenCredPassword", getProperty("MAVEN_CRED_PASSWORD")) -repositories { - def mavenRepoUrl = System.getProperty("mavenRepoUrl") - if (mavenRepoUrl == null) { - mavenRepoUrl = System.getenv("mavenRepoUrl") - } - if (mavenRepoUrl == null) { - mavenRepoUrl = MAVEN_REPO_URL - } - println("mavenRepoUrl=" + mavenRepoUrl) - mavenLocal() - maven { - url "https://maven.pkg.github.com/ci-plugins/java-plugin-sdk" - credentials { - username = mavenCredUserName - password = mavenCredPassword - } - } - maven { url mavenRepoUrl } -} - -dependencies { -// compile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.25-2020032705-SNAPSHOT" - compile "com.tencent.bk.devops.atom:java-atom-sdk:1.1.3-20200802401" -// compile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.24" - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" - ktlint "com.github.shyiko:ktlint:0.34.2" - compile group: 'com.squareup.okhttp3', name: 'okhttp' - compile "org.bouncycastle:bcprov-jdk16:$bouncyCastleVersion" - compile "org.apache.commons:commons-exec:$commonExecVersion" - compile "com.fasterxml.jackson.module:jackson-module-kotlin:$jacksonVersion" - compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:$jacksonVersion" - compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion" - compile "org.apache.commons:commons-compress:$compressVersion" - compile "org.hashids:hashids:1.0.3" - testCompile group: 'junit', name: 'junit', version: '4.12' -// testCompile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.25-2020032705-SNAPSHOT" - testCompile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.25-2020052802-SNAPSHOT" -// testCompile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.24" - compile("org.apache.commons:commons-compress:1.15") - -// compile project(":core") - compile project(":ext:tencent") - -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" -} - -// 固定入口类 不要改 -mainClassName = "com.tencent.bk.devops.atom.AtomRunner" - //clean{ // delete fileTree('src/main/resources/codecc_agent.zip') //} @@ -118,15 +53,9 @@ mainClassName = "com.tencent.bk.devops.atom.AtomRunner" // destinationDir(file('src/main/resources/')) //} -shadowJar { - // baseName为插件默认打包名+".jar",bkdevops-plugin.jar - // 如果修改,则要一同修改插件task.json中的target启动命令 - // 为了省事,建议不用修改 - baseName = "CodeccCheckAtom" - classifier = null - zip64 true +configurations { + ktlint } -//shadowJar.dependsOn(zip) task ktlint(type: JavaExec, group: "verification") { description = "Check Kotlin code style." @@ -134,7 +63,6 @@ task ktlint(type: JavaExec, group: "verification") { main = "com.pinterest.ktlint.Main" args "src/**/*.kt" } -check.dependsOn ktlint task ktlintFormat(type: JavaExec, group: "formatting") { description = "Fix Kotlin code style deviations." @@ -144,26 +72,30 @@ task ktlintFormat(type: JavaExec, group: "formatting") { } - allprojects { group 'com.tencent.bk.devops' - - repositories { - mavenLocal() - maven { url "" } - maven { url "" } - maven { url "" } - } -} -subprojects { apply plugin: "kotlin" apply plugin: "com.github.johnrengelman.shadow" apply plugin: "application" - - - configurations { - ktlint + repositories { + def mavenRepoUrl = System.getProperty("mavenRepoUrl") + if (mavenRepoUrl == null) { + mavenRepoUrl = System.getenv("mavenRepoUrl") + } + if (mavenRepoUrl == null) { + mavenRepoUrl = MAVEN_REPO_URL + } + println("mavenRepoUrl=" + mavenRepoUrl) + mavenLocal() + maven { + url "https://maven.pkg.github.com/ci-plugins/java-plugin-sdk" + credentials { + username = mavenCredUserName + password = mavenCredPassword + } + } + maven { url mavenRepoUrl } } dependencies { @@ -187,5 +119,29 @@ subprojects { compile("org.apache.commons:commons-compress:1.15") } + compileKotlin { + kotlinOptions.jvmTarget = "1.8" + } + compileTestKotlin { + kotlinOptions.jvmTarget = "1.8" + } + + shadowJar { + // baseName为插件默认打包名+".jar",bkdevops-plugin.jar + // 如果修改,则要一同修改插件task.json中的target启动命令 + // 为了省事,建议不用修改 + baseName = "CodeccCheckAtom" + classifier = null + zip64 true + } + + task buildZip(type: Zip, dependsOn: shadowJar) { + from "build/libs", "./task.json", "./quality.json" + into "${project.name}" + } + + check.dependsOn ktlint + // 固定入口类 不要改 + mainClassName = "com.tencent.bk.devops.atom.AtomRunner" } \ No newline at end of file diff --git a/core/build.gradle b/core/build.gradle index 793e808..2e7fcbf 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -4,6 +4,3 @@ version 'unspecified' //dependencies { // compile project(":ext:tencent") //} - -// 固定入口类 不要改 -mainClassName = "com.tencent.bk.devops.atom.AtomRunner" \ No newline at end of file diff --git a/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt b/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt index 1e90d39..c98d0dc 100644 --- a/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt +++ b/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt @@ -97,7 +97,7 @@ object CodeccSdkApi : BaseApi() { "devopsToolParams" to devopsToolParams, "checkerSetList" to getRuleSetV3(param), "nameCn" to pipelineName, - "atomCode" to "CodeccCheckAtomDebug", + "atomCode" to "CodeccCheckAtom", "projectBuildCommand" to script, "projectBuildType" to if (getOS() == OSType.WINDOWS) "BAT" else "SHELL", "compilePlat" to getOS().name, diff --git a/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt b/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt index 508c66b..0839a13 100644 --- a/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt +++ b/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt @@ -50,7 +50,7 @@ object CodeccRepoHelper { "CODE_GITLAB", "GITHUB" ) - private val codeccElementType = "CodeccCheckAtomDebug" + private val codeccElementType = "CodeccCheckAtom" private val pipelineBuildTaskApi = PipelineTaskResourceApi() fun getCodeccRepos(variables: Map): List { diff --git a/settings.gradle b/settings.gradle index fffe7aa..f938f15 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -rootProject.name = 'CodeccCheckAtomDebug' +rootProject.name = 'CodeccCheckAtom' include ":core" diff --git a/task.json b/task.json index 37fbe4b..e2b5d4c 100644 --- a/task.json +++ b/task.json @@ -1,5 +1,5 @@ { - "atomCode": "CodeccCheckAtomDebug", + "atomCode": "CodeccCheckAtom", "execution": { "language": "java", "minimumVersion": "1.8", From 9cf692e0fce8fe7f016e56719a9fe82f7c5f6138 Mon Sep 17 00:00:00 2001 From: linjun-ddddd <654548718@qq.com> Date: Fri, 9 Oct 2020 20:02:07 +0800 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/docker/utils/CodeccConfig.kt | 18 ++++++++- .../tencent/devops/docker/utils/CodeccWeb.kt | 38 +++++++++---------- .../core/src/main/resources/ms_uri.properties | 4 ++ 3 files changed, 40 insertions(+), 20 deletions(-) create mode 100644 src/backend/core/src/main/resources/ms_uri.properties diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccConfig.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccConfig.kt index 44929ca..8404008 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccConfig.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccConfig.kt @@ -23,7 +23,8 @@ object CodeccConfig { fun loadToolMeta(landunParam: LandunParam, apiWebServer: String, aesKey: String) { loadProperties() // 先取配置文件,再用后台配置刷新,防止后台有问题导致不能跑 - + loadMsUriProperties() // 获取微服务根路径配置 + LogUtils.printDebugLog("apiWebServer: $apiWebServer") propertiesInfo["CODECC_API_WEB_SERVER"] = apiWebServer @@ -104,6 +105,21 @@ object CodeccConfig { return propertiesInfo } + private fun loadMsUriProperties(): Map { + try { + val input = Thread.currentThread().contextClassLoader.getResourceAsStream("ms_uri.properties") + val p = Properties() + p.load(input) + + for (name in p.stringPropertyNames()) { + propertiesInfo[name] = p.getProperty(name) + } + } catch (e: Exception) { + println("Load config exception: ${e.message}") + } + return propertiesInfo + } + fun getConfig(key: String): String? = propertiesInfo[key] fun getServerHost() = propertiesInfo["CODECC_API_WEB_SERVER"] diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt index d9c7805..f35e18e 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt @@ -74,7 +74,7 @@ object CodeccWeb : BaseApi() { fun download(filePath: String, resultName: String, downloadType: String, landunParam: LandunParam): Boolean { var size = 0L val headers = getHeader(landunParam) - val downloadUrl = "${CodeccConfig.getServerHost()}/ms/schedule/api/build/fs/download/fileSize" + val downloadUrl = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("schedule_uri")}/api/build/fs/download/fileSize" val params = mapOf( "fileName" to resultName, "downloadType" to downloadType @@ -102,7 +102,7 @@ object CodeccWeb : BaseApi() { var isStop = false val btyesBuffer = 100 * 1024 * 1024L - val url = "${CodeccConfig.getServerHost()}/ms/schedule/api/build/fs/download" + val url = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("schedule_uri")}/api/build/fs/download" while (true) { if (retainSize > btyesBuffer) { retainSize -= btyesBuffer @@ -161,7 +161,7 @@ object CodeccWeb : BaseApi() { "fileName" to resultName, "downloadType" to downloadType ) - val url = "${CodeccConfig.getServerHost()}/ms/schedule/api/build/fs/download/fileInfo" + val url = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("schedule_uri")}/api/build/fs/download/fileInfo" val body = jacksonObjectMapper().writeValueAsString(param) val responseStr = sendPostRequest(url, headers, body) val data = jacksonObjectMapper().readValue>(responseStr) @@ -193,19 +193,19 @@ object CodeccWeb : BaseApi() { fun codeccConfigByStream(landunParam: LandunParam, streamName: String): String { val headers = getHeader(landunParam) - val path = "${CodeccConfig.getServerHost()}/ms/task/api/build/task/streamName/$streamName" + val path = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("task_uri")}/api/build/task/streamName/$streamName" return sendGetRequest(path, headers) } fun codeccTaskInfoByTaskId(landunParam: LandunParam, taskId: Long): String { val headers = getHeader(landunParam) - val path = "${CodeccConfig.getServerHost()}/ms/task/api/build/task/taskId/$taskId" + val path = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("task_uri")}/api/build/task/taskId/$taskId" return sendGetRequest(path, headers) } fun getMD5ForBlame(landunParam: LandunParam, taskId: Long, tool: String): String { val headers = getHeader(landunParam) - val path = "${CodeccConfig.getServerHost()}/ms/report/api/build/scm/file/list?taskId=$taskId&toolName=$tool" + val path = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("report_uri")}/api/build/scm/file/list?taskId=$taskId&toolName=$tool" return sendGetRequest(path, headers) } @@ -218,7 +218,7 @@ object CodeccWeb : BaseApi() { ) { val headers = getHeader(landunParam) val buildId = landunParam.buildId - val url = "${CodeccConfig.getServerHost()}/ms/report/api/build/parse/notify/streamName/$streamName/toolName/${toolName.toUpperCase()}/buildId/$buildId" + val url = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("report_uri")}/api/build/parse/notify/streamName/$streamName/toolName/${toolName.toUpperCase()}/buildId/$buildId" val body = jacksonObjectMapper().writeValueAsString(mapOf()) LogUtils.printDebugLog("notifyCodeccFinish request url: $url") LogUtils.printDebugLog("notifyCodeccFinish request body: $body") @@ -233,7 +233,7 @@ object CodeccWeb : BaseApi() { ): Boolean { val headers = getHeader(landunParam) val buildId = landunParam.buildId - val url = "${CodeccConfig.getServerHost()}/ms/report/api/build/parse/reportStatus/streamName/$streamName/toolName/${toolName.toUpperCase()}/buildId/$buildId" + val url = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("report_uri")}/api/build/parse/reportStatus/streamName/$streamName/toolName/${toolName.toUpperCase()}/buildId/$buildId" val responseMap = JsonUtil.getObjectMapper().readValue>(sendGetRequest(url, headers)) if (responseMap["data"] == "PROCESSING") return false return true @@ -246,7 +246,7 @@ object CodeccWeb : BaseApi() { uploadType: String ) { val headers = getHeader(landunParam) - val uploadUrl = "${CodeccConfig.getServerHost()}/ms/schedule/api/build/fs/upload" + val uploadUrl = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("schedule_uri")}/api/build/fs/upload" val file = File(filePath) val fis = FileInputStream(file) @@ -323,7 +323,7 @@ object CodeccWeb : BaseApi() { "chunks" to chunks.toString() ) val mergeJson = JsonUtil.toJson(mergeParams) - val mergeUrl = "${CodeccConfig.getServerHost()}/ms/schedule/api/build/fs/merge" + val mergeUrl = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("schedule_uri")}/api/build/fs/merge" val mergeRequest = Request.Builder() .url(mergeUrl) .headers(Headers.of(headers)) @@ -351,7 +351,7 @@ object CodeccWeb : BaseApi() { ) { try { val headers = getHeader(landunParam) - val path = "${CodeccConfig.getServerHost()}/ms/schedule/api/build/fs/index/$storgeType/$fileName" + val path = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("schedule_uri")}/api/build/fs/index/$storgeType/$fileName" val responseBody = sendGetRequest(path, headers) val responseResult: Result = jacksonObjectMapper().readValue(responseBody) @@ -370,7 +370,7 @@ object CodeccWeb : BaseApi() { ) { val headers = getHeader(landunParam) val requestBody = jacksonObjectMapper().writeValueAsString(params) - val path = "${CodeccConfig.getServerHost()}/ms/report/api/build/defects/repositories" + val path = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("report_uri")}/api/build/defects/repositories" LogUtils.printDebugLog("request url: $path") LogUtils.printDebugLog("request body: $requestBody") val responseContent = sendPostRequest(path, headers, requestBody, false) @@ -399,7 +399,7 @@ object CodeccWeb : BaseApi() { "repoWhiteList" to commandParam.subCodePathList ) - val path = "${CodeccConfig.getServerHost()}/ms/task/api/build/tool/config/streamName/$streamName/toolType/${toolName.toUpperCase()}" + val path = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("task_uri")}/api/build/tool/config/streamName/$streamName/toolType/${toolName.toUpperCase()}" val jsonBody = jacksonObjectMapper().writeValueAsString(body) val response = sendPostRequest( url = path, @@ -425,7 +425,7 @@ object CodeccWeb : BaseApi() { toolName: String ): TaskLogVO? { val header = getHeader(landunParam) - val url = "${CodeccConfig.getServerHost()}/ms/report/api/build/tasklog/taskId/${taskId}/toolName/$toolName/buildId/${landunParam.buildId}" + val url = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("report_uri")}/api/build/tasklog/taskId/${taskId}/toolName/$toolName/buildId/${landunParam.buildId}" val responseBody = sendGetRequest(url, header) val responseResult: Result = jacksonObjectMapper().readValue(responseBody) return responseResult.data @@ -441,7 +441,7 @@ object CodeccWeb : BaseApi() { ): String { val headers = getHeader(landunParam) val requestBody = getUploadTaskLogReqParam(taskId, streamName, toolName, landunParam, stepNum, flag) - val path = "${CodeccConfig.getServerHost()}/ms/report/api/build/tasklog" + val path = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("report_uri")}/api/build/tasklog" var countFailed = 0 while (true) { @@ -471,7 +471,7 @@ object CodeccWeb : BaseApi() { ) { val headers = getHeader(landunParam) val requestBody = getChangeScanTypeReqParam(taskId, streamName, toolName, landunParam) - val path = "${CodeccConfig.getServerHost()}/ms/build/toolBuildInfo/tasks/$taskId/forceFullScanSymbol" + val path = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("build_uri")}/toolBuildInfo/tasks/$taskId/forceFullScanSymbol" val responseContent = sendPostRequest(path, headers, requestBody) LogUtils.printDebugLog("response body: $responseContent") } @@ -606,9 +606,9 @@ object CodeccWeb : BaseApi() { ): Boolean { val header = getHeader(landunParam) val url = if(toolName == ToolConstants.COVERITY && null != openSource && openSource){ - "${CodeccConfig.getServerHost()}/ms/schedule/api/build/push/streamName/$streamName/toolName/${toolName.toUpperCase()}/buildId/${landunParam.buildId}?createFrom=gongfeng_scan" + "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("schedule_uri")}/api/build/push/streamName/$streamName/toolName/${toolName.toUpperCase()}/buildId/${landunParam.buildId}?createFrom=gongfeng_scan" } else { - "${CodeccConfig.getServerHost()}/ms/schedule/api/build/push/streamName/$streamName/toolName/${toolName.toUpperCase()}/buildId/${landunParam.buildId}" + "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("schedule_uri")}/api/build/push/streamName/$streamName/toolName/${toolName.toUpperCase()}/buildId/${landunParam.buildId}" } val responseBody = sendGetRequest(url, header) val responseResult: Result = jacksonObjectMapper().readValue(responseBody) @@ -621,7 +621,7 @@ object CodeccWeb : BaseApi() { ): List? { return try { val header = getHeader(landunParam) - val url = "${serverHost}/ms/task/api/build/toolmeta/list" + val url = "${serverHost}${CodeccConfig.getConfig("task_uri")}/api/build/toolmeta/list" val responseBody = sendGetRequest(url, header) val responseResult: Result?> = jacksonObjectMapper().readValue(responseBody) responseResult.data diff --git a/src/backend/core/src/main/resources/ms_uri.properties b/src/backend/core/src/main/resources/ms_uri.properties new file mode 100644 index 0000000..2a99363 --- /dev/null +++ b/src/backend/core/src/main/resources/ms_uri.properties @@ -0,0 +1,4 @@ +schedule_uri=/ms/schedule +task_uri=/ms/task +report_uri=/ms/report +build_uri=/ms/build \ No newline at end of file From b7a894bce8b9fac925a0588d6da18d7c9cd51cb8 Mon Sep 17 00:00:00 2001 From: linjun-ddddd <654548718@qq.com> Date: Sat, 10 Oct 2020 18:18:51 +0800 Subject: [PATCH 5/8] feat: init code --- src/backend/.gitignore | 20 + src/backend/core/build.gradle | 4 - src/backend/core/quality.json | 5 + .../devops/api/PipelineTaskResourceApi.kt | 2 + .../core/src/main/resources/config.json | 6 +- src/backend/core/task.json | 421 ++++++++++++++++++ src/backend/gradle.properties | 3 + src/backend/settings.gradle | 4 - src/backend/settings.xml | 76 ---- 9 files changed, 454 insertions(+), 87 deletions(-) create mode 100644 src/backend/.gitignore create mode 100644 src/backend/core/quality.json create mode 100644 src/backend/core/task.json create mode 100644 src/backend/gradle.properties delete mode 100644 src/backend/settings.xml diff --git a/src/backend/.gitignore b/src/backend/.gitignore new file mode 100644 index 0000000..fe68b9b --- /dev/null +++ b/src/backend/.gitignore @@ -0,0 +1,20 @@ +.idea/ +.gradle/ +build/ +target/ +out/ +release/ +reports/ +*.iml +.DS_Store +*.log +gradle/ +gradlew +gradlew.bat +version.txt +input.json +output.json +.sdk.json +**/.sdk.json +notes/ +*.apk \ No newline at end of file diff --git a/src/backend/core/build.gradle b/src/backend/core/build.gradle index 2e7fcbf..44be8ee 100644 --- a/src/backend/core/build.gradle +++ b/src/backend/core/build.gradle @@ -1,6 +1,2 @@ group 'com.tencent.bk.devops' version 'unspecified' - -//dependencies { -// compile project(":ext:tencent") -//} diff --git a/src/backend/core/quality.json b/src/backend/core/quality.json new file mode 100644 index 0000000..5318863 --- /dev/null +++ b/src/backend/core/quality.json @@ -0,0 +1,5 @@ +{ + "stage": "DEVELOP", + "indicators": { + } +} \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt index 1e8b771..563ed48 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt @@ -2,9 +2,11 @@ package com.tencent.devops.api import com.fasterxml.jackson.core.type.TypeReference import com.tencent.bk.devops.atom.api.BaseApi +import com.tencent.bk.devops.atom.common.Constants import com.tencent.bk.devops.plugin.pojo.Result import com.tencent.bk.devops.plugin.utils.JsonUtil import com.tencent.devops.pojo.process.PipelineBuildTaskInfo +import java.io.File class PipelineTaskResourceApi : BaseApi() { diff --git a/src/backend/core/src/main/resources/config.json b/src/backend/core/src/main/resources/config.json index b868731..fa0a741 100644 --- a/src/backend/core/src/main/resources/config.json +++ b/src/backend/core/src/main/resources/config.json @@ -1,6 +1,6 @@ { "codeccScriptFile": "build_tool_external_rule_prod.py", - "codeccHost": "xxxx", - "codeccFrontHost": "xxxx", - "codeccDetail": "xxxx" + "codeccHost": "__CODECC_GATEWAY_HOST__", + "codeccFrontHost": "__DEVOPS_GATEWAY_HOST__", + "codeccDetail": "__CODECC_GATEWAY_HOST__" } \ No newline at end of file diff --git a/src/backend/core/task.json b/src/backend/core/task.json new file mode 100644 index 0000000..379b4a8 --- /dev/null +++ b/src/backend/core/task.json @@ -0,0 +1,421 @@ +{ + "atomCode": "CodeccCheckAtom", + "execution": { + "packagePath": "CodeccCheckAtom.jar", + "language": "java", + "minimumVersion": "1.8", + "demands": [], + "target": "java -jar CodeccCheckAtom.jar" + }, + "input": { + "languages": { + "rule": {}, + "type": "atom-checkbox-list", + "required": true, + "label": "工程语言", + "list": [], + "default": [], + "desc": "不同代码语言,可选择相匹配的工具", + "tabName": "basic" + }, + "tools": { + "rule": {}, + "required": true, + "hidden": true, + "type": "atom-checkbox-list", + "label": "代码检查工具", + "list": [], + "default": [], + "tabName": "basic" + }, + "asyncTask": { + "rule": {}, + "type": "enum-input", + "label": "执行方式", + "list": [ + { + "value": false, + "label": "同步" + }, + { + "value": true, + "label": "异步" + } + ], + "default": false, + "desc": "", + "tabName": "main", + "inline": true + }, + "asyncTaskId": { + "rule": { + "asyncTaskRequired": true + }, + "type": "task-select", + "label": "任务", + "required": true, + "tabName": "async", + "inline": true, + "list": {}, + "default": 0, + "rely": {} + }, + "goPath": { + "rule": {}, + "type": "vuex-input", + "label": "GOPATH", + "default": "", + "required": false, + "desc": "可帮助工具查找依赖库代码路径,更好地扫描告警", + "placeholder": "${WORKSPACE}下相对路径,多路径请用英文逗号分割,支持使用流水线变量", + "tabName": "basic", + "inline": true, + "rely": { + "operation": "AND", + "expression": [ + { + "key": "tools", + "value": "GOML" + } + ] + } + }, + "pyVersion": { + "rule": {}, + "type": "enum-input", + "label": "Python版本", + "required": true, + "list": [ + { + "label": "Python2", + "value": "py2" + }, + { + "label": "Python3", + "value": "py3" + } + ], + "default": "py3", + "tabName": "basic", + "inline": true, + "rely": { + "operation": "AND", + "expression": [ + { + "key": "tools", + "value": "PYLINT" + } + ] + } + }, + "scriptType": { + "rule": {}, + "type": "enum-input", + "label": "脚本类型", + "required": true, + "hidden": false, + "list": [ + { + "id": "sh", + "value": "SHELL", + "label": "Shell" + } + ], + "default": "SHELL", + "tabName": "basic", + "lang": "sh", + "inline": true + }, + "script": { + "rule": { + "scriptRequired": true + }, + "label": "脚本内容", + "hidden": false, + "default": "# Coverity/Klocwork将通过调用编译脚本来编译您的代码,以追踪深层次的缺陷\n# 请使用依赖的构建工具如maven/cmake等写一个编译脚本build.sh\n# 确保build.sh能够编译代码\n# cd path/to/build.sh\n# sh build.sh", + "required": true, + "type": "atom-ace-editor", + "desc": "相应工具将使用该脚本编译代码,以便追踪编译过程,发现代码缺陷", + "tabName": "basic" + }, + "languageRuleSetMap": { + "hidden": true, + "default": {} + }, + "C_CPP_RULE": { + "rule": { + "ruleSetRequired": true + }, + "type": "rule-set-select", + "label": "C/C++", + "required": true, + "tabName": "basic", + "inline": true, + "list": {}, + "default": [], + "rely": { + "operation": "AND", + "expression": [ + { + "key": "languages", + "value": "C_CPP" + } + ] + } + }, + "rtxReceiverType": { + "type": "selector", + "label": "接收人", + "default": "0", + "options": [ + { + "id": "0", + "name": "所有人员" + }, + { + "id": "1", + "name": "仅管理员" + }, + { + "id": "2", + "name": "自定义" + }, + { + "id": "3", + "name": "无(不发送)" + } + ], + "inline": true + }, + "rtxReceiverList": { + "type": "company-staff-input", + "label": "自定义接收人", + "default": [], + "rely": { + "operation": "AND", + "expression": [ + { + "key": "rtxReceiverType", + "value": "2" + } + ] + }, + "inline": true + }, + "botWebhookUrl": { + "label": "Webhook地址", + "placeholder": "代码检查完成后推送Coverity、Klocwork遗留告警数至群中", + "type": "vuex-input", + "default": "", + "inline": true + }, + "botContent": { + "label": "通知内容" + }, + "botRemindRange": { + "type": "enum-input", + "default": "1", + "label": "告警", + "list": [ + { + "value": "1", + "label": "新增" + }, + { + "value": "2", + "label": "遗留" + } + ], + "innerTab": true, + "inline": true + }, + "botRemindSeverity": { + "type": "selector", + "default": "7", + "options": [ + { + "id": "7", + "name": "总告警数" + }, + { + "id": "3", + "name": "严重 + 一般告警数" + }, + { + "id": "1", + "name": "严重告警数" + } + ], + "innerTab": true, + "inline": true + }, + "botRemaindTools": { + "type": "selector", + "default": [], + "label": "工具", + "innerTab": true, + "inline": true, + "optionsConf": { + "multiple": true + } + }, + "emailReceiverType": { + "type": "selector", + "label": "接收人", + "default": "0", + "options": [ + { + "id": "0", + "name": "所有人员" + }, + { + "id": "1", + "name": "仅管理员" + }, + { + "id": "2", + "name": "自定义" + }, + { + "id": "3", + "name": "无(不发送)" + } + ], + "inline": true + }, + "emailReceiverList": { + "type": "company-staff-input", + "label": "自定义接收人", + "default": [], + "rely": { + "operation": "AND", + "expression": [ + { + "key": "emailReceiverType", + "value": "2" + } + ] + }, + "inline": true + }, + "emailCCReceiverList": { + "type": "company-staff-input", + "label": "抄送人", + "default": [], + "inline": true, + "inputType": "all" + }, + "instantReportStatus": { + "label": "即时报告", + "default": "2", + "type": "enum-input", + "inline": true, + "list": [ + { + "value": "1", + "label": "启用" + }, + { + "value": "2", + "label": "停用" + } + ] + }, + "timerEmail": { + "label": "定时报告" + }, + "reportDate": { + "default": [], + "label": "每周", + "type": "week-selector", + "innerTab": true, + "inline": true + }, + "reportTime": { + "default": "", + "label": "时间", + "innerTab": true, + "inline": true + }, + "reportTools": { + "type": "selector", + "default": [], + "label": "工具", + "innerTab": true, + "inline": true, + "optionsConf": { + "multiple": true + } + }, + "toolScanType": { + "rule": {}, + "type": "radio-group", + "label": "扫描方式", + "required": true, + "list": [ + { + "label": "增量扫描(推荐)", + "value": "1" + }, + { + "label": "MR/PR扫描", + "value": "2" + }, + { + "label": "全量扫描", + "value": "0" + } + ], + "default": "1", + "descLink": "xxxxx", + "descLinkText": "了解更多", + "desc": "增量扫描:扫描本次构建与上次构建的差异代码。首次为全量扫描。\nMR/PR扫描:扫描MR/PR的源分支与目标分支的差异代码。源分支代码需拉取到工作空间。\n全量扫描:扫描全部代码。Klocwork、Pinpoint、Gometalinter、重复率仅支持该扫描方式。" + }, + "mrCommentEnable": { + "label": "", + "default": true, + "type": "atom-checkbox", + "text": "将扫描出的问题同步到工蜂代码查看页面" + }, + "newDefectJudgeFromDate": { + "default": "", + "label": "新告警判定", + "desc": "所选日期之后产生的告警为新告警" + }, + "transferAuthorList": { + "default": [], + "type": "author-transfer", + "label": "处理人转换", + "desc": "各工具原处理人的告警都将自动转给新处理人" + }, + "path": { + "default": [], + "type": "item-edit" + }, + "customPath": { + "default": [], + "type": "item-edit" + }, + "openScanPrj": { + "label": "", + "default": false, + "placeholder": "", + "type": "atom-checkbox", + "text": "是否是开源扫描项目", + "desc": "选中则走开源扫描流程", + "required": false, + "disabled": false, + "hidden": true + } + }, + "output": { + "BK_CI_CODECC_TASK_ID": { + "type": "string", + "description": "CodeCC的任务id" + }, + "BK_CI_CODECC_TASK_STATUS": { + "type": "string", + "description": "CodeCC任务是否运行成功,成功则未true,不然取不到" + } + } +} \ No newline at end of file diff --git a/src/backend/gradle.properties b/src/backend/gradle.properties new file mode 100644 index 0000000..871d346 --- /dev/null +++ b/src/backend/gradle.properties @@ -0,0 +1,3 @@ +MAVEN_CRED_USERNAME= +MAVEN_CRED_PASSWORD= +MAVEN_REPO_URL= diff --git a/src/backend/settings.gradle b/src/backend/settings.gradle index f938f15..72c2e21 100644 --- a/src/backend/settings.gradle +++ b/src/backend/settings.gradle @@ -2,7 +2,3 @@ rootProject.name = 'CodeccCheckAtom' include ":core" -include ":ext" -include ":ext:tencent" - - diff --git a/src/backend/settings.xml b/src/backend/settings.xml deleted file mode 100644 index 3502d66..0000000 --- a/src/backend/settings.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - nexus-tencentyun - central - Nexus tencentyun - https://mirrors.tencent.com/nexus/repository/maven-public/ - - - - - tencent_external - - - tencent_external - https://mirrors.tencent.com/nexus/repository/maven-public/ - - true - always - - - false - always - - - - - - tencent_external - https://mirrors.tencent.com/nexus/repository/maven-public/ - - true - always - - - false - - - - - - tencent_internal - - - tencent_internal - https://mirrors.tencent.com/repository/maven/tencent_public/ - - true - always - - - false - always - - - - - - tencent_internal - https://mirrors.tencent.com/repository/maven/tencent_public/ - - true - - - false - - - - - - - tencent_external - tencent_internal - - From 4394cd47cdd8dfa2dcafcb5ea50dfbeba051b4f8 Mon Sep 17 00:00:00 2001 From: linjun-ddddd <654548718@qq.com> Date: Fri, 23 Oct 2020 21:27:00 +0800 Subject: [PATCH 6/8] feat: init hash code & update sdk --- src/backend/build.gradle | 32 +- .../com/tencent/devops/api/CodeccApi.kt | 8 +- .../com/tencent/devops/api/CodeccReportApi.kt | 8 +- .../com/tencent/devops/api/CodeccSdkApi.kt | 62 ++- .../com/tencent/devops/api/CredentialApi.kt | 6 +- .../devops/api/PipelineTaskResourceApi.kt | 8 +- .../com/tencent/devops/api/RepositoryApi.kt | 6 +- .../com/tencent/devops/docker/DockerRun.kt | 30 +- .../kotlin/com/tencent/devops/docker/Scan.kt | 52 ++- .../com/tencent/devops/docker/ScanComposer.kt | 13 +- .../tencent/devops/docker/pojo/LandunParam.kt | 1 - .../com/tencent/devops/docker/scm/Scm.kt | 5 +- .../com/tencent/devops/docker/scm/ScmInfo.kt | 3 +- .../tencent/devops/docker/utils/CodeccWeb.kt | 25 +- .../devops/hash/constant/HashConstant.kt | 414 ++++++++++++++++++ .../devops/hash/core/FuzzyHashGenerate.kt | 308 +++++++++++++ .../devops/hash/core/HashGenerateProcess.kt | 91 ++++ .../tencent/devops/hash/core/RollHashUtil.kt | 43 ++ .../devops/hash/pojo/BlockHashContext.kt | 29 ++ .../tencent/devops/hash/pojo/FuzzyState.kt | 54 +++ .../devops/hash/pojo/HashGenerateInputFile.kt | 8 + .../hash/pojo/HashGenerateOutputFile.kt | 14 + .../com/tencent/devops/hash/pojo/RollState.kt | 37 ++ .../devops/pojo/CodeccExecuteConfig.kt | 4 +- .../exception/CodeccDependentException.kt | 6 +- .../devops/pojo/exception/CodeccException.kt | 4 +- .../exception/CodeccRepoServiceException.kt | 9 +- .../pojo/exception/CodeccTaskExecException.kt | 6 +- .../pojo/exception/CodeccTimeOutException.kt | 6 +- .../exception/CodeccUserConfigException.kt | 6 +- .../devops/pojo/repo/RepositoryConfig.kt | 9 +- .../devops/pojo/repo/RepositoryType.kt | 5 +- .../tencent/devops/utils/CodeccConfigUtils.kt | 7 +- .../tencent/devops/utils/CodeccEnvHelper.kt | 4 +- .../tencent/devops/utils/CodeccInstaller.kt | 4 +- .../devops/utils/CodeccParamsHelper.kt | 3 +- .../tencent/devops/utils/CodeccRepoHelper.kt | 29 +- .../tencent/devops/utils/CodeccReportUtils.kt | 6 +- .../devops/utils/CodeccReportUtilsV2.kt | 12 +- .../tencent/devops/utils/CodeccScriptUtils.kt | 15 +- .../tencent/devops/utils/CodeccSdkUtils.kt | 9 +- .../com/tencent/devops/utils/CodeccUtils.kt | 12 +- .../tencent/devops/utils/common/AtomUtils.kt | 7 +- .../tencent/devops/utils/common/EnvUtils.kt | 4 +- .../devops/utils/common/RepositoryUtils.kt | 2 +- .../core/src/main/resources/config.properties | 2 +- 46 files changed, 1225 insertions(+), 203 deletions(-) create mode 100644 src/backend/core/src/main/kotlin/com/tencent/devops/hash/constant/HashConstant.kt create mode 100644 src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/FuzzyHashGenerate.kt create mode 100644 src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/HashGenerateProcess.kt create mode 100644 src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/RollHashUtil.kt create mode 100644 src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/BlockHashContext.kt create mode 100644 src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/FuzzyState.kt create mode 100644 src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/HashGenerateInputFile.kt create mode 100644 src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/HashGenerateOutputFile.kt create mode 100644 src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/RollState.kt diff --git a/src/backend/build.gradle b/src/backend/build.gradle index d27b55a..4198cd4 100644 --- a/src/backend/build.gradle +++ b/src/backend/build.gradle @@ -6,16 +6,18 @@ buildscript { if (mavenRepoUrl == null) { mavenRepoUrl = MAVEN_REPO_URL } - println("mavenRepoUrl=" + mavenRepoUrl) + println("build script mavenRepoUrl=" + mavenRepoUrl) repositories { mavenLocal() + mavenCentral() + jcenter() maven { url mavenRepoUrl } } dependencies { classpath "com.github.jengelman.gradle.plugins:shadow:2.0.2" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.50" - classpath "org.jetbrains.kotlin:kotlin-allopen:1.2.10" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.21" + classpath "org.jetbrains.kotlin:kotlin-allopen:1.3.21" } ext { @@ -86,25 +88,16 @@ allprojects { if (mavenRepoUrl == null) { mavenRepoUrl = MAVEN_REPO_URL } - println("mavenRepoUrl=" + mavenRepoUrl) + println("all project mavenRepoUrl=" + mavenRepoUrl) mavenLocal() - maven { - url "https://maven.pkg.github.com/ci-plugins/java-plugin-sdk" - credentials { - username = mavenCredUserName - password = mavenCredPassword - } - } + mavenCentral() + jcenter() maven { url mavenRepoUrl } } dependencies { -// compile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.25-2020032705-SNAPSHOT" - compile "com.tencent.bk.devops.atom:java-atom-sdk:1.1.3-20200802401" -// compile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.24" + compile "com.tencent.devops.ci-plugins:java-plugin-sdk:1.0.4" compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" -// ktlint "com.github.shyiko:ktlint:0.34.2" - compile group: 'com.squareup.okhttp3', name: 'okhttp' compile "org.bouncycastle:bcprov-jdk16:$bouncyCastleVersion" compile "org.apache.commons:commons-exec:$commonExecVersion" compile "com.fasterxml.jackson.module:jackson-module-kotlin:$jacksonVersion" @@ -112,11 +105,10 @@ allprojects { compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion" compile "org.apache.commons:commons-compress:$compressVersion" compile "org.hashids:hashids:1.0.3" - testCompile group: 'junit', name: 'junit', version: '4.12' -// testCompile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.25-2020032705-SNAPSHOT" - testCompile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.25-2020052802-SNAPSHOT" -// testCompile "com.tencent.bk.devops.atom:java-atom-sdk:1.0.24" + compile group: 'commons-codec', name: 'commons-codec', version: '1.15' compile("org.apache.commons:commons-compress:1.15") + + testCompile group: 'junit', name: 'junit', version: '4.12' } compileKotlin { diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccApi.kt index da23e93..755a586 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccApi.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccApi.kt @@ -1,8 +1,8 @@ package com.tencent.devops.api import com.tencent.bk.devops.atom.api.BaseApi -import com.tencent.bk.devops.plugin.pojo.Result -import com.tencent.bk.devops.plugin.utils.OkhttpUtils +import com.tencent.bk.devops.atom.pojo.Result +import com.tencent.bk.devops.atom.utils.http.OkHttpUtils import com.tencent.devops.pojo.OSType import com.tencent.devops.pojo.exception.CodeccDependentException import okhttp3.Protocol @@ -26,7 +26,7 @@ class CodeccApi : BaseApi() { val path = "/ms/plugin/api/build/codecc/$tool?osType=${osType.name}&fileMd5=$fileMd5&is32Bit=$is32Bit" val request = buildGet(path) - val response = OkhttpUtils.doHttp(request) + val response = OkHttpUtils.doHttpRaw(request) val responseCode = response.code() if (responseCode == 304) { return Response.Builder().request(request) @@ -43,7 +43,7 @@ class CodeccApi : BaseApi() { fun downloadToolScript(osType: OSType, fileMd5: String): Response { val path = "/ms/plugin/api/build/codecc/tools/script?osType=${osType.name}&fileMd5=$fileMd5" val request = buildGet(path) - val response = OkhttpUtils.doHttp(request) + val response = OkHttpUtils.doHttpRaw(request) if (response.code() == 304) { return Response.Builder().request(request) .protocol(Protocol.HTTP_1_1) diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccReportApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccReportApi.kt index f960335..8aef9c4 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccReportApi.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccReportApi.kt @@ -2,16 +2,16 @@ package com.tencent.devops.api import com.fasterxml.jackson.core.type.TypeReference import com.tencent.bk.devops.atom.api.BaseApi -import com.tencent.bk.devops.plugin.pojo.Result -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.pojo.Result +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.pojo.report.CodeccCallback class CodeccReportApi : BaseApi() { - fun getCodeccReport(buildId: String): Result { + fun getCodeccReport(buildId: String): Result { val path = "/ms/plugin/api/build/codecc/report/builds/$buildId" val request = buildGet(path) val responseContent = request(request, "获取codecc报告失败") - return JsonUtil.to(responseContent, object : TypeReference>() {}) + return JsonUtil.fromJson(responseContent, object : TypeReference>(){}) } } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt index c98d0dc..27a8d40 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt @@ -29,9 +29,9 @@ package com.tencent.devops.api import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.module.kotlin.readValue import com.tencent.bk.devops.atom.api.BaseApi -import com.tencent.bk.devops.plugin.pojo.Result -import com.tencent.bk.devops.plugin.utils.JsonUtil -import com.tencent.bk.devops.plugin.utils.OkhttpUtils +import com.tencent.bk.devops.atom.pojo.Result +import com.tencent.bk.devops.atom.utils.http.OkHttpUtils +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.common.factory.SubProcessorFactory import com.tencent.devops.docker.tools.LogUtils import com.tencent.devops.pojo.CodeccCheckAtomParam @@ -41,7 +41,6 @@ import com.tencent.devops.pojo.CoverityResult import com.tencent.devops.pojo.OSType import com.tencent.devops.pojo.exception.CodeccDependentException import com.tencent.devops.pojo.exception.CodeccException -import com.tencent.devops.pojo.report.TaskFailReportReq import com.tencent.devops.pojo.sdk.CodeYmlFilterPathVO import com.tencent.devops.pojo.sdk.FilterPathInput import com.tencent.devops.pojo.sdk.NotifyCustom @@ -52,6 +51,7 @@ import com.tencent.devops.utils.CodeccEnvHelper.getOS import com.tencent.devops.utils.common.AtomUtils import okhttp3.MediaType import okhttp3.RequestBody +import org.apache.commons.lang3.StringUtils import java.net.URLEncoder object CodeccSdkApi : BaseApi() { @@ -65,7 +65,6 @@ object CodeccSdkApi : BaseApi() { private val metadataPath = "/ms/task/api/build/meta/metadatas" private val getTaskPath: String = "/ms/task/api/build/task/pipeline/{pipelineId}?userId={userId}" - private val objectMapper = JsonUtil.getObjectMapper() private const val USER_NAME_HEADER = "X-DEVOPS-UID" private const val DEVOPS_PROJECT_ID = "X-DEVOPS-PROJECT-ID" private const val CONTENT_TYPE = "Content-Type" @@ -128,7 +127,7 @@ object CodeccSdkApi : BaseApi() { val url =subSdkApi.getUrl() val result = - getCodeccResult(taskExecution(objectMapper.writeValueAsString(body), url, header, "POST")) + getCodeccResult(taskExecution(JsonUtil.toJson(body), url, header, "POST")) val resultMap = result.data as Map println("[初始化] Create CodeCC task response: $resultMap") @@ -150,7 +149,7 @@ object CodeccSdkApi : BaseApi() { "X-DEVOPS-TASK-ID" to taskId.toString() ) val responseContent = taskExecution(path = path, headers = headers, method = "POST", printLog = false) - return JsonUtil.to(responseContent, object : TypeReference>() {}) + return JsonUtil.fromJson(responseContent, object : TypeReference>(){}) } private fun startTask(taskId: String, buildId: String) { @@ -162,7 +161,7 @@ object CodeccSdkApi : BaseApi() { return if (param is CodeccCheckAtomParamV3) { if (param.languageRuleSetMap.isNullOrBlank()) return listOf() val languageRuleSetMap = - JsonUtil.getObjectMapper().readValue>>(param.languageRuleSetMap!!) + JsonUtil.fromJson>>(param.languageRuleSetMap!!) val ruleSetIds = mutableSetOf() languageRuleSetMap.values.forEach { ruleSetIds.addAll(it) } return ruleSetIds.map { RuleSetCheckV3(it) } @@ -198,8 +197,8 @@ object CodeccSdkApi : BaseApi() { if (codeCCTaskId.isNullOrBlank()) return CoverityResult() var body = mapOf( "pipelineName" to pipelineName, - "devopsCodeLang" to objectMapper.writeValueAsString(AtomUtils.parseStringToList(languages)), - "devopsTools" to objectMapper.writeValueAsString(AtomUtils.parseStringToList(tools)), + "devopsCodeLang" to JsonUtil.toJson(AtomUtils.parseStringToList(languages)), + "devopsTools" to JsonUtil.toJson(AtomUtils.parseStringToList(tools)), "taskId" to codeCCTaskId!!, "devopsToolParams" to devopsToolParams, "checkerSetList" to getRuleSetV3(param), @@ -227,7 +226,7 @@ object CodeccSdkApi : BaseApi() { // 设置url,区分工蜂和普通创建任务url val url =subSdkApi.getUrl() - getCodeccResult(taskExecution(objectMapper.writeValueAsString(body), url, header, "PUT")) + getCodeccResult(taskExecution(JsonUtil.toJson(body), url, header, "PUT")) } } @@ -246,7 +245,7 @@ object CodeccSdkApi : BaseApi() { "proj_id" to taskId, USER_NAME_HEADER to rtx ) - taskExecution(objectMapper.writeValueAsString(body), "$deletePath/$taskId", headers, "DELETE") + taskExecution(JsonUtil.toJson(body), "$deletePath/$taskId", headers, "DELETE") } fun getTaskByPipelineId(pipelineId: String, userId: String): PipelineTaskVO { @@ -255,7 +254,7 @@ object CodeccSdkApi : BaseApi() { val path = getTaskPath.replace("{pipelineId}", pipelineId).replace("{userId}", userId) val result = taskExecution("", path, header, "GET") println("Get the codecc task($result)") - return JsonUtil.to(result, object : TypeReference>() {}).data!! + return JsonUtil.fromJson(result, object : TypeReference>(){}).data!! } fun updateScanConfiguration(scanConfiguration: ScanConfiguration, userId: String): Result { @@ -263,19 +262,19 @@ object CodeccSdkApi : BaseApi() { val headers = mutableMapOf( "X-DEVOPS-UID" to userId ) - val jsonBody = objectMapper.writeValueAsString(scanConfiguration) + val jsonBody = JsonUtil.toJson(scanConfiguration) val responseContent = taskExecution( headers = headers, jsonBody = jsonBody, path = path, method = "POST" ) - return JsonUtil.to(responseContent, object : TypeReference>() {}) + return JsonUtil.fromJson(responseContent, object : TypeReference>(){}) } fun report(notifyCustom: NotifyCustom): Result { val path = "/ms/task/api/build/task/report" - val jsonBody = objectMapper.writeValueAsString(notifyCustom) + val jsonBody = JsonUtil.toJson(notifyCustom) val headers = mutableMapOf( "X-DEVOPS-TASK-ID" to notifyCustom.taskId!! ) @@ -285,7 +284,7 @@ object CodeccSdkApi : BaseApi() { headers = headers, method = "POST" ) - return JsonUtil.to(responseContent, object : TypeReference>() {}) + return JsonUtil.fromJson(responseContent, object : TypeReference>(){}) } fun addFilterPath(params: CodeccCheckAtomParamV3): Result { @@ -297,14 +296,14 @@ object CodeccSdkApi : BaseApi() { ) return if (filterPathInput.customPath != null && filterPathInput.customPath!!.isNotEmpty()) { - val jsonBody = objectMapper.writeValueAsString(filterPathInput) + val jsonBody = JsonUtil.toJson(filterPathInput) val responseContent = taskExecution( headers = headers, jsonBody = jsonBody, path = path, method = "POST" ) - JsonUtil.to(responseContent, object : TypeReference>() {}) + JsonUtil.fromJson(responseContent) } else { println("do not add filter path") Result(true) @@ -318,14 +317,14 @@ object CodeccSdkApi : BaseApi() { "X-DEVOPS-TASK-ID" to params.codeCCTaskId!! ) - val jsonBody = objectMapper.writeValueAsString(codeYmlFilterPathVO) + val jsonBody = JsonUtil.toJson(codeYmlFilterPathVO) val responseContent = taskExecution( headers = headers, jsonBody = jsonBody, path = path, method = "POST" ) - return JsonUtil.to(responseContent, object : TypeReference>() {}) + return JsonUtil.fromJson(responseContent, object : TypeReference>(){}) } private fun getFileInput(params: CodeccCheckAtomParamV3): FilterPathInput { @@ -338,7 +337,7 @@ object CodeccSdkApi : BaseApi() { return FilterPathInput( taskId = params.codeCCTaskId?.toLong(), pathType = params.pathType ?: "CUSTOM", - customPath = curSplitPaths.minus(oldPaths).filter { !it.isBlank() }, + customPath = curSplitPaths.minus(oldPaths).filter { !StringUtils.isBlank(it) }, filterDir = params.filterDir, filterFile = params.filterFile ) @@ -349,7 +348,7 @@ object CodeccSdkApi : BaseApi() { "X-DEVOPS-UID" to param.pipelineStartUserName ) val path = "/ms/task/api/build/task/filter/path/${param.codeCCTaskId}" - return JsonUtil.to(taskExecution(path = path, headers = headers), object : TypeReference>() {}) + return JsonUtil.fromJson(taskExecution(path = path, headers = headers), object : TypeReference>(){}) } // 删除路径屏蔽 @@ -375,7 +374,7 @@ object CodeccSdkApi : BaseApi() { val path = "/ms/task/api/build/meta/toolList?isDetail=false" val responseContent = taskExecution(path = path, headers = headers, printLog = false) println("get tool type successs") - return JsonUtil.to(responseContent, object : TypeReference>>() {}).data ?: listOf() + return JsonUtil.fromJson(responseContent, object : TypeReference>>(){}).data ?: listOf() } fun getMetadataToolType(userId: String): List { @@ -385,12 +384,11 @@ object CodeccSdkApi : BaseApi() { val responseContent = taskExecution(path = "$metadataPath?metadataType=TOOL_TYPE", headers = headers, printLog = false) println("get metadata tool type success") - val result = JsonUtil.getObjectMapper().readValue>>>>(responseContent).data - ?: mapOf() - return (result["TOOL_TYPE"] as List>).map { + val result = JsonUtil.fromJson(responseContent, object : TypeReference>>>(){}).data ?: mapOf() + return (result["TOOL_TYPE"] as List).map { MetaToolType( - key = it["key"] as String, - name = it["name"] as String + key = it.key as String, + name = it.name as String ) } } @@ -439,7 +437,7 @@ object CodeccSdkApi : BaseApi() { LogUtils.printDebugLog("CodeCC http request body: $jsonBody") } - OkhttpUtils.doHttp(backendRequest).use { response -> + OkHttpUtils.doHttpRaw(backendRequest).use { response -> val responseBody = response.body()!!.string() if (!response.isSuccessful) { System.err.println( @@ -456,14 +454,14 @@ object CodeccSdkApi : BaseApi() { } private fun getCodeccResult(responseBody: String): CoverityResult { - val result = objectMapper.readValue(responseBody) + val result = JsonUtil.fromJson(responseBody, object : TypeReference(){}) if (result.code != "0" || result.status != 0) throw CodeccDependentException("execute CodeCC task fail, code: ${result.code}, status: ${result.status} msg: ${result.message}") return result } private fun genToolCheckerV2(param: CodeccCheckAtomParam): List { val v2Param = param as CodeccCheckAtomParamV2 - return JsonUtil.getObjectMapper().readValue>(v2Param.toolRuleSets?.trim() ?: "") + return JsonUtil.fromJson(v2Param.toolRuleSets?.trim() ?: "", object : TypeReference>(){}) .map { ToolChecker(it.key, it.value) } } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CredentialApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CredentialApi.kt index 9bb2a12..ef82a50 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CredentialApi.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CredentialApi.kt @@ -2,8 +2,8 @@ package com.tencent.devops.api import com.fasterxml.jackson.core.type.TypeReference import com.tencent.bk.devops.atom.api.BaseApi -import com.tencent.bk.devops.plugin.pojo.Result -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.pojo.Result +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.pojo.ticket.CredentialInfo class CredentialApi : BaseApi() { @@ -12,6 +12,6 @@ class CredentialApi : BaseApi() { val path = "/ms/ticket/api/build/credentials/$credentialId?publicKey=${encode(publicKey)}" val request = buildGet(path) val responseContent = request(request, "获取凭据失败") - return JsonUtil.to(responseContent, object : TypeReference>() {}) + return JsonUtil.fromJson(responseContent, object : TypeReference>() {}) } } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt index 563ed48..64960d0 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/api/PipelineTaskResourceApi.kt @@ -2,11 +2,9 @@ package com.tencent.devops.api import com.fasterxml.jackson.core.type.TypeReference import com.tencent.bk.devops.atom.api.BaseApi -import com.tencent.bk.devops.atom.common.Constants -import com.tencent.bk.devops.plugin.pojo.Result -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.pojo.Result +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.pojo.process.PipelineBuildTaskInfo -import java.io.File class PipelineTaskResourceApi : BaseApi() { @@ -14,6 +12,6 @@ class PipelineTaskResourceApi : BaseApi() { val path = "/ms/process/api/build/task/getAllBuildTask" val request = buildGet(path) val responseContent = request(request, "领取构建机任务详情失败") - return JsonUtil.to(responseContent, object : TypeReference>>() {}) + return JsonUtil.fromJson(responseContent, object : TypeReference>>() {}) } } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/api/RepositoryApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/RepositoryApi.kt index c8d7bd0..bedff3d 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/api/RepositoryApi.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/api/RepositoryApi.kt @@ -2,8 +2,8 @@ package com.tencent.devops.api import com.fasterxml.jackson.core.type.TypeReference import com.tencent.bk.devops.atom.api.BaseApi -import com.tencent.bk.devops.plugin.pojo.Result -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.pojo.Result +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.pojo.repo.Repository import com.tencent.devops.pojo.repo.RepositoryConfig @@ -15,6 +15,6 @@ class RepositoryApi : BaseApi() { val path = "/ms/repository/api/build/repositories?repositoryId=$repositoryId&repositoryType=$name" val request = buildGet(path) val responseContent = request(request, "获取代码库失败") - return JsonUtil.to(responseContent, object : TypeReference>() {}) + return JsonUtil.fromJson(responseContent, object : TypeReference>(){}) } } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/DockerRun.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/DockerRun.kt index adcc2ac..668b4fa 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/DockerRun.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/DockerRun.kt @@ -1,21 +1,23 @@ package com.tencent.devops.docker import com.tencent.bk.devops.atom.common.Status -import com.tencent.bk.devops.plugin.docker.DockerApi -import com.tencent.bk.devops.plugin.docker.pojo.DockerRunLogRequest -import com.tencent.bk.devops.plugin.docker.pojo.DockerRunLogResponse -import com.tencent.bk.devops.plugin.docker.pojo.DockerRunRequest +import com.tencent.bk.devops.plugin.executor.docker.DockerApi +import com.tencent.bk.devops.plugin.pojo.docker.DockerRunLogRequest +import com.tencent.bk.devops.plugin.pojo.docker.DockerRunLogResponse +import com.tencent.bk.devops.plugin.pojo.docker.DockerRunRequest +import com.tencent.bk.devops.plugin.pojo.docker.common.DockerStatus import com.tencent.devops.docker.pojo.CommandParam import com.tencent.devops.docker.pojo.ImageParam import com.tencent.devops.docker.tools.LogUtils import com.tencent.devops.docker.utils.CodeccConfig import com.tencent.devops.pojo.exception.CodeccTaskExecException +import org.apache.commons.lang3.StringUtils import java.io.File object DockerRun { val api = DockerApi() - fun runImage(imageParam: ImageParam, commandParam: CommandParam) { + fun runImage(imageParam: ImageParam, commandParam: CommandParam, toolName: String) { LogUtils.printDebugLog("execute image params: $imageParam") val param = DockerRunRequest( @@ -45,7 +47,6 @@ object DockerRun { val isGongFengScan = channelCode == "GONGFENGSCAN" || commandParam.extraPrams["BK_CODECC_SCAN_MODE"] == "GONGFENGSCAN" val timeGap = if (isGongFengScan) 30 * 1000L else 5000L - var logError = 0; for (i in 1..100000000) { Thread.sleep(timeGap) @@ -55,12 +56,12 @@ object DockerRun { var isBlank = false runLogResponse.log?.forEachIndexed { index, s -> - if (s.isBlank()) { + if (StringUtils.isBlank(s)) { isBlank = true LogUtils.printStr(".") } else { if (isBlank) { - isBlank = false; + isBlank = false LogUtils.printLog("") } LogUtils.printLog("[docker]: $s") @@ -68,17 +69,12 @@ object DockerRun { } when (runLogResponse.status) { - Status.success -> { + DockerStatus.success -> { LogUtils.printLog("docker run success: $runLogResponse") return } - Status.logError -> { - logError++; - LogUtils.printLog("docker run get log error: $runLogResponse") - if (logError > 8) return - } - Status.failure, Status.error -> { - throw CodeccTaskExecException("docker run fail: $runLogResponse") + DockerStatus.failure -> { + throw CodeccTaskExecException(errorMsg = "docker run fail: $runLogResponse", toolName = toolName) } else -> { if (i % 16 == 0) LogUtils.printLog("docker run status: $runLogResponse") @@ -109,7 +105,7 @@ object DockerRun { } return DockerRunLogResponse( log = listOf(), - status = Status.logError, + status = DockerStatus.running, message = "", extraOptions = extraOptions ) diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt index 465ebf8..c260da7 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt @@ -3,7 +3,7 @@ package com.tencent.devops.docker import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.api.CodeccSdkApi import com.tencent.devops.common.factory.SubProcessorFactory import com.tencent.devops.docker.pojo.AnalyzeConfigInfo @@ -20,10 +20,11 @@ import com.tencent.devops.docker.tools.LogUtils import com.tencent.devops.docker.utils.CodeccConfig import com.tencent.devops.docker.utils.CodeccWeb import com.tencent.devops.docker.utils.CommonUtils +import com.tencent.devops.hash.core.HashGenerateProcess import com.tencent.devops.pojo.LinuxCodeccConstants import com.tencent.devops.utils.CodeccParamsHelper import com.tencent.devops.utils.script.ScriptUtils -import org.apache.commons.lang.StringUtils +import org.apache.commons.lang3.StringUtils import java.io.File import java.text.SimpleDateFormat import java.util.Date @@ -81,7 +82,7 @@ class Scan( image.command = realCmdList // DockerRun.runCmd(image, commandParam.streamCodePath) LogUtils.printDebugLog(image) - DockerRun.runImage(image, commandParam) + DockerRun.runImage(image, commandParam, toolName) } // diff 模式过滤掉非本次变更的文件内容 @@ -94,7 +95,9 @@ class Scan( // hashOutPut return if (File(outputFile).exists()) { LogUtils.printDebugLog("scan success, pp hash output file") - hashOutput() + if (toolName != "githubstatistic") { + newHashOutput() + } LogUtils.printDebugLog("pp hash output file success, update language") updateLanguage() LogUtils.printDebugLog("updateLanguage success, gather the defects") @@ -124,6 +127,13 @@ class Scan( } } + @ExperimentalUnsignedTypes + private fun newHashOutput(){ + val inputFile = getToolDataPath() + File.separator + "tool_scan_output.json" + val outputFile = getToolDataPath() + File.separator + "tool_scan_output_hash.json" + HashGenerateProcess.hashMethod(5, inputFile, outputFile) + } + private fun diffToolScanOutput(commandParam: CommandParam, streamName: String, toolName: String) { val outputFile = File(ScanComposer.generateToolDataPath(commandParam.dataRootPath, streamName, toolName) + File.separator + "tool_scan_output.json") val diffOutputFile = File(ScanComposer.generateToolDataPath(commandParam.dataRootPath, streamName, toolName) + File.separator + "git_branch_diff_output.json") @@ -131,14 +141,14 @@ class Scan( // 获取diff文件的map val diffFileMap = mutableMapOf /* file line */>() - JsonUtil.getObjectMapper().readValue>>(diffOutputFile.readText())["scm_increment"]?.forEach { scmDiffItem -> + JsonUtil.fromJson>>(diffOutputFile.readText())["scm_increment"]?.forEach { scmDiffItem -> scmDiffItem.diffFileList.map { diffFile -> val lineSet = diffFileMap[File(diffFile.filePath).canonicalPath] ?: mutableSetOf() lineSet.addAll(diffFile.diffLineList) diffFileMap[File(diffFile.filePath).canonicalPath] = lineSet } } - val outputFileList = JsonUtil.getObjectMapper().readValue(outputFile.readText()).defects + val outputFileList = JsonUtil.fromJson(outputFile.readText()).defects // 过滤没用的文件 val filterOutputFileList = if (toolName.equals(ToolConstants.CCN, true)) { @@ -163,9 +173,9 @@ class Scan( LogUtils.printDebugLog("generate no diff output file: ${noDiffOutputFile.canonicalPath}") // 重新填充defects字段 - val newOutputFileMap = JsonUtil.getObjectMapper().readValue>(outputFile.readText()).toMutableMap() + val newOutputFileMap = JsonUtil.fromJson>(outputFile.readText()).toMutableMap() newOutputFileMap["defects"] = filterOutputFileList - outputFile.writeText(JsonUtil.getObjectMapper().writeValueAsString(newOutputFileMap)) + outputFile.writeText(JsonUtil.toJson(newOutputFileMap)) } private fun outputFormatUpdate(): String { @@ -187,13 +197,13 @@ class Scan( val diffFileListMap = diffFileList.map { it.filePath to it }.toMap() if (outputFile.exists()) { - val outputData = JsonUtil.to(outputFile.readText(), object : TypeReference>() {}) + val outputData = JsonUtil.fromJson(outputFile.readText(), object : TypeReference>() {}) val defects = outputData["defects"] val filesMap = mutableMapOf>() if (defects is List<*>) { defects.forEach { val defectStr = jacksonObjectMapper().writeValueAsString(it) - val defect = JsonUtil.to(defectStr, object : TypeReference() {}) + val defect = JsonUtil.fromJson(defectStr, object : TypeReference() {}) val filePath = defect.filePath ?: (defect.file_path ?: (defect.filePathname ?: (defect.filename ?: ""))) @@ -229,13 +239,13 @@ class Scan( try { val outputFile = File(getToolDataPath() + File.separator + "tool_scan_output.json") if (outputFile.exists()) { - val outputData = JsonUtil.to(outputFile.readText(), object : TypeReference>() {}) + val outputData = JsonUtil.fromJson(outputFile.readText(), object : TypeReference>() {}) val defects = outputData["defects"] val filesMap = mutableMapOf>() if (defects is List<*>) { defects.forEachIndexed { _, it -> val defectStr = jacksonObjectMapper().writeValueAsString(it) - val defect = JsonUtil.to(defectStr, object : TypeReference() {}) + val defect = JsonUtil.fromJson(defectStr, object : TypeReference() {}) val filePath = defect.filePath ?: (defect.file_path ?: (defect.filePathname ?: (defect.filename ?: ""))) @@ -297,14 +307,14 @@ class Scan( val outputFile = File(getToolDataPath() + File.separator + "tool_scan_output.json") if (outputFile.exists()) { LogUtils.printDebugLog("outputFile exist: $outputFile") - val outputData = JsonUtil.to(outputFile.readText(), object : TypeReference>() {}) + val outputData = JsonUtil.fromJson(outputFile.readText(), object : TypeReference>() {}) val defects = outputData["defects"] if (defects is List<*>) { LogUtils.printDebugLog("defects is list, size: ${defects.size}") val languageSet = mutableSetOf() defects.forEachIndexed { _, it -> val defectStr = jacksonObjectMapper().writeValueAsString(it) - val defect = JsonUtil.to(defectStr, object : TypeReference() {}) + val defect = JsonUtil.fromJson(defectStr, object : TypeReference() {}) if (defect.language != null) { languageSet.add(defect.language) } @@ -334,7 +344,7 @@ class Scan( } image.command = realCmdList // DockerRun.runCmd(image, commandParam.streamCodePath) - DockerRun.runImage(image, commandParam) + DockerRun.runImage(image, commandParam, toolName) if (File(outputFile).exists()) { LogUtils.printLog("copy outputFile to inputFile") @@ -350,7 +360,7 @@ class Scan( } private fun traverseWhitePath(whitePath: String): MutableSet { - var whitePathTemp = if (whitePath.endsWith("/.*")){ + val whitePathTemp = if (whitePath.endsWith("/.*")){ whitePath.dropLast(3) } else if (whitePath.endsWith("/")){ whitePath.dropLast(1) @@ -405,12 +415,12 @@ class Scan( whitePathList.add(subPath.replace("//", "/")) } else { val subWhitePathList = traverseWhitePath(subPath) - whitePathList?.let { list1 -> subWhitePathList?.let(list1::addAll) } + whitePathList.let { list1 -> subWhitePathList.let(list1::addAll) } } } } else { val subWhitePathList = traverseWhitePath(whitePath) - whitePathList?.let { list1 -> subWhitePathList?.let(list1::addAll) } + whitePathList.let { list1 -> subWhitePathList.let(list1::addAll) } } } } @@ -465,9 +475,9 @@ class Scan( } if (analyzeConfigInfo.skipPaths != null) { val skipList = mutableSetOf() - analyzeConfigInfo.skipPaths!!.split(";").toList().forEach { subskipPath -> - val subskipList = subskipPath!!.split(",").toList() - skipList?.let { list1 -> subskipList?.let(list1::addAll) } + analyzeConfigInfo.skipPaths.split(";").toList().forEach { subskipPath -> + val subskipList = subskipPath.split(",").toList() + skipList.let { list1 -> subskipList.let(list1::addAll) } } skipPathList.addAll(skipList.filter { it.replace("\\.", ".").replace("+", "\\+") != "" }) } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/ScanComposer.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/ScanComposer.kt index 114a7bc..7fd7a75 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/ScanComposer.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/ScanComposer.kt @@ -3,7 +3,7 @@ package com.tencent.devops.docker import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.common.factory.SubProcessorFactory import com.tencent.devops.docker.pojo.AnalyzeConfigInfo import com.tencent.devops.docker.pojo.CommandParam @@ -25,6 +25,7 @@ import com.tencent.devops.pojo.exception.CodeccTaskExecException import com.tencent.devops.utils.CompressUtils import org.apache.commons.codec.digest.DigestUtils import org.apache.commons.io.FileUtils +import org.apache.commons.lang3.StringUtils import java.io.File import java.lang.reflect.Field import java.text.SimpleDateFormat @@ -55,7 +56,7 @@ object ScanComposer { LogUtils.printDebugLog("Get properties info from server...") val analyzeConfigInfo = CodeccWeb.getConfigDataByCodecc(streamName, toolName, commandParam) LogUtils.printDebugLog("Get properties info from server success") - if (commandParam.repoUrlMap.isBlank()) { + if (StringUtils.isBlank(commandParam.repoUrlMap)) { LogUtils.printDebugLog("No scm change scan type to full scan") analyzeConfigInfo.scanType = ScanType.FULL } @@ -288,7 +289,7 @@ object ScanComposer { try { val outputFile = File(generateToolDataPath(commandParam.dataRootPath, streamName, toolName) + File.separator + "tool_scan_output.json") if (outputFile.exists()) { - val outputData = JsonUtil.to(outputFile.readText(), object : TypeReference>() {}) + val outputData = JsonUtil.fromJson(outputFile.readText(), object : TypeReference>() {}) val defects = outputData["defects"] if (defects is List<*>) { defects.forEachIndexed { index, it -> @@ -297,7 +298,7 @@ object ScanComposer { return } val defectStr = jacksonObjectMapper().writeValueAsString(it) - val defect = JsonUtil.to(defectStr, object : TypeReference() {}) + val defect = JsonUtil.fromJson(defectStr, object : TypeReference() {}) LogUtils.printDefect(defect) } } @@ -320,7 +321,7 @@ object ScanComposer { if (outputFile.exists()) { val bakFile = File(generateToolDataPath(commandParam.dataRootPath, streamName, toolName) + File.separator + "tool_scan_output_bak.json") outputFile.copyTo(bakFile, true) - val outputData = JsonUtil.to(outputFile.readText(), object : TypeReference>() {}) + val outputData = JsonUtil.fromJson(outputFile.readText(), object : TypeReference>() {}) val defects = outputData["defects"] val fileData = mutableMapOf() if (defects != null) { @@ -405,7 +406,7 @@ object ScanComposer { } val md5Info = mutableMapOf() md5Info["filePath"] = filePahth - if (commandParam.repoRelPathMap.filterNot { it.key.isBlank() }.isNotEmpty()) { + if (commandParam.repoRelPathMap.filterNot { StringUtils.isBlank(it.key) }.isNotEmpty()) { commandParam.repoRelPathMap.forEach { repoRelPath -> val codePath = CommonUtils.changePathToDocker(File(commandParam.landunParam.streamCodePath, repoRelPath.value).canonicalPath) val re = Regex(codePath) diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/LandunParam.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/LandunParam.kt index 750a389..91da10f 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/LandunParam.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/pojo/LandunParam.kt @@ -3,7 +3,6 @@ package com.tencent.devops.docker.pojo import com.fasterxml.jackson.annotation.JsonIgnoreProperties import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue -import com.tencent.bk.devops.plugin.pojo.artifactory.ChannelCode @JsonIgnoreProperties(ignoreUnknown = true) data class LandunParam( diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/Scm.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/Scm.kt index ff3315d..b0d6942 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/Scm.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/Scm.kt @@ -8,6 +8,7 @@ import com.tencent.devops.docker.utils.CodeccWeb import com.tencent.devops.docker.utils.CommonUtils import com.tencent.devops.pojo.exception.CodeccTaskExecException import com.tencent.devops.pojo.exception.CodeccUserConfigException +import org.apache.commons.lang3.StringUtils import java.io.File abstract class Scm( @@ -18,7 +19,7 @@ abstract class Scm( ) { fun scmOperate(): Boolean { - if (commandParam.repoUrlMap.isBlank()) { + if (StringUtils.isBlank(commandParam.repoUrlMap)) { LogUtils.printLog("no scm element, return") return true } @@ -36,7 +37,7 @@ abstract class Scm( val imageParam = CodeccConfig.getImage("scm") imageParam.command = cmd try { - DockerRun.runImage(imageParam, commandParam) + DockerRun.runImage(imageParam, commandParam, toolName) } catch (e: Throwable) { LogUtils.printLog("Scm operate exception, message: ${e.message}") scmOpFail(inputFile) diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmInfo.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmInfo.kt index c39bae2..532be53 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmInfo.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/scm/ScmInfo.kt @@ -10,6 +10,7 @@ import com.tencent.devops.docker.tools.LogUtils import com.tencent.devops.docker.utils.CodeccWeb import com.tencent.devops.docker.utils.CommonUtils import com.tencent.devops.utils.CodeccParamsHelper +import org.apache.commons.lang3.StringUtils import java.io.File import java.net.URL @@ -99,7 +100,7 @@ class ScmInfo( override fun generateInputFile(): String { val inputFile = ScanComposer.generateToolDataPath(commandParam.dataRootPath, streamName, toolName) + File.separator + "scm_info_input.json" val dirPathList = mutableListOf() - if (commandParam.repoRelPathMap.filterNot { it.key.isBlank() }.isNotEmpty()) { + if (commandParam.repoRelPathMap.filterNot { StringUtils.isBlank(it.key) }.isNotEmpty()) { dirPathList.addAll(commandParam.repoRelPathMap.map { CommonUtils.changePathToDocker(commandParam.landunParam.streamCodePath + File.separator + it.value) }) } else { dirPathList.add(CommonUtils.changePathToDocker(commandParam.landunParam.streamCodePath)) diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt index f35e18e..26043c4 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/utils/CodeccWeb.kt @@ -4,8 +4,8 @@ import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import com.tencent.bk.devops.atom.api.BaseApi -import com.tencent.bk.devops.plugin.utils.JsonUtil -import com.tencent.bk.devops.plugin.utils.OkhttpUtils +import com.tencent.bk.devops.atom.utils.http.OkHttpUtils +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.docker.ScanComposer import com.tencent.devops.docker.pojo.* import com.tencent.devops.docker.tools.FileUtil @@ -72,7 +72,7 @@ object CodeccWeb : BaseApi() { } fun download(filePath: String, resultName: String, downloadType: String, landunParam: LandunParam): Boolean { - var size = 0L + var size: Long val headers = getHeader(landunParam) val downloadUrl = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("schedule_uri")}/api/build/fs/download/fileSize" val params = mapOf( @@ -125,7 +125,7 @@ object CodeccWeb : BaseApi() { .headers(Headers.of(headers)) .post(RequestBody.create(jsonMediaType, jacksonObjectMapper().writeValueAsString(param))) .build() - OkhttpUtils.doHttp(httpReq).use { resp -> + OkHttpUtils.doHttpRaw(httpReq).use { resp -> if (label == 0L) { FileOutputStream(filePath).use { fos -> fos.write(resp.body()!!.bytes()) @@ -234,7 +234,7 @@ object CodeccWeb : BaseApi() { val headers = getHeader(landunParam) val buildId = landunParam.buildId val url = "${CodeccConfig.getServerHost()}${CodeccConfig.getConfig("report_uri")}/api/build/parse/reportStatus/streamName/$streamName/toolName/${toolName.toUpperCase()}/buildId/$buildId" - val responseMap = JsonUtil.getObjectMapper().readValue>(sendGetRequest(url, headers)) + val responseMap = JsonUtil.fromJson(sendGetRequest(url, headers), object : TypeReference>(){}) if (responseMap["data"] == "PROCESSING") return false return true } @@ -305,9 +305,9 @@ object CodeccWeb : BaseApi() { .headers(Headers.of(headers)) .post(body) .build() - OkhttpUtils.doHttp(request).use { + OkHttpUtils.doHttpRaw(request).use { val responseData = it.body()!!.string() - val map = JsonUtil.to(responseData, object : TypeReference>() {}) + val map = JsonUtil.fromJson(responseData, object : TypeReference>() {}) if (map["status"] != 0) { throw CodeccDependentException("upload CodeCC file fail: $responseData") } @@ -331,9 +331,9 @@ object CodeccWeb : BaseApi() { .build() LogUtils.printDebugLog("merge url: $mergeUrl") LogUtils.printDebugLog("merge json: $mergeJson") - OkhttpUtils.doHttpNoRetry(mergeRequest).use { + OkHttpUtils.doHttpRaw(mergeRequest, false).use { val responseData = it.body()!!.string() - val map = JsonUtil.to(responseData, object : TypeReference>() {}) + val map = JsonUtil.fromJson(responseData, object : TypeReference>() {}) if (map["status"] != 0) { throw CodeccDependentException("do CodeCC file merge fail: $mergeParams, $responseData") } @@ -547,13 +547,13 @@ object CodeccWeb : BaseApi() { .post(RequestBody.create(jsonMediaType, requestBody)) .build() if (shortHttp) { - OkhttpUtils.doShortHttp(httpReq).use { resp -> + OkHttpUtils.doHttpRaw(httpReq).use { resp -> val responseStr = resp.body()!!.string() LogUtils.printDebugLog("response body: $responseStr") return responseStr } } else { - OkhttpUtils.doHttp(httpReq).use { resp -> + OkHttpUtils.doHttpRaw(httpReq).use { resp -> val responseStr = resp.body()!!.string() LogUtils.printDebugLog("response body: $responseStr") return responseStr @@ -582,7 +582,7 @@ object CodeccWeb : BaseApi() { .headers(Headers.of(headers)) .get() .build() - OkhttpUtils.doShortHttp(httpReq).use { resp -> + OkHttpUtils.doHttpRaw(httpReq).use { resp -> val responseStr = resp.body()!!.string() LogUtils.printDebugLog("response body: $responseStr") //非200状态位都重试 @@ -631,3 +631,4 @@ object CodeccWeb : BaseApi() { } } } + diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/constant/HashConstant.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/constant/HashConstant.kt new file mode 100644 index 0000000..c13c90a --- /dev/null +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/constant/HashConstant.kt @@ -0,0 +1,414 @@ +package com.tencent.devops.hash.constant + +const val SPAMSUM_LENGTH = 64 +const val NUM_BLOCKHASHES = 31 +const val ROLLING_WINDOW = 7 +@ExperimentalUnsignedTypes +const val MIN_BLOCKSIZE : ULong= 3UL +const val HASH_INIT = 0x27 +//todo 这两个状态位要看 +@ExperimentalUnsignedTypes +const val FUZZY_STATE_NEED_LASTHASH = 1 +@ExperimentalUnsignedTypes +const val FUZZY_STATE_SIZE_FIXED = 2 + +@ExperimentalUnsignedTypes +const val FUZZY_FLAG_NOTRUNC = 0x2 + +const val FUZZY_MAX_RESULT = 2 * SPAMSUM_LENGTH + 20 + +/** + * 根据FNV哈希算法 + * hash = offset_basis + * for each octet_of_data to be hashed + * hash = hash * FNV_prime + * hash = hash xor octet_of_data + * return hash + * 如果只关注结果哈希的后6位,则可以通过预计算得出新增字段和原有哈希的后6位值的映射 + */ +val sumTable = arrayOf( + intArrayOf( + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f + ), + intArrayOf( + 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, + 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, + 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, + 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c + ), + intArrayOf( + 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, + 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, + 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, + 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19 + ), + intArrayOf( + 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, + 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, + 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, + 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06 + ), + intArrayOf( + 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, + 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, + 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, + 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33 + ), + intArrayOf( + 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, + 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, + 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, + 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20 + ), + intArrayOf( + 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, + 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, + 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, + 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d + ), + intArrayOf( + 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, + 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, + 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, + 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a + ), + intArrayOf( + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27 + ), + intArrayOf( + 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, + 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, + 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, + 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14 + ), + intArrayOf( + 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, + 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, + 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, + 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01 + ), + intArrayOf( + 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, + 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, + 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, + 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e + ), + intArrayOf( + 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, + 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, + 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, + 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b + ), + intArrayOf( + 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, + 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, + 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08 + ), + intArrayOf( + 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, + 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, + 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, + 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35 + ), + intArrayOf( + 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, + 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, + 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, + 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22 + ), + intArrayOf( + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f + ), + intArrayOf( + 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, + 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, + 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, + 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c + ), + intArrayOf( + 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, + 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, + 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, + 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29 + ), + intArrayOf( + 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, + 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, + 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, + 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16 + ), + intArrayOf( + 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, + 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, + 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, + 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03 + ), + intArrayOf( + 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, + 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, + 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, + 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30 + ), + intArrayOf( + 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, + 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, + 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, + 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d + ), + intArrayOf( + 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, + 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, + 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, + 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a + ), + intArrayOf( + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 + ), + intArrayOf( + 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, + 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, + 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, + 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24 + ), + intArrayOf( + 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, + 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, + 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, + 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11 + ), + intArrayOf( + 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, + 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, + 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, + 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e + ), + intArrayOf( + 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, + 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, + 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, + 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b + ), + intArrayOf( + 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, + 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, + 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18 + ), + intArrayOf( + 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, + 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, + 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, + 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05 + ), + intArrayOf( + 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, + 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, + 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, + 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32 + ), + intArrayOf( + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f + ), + intArrayOf( + 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, + 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, + 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, + 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c + ), + intArrayOf( + 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, + 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, + 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, + 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39 + ), + intArrayOf( + 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, + 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, + 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, + 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26 + ), + intArrayOf( + 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, + 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, + 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, + 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13 + ), + intArrayOf( + 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, + 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, + 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, + 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 + ), + intArrayOf( + 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, + 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, + 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, + 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d + ), + intArrayOf( + 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, + 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, + 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, + 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a + ), + intArrayOf( + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 + ), + intArrayOf( + 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, + 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, + 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, + 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34 + ), + intArrayOf( + 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, + 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, + 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, + 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21 + ), + intArrayOf( + 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, + 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, + 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, + 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e + ), + intArrayOf( + 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, + 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, + 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, + 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b + ), + intArrayOf( + 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, + 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, + 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28 + ), + intArrayOf( + 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, + 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, + 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, + 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15 + ), + intArrayOf( + 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, + 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, + 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, + 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02 + ), + intArrayOf( + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f + ), + intArrayOf( + 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, + 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, + 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, + 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c + ), + intArrayOf( + 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, + 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, + 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, + 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09 + ), + intArrayOf( + 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, + 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, + 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, + 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36 + ), + intArrayOf( + 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, + 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, + 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, + 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23 + ), + intArrayOf( + 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, + 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, + 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, + 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10 + ), + intArrayOf( + 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, + 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, + 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, + 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d + ), + intArrayOf( + 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, + 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, + 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, + 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a + ), + intArrayOf( + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 + ), + intArrayOf( + 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, + 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, + 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, + 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04 + ), + intArrayOf( + 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, + 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, + 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, + 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31 + ), + intArrayOf( + 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, + 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, + 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, + 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e + ), + intArrayOf( + 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, + 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, + 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, + 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b + ), + intArrayOf( + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, + 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, + 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, + 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38 + ), + intArrayOf( + 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, + 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, + 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, + 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25 + ), + intArrayOf( + 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, + 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, + 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, + 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12 + ) +) \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/FuzzyHashGenerate.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/FuzzyHashGenerate.kt new file mode 100644 index 0000000..14fe599 --- /dev/null +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/FuzzyHashGenerate.kt @@ -0,0 +1,308 @@ +package com.tencent.devops.hash.core + +import com.tencent.devops.hash.constant.* +import com.tencent.devops.hash.pojo.BlockHashContext +import com.tencent.devops.hash.pojo.FuzzyState +import com.tencent.devops.hash.pojo.RollState + + +@ExperimentalUnsignedTypes +object FuzzyHashGenerate { + + private val SSDEEP_TOTAL_SIZE_MAX = blockSizeShift(NUM_BLOCKHASHES - 1) * SPAMSUM_LENGTH.toULong() + + private const val b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + + /** + * 生成模糊哈希步骤,总共分两大步: + * 1. 根据传入的字符串逐个滚动哈希,并且计算每个blockSize的强哈希值 + * 2. 根据滚动哈希计算的结果,进行消化总结,生成最终的模糊哈希值 + */ + fun fuzzyHashGenerate(inputStr: String): String? { + //1. 初始化上下文对象 + val fuzzyContext = FuzzyState( + totalSize = 0, + fixedSize = 0, + reduceBorder = MIN_BLOCKSIZE.toLong() * SPAMSUM_LENGTH, + bhStart = 0, + bhEnd = 1, + bhEndLimit = NUM_BLOCKHASHES - 1, + flags = 0, + rollMask = 0, + rollState = RollState( + h1 = 0u, + h2 = 0u, + h3 = 0u, + n = 0 + ), + lasth = Char.MIN_VALUE.toInt() + ) + fuzzyContext.bh[0] = BlockHashContext( + dIndex = 0, + halfDigest = Char.MIN_VALUE, + h = HASH_INIT, + halfh = HASH_INIT + ) + fuzzyContext.bh[0]!!.digest[0] = Char.MIN_VALUE + //2.初始化上下文参数 + if (!fuzzySetTotalInputLength(fuzzyContext, inputStr)) { + return null + } + //3.逐个传入字符串中的字符,进行滚动哈希,并计算强哈希,在此之前需要设置totalSize + val ssdeepMaxLength = SSDEEP_TOTAL_SIZE_MAX.toLong() + if (inputStr.length > ssdeepMaxLength) { + fuzzyContext.totalSize = ssdeepMaxLength - 1 + } else { + fuzzyContext.totalSize += inputStr.length + } + inputStr.forEach { + fuzzyEngineStep(fuzzyContext, it) + } + return fuzzyDigest(fuzzyContext, 0) + } + + private fun blockSizeShift(index: Int): ULong { + return MIN_BLOCKSIZE shl index + } + + /** + * 初始化长度记录,及位移上限 + */ + private fun fuzzySetTotalInputLength(fuzzyContext: FuzzyState, inputStr: String): Boolean { + var bi = 0 + //如果输入的字符串长度超过上限,则报错 + if (inputStr.length.toULong() > SSDEEP_TOTAL_SIZE_MAX) { + println("input string too long!") + return false + } + //如果是固定的状态,但是固定长度不等于输入字符串长度,则报错 + if (fuzzyContext.flags and FUZZY_STATE_SIZE_FIXED > 0 && + fuzzyContext.fixedSize != inputStr.length.toLong() + ) { + println("fixed size state, but size not equal!") + return false + } + fuzzyContext.flags = fuzzyContext.flags or FUZZY_STATE_SIZE_FIXED + fuzzyContext.fixedSize = inputStr.length.toLong() + //确定位移的上限 + while (blockSizeShift(bi) * SPAMSUM_LENGTH.toULong() < inputStr.length.toULong()) { + bi++ + if (bi == NUM_BLOCKHASHES - 2) { + break + } + } + bi++ + fuzzyContext.bhEndLimit = bi + return true + } + + /** + * 最主要的哈希引擎逻辑 + */ + private fun fuzzyEngineStep(fuzzyContext: FuzzyState, singleChar: Char) { + var h: UInt + //计算滚动哈希的值 + RollHashUtil.rollHash(fuzzyContext.rollState, singleChar) + //对于滚动哈希求和 + val horg: UInt = RollHashUtil.rollSum(fuzzyContext.rollState) + 1u + //求出滚动哈希值与最小分片的商,便于之后调整分片值时直接进行移位操作 + h = horg / (MIN_BLOCKSIZE.toUInt()) + + //先根据传进来的字符累加计算FNV,并取后6位(从已经计算好的table里面来取) + for (j in fuzzyContext.bhStart until fuzzyContext.bhEnd) { + if (null != fuzzyContext.bh[j]) { + fuzzyContext.bh[j]!!.h = sumTable[fuzzyContext.bh[j]!!.h][singleChar.toInt() and 0x3f] + fuzzyContext.bh[j]!!.halfh = + sumTable[fuzzyContext.bh[j]!!.halfh][singleChar.toInt() and 0x3f] + } + } + if ((fuzzyContext.flags and FUZZY_STATE_NEED_LASTHASH) != 0) { + fuzzyContext.lasth = sumTable[fuzzyContext.lasth][singleChar.toInt() and 0x3f] + } + //判断几个条件,如果都通过了则进行分片的逻辑 + if (horg == 0u) { + println("rolling hash zero result") + return + } + if ((h.toInt() and fuzzyContext.rollMask) != 0) { + return + } + if (horg % MIN_BLOCKSIZE > 0u) { + return + } + + h = h shr fuzzyContext.bhStart + var i = fuzzyContext.bhStart + + run trigger@{ + do { + with(fuzzyContext) { + if (null != bh[i] && bh[i]!!.dIndex == 0) { + fuzzyTryForkBlockHash(this) + } + if (null == bh[i]) { + bh[i] = BlockHashContext( + dIndex = 0, + halfDigest = Char.MIN_VALUE, + h = HASH_INIT, + halfh = HASH_INIT + ) + bh[i]!!.digest[0] = Char.MIN_VALUE + } + bh[i]!!.digest[bh[i]!!.dIndex] = b64[bh[i]!!.h] + bh[i]!!.halfDigest = b64[bh[i]!!.halfh] + if (bh[i]!!.dIndex < SPAMSUM_LENGTH - 1) { + bh[i]!!.digest[++(bh[i]!!.dIndex)] = Char.MIN_VALUE + bh[i]!!.h = HASH_INIT + if (bh[i]!!.dIndex < SPAMSUM_LENGTH / 2) { + bh[i]!!.halfh = HASH_INIT + bh[i]!!.halfDigest = Char.MIN_VALUE + } + } else { + fuzzyTryReduceBlockHash(fuzzyContext) + } + if ((h and 1u) != 0u) { + return@trigger + } + h = h shr 1 + } + } while (++i < fuzzyContext.bhEnd) + } + } + + /** + * 扩展一个新的blocksize对应的数组 + */ + private fun fuzzyTryForkBlockHash(fuzzyContext: FuzzyState) { + val oldbh = fuzzyContext.bh[fuzzyContext.bhEnd - 1] + if (fuzzyContext.bhEnd <= fuzzyContext.bhEndLimit) { + if(null == fuzzyContext.bh[fuzzyContext.bhEnd]){ + fuzzyContext.bh[fuzzyContext.bhEnd] = BlockHashContext( + dIndex = 0, + halfDigest = Char.MIN_VALUE, + h = oldbh?.h ?: HASH_INIT, + halfh = oldbh?.halfh ?: HASH_INIT + ) + fuzzyContext.bh[fuzzyContext.bhEnd]!!.digest[0] = Char.MIN_VALUE + fuzzyContext.bhEnd++ + } + } else if (fuzzyContext.bhEnd == NUM_BLOCKHASHES && + (fuzzyContext.flags and FUZZY_STATE_NEED_LASTHASH == 0) + ) { + fuzzyContext.flags = fuzzyContext.flags or FUZZY_STATE_NEED_LASTHASH + fuzzyContext.lasth = oldbh?.h ?: Char.MIN_VALUE.toInt() + } + } + + /** + * 更新模糊哈希的界限,及屏蔽位数,并且舍弃对应bhStart,右移一位 + */ + private fun fuzzyTryReduceBlockHash(fuzzyContext: FuzzyState) { + if (fuzzyContext.bhEnd - fuzzyContext.bhStart < 2) { + return + } + if (fuzzyContext.reduceBorder >= if ((fuzzyContext.flags and FUZZY_STATE_SIZE_FIXED) != 0) fuzzyContext.fixedSize else fuzzyContext.totalSize) { + return + } + if (null != fuzzyContext.bh[fuzzyContext.bhStart + 1] && fuzzyContext.bh[fuzzyContext.bhStart + 1]!!.dIndex < SPAMSUM_LENGTH / 2) { + return + } + fuzzyContext.bhStart++ + fuzzyContext.reduceBorder *= 2 + fuzzyContext.rollMask = fuzzyContext.rollMask * 2 + 1 + } + + /** + * 根据哈希的计算值,拼装完整的计算结果 + */ + private fun fuzzyDigest(fuzzyContext: FuzzyState, flags: Int): String? { + var bi = fuzzyContext.bhStart + val h = RollHashUtil.rollSum(fuzzyContext.rollState) + var result: String + + if(fuzzyContext.bhStart > fuzzyContext.bhEnd){ + return null + } + if (!(bi == 0 || blockSizeShift(bi).toLong() / 2 * SPAMSUM_LENGTH < fuzzyContext.totalSize)) { + println("length with blocksize shift $bi is to large") + return null + } + + if (fuzzyContext.totalSize.toULong() > SSDEEP_TOTAL_SIZE_MAX) { + return null + } + + if ((fuzzyContext.flags and FUZZY_STATE_SIZE_FIXED > 0) && + fuzzyContext.fixedSize != fuzzyContext.totalSize + ) { + return null + } + + //估算blocksize确定值 + while (blockSizeShift(bi).toLong() * SPAMSUM_LENGTH < fuzzyContext.totalSize) { + bi++ + } + if (bi >= fuzzyContext.bhEnd) { + bi = fuzzyContext.bhEnd - 1 + } + while (bi > fuzzyContext.bhStart && (null == fuzzyContext.bh[bi] || + (null != fuzzyContext.bh[bi] && fuzzyContext.bh[bi]!!.dIndex < SPAMSUM_LENGTH / 2)) + ) { + bi-- + } + if (bi > 0 && (null == fuzzyContext.bh[bi] || fuzzyContext.bh[bi]!!.dIndex < SPAMSUM_LENGTH / 2)) { + return null + } + + //拼装结果 + //先拼装一倍blocksize的结果,判断滚动哈希不为空,则表示最新的一个分片采用滚动哈希的值 + if (h != 0u) { + fuzzyContext.bh[bi]!!.digest[fuzzyContext.bh[bi]!!.dIndex] = b64[fuzzyContext.bh[bi]!!.h] + } + result = + "${blockSizeShift(bi)}:${String(fuzzyContext.bh[bi]!!.digest).filter {it != Char.MIN_VALUE}}" + if (result.length > FUZZY_MAX_RESULT - 1) { + return null + } + + //再拼装两倍blocksize的结果 + if (bi < fuzzyContext.bhEnd - 1) { + ++bi + if (null == fuzzyContext.bh[bi]) { + return null + } + var secondHash = String(fuzzyContext.bh[bi]!!.digest).filter { it != Char.MIN_VALUE } + if ((flags and FUZZY_FLAG_NOTRUNC) == 0 && + secondHash.length > SPAMSUM_LENGTH / 2 + ) { + secondHash = secondHash.substring(0, SPAMSUM_LENGTH / 2 - 1) + } + fuzzyContext.bh[bi]!!.digest[fuzzyContext.bh[bi]!!.dIndex] = if (h != 0u) { + b64[if ((flags and FUZZY_FLAG_NOTRUNC) != 0) fuzzyContext.bh[bi]!!.h else fuzzyContext.bh[bi]!!.halfh] + } else { + if ((flags and FUZZY_FLAG_NOTRUNC) != 0) fuzzyContext.bh[bi]!!.digest[fuzzyContext.bh[bi]!!.dIndex] else fuzzyContext.bh[bi]!!.halfDigest + } + if (fuzzyContext.bh[bi]!!.digest[fuzzyContext.bh[bi]!!.dIndex] != Char.MIN_VALUE + ) { + secondHash = secondHash.plus(fuzzyContext.bh[bi]!!.digest[fuzzyContext.bh[bi]!!.dIndex]) + } + result = "$result:$secondHash" + } else if (h != 0u) { + if (bi != 0 && bi != NUM_BLOCKHASHES - 1) { + return null + } + if (bi == 0) { + result = if (null != fuzzyContext.bh[bi]) { + "$result:${b64[fuzzyContext.bh[bi]!!.h]}" + } else { + "$result:${b64[fuzzyContext.lasth]}" + } + } + } + result = result.plus(Char.MIN_VALUE) + if (result.length > FUZZY_MAX_RESULT) { + return null + } + return result + } +} \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/HashGenerateProcess.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/HashGenerateProcess.kt new file mode 100644 index 0000000..688750f --- /dev/null +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/HashGenerateProcess.kt @@ -0,0 +1,91 @@ +package com.tencent.devops.hash.core + +import com.fasterxml.jackson.core.type.TypeReference +import com.tencent.bk.devops.atom.utils.json.JsonUtil +import com.tencent.devops.hash.pojo.HashGenerateInputFile +import com.tencent.devops.hash.pojo.HashGenerateOutputFile +import java.io.File + +@ExperimentalUnsignedTypes +object HashGenerateProcess { + + fun hashMethod(range: Int, inputFileName: String, outputFileName : String){ + val startTime = System.currentTimeMillis() + val inputFile = File(inputFileName) + if (!inputFile.exists()) { + println("input file does not exists!") + return + } + val hashInputList = try { + JsonUtil.fromJson>>(inputFile.readText())["defects"] + } catch (e: Exception) { + println("deserialize input file fail!") + return + } + val hashFileList = hashInputList!!.groupBy { it.filePath } + val hashGenerateOutputList = mutableListOf() + hashFileList.forEach { + hashGenerateOutputList.addAll(generateSingleHash(it.key, it.value, range)) + } + val outputFile = File(outputFileName) + outputFile.writeText(JsonUtil.toJson(mapOf("defects" to hashGenerateOutputList))) + outputFile.copyTo(inputFile, true) + println("pp hash finish! time cost: ${System.currentTimeMillis() - startTime}") + } + + + /** + * 单个文件分组生成模糊哈希 + */ + @ExperimentalUnsignedTypes + private fun generateSingleHash(filePath: String, hashGenerateInputList: List, range: Int): + List { + val hashFile = File(filePath) + if (!hashFile.exists()) { + return emptyList() + } + val sortHashGenerateInputList = hashGenerateInputList.groupBy { it.line } +// var hashedLineNum = sortedHashInputList[i].line.toInt() + val hashGenerateOutputList = mutableListOf() + val lineList = hashFile.readLines() + sortHashGenerateInputList.forEach { (t, u) -> + var startIndex = t.toInt() - 1 + var endIndex = t.toInt() - 1 + var i = 1 + while (i <= range) { + if((--startIndex) < 0){ + startIndex = 0 + break + } + if (lineList[startIndex].trim() != "") { + i++ + } + } + i = 1 + while (i <= range) { + if((++endIndex) > lineList.size - 1){ + endIndex = lineList.size - 1 + break + } + if (lineList[endIndex].trim() != "") { + i++ + } + } + val inputStr = lineList.subList(startIndex, endIndex) + .fold(StringBuilder()) { buff, str -> buff.append(str.replace("\\s".toRegex(), "")) } + val fuzzyHash = FuzzyHashGenerate.fuzzyHashGenerate(inputStr.toString()) + hashGenerateOutputList.addAll( + u.map { + HashGenerateOutputFile( + it.checkerName, + it.description, + it.filePath, + it.line, + fuzzyHash + ) + } + ) + } + return hashGenerateOutputList + } +} \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/RollHashUtil.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/RollHashUtil.kt new file mode 100644 index 0000000..18fdb87 --- /dev/null +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/RollHashUtil.kt @@ -0,0 +1,43 @@ +package com.tencent.devops.hash.core + +import com.tencent.devops.hash.constant.ROLLING_WINDOW +import com.tencent.devops.hash.pojo.RollState + +/** + * 负责强哈希和若哈希的工具类 + */ +@ExperimentalUnsignedTypes +object RollHashUtil { + + /** + * adler-32滚动哈希算法,但是这里和标准哈希有所区别,少了额外加的1 + * 滚动哈希的好处是每次只需要计算去掉字符的影响因素,并加上新增字符 + * 的影响因素,就可以得到最新值(此处滚动哈希方法有带商榷) + */ + fun rollHash(rollState: RollState, singleChar: Char) { + val charValue = singleChar.toInt().toUInt() + //计算h2的值,新增的字符影响最大 + rollState.h2 -= rollState.h1 + rollState.h2 += ROLLING_WINDOW.toUInt() * charValue + + rollState.h1 += charValue + rollState.h1 -= rollState.window[rollState.n].toInt().toUInt() + + rollState.window[rollState.n] = singleChar + rollState.n++ + + if (rollState.n == ROLLING_WINDOW) { + rollState.n = 0 + } + + rollState.h3 = rollState.h3 shl 5 + rollState.h3 = rollState.h3 xor charValue + } + + /** + * 返回滚动哈希的和 + */ + fun rollSum(rollState: RollState): UInt { + return rollState.h1 + rollState.h2 + rollState.h3 + } +} \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/BlockHashContext.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/BlockHashContext.kt new file mode 100644 index 0000000..37d2dc7 --- /dev/null +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/BlockHashContext.kt @@ -0,0 +1,29 @@ +package com.tencent.devops.hash.pojo + +import com.tencent.devops.hash.constant.SPAMSUM_LENGTH + +data class BlockHashContext( + var dIndex : Int, + val digest: CharArray = CharArray(SPAMSUM_LENGTH), + var halfDigest : Char, + var h : Int, + var halfh : Int +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as BlockHashContext + + if (dIndex != other.dIndex) return false + if (!digest.contentEquals(other.digest)) return false + + return true + } + + override fun hashCode(): Int { + var result = dIndex + result = 31 * result + digest.contentHashCode() + return result + } +} \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/FuzzyState.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/FuzzyState.kt new file mode 100644 index 0000000..d3b2578 --- /dev/null +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/FuzzyState.kt @@ -0,0 +1,54 @@ +package com.tencent.devops.hash.pojo + +import com.tencent.devops.hash.constant.NUM_BLOCKHASHES + +data class FuzzyState( + var totalSize : Long, + var fixedSize : Long, + var reduceBorder : Long, + var bhStart : Int, + var bhEnd : Int, + var bhEndLimit : Int, + var flags : Int, + var rollMask : Int, + val bh : Array = arrayOfNulls(NUM_BLOCKHASHES), + val rollState : RollState, + var lasth : Int +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as FuzzyState + + if (totalSize != other.totalSize) return false + if (fixedSize != other.fixedSize) return false + if (reduceBorder != other.reduceBorder) return false + if (bhStart != other.bhStart) return false + if (bhEnd != other.bhEnd) return false + if (bhEndLimit != other.bhEndLimit) return false + if (flags != other.flags) return false + if (rollMask != other.rollMask) return false + if (!bh.contentEquals(other.bh)) return false + if (rollState != other.rollState) return false + if (lasth != other.lasth) return false + + return true + } + + @ExperimentalUnsignedTypes + override fun hashCode(): Int { + var result = totalSize.hashCode() + result = 31 * result + fixedSize.hashCode() + result = 31 * result + reduceBorder.hashCode() + result = 31 * result + bhStart + result = 31 * result + bhEnd + result = 31 * result + bhEndLimit + result = 31 * result + flags + result = 31 * result + rollMask + result = 31 * result + bh.contentHashCode() + result = 31 * result + rollState.hashCode() + result = 31 * result + lasth + return result + } +} \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/HashGenerateInputFile.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/HashGenerateInputFile.kt new file mode 100644 index 0000000..c406a1c --- /dev/null +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/HashGenerateInputFile.kt @@ -0,0 +1,8 @@ +package com.tencent.devops.hash.pojo + +open class HashGenerateInputFile( + open val checkerName : String, + open val description : String, + open val filePath : String, + open val line : String +) \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/HashGenerateOutputFile.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/HashGenerateOutputFile.kt new file mode 100644 index 0000000..c5924c5 --- /dev/null +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/HashGenerateOutputFile.kt @@ -0,0 +1,14 @@ +package com.tencent.devops.hash.pojo + +import com.fasterxml.jackson.annotation.JsonProperty +import com.tencent.devops.hash.pojo.HashGenerateInputFile + +data class HashGenerateOutputFile( + override val checkerName: String, + override val description: String, + override val filePath: String, + override val line: String, + val pinpointHash : String? +) : HashGenerateInputFile( + checkerName, description, filePath, line +) \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/RollState.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/RollState.kt new file mode 100644 index 0000000..c065176 --- /dev/null +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/pojo/RollState.kt @@ -0,0 +1,37 @@ +package com.tencent.devops.hash.pojo + +import com.tencent.devops.hash.constant.ROLLING_WINDOW + +data class RollState @ExperimentalUnsignedTypes constructor( + val window: CharArray = CharArray(ROLLING_WINDOW) {0.toChar()}, + var h1: UInt, + var h2: UInt, + var h3: UInt, + var n: Int +) { + @ExperimentalUnsignedTypes + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as RollState + + if (!window.contentEquals(other.window)) return false + if (h1 != other.h1) return false + if (h2 != other.h2) return false + if (h3 != other.h3) return false + if (n != other.n) return false + + return true + } + + @ExperimentalUnsignedTypes + override fun hashCode(): Int { + var result = window.contentHashCode() + result = 31 * result + h1.hashCode() + result = 31 * result + h2.hashCode() + result = 31 * result + h3.hashCode() + result = 31 * result + n + return result + } +} \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccExecuteConfig.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccExecuteConfig.kt index f88bacd..0a36db2 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccExecuteConfig.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/CodeccExecuteConfig.kt @@ -28,7 +28,7 @@ package com.tencent.devops.pojo import com.fasterxml.jackson.annotation.JsonIgnore import com.tencent.bk.devops.atom.AtomContext -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.pojo.repo.RepositoryConfig /** @@ -58,6 +58,6 @@ data class CodeccExecuteConfig( ) override fun toString(): String { - return JsonUtil.getObjectMapper().writeValueAsString(this) + return JsonUtil.toJson(this) } } \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccDependentException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccDependentException.kt index b611c0d..608084c 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccDependentException.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccDependentException.kt @@ -2,5 +2,7 @@ package com.tencent.devops.pojo.exception data class CodeccDependentException( - override val errorMsg: String -): CodeccException(2199003, errorMsg) \ No newline at end of file + override val errorMsg: String, + override val toolName: String = "", + override val cause: Throwable? = null +): CodeccException(2199003, errorMsg, toolName, cause) \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccException.kt index 4b103ab..a118d7e 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccException.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccException.kt @@ -4,7 +4,9 @@ import java.lang.RuntimeException open class CodeccException constructor( open val errorCode: Int = CodeccException.errorCode, - open val errorMsg: String? + open val errorMsg: String, + open val toolName: String = "", + override val cause: Throwable? = null ): RuntimeException(errorMsg) { companion object { const val errorCode = 2199001 diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccRepoServiceException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccRepoServiceException.kt index a096167..0da15b2 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccRepoServiceException.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccRepoServiceException.kt @@ -1,8 +1,7 @@ package com.tencent.devops.pojo.exception data class CodeccRepoServiceException( - override val errorMsg: String -): CodeccException( - errorCode = 2199006, - errorMsg = errorMsg -) \ No newline at end of file + override val errorMsg: String, + override val toolName: String = "", + override val cause: Throwable? = null +): CodeccException(2199006, errorMsg, toolName, cause) \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTaskExecException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTaskExecException.kt index cbf45c4..a71903a 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTaskExecException.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTaskExecException.kt @@ -1,5 +1,7 @@ package com.tencent.devops.pojo.exception data class CodeccTaskExecException( - override val errorMsg: String -): CodeccException(2199004, errorMsg) \ No newline at end of file + override val errorMsg: String, + override val toolName: String = "", + override val cause: Throwable? = null +): CodeccException(2199004, errorMsg, toolName, cause) \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTimeOutException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTimeOutException.kt index 7679bd0..62a3733 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTimeOutException.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccTimeOutException.kt @@ -1,5 +1,7 @@ package com.tencent.devops.pojo.exception class CodeccTimeOutException( - override val errorMsg: String -): CodeccException(2199005, errorMsg) \ No newline at end of file + override val errorMsg: String, + override val toolName: String = "", + override val cause: Throwable? = null +): CodeccException(2199005, errorMsg, toolName, cause) \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccUserConfigException.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccUserConfigException.kt index e43bbbd..889cc4c 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccUserConfigException.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/exception/CodeccUserConfigException.kt @@ -1,5 +1,7 @@ package com.tencent.devops.pojo.exception data class CodeccUserConfigException( - override val errorMsg: String -): CodeccException(2199002, errorMsg) \ No newline at end of file + override val errorMsg: String, + override val toolName: String = "", + override val cause: Throwable? = null +): CodeccException(2199002, errorMsg, toolName, cause) \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryConfig.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryConfig.kt index 58919c5..0269691 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryConfig.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryConfig.kt @@ -45,12 +45,17 @@ class RepositoryConfig( RepositoryType.ID -> if (repositoryHashId.isNullOrBlank()) { throw CodeccUserConfigException("代码库HashId为空") } else { - repositoryHashId!! + repositoryHashId } RepositoryType.NAME -> if (repositoryName.isNullOrBlank()) { throw CodeccUserConfigException("代码库名为空") } else { - repositoryName!! + repositoryName + } + RepositoryType.URL -> if (repositoryName.isNullOrBlank()) { + throw CodeccUserConfigException("代码库URL为空") + } else { + repositoryName } } } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryType.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryType.kt index 372472c..d7c458d 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryType.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/pojo/repo/RepositoryType.kt @@ -28,12 +28,13 @@ package com.tencent.devops.pojo.repo enum class RepositoryType { ID, - NAME; + NAME, + URL; companion object { fun parseType(type: String?): RepositoryType { if (type.isNullOrBlank()) return ID - return valueOf(type!!) + return valueOf(type) } } } \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccConfigUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccConfigUtils.kt index ce3bd80..eb766fb 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccConfigUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccConfigUtils.kt @@ -1,6 +1,7 @@ package com.tencent.devops.utils -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.fasterxml.jackson.core.type.TypeReference +import com.tencent.bk.devops.atom.utils.json.JsonUtil import java.io.BufferedReader object CodeccConfigUtils { @@ -10,8 +11,8 @@ object CodeccConfigUtils { @Synchronized fun getPropConfig(key: String): String? { if (configMap.isEmpty()) { - val json = BufferedReader(ClassLoader.getSystemClassLoader().getResourceAsStream("config.json").reader()).readText() - configMap = JsonUtil.to(json) + val json = BufferedReader(ClassLoader.getSystemClassLoader().getResourceAsStream("config.json")!!.reader()).readText() + configMap = JsonUtil.fromJson(json, object : TypeReference>(){}) } return configMap[key] } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccEnvHelper.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccEnvHelper.kt index 9e94e3c..2c9ab1c 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccEnvHelper.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccEnvHelper.kt @@ -30,7 +30,7 @@ import com.fasterxml.jackson.core.type.TypeReference import com.tencent.bk.devops.atom.AtomContext import com.tencent.bk.devops.atom.pojo.StringData import com.tencent.bk.devops.atom.utils.http.SdkUtils -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.api.CodeccApi import com.tencent.devops.pojo.BuildScriptType import com.tencent.devops.pojo.CodeccCheckAtomParam @@ -110,7 +110,7 @@ object CodeccEnvHelper { } fun getVariable(): Map { - val map = JsonUtil.to(File(SdkUtils.getInputFile()).readText(), object : TypeReference>() {}) + val map = JsonUtil.fromJson(File(SdkUtils.getInputFile()).readText(), object : TypeReference>() {}) return map.map { it.key to it.value.toString() }.toMap() } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccInstaller.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccInstaller.kt index 69028ff..141bfb7 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccInstaller.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccInstaller.kt @@ -26,7 +26,7 @@ package com.tencent.devops.utils -import com.tencent.bk.devops.plugin.utils.OkhttpUtils +import com.tencent.bk.devops.atom.utils.http.OkHttpUtils import com.tencent.devops.api.CodeccApi import com.tencent.devops.pojo.CodeccCheckAtomParamV3 import com.tencent.devops.pojo.LinuxCodeccConstants @@ -56,7 +56,7 @@ object CodeccInstaller { val md5File = File(toolFile.canonicalPath + ".md5") val md5 = if (md5File.exists()) md5File.readText() else "" val response = api.downloadTool("PYTHON3", CodeccEnvHelper.getOS(), md5, AgentEnv.is32BitSystem()) - OkhttpUtils.downloadFile(response, toolFile) + OkHttpUtils.downloadFile(response, toolFile) if (response.code() != 304) { callback.run() // 写入md5 diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccParamsHelper.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccParamsHelper.kt index 76f43dd..c25e32a 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccParamsHelper.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccParamsHelper.kt @@ -30,7 +30,6 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import com.tencent.bk.devops.atom.AtomContext import com.tencent.bk.devops.atom.api.SdkEnv -import com.tencent.bk.devops.plugin.common.OS import com.tencent.devops.docker.pojo.LandunParam import com.tencent.devops.docker.utils.CodeccWeb import com.tencent.devops.pojo.BuildType @@ -104,7 +103,7 @@ object CodeccParamsHelper { map["DEVOPS_AGENT_ID"] = agentId map["DEVOPS_AGENT_SECRET_KEY"] = agentSecretKey map["DEVOPS_AGENT_VM_SID"] = "" - } else if (AgentEnv.getBuildType() == OS.MACOS.name) { + } else if (AgentEnv.getBuildType() == "MACOS") { println("检测到这是Macos 公共构建机") map["DEVOPS_PROJECT_ID"] = param.projectName map["DEVOPS_BUILD_TYPE"] = BuildType.MACOS.name diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt index 0839a13..1033214 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccRepoHelper.kt @@ -50,7 +50,7 @@ object CodeccRepoHelper { "CODE_GITLAB", "GITHUB" ) - private val codeccElementType = "CodeccCheckAtom" + private val codeccElementType = "CodeccCheckAtomDebug" private val pipelineBuildTaskApi = PipelineTaskResourceApi() fun getCodeccRepos(variables: Map): List { @@ -92,7 +92,7 @@ object CodeccRepoHelper { ) } else -> { - throw CodeccUserConfigException("get codecc task fail with repo type: ${it.taskType}") + throw CodeccUserConfigException("get codecc task fail with repo type: ${it.taskType}", "") } } repoItemList.add(item) @@ -113,12 +113,13 @@ object CodeccRepoHelper { val url = getEndWithValue(variables, "bk_repo_code_url_$taskId")!! val authType = getEndWithValue(variables, "bk_repo_auth_type_$taskId")!! CodeccExecuteConfig.RepoItem( - repositoryConfig = null, + repositoryConfig = buildConfig(url, RepositoryType.URL), type = repoType, relPath = localPath, relativePath = relativePath, url = url, - authType = authType + authType = authType, + repoHashId = taskId ) } else { val value = if (repoConfigType == RepositoryType.ID.name) { @@ -127,7 +128,7 @@ object CodeccRepoHelper { getEndWithValue(variables, "bk_repo_name_$taskId") } CodeccExecuteConfig.RepoItem( - repositoryConfig = buildConfig(value!!, RepositoryType.valueOf(repoConfigType!!)), + repositoryConfig = buildConfig(value!!, RepositoryType.valueOf(repoConfigType)), type = repoType, relPath = localPath, relativePath = relativePath @@ -137,16 +138,16 @@ object CodeccRepoHelper { } val newRepoItemList = repoItemList.map { - if (it.repositoryConfig != null) { + if (it.repositoryConfig != null && it.repositoryConfig.repositoryType != RepositoryType.URL) { val repo = RepositoryUtils.getRepository(it.repositoryConfig) val authType = when (repo) { is CodeGitRepository -> { val authType = repo.authType?.name?.toUpperCase() - if (authType.isNullOrBlank()) "HTTP" else authType!! + if (authType.isNullOrBlank()) "HTTP" else authType } is CodeSvnRepository -> { val authType = repo.svnType?.toUpperCase() - if (authType.isNullOrBlank()) "SSH" else authType!! + if (authType.isNullOrBlank()) "SSH" else authType } is CodeGitlabRepository -> "HTTP" is GithubRepository -> "HTTP" @@ -201,7 +202,7 @@ object CodeccRepoHelper { task.getTaskParam("repositoryName"), RepositoryType.parseType(task.getTaskParam("repositoryType")) ) - else -> throw CodeccUserConfigException("Unknown code element -> ${task.taskType}") + else -> throw CodeccUserConfigException("Unknown code element -> ${task.taskType}", "") } } @@ -212,12 +213,18 @@ object CodeccRepoHelper { repositoryName = null, repositoryType = RepositoryType.ID ) - } else { + } else if (repositoryType == RepositoryType.NAME) { RepositoryConfig( repositoryHashId = null, repositoryName = repositoryId, repositoryType = RepositoryType.NAME ) + } else { + RepositoryConfig( + repositoryHashId = null, + repositoryName = repositoryId, + repositoryType = RepositoryType.URL + ) } private fun replaceCodeProp(repositoryConfig: RepositoryConfig, variables: Map): RepositoryConfig { @@ -225,7 +232,7 @@ object CodeccRepoHelper { if (!repositoryConfig.repositoryName.isNullOrBlank()) { return RepositoryConfig( repositoryHashId = repositoryConfig.repositoryHashId, - repositoryName = EnvUtils.parseEnv(repositoryConfig.repositoryName!!, variables), + repositoryName = EnvUtils.parseEnv(repositoryConfig.repositoryName, variables), repositoryType = repositoryConfig.repositoryType ) } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt index a62940e..9052fc2 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt @@ -1,10 +1,10 @@ package com.tencent.devops.utils -import com.fasterxml.jackson.module.kotlin.readValue +import com.fasterxml.jackson.core.type.TypeReference import com.tencent.bk.devops.atom.AtomContext import com.tencent.bk.devops.atom.pojo.ArtifactData import com.tencent.bk.devops.atom.pojo.ReportData -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.api.CodeccReportApi import com.tencent.devops.pojo.CodeccCheckAtomParamV3 import com.tencent.devops.pojo.report.CodeccCallback @@ -66,7 +66,7 @@ object CodeccReportUtils { indexHtmlBody.append("
\n") val json = BufferedReader(ClassLoader.getSystemClassLoader().getResourceAsStream("codecc-options.json").reader()).readText() - val codeccOptionMap = JsonUtil.getObjectMapper().readValue>>(json) + val codeccOptionMap = JsonUtil.fromJson>>(json) reportData.toolSnapshotList.forEach { val toolNameEn = it["tool_name_en"] as String val codeccOptions = codeccOptionMap[toolNameEn] ?: mapOf() diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtilsV2.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtilsV2.kt index 7cada5f..feab3c0 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtilsV2.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtilsV2.kt @@ -1,11 +1,13 @@ package com.tencent.devops.utils +import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.module.kotlin.readValue import com.tencent.bk.devops.atom.AtomContext import com.tencent.bk.devops.atom.pojo.ArtifactData import com.tencent.bk.devops.atom.pojo.DataField import com.tencent.bk.devops.atom.pojo.ReportData -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.pojo.Result +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.api.CodeccReportApi import com.tencent.devops.api.CodeccSdkApi import com.tencent.devops.docker.pojo.ToolConstants @@ -150,7 +152,7 @@ object CodeccReportUtilsV2 { indexHtmlBody.append("
\n") val json = BufferedReader(ClassLoader.getSystemClassLoader().getResourceAsStream("codecc-options.json").reader()).readText() - val codeccOptionMap = JsonUtil.getObjectMapper().readValue>>(json) + val codeccOptionMap = JsonUtil.fromJson(json, object : TypeReference>>() {}) reportData.toolSnapshotList.forEach { val toolNameEn = it["tool_name_en"] as String @@ -274,7 +276,7 @@ object CodeccReportUtilsV2 { private fun getLintMap(toolName: String): Map { val lintJson = getLintJson() - val map = JsonUtil.getObjectMapper().readValue>(lintJson) + val map = JsonUtil.fromJson(lintJson, object : TypeReference>() {}) map["title"] = toolName return map } @@ -518,9 +520,9 @@ object CodeccReportUtilsV2 { return null } - private fun getReportDataMock(buildId: String): CodeccCallback? { + private fun getReportDataMock(buildId: String): CodeccCallback { val reportJson = BufferedReader(ClassLoader.getSystemClassLoader().getResourceAsStream("test-report.json").reader()).readText() - return JsonUtil.getObjectMapper().readValue(reportJson) + return JsonUtil.fromJson(reportJson) } } \ No newline at end of file diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccScriptUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccScriptUtils.kt index 1117030..0068649 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccScriptUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccScriptUtils.kt @@ -1,9 +1,10 @@ package com.tencent.devops.utils +import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.module.kotlin.readValue import com.tencent.bk.devops.atom.api.BaseApi -import com.tencent.bk.devops.plugin.utils.JsonUtil -import com.tencent.bk.devops.plugin.utils.OkhttpUtils +import com.tencent.bk.devops.atom.utils.http.OkHttpUtils +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.pojo.CodeccExecuteConfig import com.tencent.devops.pojo.exception.CodeccDependentException import okhttp3.MediaType @@ -24,13 +25,13 @@ class CodeccScriptUtils : BaseApi() { "fileName" to CODECC_SCRIPT_NAME, "downloadType" to "BUILD_SCRIPT" ) - val fileSizeRequest = buildPost(fileSizeUrl, RequestBody.create(MediaType.parse("application/json; charset=utf-8"), JsonUtil.getObjectMapper().writeValueAsString(fileSizeParams)), mutableMapOf()) + val fileSizeRequest = buildPost(fileSizeUrl, RequestBody.create(MediaType.parse("application/json; charset=utf-8"), JsonUtil.toJson(fileSizeParams)), mutableMapOf()) .newBuilder() .url("$CODECC_HOST$fileSizeUrl") .build() - val fileSize = OkhttpUtils.doHttp(fileSizeRequest).use { + val fileSize = OkHttpUtils.doHttpRaw(fileSizeRequest).use { val data = it.body()!!.string() - val jsonData = JsonUtil.getObjectMapper().readValue>(data) + val jsonData = JsonUtil.fromJson(data, object : TypeReference>() {}) if (jsonData["status"] != 0) { throw CodeccDependentException("get file size fail!: $jsonData") } @@ -46,11 +47,11 @@ class CodeccScriptUtils : BaseApi() { "beginIndex" to "0", "btyeSize" to fileSize ) - val downloadRequest = buildPost(downloadUrl, RequestBody.create(MediaType.parse("application/json; charset=utf-8"), JsonUtil.getObjectMapper().writeValueAsString(downloadParams)), mutableMapOf()) + val downloadRequest = buildPost(downloadUrl, RequestBody.create(MediaType.parse("application/json; charset=utf-8"), JsonUtil.toJson(downloadParams)), mutableMapOf()) .newBuilder() .url("$CODECC_HOST$downloadUrl") .build() - OkhttpUtils.doHttp(downloadRequest).use { + OkHttpUtils.doHttpRaw(downloadRequest).use { val data = it.body()!!.string() print("[初始化] 下载CodeCC script成功,") val file = File(codeccWorkspace, CODECC_SCRIPT_NAME) diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt index 92c8fe1..344fe36 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt @@ -1,9 +1,9 @@ package com.tencent.devops.utils +import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.module.kotlin.readValue import com.tencent.bk.devops.atom.AtomContext -import com.tencent.bk.devops.plugin.pojo.artifactory.ChannelCode -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.api.CodeccSdkApi import com.tencent.devops.docker.pojo.CodeYaml import com.tencent.devops.docker.tools.LogUtils @@ -19,6 +19,7 @@ import com.tencent.devops.pojo.sdk.ScanConfiguration import com.tencent.devops.utils.common.AgentEnv import com.tencent.devops.utils.common.AtomUtils.parseStringToList import com.tencent.devops.utils.common.AtomUtils.parseStringToSet +import org.apache.commons.lang3.StringUtils import org.slf4j.LoggerFactory import java.io.File @@ -95,7 +96,7 @@ object CodeccSdkUtils { } private fun filterEmptyList(list: List?): List { - return list?.filter { !it.isBlank() } ?: listOf() + return list?.filter { !StringUtils.isBlank(it) } ?: listOf() } fun executeAsyncTask(codeccTaskId: Long, userId: String) { @@ -133,7 +134,7 @@ object CodeccSdkUtils { taskId = params.codeCCTaskId, scanType = params.toolScanType?.toInt(), timeAnalysisConfig = null, - transferAuthorList = if (params.transferAuthorList.isNullOrBlank()) listOf() else JsonUtil.getObjectMapper().readValue(params.transferAuthorList!!), + transferAuthorList = if (params.transferAuthorList.isNullOrBlank()) listOf() else JsonUtil.fromJson(params.transferAuthorList!!), newDefectJudge = ScanConfiguration.NewDefectJudge( fromDate = params.newDefectJudgeFromDate, judgeBy = params.newDefectJudgeBy?.toInt() diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccUtils.kt index b51fde4..5780c4e 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccUtils.kt @@ -29,7 +29,7 @@ package com.tencent.devops.utils import com.fasterxml.jackson.module.kotlin.readValue import com.tencent.bk.devops.atom.AtomContext import com.tencent.bk.devops.atom.api.SdkEnv -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.utils.json.JsonUtil import com.tencent.devops.docker.Build import com.tencent.devops.docker.pojo.CommandParam import com.tencent.devops.docker.pojo.LandunParam @@ -106,8 +106,8 @@ open class CodeccUtils { private fun initData(config: CodeccExecuteConfig, codeccWorkspace: File) { // coverityStartFile = CodeccParamsHelper.getCovPyFile(config.scriptType, codeccWorkspace) // toolsStartFile = CodeccParamsHelper.getToolPyFile(config.scriptType, codeccWorkspace) - codeccStartFile = CodeccScriptUtils().downloadScriptFile(config, codeccWorkspace).canonicalPath - println("CodeCC start file($codeccStartFile)") +// codeccStartFile = CodeccScriptUtils().downloadScriptFile(config, codeccWorkspace).canonicalPath +// println("CodeCC start file($codeccStartFile)") } open fun doPreCodeccSingleCommand(command: MutableList, codeccExecuteConfig: CodeccExecuteConfig) { @@ -200,8 +200,7 @@ open class CodeccUtils { map["IS_SPEC_CONFIG"] = "true" map["COVERITY_RESULT_PATH"] = codeccWorkspace.canonicalPath - val buildCmd = when (CodeccParamsHelper.getProjectType(JsonUtil.getObjectMapper().readValue(param.languages - ?: "[]"))) { + val buildCmd = when (CodeccParamsHelper.getProjectType(JsonUtil.fromJson(param.languages ?: "[]"))) { CoverityProjectType.UN_COMPILE -> { "--no-command --fs-capture-search ." } @@ -406,8 +405,7 @@ open class CodeccUtils { command.add("-DIS_SPEC_CONFIG=true") command.add("-DCOVERITY_RESULT_PATH=${codeccWorkspace.canonicalPath}") - val buildCmd = when (CodeccParamsHelper.getProjectType(JsonUtil.getObjectMapper().readValue(param.languages - ?: "[]"))) { + val buildCmd = when (CodeccParamsHelper.getProjectType(JsonUtil.fromJson(param.languages ?: "[]"))) { CoverityProjectType.UN_COMPILE -> { "--no-command --fs-capture-search ." } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt index f33e0ec..d53b884 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt @@ -1,17 +1,18 @@ package com.tencent.devops.utils.common +import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.module.kotlin.readValue -import com.tencent.bk.devops.plugin.utils.JsonUtil +import com.tencent.bk.devops.atom.utils.json.JsonUtil object AtomUtils { fun parseStringToList(str: String?): List { if (str.isNullOrBlank()) return listOf() - return JsonUtil.getObjectMapper().readValue(str!!) + return JsonUtil.fromJson(str) } fun parseStringToSet(str: String?, defaultSet: Set = setOf()): Set { if (str.isNullOrBlank()) return defaultSet - return JsonUtil.getObjectMapper().readValue(str!!) + return JsonUtil.fromJson(str) } } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/EnvUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/EnvUtils.kt index a09eb2e..14820b9 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/EnvUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/EnvUtils.kt @@ -26,9 +26,11 @@ package com.tencent.devops.utils.common +import org.apache.commons.lang3.StringUtils + object EnvUtils { fun parseEnv(command: String, data: Map, replaceWithEmpty: Boolean = false, isEscape: Boolean = false): String { - if (command.isBlank()) { + if (StringUtils.isBlank(command)) { return command } val newValue = StringBuilder() diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/RepositoryUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/RepositoryUtils.kt index 095caca..74324ba 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/RepositoryUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/RepositoryUtils.kt @@ -40,7 +40,7 @@ object RepositoryUtils { try { logger.info("Start to get the repo($repositoryConfig)") val result = repoApi.get(repositoryConfig) - if (result.isNotOk() || result.data == null) { + if (result.isNotOk || result.data == null) { throw CodeccUserConfigException("Fail to get the repo($repositoryConfig) because of ${result.message}") } logger.info("Get the repo(${result.data})") diff --git a/src/backend/core/src/main/resources/config.properties b/src/backend/core/src/main/resources/config.properties index 64fdcbb..689dc0a 100644 --- a/src/backend/core/src/main/resources/config.properties +++ b/src/backend/core/src/main/resources/config.properties @@ -61,7 +61,7 @@ ESLINT_REGISTRYUSER= ESLINT_REGISTRYPWD= ESLINT_ENV= ESLINT_RUN_TYPE=local -SCM_IMAGE_PATH= +SCM_IMAGE_PATH=docker.io/bkcodecc/scm_scan:latest SCM_REGISTRYUSER= SCM_REGISTRYPWD= SCM_ENV= From a3ed1e11e8fbf6d51014e4b14e1eb380f2590abc Mon Sep 17 00:00:00 2001 From: linjun-ddddd <654548718@qq.com> Date: Fri, 23 Oct 2020 21:58:08 +0800 Subject: [PATCH 7/8] feat: init code --- .../src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt | 2 +- .../core/src/main/kotlin/com/tencent/devops/docker/Scan.kt | 6 +++--- .../kotlin/com/tencent/devops/hash/constant/HashConstant.kt | 1 - .../com/tencent/devops/hash/core/HashGenerateProcess.kt | 2 +- .../kotlin/com/tencent/devops/utils/CodeccReportUtils.kt | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt index 27a8d40..2937615 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt @@ -161,7 +161,7 @@ object CodeccSdkApi : BaseApi() { return if (param is CodeccCheckAtomParamV3) { if (param.languageRuleSetMap.isNullOrBlank()) return listOf() val languageRuleSetMap = - JsonUtil.fromJson>>(param.languageRuleSetMap!!) + JsonUtil.fromJson(param.languageRuleSetMap!!, object : TypeReference>>(){}) val ruleSetIds = mutableSetOf() languageRuleSetMap.values.forEach { ruleSetIds.addAll(it) } return ruleSetIds.map { RuleSetCheckV3(it) } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt index c260da7..6bc7e0d 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/docker/Scan.kt @@ -141,14 +141,14 @@ class Scan( // 获取diff文件的map val diffFileMap = mutableMapOf /* file line */>() - JsonUtil.fromJson>>(diffOutputFile.readText())["scm_increment"]?.forEach { scmDiffItem -> + JsonUtil.fromJson(diffOutputFile.readText(), object : TypeReference>>(){})["scm_increment"]?.forEach { scmDiffItem -> scmDiffItem.diffFileList.map { diffFile -> val lineSet = diffFileMap[File(diffFile.filePath).canonicalPath] ?: mutableSetOf() lineSet.addAll(diffFile.diffLineList) diffFileMap[File(diffFile.filePath).canonicalPath] = lineSet } } - val outputFileList = JsonUtil.fromJson(outputFile.readText()).defects + val outputFileList = JsonUtil.fromJson(outputFile.readText(), object : TypeReference(){}).defects // 过滤没用的文件 val filterOutputFileList = if (toolName.equals(ToolConstants.CCN, true)) { @@ -173,7 +173,7 @@ class Scan( LogUtils.printDebugLog("generate no diff output file: ${noDiffOutputFile.canonicalPath}") // 重新填充defects字段 - val newOutputFileMap = JsonUtil.fromJson>(outputFile.readText()).toMutableMap() + val newOutputFileMap = JsonUtil.fromJson(outputFile.readText(), object : TypeReference>(){}).toMutableMap() newOutputFileMap["defects"] = filterOutputFileList outputFile.writeText(JsonUtil.toJson(newOutputFileMap)) } diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/constant/HashConstant.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/constant/HashConstant.kt index c13c90a..942dea1 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/constant/HashConstant.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/constant/HashConstant.kt @@ -6,7 +6,6 @@ const val ROLLING_WINDOW = 7 @ExperimentalUnsignedTypes const val MIN_BLOCKSIZE : ULong= 3UL const val HASH_INIT = 0x27 -//todo 这两个状态位要看 @ExperimentalUnsignedTypes const val FUZZY_STATE_NEED_LASTHASH = 1 @ExperimentalUnsignedTypes diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/HashGenerateProcess.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/HashGenerateProcess.kt index 688750f..0c4fc48 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/HashGenerateProcess.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/hash/core/HashGenerateProcess.kt @@ -17,7 +17,7 @@ object HashGenerateProcess { return } val hashInputList = try { - JsonUtil.fromJson>>(inputFile.readText())["defects"] + JsonUtil.fromJson(inputFile.readText(), object : TypeReference>>(){})["defects"] } catch (e: Exception) { println("deserialize input file fail!") return diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt index 9052fc2..bf4d56a 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccReportUtils.kt @@ -66,7 +66,7 @@ object CodeccReportUtils { indexHtmlBody.append("
\n") val json = BufferedReader(ClassLoader.getSystemClassLoader().getResourceAsStream("codecc-options.json").reader()).readText() - val codeccOptionMap = JsonUtil.fromJson>>(json) + val codeccOptionMap = JsonUtil.fromJson(json, object : TypeReference>>(){}) reportData.toolSnapshotList.forEach { val toolNameEn = it["tool_name_en"] as String val codeccOptions = codeccOptionMap[toolNameEn] ?: mapOf() From decbd26bd5a7b17b07336b70cf570da0b69a71db Mon Sep 17 00:00:00 2001 From: linjun-ddddd <654548718@qq.com> Date: Tue, 27 Oct 2020 20:58:14 +0800 Subject: [PATCH 8/8] feat: init code --- .../src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt | 2 +- .../main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt | 1 + .../kotlin/com/tencent/devops/utils/common/AtomUtils.kt | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt index 2937615..87d3412 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/api/CodeccSdkApi.kt @@ -303,7 +303,7 @@ object CodeccSdkApi : BaseApi() { path = path, method = "POST" ) - JsonUtil.fromJson(responseContent) + JsonUtil.fromJson(responseContent, object : TypeReference>(){}) } else { println("do not add filter path") Result(true) diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt index 344fe36..33c00bd 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/CodeccSdkUtils.kt @@ -29,6 +29,7 @@ object CodeccSdkUtils { fun initCodecc(atomContext: AtomContext): CodeccExecuteConfig { val params = atomContext.param + val codeccExecuteConfig = CodeccParamsHelper.getCodeccExecuteConfig(atomContext) if (AgentEnv.isThirdParty()) { diff --git a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt index d53b884..84fdd82 100644 --- a/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt +++ b/src/backend/core/src/main/kotlin/com/tencent/devops/utils/common/AtomUtils.kt @@ -8,11 +8,11 @@ object AtomUtils { fun parseStringToList(str: String?): List { if (str.isNullOrBlank()) return listOf() - return JsonUtil.fromJson(str) + return JsonUtil.fromJson(str, object : TypeReference>(){}) } fun parseStringToSet(str: String?, defaultSet: Set = setOf()): Set { if (str.isNullOrBlank()) return defaultSet - return JsonUtil.fromJson(str) + return JsonUtil.fromJson(str, object : TypeReference>(){}) } -} +} \ No newline at end of file