Integrate danger for pull requests

This commit is contained in:
Andreas Dangel
2020-11-12 13:11:56 +01:00
parent 55dcd77458
commit 295505af5b
7 changed files with 71 additions and 34 deletions

View File

@@ -9,10 +9,17 @@ for a ssh key, which is used to copy files to sourceforge.
## Environment variables ## Environment variables
* `PMD_CI_SECRET_PASSPHRASE` * PMD_CI_SECRET_PASSPHRASE
* `CI_DEPLOY_PASSWORD` * CI_DEPLOY_USER
* `CI_SIGN_PASSPHRASE` * CI_DEPLOY_PASSWORD
* ... * CI_SIGN_KEY
* CI_SIGN_PASSPHRASE
* PMD_SF_USER
* PMD_SF_APIKEY
* GITHUB_OAUTH_TOKEN
* GITHUB_BASE_URL
* DANGER_GITHUB_API_TOKEN
* PMD_CI_CHUNK_TOKEN
## Encrypting ## Encrypting

21
.ci/build-pr.sh Executable file
View File

@@ -0,0 +1,21 @@
#!/usr/bin/env bash
source $(dirname $0)/inc/logger.inc
source $(dirname $0)/inc/setup-secrets.inc
source $(dirname $0)/inc/regression-tester.inc
source ${HOME}/java.env
set -e
#set -x
./mvnw -e -Dmaven.wagon.httpconnectionManager.ttlSeconds=180 -Dmaven.wagon.http.retryHandler.count=3 -V clean verify
# Danger is executed only on the linux runner
case "$(uname)" in
Linux*)
log_info "Executing danger..."
pmd_ci_setup_env
regression_tester_setup_ci
regression_tester_executeDanger
;;
esac

View File

@@ -31,7 +31,7 @@ function pmd_ci_build_main() {
pmd_ci_build_and_upload_doc pmd_ci_build_and_upload_doc
pmd_ci_build_setup_regression_tester regression_tester_setup_ci
regression_tester_uploadBaseline regression_tester_uploadBaseline
exit 0 exit 0
@@ -95,15 +95,7 @@ function pmd_ci_build_run() {
./mvnw deploy -Possrh,sign,generate-rule-docs $MVN_BUILD_FLAGS ./mvnw deploy -Possrh,sign,generate-rule-docs $MVN_BUILD_FLAGS
} }
function pmd_ci_build_setup_regression_tester() { # Needed for doc generation and regression tester
# install openjdk8 for pmd-regression-tests
.ci/install-openjdk.sh 8
rm -f .bundle/config
bundle config set --local path vendor/bundle
bundle config set --local with release_notes_preprocessing
bundle install
}
function pmd_ci_build_setup_bundler() { function pmd_ci_build_setup_bundler() {
log_info "Installing bundler..." log_info "Installing bundler..."
gem install bundler gem install bundler

Binary file not shown.

View File

@@ -6,6 +6,23 @@
# PMD_SF_USER # PMD_SF_USER
# PMD_CI_BRANCH # PMD_CI_BRANCH
function regression_tester_setup_ci() {
# install openjdk8 for pmd-regression-tests
.ci/install-openjdk.sh 8
if hash "bundler" 2>/dev/null; then
log_debug "Bundler is already installed"
else
log_info "Installing bundler..."
gem install bundler
fi
rm -f .bundle/config
bundle config set --local path vendor/bundle
bundle config set --local with release_notes_preprocessing
bundle install
}
# #
# Generate a new baseline and upload it to sourceforge # Generate a new baseline and upload it to sourceforge
# #
@@ -58,7 +75,6 @@ function regression_tester_uploadBaseline() {
# In that case, just a error logging is provided. # In that case, just a error logging is provided.
# #
function regression_tester_executeDanger() { function regression_tester_executeDanger() {
change_ruby_version
log_debug "$FUNCNAME" log_debug "$FUNCNAME"
local errexitstate="$(shopt -po errexit)" local errexitstate="$(shopt -po errexit)"
@@ -73,6 +89,10 @@ function regression_tester_executeDanger() {
set -e set -e
trap danger_failed ERR trap danger_failed ERR
PMD_CI_BRANCH=${PMD_CI_BRANCH##refs/heads/}
export PMD_CI_BRANCH
log_debug "Using modified branch name: ${PMD_CI_BRANCH}"
# Create a corresponding remote branch locally # Create a corresponding remote branch locally
if ! git show-ref --verify --quiet refs/heads/${PMD_CI_BRANCH}; then if ! git show-ref --verify --quiet refs/heads/${PMD_CI_BRANCH}; then
git fetch --no-tags origin +refs/heads/${PMD_CI_BRANCH}:refs/remotes/origin/${PMD_CI_BRANCH} git fetch --no-tags origin +refs/heads/${PMD_CI_BRANCH}:refs/remotes/origin/${PMD_CI_BRANCH}

View File

@@ -21,15 +21,17 @@ jobs:
key: ${{ runner.os }}-${{ hashFiles('**/pom.xml') }} key: ${{ runner.os }}-${{ hashFiles('**/pom.xml') }}
restore-keys: | restore-keys: |
${{ runner.os }}- ${{ runner.os }}-
- name: Set up Ruby 2.7
uses: actions/setup-ruby@v1
with:
ruby-version: 2.7
- name: Install OpenJDK 11 - name: Install OpenJDK 11
run: .ci/install-openjdk.sh 11 run: .ci/install-openjdk.sh 11
shell: bash shell: bash
- name: Build with mvnw - name: Build
run: | run: .ci/build-pr.sh
source ${HOME}/java.env
./mvnw -e -Dmaven.wagon.httpconnectionManager.ttlSeconds=180 -Dmaven.wagon.http.retryHandler.count=3 -V clean install
shell: bash
- name: Execute Danger
if: ${{ runner.os == 'Linux' }}
run: echo "TODO"
shell: bash shell: bash
env:
PMD_CI_SECRET_PASSPHRASE: ${{ secrets.PMD_CI_SECRET_PASSPHRASE }}
PMD_CI_BRANCH: ${{ github.ref }}
PMD_CI_PULL_REQUEST_NUMBER: ${{ github.event.number }}

View File

@@ -7,10 +7,10 @@ require 'logger'
def run_pmdtester def run_pmdtester
Dir.chdir('..') do Dir.chdir('..') do
argv = ['--local-git-repo', './pmd', argv = ['--local-git-repo', './pmd',
'--list-of-project', './pmd/.travis/project-list.xml', '--list-of-project', './pmd/.ci/files/project-list.xml',
'--base-branch', "#{ENV['TRAVIS_BRANCH']}", '--base-branch', "#{ENV['PMD_CI_BRANCH']}",
'--patch-branch', 'HEAD', '--patch-branch', 'HEAD',
'--patch-config', './pmd/.travis/all-java.xml', '--patch-config', './pmd/.ci/files/all-java.xml',
'--mode', 'online', '--mode', 'online',
'--auto-gen-config', '--auto-gen-config',
# '--debug', # '--debug',
@@ -28,14 +28,14 @@ end
def upload_report def upload_report
Dir.chdir('target/reports') do Dir.chdir('target/reports') do
tar_filename = "pr-#{ENV['TRAVIS_PULL_REQUEST']}-diff-report-#{Time.now.strftime("%Y-%m-%dT%H-%M-%SZ")}.tar" tar_filename = "pr-#{ENV['PMD_CI_PULL_REQUEST_NUMBER']}-diff-report-#{Time.now.strftime("%Y-%m-%dT%H-%M-%SZ")}.tar"
unless Dir.exist?('diff/') unless Dir.exist?('diff/')
message("No java rules are changed!", sticky: true) message("No java rules are changed!", sticky: true)
return return
end end
`tar -cf #{tar_filename} diff/` `tar -cf #{tar_filename} diff/`
report_url = `curl -u #{ENV['CHUNK_TOKEN']} -T #{tar_filename} https://chunk.io` report_url = `curl -u #{ENV['PMD_CI_CHUNK_TOKEN']} -T #{tar_filename} https://chunk.io`
if $?.success? if $?.success?
@logger.info "Successfully uploaded #{tar_filename} to chunk.io" @logger.info "Successfully uploaded #{tar_filename} to chunk.io"
@@ -53,11 +53,6 @@ def upload_report
end end
# Perform regression testing # Perform regression testing
can_merge = github.pr_json['mergeable'] run_pmdtester
if can_merge
run_pmdtester
else
warn("This PR cannot be merged yet.", sticky: false)
end
# vim: syntax=ruby # vim: syntax=ruby