#!/bin/bash # Jira Cloud base URL (replace with your actual site) jira_base_url="https://.atlassian.net" # Jira Cloud credentials: email + API token username="email@example.com" api_token="YOUR_API_TOKEN" # The CSV file containing project key, component name, and user account ID csv_file="components.csv" # Read the CSV file line by line # Format: projectKey|componentName|accountID while IFS='|' read -r project_key component_name user_id; do # Remove any carriage return characters from the component_name component_name=$(echo "$component_name" | tr -d '\r') # 1. Get the list of components for the project raw_data=$(curl -s -X GET \ -u "$username:$api_token" \ -H "Content-Type: application/json" \ "$jira_base_url/rest/api/3/project/$project_key/components") # 2. Extract the component ID by matching the component name component_id=$(echo "$raw_data" \ | jq -r --arg component_name "$component_name" \ '.[] | select(.name == $component_name) | .id') if [ -z "$component_id" ]; then echo "Error: Could not find component '$component_name' in project '$project_key'." continue fi echo "Updating project '$project_key', component '$component_name' with new lead '$user_id'..." # 3. Update the component lead # Note: On Jira Cloud, you'll generally need the user's accountId in the field `leadAccountId`. curl -s -X PUT \ -u "$username:$api_token" \ -H "Content-Type: application/json" \ -d "{\"leadAccountId\":\"$user_id\", \"assigneeType\": \"COMPONENT_LEAD\"}" \ "$jira_base_url/rest/api/3/component/$component_id" > /dev/null # 4. Log the update timestamp=$(date '+%Y-%m-%d %H:%M:%S') echo "Updated project '$project_key', component '$component_name' with new lead '$user_id' at $timestamp" done < "$csv_file"