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
No related branches found
No related tags found
No related merge requests found
...@@ -20,6 +20,8 @@ echo "CI_PROJECT_NAME:" $7 ...@@ -20,6 +20,8 @@ echo "CI_PROJECT_NAME:" $7
echo "GITLAB_USER_NAME:" $8 echo "GITLAB_USER_NAME:" $8
#$GITLAB_USER_EMAIL -> 9 #$GITLAB_USER_EMAIL -> 9
echo "GITLAB_USER_EMAIL:" $9 echo "GITLAB_USER_EMAIL:" $9
#CONFLICTING_MERGE_REQUEST -> 11
echo "CONFLICTING_MERGE_REQUEST:" $CONFLICTING_MERGE_REQUEST
#echo "------ Removing previous outputs --------" #echo "------ Removing previous outputs --------"
rm **/*.txt rm **/*.txt
...@@ -45,12 +47,31 @@ echo "Checkout merge request source branch ${6} ..." ...@@ -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 checkout -b "${6}" "origin/${6}" #Git checkout actual merge requests SOURCE BRANCHE
git status 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 --------" 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 # 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 '.[] | {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 #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}") #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}") merge_requests=$(curl "${1}/projects/${2}/merge_requests?state=opened&milestone=${3}&target_branch=${4}")
echo "${merge_requests}" | jq -c '.[]' | while read mr; do echo "${merge_requests}" | jq -c '.[]' | while read mr; do
mr_id=$(echo "$mr" | jq '.iid') mr_id=$(echo "$mr" | jq '.iid')
...@@ -71,7 +92,7 @@ echo "${merge_requests}" | jq -c '.[]' | while read mr; do ...@@ -71,7 +92,7 @@ echo "${merge_requests}" | jq -c '.[]' | while read mr; do
echo "ERROR: When retrieving merge request source branch" echo "ERROR: When retrieving merge request source branch"
continue continue
fi 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} ..." 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 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} ..." 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 ...@@ -79,6 +100,15 @@ echo "${merge_requests}" | jq -c '.[]' | while read mr; do
result=$? result=$?
if [ ! $result == 0 ] ; then if [ ! $result == 0 ] ; then
echo "Merge request title: ${mr_title}, Merge Request ID: ${mr_id}" >> conflicting_merge_requests.txt 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 else
echo "No conflict with Merge request title: ${mr_title}, Merge Request ID: ${mr_id}" echo "No conflict with Merge request title: ${mr_title}, Merge Request ID: ${mr_id}"
fi fi
...@@ -86,6 +116,7 @@ echo "${merge_requests}" | jq -c '.[]' | while read mr; do ...@@ -86,6 +116,7 @@ echo "${merge_requests}" | jq -c '.[]' | while read mr; do
fi fi
done done
fi
if [ -f "conflicting_merge_requests.txt" ]; then if [ -f "conflicting_merge_requests.txt" ]; then
echo "List of conflicting merge requests:" echo "List of conflicting merge requests:"
......
...@@ -7,11 +7,11 @@ ...@@ -7,11 +7,11 @@
workflow: workflow:
rules: rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" # Creation of Merge Request (generation of CR) - 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_COMMIT_TAG # Creation of tag (publish spec)
- if: $CI_PIPELINE_SOURCE == "web" # Removal of a specific entry - if: $CI_PIPELINE_SOURCE == "web" # Removal of a specific entry
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS - 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 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: variables:
...@@ -26,6 +26,9 @@ Checking conflicts: ...@@ -26,6 +26,9 @@ Checking conflicts:
rules: rules:
- if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event"
when: always 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 image: python:3.9.18-slim-bullseye
tags: tags:
- docker - docker
...@@ -38,7 +41,7 @@ Checking conflicts: ...@@ -38,7 +41,7 @@ Checking conflicts:
- git clone "https://$CI_SERVER_HOST/$CI_PROJECT_PATH.git" ${CI_PROJECT_NAME} - git clone "https://$CI_SERVER_HOST/$CI_PROJECT_PATH.git" ${CI_PROJECT_NAME}
script: script:
- echo 'Checking conflicts' - 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: artifacts:
when: on_failure when: on_failure
paths: paths:
...@@ -50,6 +53,8 @@ Word CR: ...@@ -50,6 +53,8 @@ Word CR:
rules: rules:
- if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event"
when: on_success when: on_success
- if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "trigger"
when: on_success
dependencies: [] dependencies: []
when: on_success when: on_success
before_script: before_script:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment