diff --git a/jobs/build-triggers/tendrl-build-triggers-pr-builds.yml b/jobs/build-triggers/tendrl-build-triggers-pr-builds.yml
new file mode 100644
index 0000000..1e7ed58
--- /dev/null
+++ b/jobs/build-triggers/tendrl-build-triggers-pr-builds.yml
@@ -0,0 +1,283 @@
+---
+- job-template:
+ name: "tendrl-build-1-pr-{package_name}"
+ display-name: 'Tendrl build: ({project_name}) - {package_name}'
+ description: |
+ Job building Tendrl package '{package_name}' from PR
+ and pushing it to '{target_repo}' repo.
+ Maintainer: Daniel Horak
+ Team Contact: tendrl-devel
+ JJB Code Location: tendrl-ci
+ Managed by Jenkins Job Builder. Do not edit via web.
+ project-type: freestyle
+ copr_config: '~/.config/copr'
+ package_prefix: "tendrl-"
+ defaults: global
+ disabled: false
+ concurrent: false
+ quiet-period: 0
+ block-downstream: false
+ block-upstream: false
+ node: 'tendrl-ci-slave01'
+ triggers: "{obj:triggers}"
+ scm: "{obj:scm}"
+ properties:
+ - github:
+ url: 'https://github.com/Tendrl/{package_name}/'
+ wrappers:
+ - timeout:
+ timeout: 40
+ abort: true
+ type: absolute
+ parameters:
+ - string:
+ name: TARGET_REPO
+ default: "{target_repo}"
+ description: "Target copr repo name."
+ builders:
+ - shell: |
+ echo "GIT_COMMIT: ${{GIT_COMMIT}}"
+ echo "GIT_BRANCH: ${{GIT_BRANCH}}"
+ echo "TARGET_REPO: ${{TARGET_REPO}}"
+ # prepare unique identifier for this build (BUILD_HASH)
+ export BUILD_HASH=$(mktemp -du "build-{target_repo}-{package_prefix}{package_name}.XXXXXXXXXX")
+ echo "BUILD_HASH=${{BUILD_HASH}}" > ${{WORKSPACE}}/env.sh
+ # "reserve" build server for this job
+ echo "${{BUILD_HASH}}" >> ${{HOME}}/build_server_{project_name}_used_by
+
+ # prepare building server (if not already reserved)
+ - conditional-step:
+ condition-kind: shell
+ condition-command: "(( $(grep -v '^ *$' $HOME/build_server_{project_name}_status | wc -l) == 0))"
+ on-evaluation-failure: dont-run
+ steps:
+ - trigger-builds:
+ - project: 'tendrl-build-X-build_server-{project_name}-prepare'
+ block: true
+ property-file: env.sh
+
+ - shell: |
+ #!/bin/bash -xe
+ # load environment file with BUILD_HASH
+ source ${{WORKSPACE}}/env.sh
+ echo "GIT_COMMIT: ${{GIT_COMMIT}}"
+ echo "GIT_BRANCH: ${{GIT_BRANCH}}"
+ # parse PR# and head/merge variant
+ if [[ "${{ghprbPullId}}" ]]; then
+ PR_NUMBER=${{ghprbPullId}}
+ PR_VARIANT="merge"
+ else
+ PR_NUMBER=$(echo $GIT_BRANCH | awk -F / '{{ print $3 }}')
+ PR_VARIANT=$(echo $GIT_BRANCH | awk -F / '{{ print $4 }}')
+ fi
+ echo "PR_NUMBER: ${{PR_NUMBER}}"
+ echo "PR_VARIANT: ${{PR_VARIANT}}"
+ echo "ghprbPullId: ${{ghprbPullId}}"
+
+ # wait for build_server to be ready
+ until grep -q "READY" ${{HOME}}/build_server_{project_name}_status; do
+ sleep 10
+ done
+
+ # remote working directory
+ rwd="/tmp/${{BUILD_HASH}}"
+ # get build server hostname
+ build_server=$(grep -A1 '\[build_server\]' ${{HOME}}/build_server_{project_name}.hosts | tail -1)
+ # check if build_server is available.
+ ssh root@${{build_server}} "hostname"
+ # prepare remote working directory
+ ssh root@${{build_server}} "mkdir ${{rwd}}"
+
+ # clone git repository with source code
+ ssh root@${{build_server}} \
+ "git clone https://github.com/Tendrl/{package_name} ${{rwd}}/{package_name}"
+
+ # prepare refs, use master if it is for closed PR
+ refs="refs/pull/${{PR_NUMBER}}/${{PR_VARIANT}}"
+ if [[ "${{ghprbActualCommitAuthorEmail}}" == "noreply@github.com" ]]; then
+ refs="master"
+ fi
+ # fetch and checkout the PR branch
+ branch="pr${{PR_NUMBER}}"
+ ssh root@${{build_server}} \
+ "set -xe; \
+ cd ${{rwd}}/{package_name}; \
+ git fetch origin ${{refs}}:${{branch}}; \
+ git checkout ${{branch}}; \
+ git log -5; \
+ git status;"
+
+ # prepare git hash based release string
+ # - for not merged PR, it will contain two hashes for both
+ # parents of the temporary merge to master commit
+ # - for merged PR, it will contain only the hash of the merge commit
+ # (or last commit from master)
+ git_commit_and_parrents=$(ssh root@${{build_server}} \
+ "set -xe; \
+ cd ${{rwd}}/{package_name}; \
+ git rev-list --parents -n 1 HEAD")
+ git_last_commit=$(echo "${{git_commit_and_parrents}}" | awk '{{ print $1 }}' | cut -c1-7 )
+ if [[ "${{ghprbActualCommitAuthorEmail}}" == "noreply@github.com" ]]; then
+ git_hash_release_string="${{git_last_commit}}"
+ else
+ git_parrent_a=$(echo "${{git_commit_and_parrents}}" | awk '{{ print $2 }}' | cut -c1-7 )
+ git_parrent_b=$(echo "${{git_commit_and_parrents}}" | awk '{{ print $3 }}' | cut -c1-7 )
+ git_hash_release_string="${{git_parrent_a}}_${{git_parrent_b}}"
+ fi
+ echo "${{git_last_commit}}"
+ echo "${{git_hash_release_string}}"
+
+ # build srpm package
+ ssh root@${{build_server}} \
+ "set -xe; \
+ cd ${{rwd}}/{package_name}; \
+ make gitversion ;\
+ sed -i \"s/\(^Release:.*\)/\1.${{branch}}/\" {package_prefix}{package_name}.spec ;\
+ sed -i \"s/\(^Release: *\)/\199/\" {package_prefix}{package_name}.spec ;\
+ sed -i \"s/${{git_last_commit}}/${{git_hash_release_string}}/\" {package_prefix}{package_name}.spec ;\
+ make srpm ;\
+ ls -l;"
+
+ # prepare mock configuration
+ mock_root="/var/lib/mock/epel-7-x86_64-${{BUILD_HASH}}"
+ mock_cfg="${{rwd}}/mock-epel-7-x86_64.cfg"
+ ssh root@${{build_server}} \
+ "set -xe; \
+ cp /etc/mock/epel-7-x86_64.cfg ${{mock_cfg}}; \
+ sed -i 's/epel-7-x86_64/epel-7-x86_64-${{BUILD_HASH}}/' ${{mock_cfg}}"
+
+ # build RPM packages using mock
+ ssh root@${{build_server}} \
+ "set -xe; \
+ mock -v -r ${{mock_cfg}} rebuild \
+ ${{rwd}}/{package_name}/{package_prefix}{package_name}*.src.rpm"
+
+ # prepare RPM repo
+ ssh root@${{build_server}} \
+ "set -xe; \
+ mkdir -p ${{rwd}}/rpms/pr/{package_prefix}{package_name}/${{branch}}; \
+ cp ${{mock_root}}/result/*.rpm ${{rwd}}/rpms/pr/{package_prefix}{package_name}/${{branch}};"
+
+ # cleanup the repo
+ ssh root@${{build_server}} \
+ "find ${{rwd}}/rpms/pr/{package_prefix}{package_name}/${{branch}} \
+ -type f ! -iname '*.rpm' -delete"
+ ssh root@${{build_server}} \
+ "find ${{rwd}}/rpms/pr/{package_prefix}{package_name}/${{branch}} \
+ -type f -iname '*.src.rpm' -delete"
+
+ # prepare rpm repo
+ ssh root@${{build_server}} \
+ "createrepo ${{rwd}}/rpms/pr/{package_prefix}{package_name}/${{branch}}/"
+
+ # prepare repofile
+ repo_file="${{rwd}}/rpms/pr/{package_prefix}{package_name}/${{branch}}/{package_prefix}{package_name}-${{branch}}.repo"
+ ssh root@${{build_server}} \
+ "echo '[{package_prefix}{package_name}-${{branch}}]' > ${{repo_file}} ;\
+ echo 'name={package_prefix}{package_name}-${{branch}}' >> ${{repo_file}} ;\
+ echo 'baseurl=http://artifacts.ci.centos.org/tendrl/pr/{package_prefix}{package_name}/${{branch}}/' >> ${{repo_file}} ;\
+ echo 'skip_if_unavailable=True' >> ${{repo_file}} ;\
+ echo 'gpgcheck=0' >> ${{repo_file}} ;\
+ echo 'gpgkey=https://copr-be.cloud.fedoraproject.org/results/tendrl/${{TARGET_REPO}}/pubkey.gpg' >> ${{repo_file}} ;\
+ echo 'repo_gpgcheck=0' >> ${{repo_file}} ;\
+ echo 'enabled=1' >> ${{repo_file}} ;\
+ echo '' >> ${{repo_file}};"
+
+ # upload generated repo to artifacts.ci.centos.org
+ set +x
+ key=$(cat ~/duffy.key)
+ ssh root@${{build_server}} \
+ "RSYNC_PASSWORD=${{key:0:13}} rsync -av \
+ ${{rwd}}/rpms/pr/ \
+ tendrl@artifacts.ci.centos.org::tendrl/pr/"
+ # cleanup older packages for the particular PR
+ ssh root@${{build_server}} \
+ "RSYNC_PASSWORD=${{key:0:13}} rsync -av --delete \
+ ${{rwd}}/rpms/pr/{package_prefix}{package_name}/${{branch}}/ \
+ tendrl@artifacts.ci.centos.org::tendrl/pr/{package_prefix}{package_name}/${{branch}}/"
+ set +x
+
+ echo
+ echo "##############################################################"
+ echo "REPO: http://artifacts.ci.centos.org/tendrl/pr/{package_prefix}{package_name}/${{branch}}/{package_prefix}{package_name}-${{branch}}.repo"
+ echo "##############################################################"
+ echo
+
+ publishers:
+ - trigger-parameterized-builds:
+ - project: 'tendrl-build-X-build_server-{project_name}-teardown'
+ property-file: env.sh
+ condition: ALWAYS
+
+ - email:
+ recipients: dahorak@redhat.com
+ send-to-individuals: false
+
+
+- project:
+ name: 'PR'
+ project_name: 'PR'
+ target_repo: 'Features'
+ copr_config: '~/.copr-tendrl.conf'
+ copr_user: 'tendrl'
+ triggers:
+ - github-pull-request:
+ admin-list:
+ - dahorak
+ white-list:
+ - a2batic
+ - cloudbehl
+ - fbalak
+ - gnehapk
+ - GowthamShanmugam
+ - julienlim
+ - ktdreyer
+ - ltrilety
+ - mbukatov
+ - mcarrano
+ - nnDarshan
+ - nthomas-redhat
+ - r0h4n
+ - rishubhjain
+ - sankarshanmukhopadhyay
+ - scuttlemonkey
+ - shirshendu
+ - shtripat
+ - sidhax
+ - tigert
+ - TimothyAsir
+ - TimothyAsirJeyasing
+ org-list:
+ - Tendrl
+ allow-whitelist-orgs-as-admins: false
+ trigger-phrase: '.*run build.*'
+ skip-build-phrase: 'no build'
+ github-hooks: true
+ cancel-builds-on-update: true
+ status-context: 'CentOS CI - package build'
+ status-add-test-results: false
+ scm:
+ - git:
+ url: 'https://github.com/Tendrl/{package_name}'
+ refspec: "+refs/pull/${{ghprbPullId}}/*:refs/remotes/origin/pr/${{ghprbPullId}}/*"
+ branches:
+ - "origin/pr/**"
+ basedir: tendrl-{package_name}
+ skip-tag: true
+ wipe-workspace: true
+ jobs:
+ - "tendrl-build-1-pr-{package_name}"
+ - "tendrl-build-X-build_server-{project_name}-prepare"
+ - "tendrl-build-X-build_server-{project_name}-teardown"
+ package_name:
+ - api
+ - commons
+ - gluster-integration
+ - monitoring-integration
+ - node-agent
+ - notifier
+ - tendrl-ansible:
+ package_prefix: ""
+ - tendrl-selinux:
+ package_prefix: ""
+ - ui
diff --git a/jobs/build-triggers/tendrl-build-triggers.yml b/jobs/build-triggers/tendrl-build-triggers.yml
index 287b02d..d263137 100644
--- a/jobs/build-triggers/tendrl-build-triggers.yml
+++ b/jobs/build-triggers/tendrl-build-triggers.yml
@@ -113,7 +113,7 @@
condition: ALWAYS
- email:
- recipients: dahorak@redhat.com sds-mgmt-dev@redhat.com
+ recipients: dahorak@redhat.com
send-to-individuals: false