From 20205d49839bb0ba00d68cdfb22dfbb1ec06bf2d Mon Sep 17 00:00:00 2001 From: vishugoyal Date: Tue, 16 Apr 2024 15:38:07 +0530 Subject: [PATCH 01/25] added the sql of bitbucket runner plugin --- .../sql/239_bitbucket_runner_plugin.down.sql | 18 ++ .../sql/239_bitbucket_runner_plugin.up.sql | 200 ++++++++++++++++++ 2 files changed, 218 insertions(+) create mode 100644 scripts/sql/239_bitbucket_runner_plugin.down.sql create mode 100644 scripts/sql/239_bitbucket_runner_plugin.up.sql diff --git a/scripts/sql/239_bitbucket_runner_plugin.down.sql b/scripts/sql/239_bitbucket_runner_plugin.down.sql new file mode 100644 index 0000000000..8caa77bd59 --- /dev/null +++ b/scripts/sql/239_bitbucket_runner_plugin.down.sql @@ -0,0 +1,18 @@ +DELETE FROM plugin_step_variable WHERE plugin_step_id =(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false); +DELETE FROM plugin_step WHERE plugin_id=(SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'); +DELETE FROM pipeline_stage_step_variable where pipeline_stage_step_id in (select id from pipeline_stage_step where name ='BitBucket Runner Trigger v1.0.0'); +DELETE from pipeline_stage_step where name ='BitBucket Runner Trigger v1.0.0'; +DELETE FROM plugin_metadata WHERE name ='BitBucket Runner Trigger v1.0.0'; + + +DELETE FROM plugin_step_variable WHERE plugin_step_id IN (SELECT id FROM plugin_step WHERE plugin_id = (SELECT id FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0')); + +DELETE FROM plugin_step WHERE plugin_id = (SELECT id FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0'); + +DELETE FROM plugin_pipeline_script WHERE id = (SELECT script_id FROM plugin_step WHERE plugin_id = (SELECT id FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0')); + +DELETE FROM plugin_stage_mapping WHERE plugin_id = (SELECT id FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0'); + +DELETE FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0'; + + diff --git a/scripts/sql/239_bitbucket_runner_plugin.up.sql b/scripts/sql/239_bitbucket_runner_plugin.up.sql new file mode 100644 index 0000000000..322add188e --- /dev/null +++ b/scripts/sql/239_bitbucket_runner_plugin.up.sql @@ -0,0 +1,200 @@ +INSERT INTO plugin_metadata (id,name,description,type,icon,deleted,created_on,created_by,updated_on,updated_by) +VALUES (nextval('id_seq_plugin_metadata'),'BitBucket Runner Trigger v1.0.0' , 'The plugin enables users to trigger the pipeline in the BitBucket.','PRESET','https://raw.githubusercontent.com/devtron-labs/devtron/main/assets/devtron-logo-plugin.png',false,'now()',1,'now()',1); + + +INSERT INTO plugin_stage_mapping (id,plugin_id,stage_type,created_on,created_by,updated_on,updated_by)VALUES (nextval('id_seq_plugin_stage_mapping'), +(SELECT id from plugin_metadata where name='BitBucket Runner Trigger v1.0.0'), 0,'now()',1,'now()',1); + + +INSERT INTO "plugin_pipeline_script" ("id", "script","type","deleted","created_on", "created_by", "updated_on", "updated_by") +VALUES ( nextval('id_seq_plugin_pipeline_script'), +E'#!/bin/bash + +# Extract git username, password, and git repository URL +if [[ -z "$BitBucketUsername" || -z "$BitBucketToken" ]]; then + BitBucketUsername=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].gitOptions.userName\') + BitBucketToken=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].gitOptions.password\') +fi + +git_repository_url=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].gitRepository\') + +# Extract the workspace name and repository name from the gitRepository URL +if [[ -z "$WorkspaceName" ]]; then + WorkspaceName=$(echo "$git_repository_url" | awk -F\'/\' \'{print $(NF-1)}\' | cut -d\'@\' -f2) + if [[ "$WorkspaceName" == *"bitbucket.org:"* ]]; then + # Extract everything after \'bitbucket.org:\' + WorkspaceName="${WorkspaceName#*bitbucket.org:}" + fi +fi + +if [[ -z "$RepoName" ]]; then + RepoName=$(echo "$git_repository_url" | awk -F\'/\' \'{print $NF}\' | sed \'s/.git//\') +fi + +if [[ -z "$BranchName" ]]; then + + # Set a default value for sourceValue + default_source_value="main" + + # Extract sourceType and sourceValue. + source_type=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].sourceType\') + source_value=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].sourceValue\') + + # Conditionally assign sourceValue based on sourceType + if [ "$source_type" == "SOURCE_TYPE_BRANCH_FIXED" ]; then + BranchName="$source_value" + else + BranchName="$default_source_value" + fi +fi + +if [[ -z "$BitBucketUsername" || -z "$BitBucketToken" ]]; then + echo "Enter the BitBucket username or api token. Exiting..." + exit 1 +fi + +# Set default value for StatusTimeOutSeconds to 0 if not provided or not an integer +if ! [[ "$StatusTimeOutSeconds" =~ ^[0-9]+$ ]]; then + StatusTimeOutSeconds=0 +fi + +# Determine sleep interval based on StatusTimeOutSeconds +if [ "$StatusTimeOutSeconds" -lt "60" ]; then + sleepInterval=$(($StatusTimeOutSeconds / 2)) +else + sleepInterval=2 +fi + +# Function for verify the workspaceName, RepoName and bitbucket Access API token +verify(){ + curl -s -u $BitBucketUsername:$BitBucketToken --request GET "https://api.bitbucket.org/2.0/repositories/$WorkspaceName/$RepoName/pipelines/?page=1&pagelen=1&sort=-created_on" --compressed +} + +# call the verify function to get the response and act accordingly +verify_response=$(verify) + + +if [[ -z "$verify_response" ]]; then + echo "Error: Unauthorized! Please check the API token or Username provided. Exiting..." + exit 1 +elif true ; then + + verify_response=$(verify | jq -r \'.error.message\') + if [[ "$verify_response" == "Token is invalid or not supported for this endpoint." ]]; then + echo "Error: Unauthorized! Please check the API token or Username provided. Exiting..." + exit 1 + elif [[ "$verify_response" == "Your credentials lack one or more required privilege scopes." ]]; then + echo "Error, Your credentials lack one or more required privilege scopes. Exiting..." + exit 1 + elif [[ "$verify_response" == "Resource not found" ]]; then + echo "Error: Workspace Name $WorkspaceName or Repository Name $RepoName not found. Please check the details entered! Exiting..." + exit 1 + fi +fi + +# For v1.0, we fixed the type name as branch +type="branch" + +# function for trigger a runner in bitbucket +trigger_pipeline() { + curl -s -X POST \\ + -u "$BitBucketUsername:$BitBucketToken" \\ + -H \'Content-Type: application/json\' \\ + "https://api.bitbucket.org/2.0/repositories/$WorkspaceName/$RepoName/pipelines/" \\ + -d \'{"target": {"ref_type": "\'$type\'", "type": "pipeline_ref_target", "ref_name": "\'$BranchName\'"}}\' + +} + +# call the trigger_pipeline function to get the error if we get error otherwise it will triggered successfully. +error=$(trigger_pipeline | jq -r \'.error.message\') +if [[ "$error" == "Not found" ]]; then + echo "Error, Enter the correct branch name $BranchName. Exiting..." + exit 1 +elif [[ "$error" == "null" ]]; then + echo "Pipeline triggered successfully..." +fi + + +# check the status of the pipeline in the bitbucket +check_healthy_status() { + + if [ "$StatusTimeOutSeconds" -le "0" ]; then + echo "Skipping application status check. Taking 0 as a default input" + return + fi + + local max_wait=$StatusTimeOutSeconds + + + local start_time=$(date +%s) + + while :; do + local current_time=$(date +%s) + local elapsed_time=$((current_time - start_time)) + + if [ "$elapsed_time" -ge "$max_wait" ]; then + echo "StatusTimeOutSeconds reached without success. Exiting..." + exit 1 + fi + + resources=$(verify) + + stateName=$(echo $resources | jq -r \'.values[].state.name\' ) + + if [[ $stateName == "COMPLETED" ]]; then + status=$(echo $resources | jq -r \'.values[].state.result.type\') + elif [[ $stateName == "IN_PROGRESS" ]]; then + status=$(echo $resources | jq -r \'.values[].state.stage.type\') + elif [[ $stateName == "PENDING" ]]; then + status="PENDING" + fi + + + if [[ "$status" == "pipeline_state_in_progress_running" ]]; then + echo "Triggered Pipeline status is progressing..." + elif [[ "$status" == "PENDING" ]]; then + echo "Triggered Pipeline status is pending..." + elif [[ "$status" == "pipeline_state_completed_successful" ]]; then + echo "Pipeline succeeded." + break + elif [[ "$status" == "pipeline_state_completed_failed" ]]; then + echo "Pipeline Failed." + exit 1 + elif [[ "$status" == "pipeline_state_in_progress_halted" ]]; then + echo "Pipeline Paused." + exit 1 + fi + sleep $sleepInterval + done +} + +# # Optionally check the healthy status of the pipeline in bitbucket +sleep 2 +check_healthy_status', + + 'SHELL', + 'f', + 'now()', + 1, + 'now()', + 1 +); + + + + +INSERT INTO "plugin_step" ("id", "plugin_id","name","description","index","step_type","script_id","deleted", "created_on", "created_by", "updated_on", "updated_by") VALUES (nextval('id_seq_plugin_step'), (SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'),'Step 1','Step 1 - BitBucket Runner Trigger v1.0.0','1','INLINE',(SELECT last_value FROM id_seq_plugin_pipeline_script),'f','now()', 1, 'now()', 1); + +INSERT INTO plugin_step_variable (id,plugin_step_id,name,format,description,is_exposed,allow_empty_value,default_value,value,variable_type,value_type,previous_step_index,variable_step_index,variable_step_index_in_plugin,reference_variable_name,deleted,created_on,created_by,updated_on,updated_by) +VALUES +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketUsername','STRING','Enter BitBucket Username','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketToken','STRING','Enter BitBucket Api Token','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'WorkspaceName','STRING','Enter Workspace Name','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'RepoName','STRING','Enter the repository name in the bitbucket','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BranchName','STRING','Enter the branch name','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'StatusTimeOutSeconds','STRING','Enter the maximum time (in seconds) a user can wait for the application to deploy.Enter a postive integer value','t','t',0,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1); + + + + + From 23538cd8a152e276b1d3a659f558c0083496c7c2 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Wed, 17 Apr 2024 11:16:34 +0530 Subject: [PATCH 02/25] Update 239_bitbucket_runner_plugin.down.sql --- .../sql/239_bitbucket_runner_plugin.down.sql | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/scripts/sql/239_bitbucket_runner_plugin.down.sql b/scripts/sql/239_bitbucket_runner_plugin.down.sql index 8caa77bd59..f49e3f1bde 100644 --- a/scripts/sql/239_bitbucket_runner_plugin.down.sql +++ b/scripts/sql/239_bitbucket_runner_plugin.down.sql @@ -1,18 +1,8 @@ DELETE FROM plugin_step_variable WHERE plugin_step_id =(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false); -DELETE FROM plugin_step WHERE plugin_id=(SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'); +DELETE FROM plugin_step_variable where plugin_step_id =(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false); +DELETE FROM plugin_stage_mapping where plugin_id=(SELECT id from plugin_metadata where name='BitBucket Runner Trigger v1.0.0'); +DELETE FROM plugin_step where plugin_id=(SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'); +DELETE FROM plugin_tag_relation WHERE plugin_id=(SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'); DELETE FROM pipeline_stage_step_variable where pipeline_stage_step_id in (select id from pipeline_stage_step where name ='BitBucket Runner Trigger v1.0.0'); -DELETE from pipeline_stage_step where name ='BitBucket Runner Trigger v1.0.0'; -DELETE FROM plugin_metadata WHERE name ='BitBucket Runner Trigger v1.0.0'; - - -DELETE FROM plugin_step_variable WHERE plugin_step_id IN (SELECT id FROM plugin_step WHERE plugin_id = (SELECT id FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0')); - -DELETE FROM plugin_step WHERE plugin_id = (SELECT id FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0'); - -DELETE FROM plugin_pipeline_script WHERE id = (SELECT script_id FROM plugin_step WHERE plugin_id = (SELECT id FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0')); - -DELETE FROM plugin_stage_mapping WHERE plugin_id = (SELECT id FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0'); - -DELETE FROM plugin_metadata WHERE name = 'BitBucket Runner Trigger v1.0.0'; - - +DELETE FROM pipeline_stage_step WHERE name ='BitBucket Runner Trigger v1.0.0'; +DELETE FROM plugin_metadata where name='BitBucket Runner Trigger v1.0.0'; From 45d73c85bd31a29158077b088654fce1f23c4620 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Wed, 17 Apr 2024 11:56:48 +0530 Subject: [PATCH 03/25] Update 239_bitbucket_runner_plugin.down.sql --- scripts/sql/239_bitbucket_runner_plugin.down.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/sql/239_bitbucket_runner_plugin.down.sql b/scripts/sql/239_bitbucket_runner_plugin.down.sql index f49e3f1bde..304f126da3 100644 --- a/scripts/sql/239_bitbucket_runner_plugin.down.sql +++ b/scripts/sql/239_bitbucket_runner_plugin.down.sql @@ -1,5 +1,4 @@ DELETE FROM plugin_step_variable WHERE plugin_step_id =(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false); -DELETE FROM plugin_step_variable where plugin_step_id =(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false); DELETE FROM plugin_stage_mapping where plugin_id=(SELECT id from plugin_metadata where name='BitBucket Runner Trigger v1.0.0'); DELETE FROM plugin_step where plugin_id=(SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'); DELETE FROM plugin_tag_relation WHERE plugin_id=(SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'); From 13156f9404fe294919bfd02063ae86f9b51f9c5e Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Wed, 1 May 2024 15:41:43 +0530 Subject: [PATCH 04/25] bitbucket_runner_plugin.up.sql --- .../sql/239_bitbucket_runner_plugin.up.sql | 79 ++++++++++--------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/scripts/sql/239_bitbucket_runner_plugin.up.sql b/scripts/sql/239_bitbucket_runner_plugin.up.sql index 322add188e..e30d6683e0 100644 --- a/scripts/sql/239_bitbucket_runner_plugin.up.sql +++ b/scripts/sql/239_bitbucket_runner_plugin.up.sql @@ -2,6 +2,10 @@ INSERT INTO plugin_metadata (id,name,description,type,icon,deleted,created_on,cr VALUES (nextval('id_seq_plugin_metadata'),'BitBucket Runner Trigger v1.0.0' , 'The plugin enables users to trigger the pipeline in the BitBucket.','PRESET','https://raw.githubusercontent.com/devtron-labs/devtron/main/assets/devtron-logo-plugin.png',false,'now()',1,'now()',1); +INSERT INTO plugin_metadata (id,name,description,type,icon,deleted,created_on,created_by,updated_on,updated_by) +VALUES (nextval('id_seq_plugin_metadata'),'BitBucket Runner Trigger v1.0.0' , 'The plugin enables users to trigger the runner in the BitBucket .','PRESET','https://raw.githubusercontent.com/devtron-labs/devtron/main/assets/bitbucket-logo-plugin.jpeg',false,'now()',1,'now()',1); + + INSERT INTO plugin_stage_mapping (id,plugin_id,stage_type,created_on,created_by,updated_on,updated_by)VALUES (nextval('id_seq_plugin_stage_mapping'), (SELECT id from plugin_metadata where name='BitBucket Runner Trigger v1.0.0'), 0,'now()',1,'now()',1); @@ -10,7 +14,7 @@ INSERT INTO "plugin_pipeline_script" ("id", "script","type","deleted","created_o VALUES ( nextval('id_seq_plugin_pipeline_script'), E'#!/bin/bash -# Extract git username, password, and git repository URL +# Extract bitbucket username, token from CI_CD_EVENT variable if [[ -z "$BitBucketUsername" || -z "$BitBucketToken" ]]; then BitBucketUsername=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].gitOptions.userName\') BitBucketToken=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].gitOptions.password\') @@ -20,19 +24,20 @@ git_repository_url=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProj # Extract the workspace name and repository name from the gitRepository URL if [[ -z "$WorkspaceName" ]]; then - WorkspaceName=$(echo "$git_repository_url" | awk -F\'/\' \'{print $(NF-1)}\' | cut -d\'@\' -f2) + WorkspaceName=$(echo "$git_repository_url" | awk -F \'/\' \'{print $(NF-1)}\' | cut -d \'@\' -f2) if [[ "$WorkspaceName" == *"bitbucket.org:"* ]]; then - # Extract everything after \'bitbucket.org:\' + # Extract everything after bitbucket.org: WorkspaceName="${WorkspaceName#*bitbucket.org:}" fi fi +# If RepoName not provided my the user then we will extract the name from the git_repository_url if [[ -z "$RepoName" ]]; then - RepoName=$(echo "$git_repository_url" | awk -F\'/\' \'{print $NF}\' | sed \'s/.git//\') + RepoName=$(echo "$git_repository_url" | awk -F \'/\' \'{print $NF}\' | sed \'s/.git//\' ) fi -if [[ -z "$BranchName" ]]; then +if [[ -z "$BranchName" ]]; then # Set a default value for sourceValue default_source_value="main" @@ -48,8 +53,9 @@ if [[ -z "$BranchName" ]]; then fi fi +# if the username and token is empty because it doesnot able to extract from the CI_CD_EVENT variable because the pipeline is configured with SSH. if [[ -z "$BitBucketUsername" || -z "$BitBucketToken" ]]; then - echo "Enter the BitBucket username or api token. Exiting..." + echo "BitBucket username or api/token mandatory for the BitBucket pipelines configured with SSH. Exiting..." exit 1 fi @@ -62,7 +68,7 @@ fi if [ "$StatusTimeOutSeconds" -lt "60" ]; then sleepInterval=$(($StatusTimeOutSeconds / 2)) else - sleepInterval=2 + sleepInterval=30 fi # Function for verify the workspaceName, RepoName and bitbucket Access API token @@ -70,26 +76,22 @@ verify(){ curl -s -u $BitBucketUsername:$BitBucketToken --request GET "https://api.bitbucket.org/2.0/repositories/$WorkspaceName/$RepoName/pipelines/?page=1&pagelen=1&sort=-created_on" --compressed } -# call the verify function to get the response and act accordingly -verify_response=$(verify) +verify_status_code() +{ + curl -s -i -u $BitBucketUsername:$BitBucketToken --request GET "https://api.bitbucket.org/2.0/repositories/$WorkspaceName/$RepoName/pipelines/?page=1&pagelen=1&sort=-created_on" --compressed +} + +verify_response=$(verify_status_code) +status_code=$(echo "$verify_response" | sed -n \'s/HTTP\\/[0-9.]* \\([0-9]\\+\\) .*/\\1/p\') -if [[ -z "$verify_response" ]]; then - echo "Error: Unauthorized! Please check the API token or Username provided. Exiting..." +if [[ "$status_code" -eq "401" ]]; then + echo "Error: Unauthorized! Please check Username or api/token provided. Exiting..." + exit 1 +elif [[ "$status_code" -ge 300 && "$status_code" -lt 400 ]]; then + verify_response=$(verify) + echo $verify_response, Exiting... exit 1 -elif true ; then - - verify_response=$(verify | jq -r \'.error.message\') - if [[ "$verify_response" == "Token is invalid or not supported for this endpoint." ]]; then - echo "Error: Unauthorized! Please check the API token or Username provided. Exiting..." - exit 1 - elif [[ "$verify_response" == "Your credentials lack one or more required privilege scopes." ]]; then - echo "Error, Your credentials lack one or more required privilege scopes. Exiting..." - exit 1 - elif [[ "$verify_response" == "Resource not found" ]]; then - echo "Error: Workspace Name $WorkspaceName or Repository Name $RepoName not found. Please check the details entered! Exiting..." - exit 1 - fi fi # For v1.0, we fixed the type name as branch @@ -101,16 +103,23 @@ trigger_pipeline() { -u "$BitBucketUsername:$BitBucketToken" \\ -H \'Content-Type: application/json\' \\ "https://api.bitbucket.org/2.0/repositories/$WorkspaceName/$RepoName/pipelines/" \\ - -d \'{"target": {"ref_type": "\'$type\'", "type": "pipeline_ref_target", "ref_name": "\'$BranchName\'"}}\' + -d \'{"target": {"ref_type": "\'$type\'", "type": "pipeline_ref_target", "ref_name": "\'$BranchName\'"}}\' \\ + -w " Status_Code %{http_code}" } # call the trigger_pipeline function to get the error if we get error otherwise it will triggered successfully. -error=$(trigger_pipeline | jq -r \'.error.message\') -if [[ "$error" == "Not found" ]]; then - echo "Error, Enter the correct branch name $BranchName. Exiting..." +response=$(trigger_pipeline) + + +# Extracting status code +status_code=$(echo "$response" | awk \'{print $NF}\') + + +if [[ "$status_code" -eq "404" ]]; then + echo $response, Exiting... exit 1 -elif [[ "$error" == "null" ]]; then +elif [[ "$status_code" -ge 200 && "$status_code" -lt 300 ]]; then echo "Pipeline triggered successfully..." fi @@ -149,7 +158,6 @@ check_healthy_status() { status="PENDING" fi - if [[ "$status" == "pipeline_state_in_progress_running" ]]; then echo "Triggered Pipeline status is progressing..." elif [[ "$status" == "PENDING" ]]; then @@ -181,20 +189,17 @@ check_healthy_status', ); - - INSERT INTO "plugin_step" ("id", "plugin_id","name","description","index","step_type","script_id","deleted", "created_on", "created_by", "updated_on", "updated_by") VALUES (nextval('id_seq_plugin_step'), (SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'),'Step 1','Step 1 - BitBucket Runner Trigger v1.0.0','1','INLINE',(SELECT last_value FROM id_seq_plugin_pipeline_script),'f','now()', 1, 'now()', 1); INSERT INTO plugin_step_variable (id,plugin_step_id,name,format,description,is_exposed,allow_empty_value,default_value,value,variable_type,value_type,previous_step_index,variable_step_index,variable_step_index_in_plugin,reference_variable_name,deleted,created_on,created_by,updated_on,updated_by) VALUES -(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketUsername','STRING','Enter BitBucket Username','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), -(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketToken','STRING','Enter BitBucket Api Token','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketUsername','STRING','Enter BitBucket Username (mandatory when pipeline configured with SSH)','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketToken','STRING','Enter BitBucket api/token (mandatory when pipeline configured with SSH)','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), (nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'WorkspaceName','STRING','Enter Workspace Name','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), -(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'RepoName','STRING','Enter the repository name in the bitbucket','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), -(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BranchName','STRING','Enter the branch name','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'RepoName','STRING','Enter repository name in the bitbucket','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BranchName','STRING','Enter branch name.','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), (nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'StatusTimeOutSeconds','STRING','Enter the maximum time (in seconds) a user can wait for the application to deploy.Enter a postive integer value','t','t',0,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1); - From 37e5793d847a358d831e3103d56fd5e3f7e3091d Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Wed, 1 May 2024 15:45:07 +0530 Subject: [PATCH 05/25] Update 239_bitbucket_runner_plugin.up.sql --- scripts/sql/239_bitbucket_runner_plugin.up.sql | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/sql/239_bitbucket_runner_plugin.up.sql b/scripts/sql/239_bitbucket_runner_plugin.up.sql index e30d6683e0..8bbd9479ca 100644 --- a/scripts/sql/239_bitbucket_runner_plugin.up.sql +++ b/scripts/sql/239_bitbucket_runner_plugin.up.sql @@ -1,7 +1,3 @@ -INSERT INTO plugin_metadata (id,name,description,type,icon,deleted,created_on,created_by,updated_on,updated_by) -VALUES (nextval('id_seq_plugin_metadata'),'BitBucket Runner Trigger v1.0.0' , 'The plugin enables users to trigger the pipeline in the BitBucket.','PRESET','https://raw.githubusercontent.com/devtron-labs/devtron/main/assets/devtron-logo-plugin.png',false,'now()',1,'now()',1); - - INSERT INTO plugin_metadata (id,name,description,type,icon,deleted,created_on,created_by,updated_on,updated_by) VALUES (nextval('id_seq_plugin_metadata'),'BitBucket Runner Trigger v1.0.0' , 'The plugin enables users to trigger the runner in the BitBucket .','PRESET','https://raw.githubusercontent.com/devtron-labs/devtron/main/assets/bitbucket-logo-plugin.jpeg',false,'now()',1,'now()',1); From 4b8f8a32828aa63589956fac3a46f36fa6f34a62 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Wed, 1 May 2024 16:10:51 +0530 Subject: [PATCH 06/25] bitbucket_runner_plugin.up.sql --- scripts/sql/239_bitbucket_runner_plugin.up.sql | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/sql/239_bitbucket_runner_plugin.up.sql b/scripts/sql/239_bitbucket_runner_plugin.up.sql index 8bbd9479ca..90cf6ed411 100644 --- a/scripts/sql/239_bitbucket_runner_plugin.up.sql +++ b/scripts/sql/239_bitbucket_runner_plugin.up.sql @@ -6,13 +6,19 @@ INSERT INTO plugin_stage_mapping (id,plugin_id,stage_type,created_on,created_by, (SELECT id from plugin_metadata where name='BitBucket Runner Trigger v1.0.0'), 0,'now()',1,'now()',1); + + INSERT INTO "plugin_pipeline_script" ("id", "script","type","deleted","created_on", "created_by", "updated_on", "updated_by") VALUES ( nextval('id_seq_plugin_pipeline_script'), E'#!/bin/bash -# Extract bitbucket username, token from CI_CD_EVENT variable -if [[ -z "$BitBucketUsername" || -z "$BitBucketToken" ]]; then +# Extract bitbucket username from CI_CD_EVENT variable +if [[ -z "$BitBucketUsername" ]]; then BitBucketUsername=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].gitOptions.userName\') +fi + +# Extract token from CI_CD_EVENT variable +if [[ -z "$BitBucketToken" ]]; then BitBucketToken=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].gitOptions.password\') fi From dc5c7a87bb053559027793a5574c7326cd76f2ff Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Wed, 1 May 2024 16:11:15 +0530 Subject: [PATCH 07/25] bitbucket_runner_plugin.up.sql --- scripts/sql/239_bitbucket_runner_plugin.up.sql | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/sql/239_bitbucket_runner_plugin.up.sql b/scripts/sql/239_bitbucket_runner_plugin.up.sql index 90cf6ed411..406d6966ac 100644 --- a/scripts/sql/239_bitbucket_runner_plugin.up.sql +++ b/scripts/sql/239_bitbucket_runner_plugin.up.sql @@ -1,13 +1,9 @@ INSERT INTO plugin_metadata (id,name,description,type,icon,deleted,created_on,created_by,updated_on,updated_by) VALUES (nextval('id_seq_plugin_metadata'),'BitBucket Runner Trigger v1.0.0' , 'The plugin enables users to trigger the runner in the BitBucket .','PRESET','https://raw.githubusercontent.com/devtron-labs/devtron/main/assets/bitbucket-logo-plugin.jpeg',false,'now()',1,'now()',1); - INSERT INTO plugin_stage_mapping (id,plugin_id,stage_type,created_on,created_by,updated_on,updated_by)VALUES (nextval('id_seq_plugin_stage_mapping'), (SELECT id from plugin_metadata where name='BitBucket Runner Trigger v1.0.0'), 0,'now()',1,'now()',1); - - - INSERT INTO "plugin_pipeline_script" ("id", "script","type","deleted","created_on", "created_by", "updated_on", "updated_by") VALUES ( nextval('id_seq_plugin_pipeline_script'), E'#!/bin/bash From 8e5d375fb5501d0cabae5d73abc6f45cb7c420b4 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Wed, 1 May 2024 16:21:01 +0530 Subject: [PATCH 08/25] bitbucket_runner_plugin.up.sql --- scripts/sql/239_bitbucket_runner_plugin.up.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sql/239_bitbucket_runner_plugin.up.sql b/scripts/sql/239_bitbucket_runner_plugin.up.sql index 406d6966ac..aaa58beca9 100644 --- a/scripts/sql/239_bitbucket_runner_plugin.up.sql +++ b/scripts/sql/239_bitbucket_runner_plugin.up.sql @@ -196,7 +196,7 @@ VALUES (nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'WorkspaceName','STRING','Enter Workspace Name','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), (nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'RepoName','STRING','Enter repository name in the bitbucket','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), (nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BranchName','STRING','Enter branch name.','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), -(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'StatusTimeOutSeconds','STRING','Enter the maximum time (in seconds) a user can wait for the application to deploy.Enter a postive integer value','t','t',0,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1); +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'StatusTimeOutSeconds','STRING','Enter the maximum time (in seconds) a user can wait for the application to deploy.Enter a positive integer value','t','t',0,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1); From a090b41ace8f89e011a93ccb0f8e8b42fd05f44a Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Wed, 1 May 2024 16:29:02 +0530 Subject: [PATCH 09/25] update the sql script --- scripts/sql/239_bitbucket_runner_plugin.up.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sql/239_bitbucket_runner_plugin.up.sql b/scripts/sql/239_bitbucket_runner_plugin.up.sql index aaa58beca9..6f2ebd2442 100644 --- a/scripts/sql/239_bitbucket_runner_plugin.up.sql +++ b/scripts/sql/239_bitbucket_runner_plugin.up.sql @@ -187,7 +187,7 @@ check_healthy_status', ); -INSERT INTO "plugin_step" ("id", "plugin_id","name","description","index","step_type","script_id","deleted", "created_on", "created_by", "updated_on", "updated_by") VALUES (nextval('id_seq_plugin_step'), (SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'),'Step 1','Step 1 - BitBucket Runner Trigger v1.0.0','1','INLINE',(SELECT last_value FROM id_seq_plugin_pipeline_script),'f','now()', 1, 'now()', 1); +INSERT INTO "plugin_step" ("id", "plugin_id","name","description","index","step_type","script_id","deleted", "created_on", "created_by", "updated_on", "updated_by") VALUES (nextval('id_seq_plugin_step'), (SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'),'Step 1','BitBucket Runner Trigger v1.0.0','1','INLINE',(SELECT last_value FROM id_seq_plugin_pipeline_script),'f','now()', 1, 'now()', 1); INSERT INTO plugin_step_variable (id,plugin_step_id,name,format,description,is_exposed,allow_empty_value,default_value,value,variable_type,value_type,previous_step_index,variable_step_index,variable_step_index_in_plugin,reference_variable_name,deleted,created_on,created_by,updated_on,updated_by) VALUES From e2d5d3d759b1d7bb7b3c3b368ccc5ca4533d0f81 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Thu, 2 May 2024 17:51:45 +0530 Subject: [PATCH 10/25] bitbucket_runner_plugin.down.sql --- scripts/sql/239_bitbucket_runner_plugin.down.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sql/239_bitbucket_runner_plugin.down.sql b/scripts/sql/239_bitbucket_runner_plugin.down.sql index 304f126da3..9f0ff9c5b5 100644 --- a/scripts/sql/239_bitbucket_runner_plugin.down.sql +++ b/scripts/sql/239_bitbucket_runner_plugin.down.sql @@ -1,4 +1,4 @@ -DELETE FROM plugin_step_variable WHERE plugin_step_id =(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false); +DELETE FROM plugin_step_variable WHERE plugin_step_id in (SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false); DELETE FROM plugin_stage_mapping where plugin_id=(SELECT id from plugin_metadata where name='BitBucket Runner Trigger v1.0.0'); DELETE FROM plugin_step where plugin_id=(SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'); DELETE FROM plugin_tag_relation WHERE plugin_id=(SELECT id FROM plugin_metadata WHERE name='BitBucket Runner Trigger v1.0.0'); From 91ddd84552889e15a7866cf8969b519c9610f07f Mon Sep 17 00:00:00 2001 From: vishugoyal Date: Thu, 16 May 2024 11:58:24 +0530 Subject: [PATCH 11/25] added the logo of the bitbucket plugin --- assets/bitbucket.jpeg | 2135 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2135 insertions(+) create mode 100644 assets/bitbucket.jpeg diff --git a/assets/bitbucket.jpeg b/assets/bitbucket.jpeg new file mode 100644 index 0000000000..94b8565397 --- /dev/null +++ b/assets/bitbucket.jpeg @@ -0,0 +1,2135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + logo/bitbucket.jpeg at main · vishuOrg/logo · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + +
+ + + + + + + + + +
+
+
+ + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + / + + logo + + + Public +
+ + +
+ +
+ + +
+
+ +
+
+ + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + +

Latest commit

 

History

History
7.19 KB

bitbucket.jpeg

File metadata and controls

7.19 KB
bitbucket.jpeg
+
+ + + + +
+ +
+ +
+
+ +
+ +
+

Footer

+ + + + +
+
+ + + + + © 2024 GitHub, Inc. + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + From 07484a4b2415c463b2d698855a57067ba6cd03e9 Mon Sep 17 00:00:00 2001 From: vishugoyal Date: Thu, 16 May 2024 12:01:10 +0530 Subject: [PATCH 12/25] rename the logo name --- assets/bitbucket-logo-plugin.jpeg | 2135 +++++++++++++++++++++++++++++ 1 file changed, 2135 insertions(+) create mode 100644 assets/bitbucket-logo-plugin.jpeg diff --git a/assets/bitbucket-logo-plugin.jpeg b/assets/bitbucket-logo-plugin.jpeg new file mode 100644 index 0000000000..94b8565397 --- /dev/null +++ b/assets/bitbucket-logo-plugin.jpeg @@ -0,0 +1,2135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + logo/bitbucket.jpeg at main · vishuOrg/logo · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + +
+ + + + + + + + + +
+
+
+ + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + / + + logo + + + Public +
+ + +
+ +
+ + +
+
+ +
+
+ + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + +

Latest commit

 

History

History
7.19 KB

bitbucket.jpeg

File metadata and controls

7.19 KB
bitbucket.jpeg
+
+ + + + +
+ +
+ +
+
+ +
+ +
+

Footer

+ + + + +
+
+ + + + + © 2024 GitHub, Inc. + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + From f654fd638b011965478c42cbe40bcb429a729ea8 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Thu, 16 May 2024 12:03:12 +0530 Subject: [PATCH 13/25] Delete assets/bitbucket.jpeg --- assets/bitbucket.jpeg | 2135 ----------------------------------------- 1 file changed, 2135 deletions(-) delete mode 100644 assets/bitbucket.jpeg diff --git a/assets/bitbucket.jpeg b/assets/bitbucket.jpeg deleted file mode 100644 index 94b8565397..0000000000 --- a/assets/bitbucket.jpeg +++ /dev/null @@ -1,2135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - logo/bitbucket.jpeg at main · vishuOrg/logo · GitHub - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- Skip to content - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - -
- -
- - - - - - - - -
- - - - - - -
- - - - - - - - - -
-
-
- - - - - - - - - - - - -
- -
- -
- -
- - - - / - - logo - - - Public -
- - -
- -
- - -
-
- -
-
- - - - -
- - - - - - -
- - - - - - - - - - - - - - - -

Latest commit

 

History

History
7.19 KB

bitbucket.jpeg

File metadata and controls

7.19 KB
bitbucket.jpeg
-
- - - - -
- -
- -
-
- -
- -
-

Footer

- - - - -
-
- - - - - © 2024 GitHub, Inc. - -
- - -
-
- - - - - - - - - - - - - - - - - - - -
- -
-
- - - From 38c3c00e492c6b34626932b6d55200f3afe8d2ca Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Fri, 31 May 2024 16:09:16 +0530 Subject: [PATCH 14/25] update the migration number --- ...et_runner_plugin.up.sql => 251_bitbucket_runner_plugin.up.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/sql/{239_bitbucket_runner_plugin.up.sql => 251_bitbucket_runner_plugin.up.sql} (100%) diff --git a/scripts/sql/239_bitbucket_runner_plugin.up.sql b/scripts/sql/251_bitbucket_runner_plugin.up.sql similarity index 100% rename from scripts/sql/239_bitbucket_runner_plugin.up.sql rename to scripts/sql/251_bitbucket_runner_plugin.up.sql From 2b5298db2ae66245fcc2634aa97bd96cef291974 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Fri, 31 May 2024 16:09:42 +0530 Subject: [PATCH 15/25] update the migration number --- ...unner_plugin.down.sql => 251_bitbucket_runner_plugin.down.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/sql/{239_bitbucket_runner_plugin.down.sql => 251_bitbucket_runner_plugin.down.sql} (100%) diff --git a/scripts/sql/239_bitbucket_runner_plugin.down.sql b/scripts/sql/251_bitbucket_runner_plugin.down.sql similarity index 100% rename from scripts/sql/239_bitbucket_runner_plugin.down.sql rename to scripts/sql/251_bitbucket_runner_plugin.down.sql From 4dfb655a3ad3890a07ae2fb3e81e7ff8596288b0 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Mon, 10 Jun 2024 11:57:31 +0530 Subject: [PATCH 16/25] change the variable name workspaceName, branchName and repoName --- .../sql/251_bitbucket_runner_plugin.up.sql | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/scripts/sql/251_bitbucket_runner_plugin.up.sql b/scripts/sql/251_bitbucket_runner_plugin.up.sql index 6f2ebd2442..8997373087 100644 --- a/scripts/sql/251_bitbucket_runner_plugin.up.sql +++ b/scripts/sql/251_bitbucket_runner_plugin.up.sql @@ -21,21 +21,21 @@ fi git_repository_url=$(echo "$CI_CD_EVENT" | jq -r \'.commonWorkflowRequest.ciProjectDetails[0].gitRepository\') # Extract the workspace name and repository name from the gitRepository URL -if [[ -z "$WorkspaceName" ]]; then - WorkspaceName=$(echo "$git_repository_url" | awk -F \'/\' \'{print $(NF-1)}\' | cut -d \'@\' -f2) - if [[ "$WorkspaceName" == *"bitbucket.org:"* ]]; then +if [[ -z "$BitBucketWorkspaceName" ]]; then + BitBucketWorkspaceName=$(echo "$git_repository_url" | awk -F \'/\' \'{print $(NF-1)}\' | cut -d \'@\' -f2) + if [[ "$BitBucketWorkspaceName" == *"bitbucket.org:"* ]]; then # Extract everything after bitbucket.org: - WorkspaceName="${WorkspaceName#*bitbucket.org:}" + BitBucketWorkspaceName="${BitBucketWorkspaceName#*bitbucket.org:}" fi fi -# If RepoName not provided my the user then we will extract the name from the git_repository_url -if [[ -z "$RepoName" ]]; then - RepoName=$(echo "$git_repository_url" | awk -F \'/\' \'{print $NF}\' | sed \'s/.git//\' ) +# If BitBucketRepoName not provided my the user then we will extract the name from the git_repository_url +if [[ -z "$BitBucketRepoName" ]]; then + BitBucketRepoName=$(echo "$git_repository_url" | awk -F \'/\' \'{print $NF}\' | sed \'s/.git//\' ) fi -if [[ -z "$BranchName" ]]; then +if [[ -z "$BitBucketBranchName" ]]; then # Set a default value for sourceValue default_source_value="main" @@ -45,9 +45,9 @@ if [[ -z "$BranchName" ]]; then # Conditionally assign sourceValue based on sourceType if [ "$source_type" == "SOURCE_TYPE_BRANCH_FIXED" ]; then - BranchName="$source_value" + BitBucketBranchName="$source_value" else - BranchName="$default_source_value" + BitBucketBranchName="$default_source_value" fi fi @@ -69,14 +69,14 @@ else sleepInterval=30 fi -# Function for verify the workspaceName, RepoName and bitbucket Access API token +# Function for verify the BitBucketworkspaceName, BitBucketRepoName and bitbucket Access API token verify(){ - curl -s -u $BitBucketUsername:$BitBucketToken --request GET "https://api.bitbucket.org/2.0/repositories/$WorkspaceName/$RepoName/pipelines/?page=1&pagelen=1&sort=-created_on" --compressed + curl -s -u $BitBucketUsername:$BitBucketToken --request GET "https://api.bitbucket.org/2.0/repositories/$BitBucketWorkspaceName/$BitBucketRepoName/pipelines/?page=1&pagelen=1&sort=-created_on" --compressed } verify_status_code() { - curl -s -i -u $BitBucketUsername:$BitBucketToken --request GET "https://api.bitbucket.org/2.0/repositories/$WorkspaceName/$RepoName/pipelines/?page=1&pagelen=1&sort=-created_on" --compressed + curl -s -i -u $BitBucketUsername:$BitBucketToken --request GET "https://api.bitbucket.org/2.0/repositories/$BitBucketWorkspaceName/$BitBucketRepoName/pipelines/?page=1&pagelen=1&sort=-created_on" --compressed } @@ -100,8 +100,8 @@ trigger_pipeline() { curl -s -X POST \\ -u "$BitBucketUsername:$BitBucketToken" \\ -H \'Content-Type: application/json\' \\ - "https://api.bitbucket.org/2.0/repositories/$WorkspaceName/$RepoName/pipelines/" \\ - -d \'{"target": {"ref_type": "\'$type\'", "type": "pipeline_ref_target", "ref_name": "\'$BranchName\'"}}\' \\ + "https://api.bitbucket.org/2.0/repositories/$BitBucketWorkspaceName/$BitBucketRepoName/pipelines/" \\ + -d \'{"target": {"ref_type": "\'$type\'", "type": "pipeline_ref_target", "ref_name": "\'$BitBucketBranchName\'"}}\' \\ -w " Status_Code %{http_code}" } @@ -193,9 +193,9 @@ INSERT INTO plugin_step_variable (id,plugin_step_id,name,format,description,is_e VALUES (nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketUsername','STRING','Enter BitBucket Username (mandatory when pipeline configured with SSH)','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), (nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketToken','STRING','Enter BitBucket api/token (mandatory when pipeline configured with SSH)','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), -(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'WorkspaceName','STRING','Enter Workspace Name','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), -(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'RepoName','STRING','Enter repository name in the bitbucket','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), -(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BranchName','STRING','Enter branch name.','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketWorkspaceName','STRING','Enter Workspace Name','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketRepoName','STRING','Enter repository name in the bitbucket','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), +(nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'BitBucketBranchName','STRING','Enter branch name.','t','t',null,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1), (nextval('id_seq_plugin_step_variable'),(SELECT ps.id FROM plugin_metadata p inner JOIN plugin_step ps on ps.plugin_id=p.id WHERE p.name='BitBucket Runner Trigger v1.0.0' and ps."index"=1 and ps.deleted=false),'StatusTimeOutSeconds','STRING','Enter the maximum time (in seconds) a user can wait for the application to deploy.Enter a positive integer value','t','t',0,null,'INPUT','NEW',null,1,null,null,'f','now()',1,'now()',1); From 2241206d200aed6ef0710e8415edb0d83be3f0cf Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Fri, 14 Jun 2024 19:43:37 +0530 Subject: [PATCH 17/25] change the migration number --- ...unner_plugin.down.sql => 255_bitbucket_runner_plugin.down.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/sql/{251_bitbucket_runner_plugin.down.sql => 255_bitbucket_runner_plugin.down.sql} (100%) diff --git a/scripts/sql/251_bitbucket_runner_plugin.down.sql b/scripts/sql/255_bitbucket_runner_plugin.down.sql similarity index 100% rename from scripts/sql/251_bitbucket_runner_plugin.down.sql rename to scripts/sql/255_bitbucket_runner_plugin.down.sql From dbfb5c154a77ce1b416826c57b06be59bf464fe3 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Fri, 14 Jun 2024 19:44:10 +0530 Subject: [PATCH 18/25] change the migration number --- ...et_runner_plugin.up.sql => 255_bitbucket_runner_plugin.up.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/sql/{251_bitbucket_runner_plugin.up.sql => 255_bitbucket_runner_plugin.up.sql} (100%) diff --git a/scripts/sql/251_bitbucket_runner_plugin.up.sql b/scripts/sql/255_bitbucket_runner_plugin.up.sql similarity index 100% rename from scripts/sql/251_bitbucket_runner_plugin.up.sql rename to scripts/sql/255_bitbucket_runner_plugin.up.sql From 389d595b2e8e9f3e0dd16e72f004852e980ed3b0 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Mon, 17 Jun 2024 12:08:25 +0530 Subject: [PATCH 19/25] Rename bitbucket-logo-plugin.jpeg to bitbucket-logo-plugin.jpg --- assets/{bitbucket-logo-plugin.jpeg => bitbucket-logo-plugin.jpg} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename assets/{bitbucket-logo-plugin.jpeg => bitbucket-logo-plugin.jpg} (100%) diff --git a/assets/bitbucket-logo-plugin.jpeg b/assets/bitbucket-logo-plugin.jpg similarity index 100% rename from assets/bitbucket-logo-plugin.jpeg rename to assets/bitbucket-logo-plugin.jpg From c60034c236cf7290dfa400938ee48d29979bb354 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Mon, 17 Jun 2024 14:08:20 +0530 Subject: [PATCH 20/25] Delete assets/bitbucket-logo-plugin.jpg --- assets/bitbucket-logo-plugin.jpg | 2135 ------------------------------ 1 file changed, 2135 deletions(-) delete mode 100644 assets/bitbucket-logo-plugin.jpg diff --git a/assets/bitbucket-logo-plugin.jpg b/assets/bitbucket-logo-plugin.jpg deleted file mode 100644 index 94b8565397..0000000000 --- a/assets/bitbucket-logo-plugin.jpg +++ /dev/null @@ -1,2135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - logo/bitbucket.jpeg at main · vishuOrg/logo · GitHub - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- Skip to content - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - -
- -
- - - - - - - - -
- - - - - - -
- - - - - - - - - -
-
-
- - - - - - - - - - - - -
- -
- -
- -
- - - - / - - logo - - - Public -
- - -
- -
- - -
-
- -
-
- - - - -
- - - - - - -
- - - - - - - - - - - - - - - -

Latest commit

 

History

History
7.19 KB

bitbucket.jpeg

File metadata and controls

7.19 KB
bitbucket.jpeg
-
- - - - -
- -
- -
-
- -
- -
-

Footer

- - - - -
-
- - - - - © 2024 GitHub, Inc. - -
- - -
-
- - - - - - - - - - - - - - - - - - - -
- -
-
- - - From 2878a4e0cce2da9f24b5f4a0cc00e5e5ce193c60 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Mon, 17 Jun 2024 14:08:55 +0530 Subject: [PATCH 21/25] added bitbucket png image --- assets/Screenshot from 2024-06-17 12-36-20.png | Bin 0 -> 34877 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/Screenshot from 2024-06-17 12-36-20.png diff --git a/assets/Screenshot from 2024-06-17 12-36-20.png b/assets/Screenshot from 2024-06-17 12-36-20.png new file mode 100644 index 0000000000000000000000000000000000000000..0c361fa5f972a5efc753c00b3daac1d1dec2b312 GIT binary patch literal 34877 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 I*R29wn8TGB(Xkb(tC6^J;54xu&roP!x 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 literal 0 HcmV?d00001 From 884d82b1e2c560db7e9dbe466204379cfc0c9761 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Mon, 17 Jun 2024 14:10:35 +0530 Subject: [PATCH 22/25] rename the image name --- ...06-17 12-36-20.png => bitbucket-logo-plugin.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename assets/{Screenshot from 2024-06-17 12-36-20.png => bitbucket-logo-plugin.png} (100%) diff --git a/assets/Screenshot from 2024-06-17 12-36-20.png b/assets/bitbucket-logo-plugin.png similarity index 100% rename from assets/Screenshot from 2024-06-17 12-36-20.png rename to assets/bitbucket-logo-plugin.png From 9953719adb4206b7313a5f0f1af6a6288e1a6b76 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Mon, 17 Jun 2024 14:11:05 +0530 Subject: [PATCH 23/25] Rename bitbucket-logo-plugin.png to bitbucket-logo-plugin.jpeg --- ...t-logo-plugin.png => bitbucket-logo-plugin.jpeg} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename assets/{bitbucket-logo-plugin.png => bitbucket-logo-plugin.jpeg} (100%) diff --git a/assets/bitbucket-logo-plugin.png b/assets/bitbucket-logo-plugin.jpeg similarity index 100% rename from assets/bitbucket-logo-plugin.png rename to assets/bitbucket-logo-plugin.jpeg From 20c9102a8ebb6ce316b1bba0a34afcdf034d4885 Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Mon, 17 Jun 2024 14:18:58 +0530 Subject: [PATCH 24/25] Delete assets/bitbucket-logo-plugin.jpeg --- assets/bitbucket-logo-plugin.jpeg | Bin 34877 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 assets/bitbucket-logo-plugin.jpeg diff --git a/assets/bitbucket-logo-plugin.jpeg b/assets/bitbucket-logo-plugin.jpeg deleted file mode 100644 index 0c361fa5f972a5efc753c00b3daac1d1dec2b312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34877 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 I*R29wn8TGB(Xkb(tC6^J;54xu&roP!x z*jP%Of8XWo=x$&t%j+*E2uRAuFc~65OG8K1axNs5^3U-TQ6rv+M03Ea#N;!x;{{Dq z261!;QB9_y2+@8EmOY-f?;1Gum+8_EC`vwtfI2)j!mH*bU2cozjHC<{CE4g)YEK&> zuF&w5o67}Hn{yg&aQEIB^~pOtxqutDZ?Ims_4kVB&ml?t0< zMI0@4Z1LJ+WdUwz*A)8^#xV! z@YRBC(Xlm=dvv`$dFG!>#$yz}1od3?U+*=3}92R{4aE9%9P zb=y+co}rmcH-5{7LsFjngOeYOsa-mv8W19=Qn6sYg2nOZDQN}7CopbiZGJOu{clkme+I<7d$vqmbVuCzkeOLYyzjZ@9^Z=Q|e`9!bh?^%;wj^ zF;Fy+BS2lMMdXwi6`xdgAwo=L6)T6A1)*(Fxrxex`n2YM`QQGU|N4X9 zDW8A+l=tt{+*#H*)Og~tS>j`Y zCHu2u{u_ubW}Z}RN~pbdU?#7m4Je3}HyBm8O_r?WqoDI)WMxKh-TJIyAju~q-n1G? z<=B&NA|i-t5-xUK8l#=SNq3=M53GY!zt0Y0x33jDFkXrBqapYsk{sflb zqfhIz&&K0j%AHTzSBS!$_wP{Mf`9U7pYqF(f5XK}p;~}`k>oM66a;tY~D(&70rmGJ5{=|Kh*o-h)5kKmA8P=0f4( zQhDd}2ItKKPU{Ls#OnLD;5;tY7V)D{IZZ|FQa1EtsZqO`>Bcf6(WbFwdHrQKr|u^a zBZs#PR1mf3C{y}UB$cTGwoXjsNLCm6146fLj_^`Qj&heYf;`|mQ)49w3JjYNqWi6IiT=J6Bw7k}}TfAVMlJF>V#bLm-B3)+i@lamwH z>s2~`z8`~IRyZhf=gu9~fABvX`a1r`5&^ADj=R|4V!*57f;}NogjT)Tkj3K{p4IAt z%0+IRo^by39!t64=At27JmUS^%76AB|1p33?|%<%;iT?OP@`uqD_J@w)eQurGskG5subyxq2avpFk9 z2x^*3VCMLN4b340XdAeQ@TdRn|IPpO=f6M}cUWsptZ#D}JXO759a@~4#zYKB!>Pl~6XITFoW9=mO7iPT|@G-uS| zlJC58lRx~~kNL?5KLlFT1){VlEh;TYz>>#6S@2Sn(L>MVU(=;&8*z|djfGjbp#(8WWB~UEtNPH zi;A{gn+@3o0xQ(7KpJ}iQBTR4@cYsYU=qvn8p}KhnCo@X2^8lh_c_hzlK_fwGI-{J z`?;E99^gZF&N*_v$NcduOn3hJQ^EHLb#1@#HU=u^sh104t6W@Muvje82dfEEgVaQP za>xrYHc5cw&zJI1vH+R!9~Qn@vH&SQkOO0}`03wjX;+dw7G%dKVBx%}a%r|li# zH$o>UhW9xw88jW6qB+6y!1bmLq@K^H}-T!nKEXE2rWIGNn(7fQoSgNA#hZPEx%>k03Nhy6d*)KM6 zyu6kaVwfE=7$J(bSaLCW3@m|sK)SVNuhgKu_VXGQKri6P*` zQJT<=8G+sdgHD zqJDC}vy(jyo>2(%GRTfGk`9|r^6d(Y2^LrF@{dJgoM;0&K7QLea7(;1VYY6A2@~gV zwSqH~t(8z2Xx1Vo{M4f|{S3op$pbkQMSvUwl1&)t;Z7wV0Ib%jblK^7&@r2_y{g3$ zRiz0l+V&EO5w9LqE5hh|trhBOda%)C1AW82wCU#br(37D@m_Ee zJM(vqRoB!H?-y@M`t>h4UR&E-;dWNmtVlzd51UuMu-yIK`0vJTt70b}t$A~BVdLl1 zZM)X3d@c1}X5FQjTJEVHi>Egi&)oL*%0%7@#otvTYZe(CttnLj4T#L(y_FU};g8JW zz$MBnKWZ($`D|5Wpl(*yeg_-ibbpXf7BO)A`Q}{DC`2WBDXFBheo0j+6IZwZMe{dax#eCBR zxet#m`TK0{x09^(r>Ie z7Ht8Vpq3C#=gV6ltYFxa(mwmtq=#=pWh*icOLaf%kGQgYQLc)Yi^S~xE;c)-1zO4I ziyWzDS+?MM>CIZkyWj8EU#u&rU!F4g;S8C5v)MlHDS5fW$gZw@%{z-pbs5&vjDPQb z*Y%9^tXAy$#YIiQs@r(|=DPA6v*TK`yG%)u`^LkaY`5I^=RORWVl%;MVSq+V_d4;j zjq4W&XozsF*K}wul3)`Hicf vLMzae8{J9{Kz$20h>sdD8V2~%!H@rp$2{J=_H|!u%m4(Qu6{1-oD!M<$HLs| From 7af7a457763cb1c47c8dd81942ba82c37ce2883d Mon Sep 17 00:00:00 2001 From: vishu247 <156403229+vishu247@users.noreply.github.com> Date: Mon, 17 Jun 2024 14:19:29 +0530 Subject: [PATCH 25/25] Add files via upload --- assets/bitbucket-logo-plugin.jpeg | Bin 0 -> 7364 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/bitbucket-logo-plugin.jpeg diff --git a/assets/bitbucket-logo-plugin.jpeg b/assets/bitbucket-logo-plugin.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e622a0a0b7faba57bc3cd0f83eb6a673fc5c1ad5 GIT binary patch literal 7364 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 Sb{XBI&H3AWBNZpNKl(ov?>ZI$ literal 0 HcmV?d00001