{"id":28708318,"url":"https://github.com/pmd/pmd-regression-tester","last_synced_at":"2025-07-11T15:41:25.153Z","repository":{"id":33972189,"uuid":"131732723","full_name":"pmd/pmd-regression-tester","owner":"pmd","description":"Automated regression tests against real-world projects","archived":false,"fork":false,"pushed_at":"2025-05-15T15:32:12.000Z","size":1231,"stargazers_count":7,"open_issues_count":2,"forks_count":5,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-06-04T08:51:33.810Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pmd.png","metadata":{"files":{"readme":"README.rdoc","changelog":"History.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-05-01T15:56:50.000Z","updated_at":"2025-05-15T15:32:17.000Z","dependencies_parsed_at":"2025-06-04T02:45:55.937Z","dependency_job_id":"11927be1-1dbd-4546-b226-11293c60e187","html_url":"https://github.com/pmd/pmd-regression-tester","commit_stats":{"total_commits":601,"total_committers":5,"mean_commits":120.2,"dds":0.5507487520798668,"last_synced_commit":"51847c43e5cff9be9699c097dd05875ef94ce9ce"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/pmd/pmd-regression-tester","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmd%2Fpmd-regression-tester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmd%2Fpmd-regression-tester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmd%2Fpmd-regression-tester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmd%2Fpmd-regression-tester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pmd","download_url":"https://codeload.github.com/pmd/pmd-regression-tester/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmd%2Fpmd-regression-tester/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259548375,"owners_count":22874854,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-14T18:10:36.294Z","updated_at":"2025-06-14T18:10:41.040Z","avatar_url":"https://github.com/pmd.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"= pmdtester\n\nhome  :: https://pmd.github.io\ncode  :: https://github.com/pmd/pmd-regression-tester\nbugs  :: https://github.com/pmd/pmd-regression-tester/issues\n\nbuild-status :: {\u003cimg src=\"https://github.com/pmd/pmd-regression-tester/workflows/build/badge.svg?branch=main\" alt=\"Build Status\" /\u003e}[https://github.com/pmd/pmd-regression-tester/actions?query=workflow%3Abuild]\n\ngem-version :: {\u003cimg src=\"https://badge.fury.io/rb/pmdtester.svg\" alt=\"Gem Version\" /\u003e}[https://rubygems.org/gems/pmdtester]\n\n== DESCRIPTION:\n\nA regression testing tool ensure that new problems and unexpected behaviors will not be introduced to PMD project after fixing an issue , and new rules can work as expected.\n\n== FEATURES/PROBLEMS:\n\nThe diff report can be generated according to the base and patch branch of PMD\non a list of standard projects(Spring Framework, Hibernate, Solr, etc.)\n\n== SYNOPSIS:\n\n=== Options:\n    -r, --local-git-repo        path to the local PMD repository\n    -b, --base-branch           name of the base branch in local PMD repository\n    -p, --patch-branch          name of the patch branch in local PMD repository\n    -bc, --base-config          path to the base PMD configuration file\n    -pc, --patch-config         path to the patch PMD configuration file\n    -c, --config                path to the base and patch PMD configuration file\n    -l, --list-of-project       path to the file which contains the list of standard projects\n    -m, --mode                          the mode of the tool: 'local', 'online' or 'single'\n          single: Set this option to 'single' if your patch branch contains changes\n            for any option that can't work on main/base branch\n          online: Set this option to 'online' if you want to download\n            the PMD report of main/base branch rather than generating it locally\n          local: Default option is 'local', PMD reports for the base and patch branches are generated locally.\n\n    -t, --threads               Sets the number of threads used by PMD. Set threads to 0 to disable multi-threading processing.\n    -f, --html-flag             whether to not generate the html diff report in single mode\n    -a, --auto-gen-config       whether to generate configurations automatically based on branch differences,this option only works in online and local mode\n    --filter-with-patch-config  whether to use patch config to filter baseline result as if --auto-gen-config has been used. This option only works in online mode.\n    --keep-reports              whether to keep old reports and skip running PMD again if possible\n    -d, --debug                 whether change log level to DEBUG to see more information\n    --error-recovery            enable error recovery mode when executing PMD. Might help to analyze errors.\n    --baseline-download-url     download url prefix from where to download the baseline in online mode\n    -v, --version               \n    -h, --help                  \n\n=== Quick start\n\n==== Run local mode\n\n  pmdtester -b main -p YOUR_DEVELOPMENT_BRANCH -r PATH_TO_LOCAL_PMD_REPO -a\n\n==== Run single mode\n\n  pmdtester -p YOUR_DEVELOPMENT_BRANCH -pc CONFIG_ONLY_CONTAINS_NEW_PMD_JAVA_RULE -m single\n\n==== Run online mode\n\n  pmdtester -b main -p YOUR_DEVELOPMENT_BRANCH -r PATH_TO_LOCAL_PMD_REPO -m online -a\n\n=== Output\nThe tool creates the following folders:\n  target\n  ├── repositories         \u003c- the analyzed projects are cloned here\n  │   ├── PROJECT_NAME_1\n  │   ├── ......\n  │   └── PROJECT_NAME_n\n  ├── reports\n  │   ├── BASE_BRANCH_NAME        \u003c- the base baseline is placed here\n  │   ├── PATCH_BRANCH_NAME       \u003c- the patch baseline is placed here\n  │   └── diff\n  │       ├── index.html          \u003c- the summary report of diff reports\n  │       ├── base_config.xml     \u003c- pmd config from the base branch\n  │       ├── patch_config.xml    \u003c- pmd config from the patch branch\n  │       ├── css  \u003c- css resources are placed here\n  │       ├── js   \u003c- js resources\n  │       ├── PROJECT_NAME_1\n  │       │   ├── project_data.js \u003c- contains the violations as js/json\n  │       │   └── index.html      \u003c- the diff report of PROJECT_1\n  │       ├── .......\n  │       └── PROJECT_NAME_n\n  │           ├── project_data.js \u003c- contains the violations as js/json\n  │           └── index.xml       \u003c- the diff report of PROJECT_N\n  ├── pmd-bin-\u003cversion\u003e-\u003cbranch_name\u003e-\u003csha1\u003e  \u003c- cached pmd builds that are reused\n  └── pmd-bin-....\n\n==== The baseline format\n  branch_name\n  ├── branch_info.json\n  ├── config.xml\n  ├── STANDARD_PROJECT_NAME_1\n  │   ├── report_info.json\n  │   └── pmd_report.xml\n  ├── ......................\n  │   ├── report_info.json\n  │   └── pmd_report.xml\n  └── STANDARD_PROJECT_NAME_n\n      ├── report_info.info\n      └── pmd_report.xml\n\n== REQUIREMENTS:\n\n* Ruby 2.7 or higher\n\n=== Runtime dependency\n\n  nokogiri ~\u003e 1.13\n  slop ~\u003e 4.6\n  differ ~\u003e 0.1\n  rufus-scheduler ~\u003e 3.8\n  logger-colors ~\u003e 1.0\n  liquid ~\u003e 5.2\n\n=== Development dependency\n\n  hoe-bundler ~\u003e 1.5\n  hoe-git ~\u003e 1.6\n  minitest ~\u003e 5.10\n  mocha ~\u003e 1.5\n  rubocop ~\u003e 0.93\n  test-unit ~\u003e 3.5\n  rdoc ~\u003e 6.4\n\n== INSTALL:\n\n  gem install pmdtester --pre\n\n== DEVELOPERS:\n\n  git clone https://github.com/pmd/pmd-regression-tester.git\n  cd pmd-regression-tester\n  gem install bundler\n  bundle config set path \"vendor/cache\"\n  bundle install # once\n  bundle exec rake verify # run this command before commit your changes\n  bundle exec pmdtester ... # run this to directly execute pmdtester from source\n  \n  Run all unit tests:\n  bundle exec rake clean test\n\n  Run all integration tests:\n  bundle exec rake clean integration-test\n\n  Run a single test class, e.g.:\n  bundle exec ruby -I test test/test_project_diff_report.rb\n  bundle exec ruby -I test test/integration_test_runner.rb\n  \n  Run a single test, e.g.:\n  bundle exec ruby -I test test/test_project_diff_report.rb -n test_diff_report_builder\n\n=== Releasing\n\n* Update +History.md+ (version and date)\n* Update +lib/pmdtester.rb+ (version)\n* Run \"bundle exec rake verify\" and add new +pmdtester.gemspec+ (new version)\n* Commit (\"Prepare release x.y.z\").\n* Tag this commit (\"git tag vx.y.z\").\n* Update History.md and lib/pmdtester.rb for the next development version,\n  run again \"bundle exec rake verify\"\n* Commit (\"Prepare next development version x.y.z-SNAPSHOT\").\n* Push to main.\n* Push the tag. Github Actions will build and publish the new gem\n* A github release is automatically created, verify it on https://github.com/pmd/pmd-regression-tester/releases\n* To make pmd's main CI use the new version (in [pmd/pmd](https://github.com/pmd/pmd/)), go to the root directory and run `bundle lock --update`. Commit these changes. \n* Rename milestone to version, close it and create a new \"Next\" milestone: https://github.com/pmd/pmd-regression-tester/milestones\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmd%2Fpmd-regression-tester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpmd%2Fpmd-regression-tester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmd%2Fpmd-regression-tester/lists"}