Skip to content
Snippets Groups Projects
Commit 1766175c authored by Miguel Angel Reina Ortega's avatar Miguel Angel Reina Ortega
Browse files

Cross checking support for conflicting merge requests

parent c16e9201
Branches
No related tags found
No related merge requests found
......@@ -20,6 +20,8 @@ echo "CI_PROJECT_NAME:" $7
echo "GITLAB_USER_NAME:" $8
#$GITLAB_USER_EMAIL -> 9
echo "GITLAB_USER_EMAIL:" $9
#CONFLICTING_MERGE_REQUEST -> 11
echo "CONFLICTING_MERGE_REQUEST:" $CONFLICTING_MERGE_REQUEST
#echo "------ Removing previous outputs --------"
rm **/*.txt
......@@ -45,12 +47,31 @@ echo "Checkout merge request source branch ${6} ..."
git checkout -b "${6}" "origin/${6}" #Git checkout actual merge requests SOURCE BRANCHE
git status
if [ ! -z $CONFLICTING_MERGE_REQUEST ] ; then
echo "\n------ Getting a conflicting merge request --------"
mr_source_branch=${$CONFLICTING_MERGE_REQUEST}
echo "Checkout conflicting merge request source branch ${mr_source_branch} ..."
git checkout -b "${mr_source_branch}" "origin/${mr_source_branch}" #Git checkout other merge requests SOURCE BRANCHES
echo "Run dry merge from conflicting merge request source branch ${mr_source_branch} into actual merge request source branch ${6} ..."
git merge --no-commit --no-ff "${6}" #SOURCE BRANCH of the merge request
result=$?
if [ ! $result == 0 ] ; then
echo "Merge request title: ${mr_source_branch}" >> conflicting_merge_requests.txt
else
echo "No conflict with Merge request title: ${mr_source_branch}"
fi
git merge --abort
else
echo "\n------ Getting all potential conflicting merge requests --------"
# Get a list of open merge requests: Filter by the same Milestone and Target Branch as the actual merge request
#curl --header "PRIVATE-TOKEN: ${10}" "${1}/projects/${2}/merge_requests?state=opened&milestone=${3}&target_branch=${4}" |jq -c '.[] | {iid: .iid, source_branch: .source_branch, title: .title}'
#curl --header "PRIVATE-TOKEN: ${10}" "${1}/projects/${2}/merge_requests?state=opened&milestone=${3}&target_branch=${4}" | jq -c '.[]' | while read mr; do
#merge_requests=$(curl --header "PRIVATE-TOKEN: ${10}" "${1}/projects/${2}/merge_requests?state=opened&milestone=${3}&target_branch=${4}")
# Initialize an empty array to store conflicting merge requests
conflicting_merge_request_ids=()
merge_requests=$(curl "${1}/projects/${2}/merge_requests?state=opened&milestone=${3}&target_branch=${4}")
echo "${merge_requests}" | jq -c '.[]' | while read mr; do
mr_id=$(echo "$mr" | jq '.iid')
......@@ -71,7 +92,7 @@ echo "${merge_requests}" | jq -c '.[]' | while read mr; do
echo "ERROR: When retrieving merge request source branch"
continue
fi
if [ ${mr_id} != ${5} ]; then
if [ ${mr_id} != ${5} ] && [ ${mr_id} -lt ${5} ]; then
echo "Checkout potential merge request source branch ${mr_source_branch} ..."
git checkout -b "${mr_source_branch}" "origin/${mr_source_branch}" #Git checkout other merge requests SOURCE BRANCHES
echo "Run dry merge from potential merge request source branch ${mr_source_branch} into actual merge request source branch ${6} ..."
......@@ -79,6 +100,15 @@ echo "${merge_requests}" | jq -c '.[]' | while read mr; do
result=$?
if [ ! $result == 0 ] ; then
echo "Merge request title: ${mr_title}, Merge Request ID: ${mr_id}" >> conflicting_merge_requests.txt
conflicting_merge_request_ids+=("${mr_id}")
# Trigger pipeline for conflicting merge requests
echo "Triggering pipeline for merge request ${mr_id}"
curl -X POST \
--fail \
-F token=${10} \
-F ref=${mr_source_branch} \
-F "variables[CONFLICTING_MERGE_REQUEST]=${mr_source_branch}" \
${1}/projects/${2}/trigger/pipeline
else
echo "No conflict with Merge request title: ${mr_title}, Merge Request ID: ${mr_id}"
fi
......@@ -86,6 +116,7 @@ echo "${merge_requests}" | jq -c '.[]' | while read mr; do
fi
done
fi
if [ -f "conflicting_merge_requests.txt" ]; then
echo "List of conflicting merge requests:"
......
......@@ -7,11 +7,11 @@
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" # Creation of Merge Request (generation of CR)
- if: $CI_PIPELINE_SOURCE == "trigger" # Upgrade of the index.html page
- if: $CI_COMMIT_TAG # Creation of tag (publish spec)
- if: $CI_PIPELINE_SOURCE == "web" # Removal of a specific entry
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
when: never # Pipeline to be run manually as defined in the contribution procedure as it is not known when the CR is ready
- if: $CI_PIPELINE_SOURCE == "trigger" # Upgrade of the index.html page
variables:
......@@ -26,6 +26,9 @@ Checking conflicts:
rules:
- if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event"
when: always
- if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "trigger"
when: always
allow_failure: true
image: python:3.9.18-slim-bullseye
tags:
- docker
......@@ -38,7 +41,7 @@ Checking conflicts:
- git clone "https://$CI_SERVER_HOST/$CI_PROJECT_PATH.git" ${CI_PROJECT_NAME}
script:
- echo 'Checking conflicts'
- ./checking_conflicts.sh ${CI_API_V4_URL} ${CI_MERGE_REQUEST_PROJECT_ID} ${CI_MERGE_REQUEST_MILESTONE} ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} ${CI_MERGE_REQUEST_IID} ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} ${CI_PROJECT_NAME} "$GITLAB_USER_NAME" $GITLAB_USER_EMAIL
- ./checking_conflicts.sh ${CI_API_V4_URL} ${CI_MERGE_REQUEST_PROJECT_ID} ${CI_MERGE_REQUEST_MILESTONE} ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} ${CI_MERGE_REQUEST_IID} ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} ${CI_PROJECT_NAME} "$GITLAB_USER_NAME" $GITLAB_USER_EMAIL $CHECKING_CONFLICTS_TOKEN $CONFLICTING_MERGE_REQUEST
artifacts:
when: on_failure
paths:
......@@ -50,6 +53,8 @@ Word CR:
rules:
- if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event"
when: on_success
- if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "trigger"
when: on_success
dependencies: []
when: on_success
before_script:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment