{"id":26863814,"url":"https://github.com/mohamedsci/jira-to-azure-devops-migration-script","last_synced_at":"2026-05-16T22:06:07.124Z","repository":{"id":282310420,"uuid":"948151628","full_name":"MohamedSci/Jira-to-Azure-DevOps-Migration-Script","owner":"MohamedSci","description":"A Robust Python script to migrate issues from Jira to Azure DevOps, ensuring data integrity and formatting consistency.","archived":false,"fork":false,"pushed_at":"2025-03-16T14:30:03.000Z","size":267,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-23T01:42:26.310Z","etag":null,"topics":["azure","azuredevops","csv-processing","data-integrity","data-migration-automation","formatting-consistency","jira","jira-to-azure-devops-migration-script","migration","migration-tool","python-script"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/in/mohamedsaidibrahim/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MohamedSci.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-13T20:48:43.000Z","updated_at":"2025-07-19T13:03:56.000Z","dependencies_parsed_at":"2025-03-18T21:02:37.588Z","dependency_job_id":null,"html_url":"https://github.com/MohamedSci/Jira-to-Azure-DevOps-Migration-Script","commit_stats":null,"previous_names":["mohamedsci/jira-to-azure-devops-migration-script"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MohamedSci/Jira-to-Azure-DevOps-Migration-Script","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedSci%2FJira-to-Azure-DevOps-Migration-Script","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedSci%2FJira-to-Azure-DevOps-Migration-Script/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedSci%2FJira-to-Azure-DevOps-Migration-Script/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedSci%2FJira-to-Azure-DevOps-Migration-Script/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MohamedSci","download_url":"https://codeload.github.com/MohamedSci/Jira-to-Azure-DevOps-Migration-Script/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedSci%2FJira-to-Azure-DevOps-Migration-Script/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268424029,"owners_count":24248119,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure","azuredevops","csv-processing","data-integrity","data-migration-automation","formatting-consistency","jira","jira-to-azure-devops-migration-script","migration","migration-tool","python-script"],"created_at":"2025-03-31T03:32:52.861Z","updated_at":"2026-05-16T22:06:07.069Z","avatar_url":"https://github.com/MohamedSci.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\n\n# Jira to Azure DevOps Migration Script 🚀\n\n![Python](https://img.shields.io/badge/Python-3.8%2B-blue)\n![License](https://img.shields.io/badge/License-Apache%202.0-green)\n![Status](https://img.shields.io/badge/Status-Production%20Ready-brightgreen)\n\nA **robust and efficient Python script** to migrate issues from Jira to Azure DevOps, ensuring **data integrity**, **formatting consistency**, and **seamless integration**. This script automates the migration process, saving time and effort for teams transitioning between platforms.\n\n---\n\n## Table of Contents\n\n1. [Features](#features)\n2. [Installation](#installation)\n3. [Project Structure](#project-structure)\n4. [Usage](#usage)\n5. [Output](#output)\n6. [Contributing](#contributing)\n7. [License](#license)\n8. [Support](#support)\n\n---\n\n## Features ✨\n\n### Data Enrichment \u0026 Cleansing\n- **Formats Jira descriptions** to be more structured and readable.\n- Converts Jira markdown syntax to a format compatible with Azure DevOps.\n- Ensures all rows are processed without loss of information.\n\n### Priority Mapping\n- Translates Jira priorities (`Lowest`, `Low`, `Medium`, `High`, `Highest`) to Azure DevOps priority levels (`4`, `3`, `2`, `1`).\n\n### Attachment Extraction \u0026 Processing\n- Dynamically detects all attachment columns in the source CSV file.\n- Extracts valid attachment URLs while filtering out timestamps, IDs, and filenames.\n- Consolidates multiple attachments for each issue and embeds them into the refined description.\n\n### Jira Issue Tracking Link\n- Automatically embeds the original Jira issue link in the Azure DevOps description for reference.\n\n### Date Formatting\n- Converts Jira timestamps to ISO 8601 format, ensuring compatibility with Azure DevOps.\n\n### Optimized for Large-Scale Migration\n- Supports **300+ issues** while maintaining high performance.\n- Utilizes efficient CSV parsing and streaming to prevent memory issues.\n\n---\n\n## Installation 🛠️\n\n### Prerequisites\n- Python 3.8 or higher.\n- Required Python libraries: `chardet`.\n\n### Steps\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/MohamedSci/Jira-to-Azure-DevOps-Migration-Script.git\n   cd Jira-to-Azure-DevOps-Migration-Script\n   ```\n\n2. Install dependencies:\n   ```bash\n   pip install -r requirements.txt\n   ```\n\n3. Place your input files (`default_fields.csv` and `all_fields.csv`) in the `input` directory.\n\n---\n\n## Project Structure 🗂️\n\n```\njira-to-azure-devops-migration/\n├── src/\n│   ├── __init__.py\n│   ├── data_processor.py       # Processes and transforms data\n│   ├── file_handler.py         # Handles file I/O operations\n│   ├── logger.py               # Configures logging\n│   ├── migration.py            # Orchestrates the migration process\n│   └── utils.py                # Utility functions (e.g., cleaning descriptions)\n├── input/\n│   ├── default_fields.csv      # CSV with default fields\n│   └── all_fields.csv          # CSV with all fields (including attachments)\n├── output/\n│   └── azure_output.csv        # Generated output file\n├── index.py                    # Entry point for the script\n├── requirements.txt            # List of dependencies\n├── README.md                   # Project documentation\n└── .gitignore                  # Specifies files to ignore in Git\n```\n\n---\n\n## Usage 🚀\n\n1. Ensure your input files (`default_fields.csv` and `all_fields.csv`) are placed in the `input` folder.\n\n2. Run the script:\n   ```bash\n   python index.py\n   ```\n\n3. Check the output file (`azure_output.csv`) in the `output` folder.\n\n### Example Input Files\n\n#### `default_fields.csv`\n| Issue key | Summary     | Assignee | Reporter | Priority | Status   | Created           | Updated           |\n|-----------|-------------|----------|----------|----------|----------|-------------------|-------------------|\n| PROJ-123  | Test issue  | John Doe | Jane Doe | High     | Open     | 11/Mar/25 1:31 PM | 11/Mar/25 1:31 PM |\n\n#### `all_fields.csv`\n| Issue key | Description          | Environment | Attachment                                                                 |\n|-----------|----------------------|-------------|----------------------------------------------------------------------------|\n| PROJ-123  | Test issue           | Production  | 11/Mar/25 1:31 PM;712020:ae3212cd-e1d6-4083-bc70-ddd6dfebfad6;cash receipt report.mp4;https://microtec.atlassian.net/rest/api/3/attachment/content/16380 |\n\n---\n\n## Output 📂\n\nThe script generates a cleaned and formatted CSV file (`azure_output.csv`) containing:\n\n| Work Item Type | Title      | Assigned To | Created By | Priority | State | Created Date           | Changed Date           | Description                                                                                                                                                                                                 |\n|----------------|------------|-------------|------------|----------|-------|------------------------|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Bug            | Test issue | John Doe    | Jane Doe   | 3        | Open  | 2025-03-11T13:31:00    | 2025-03-11T13:31:00    | ### Description\\nTest issue\\n\\n### Environment\\nProduction\\n\\n### Original Issue\\n[View in Jira](https://microtec.atlassian.net/browse/PROJ-123)\\n\\n### Attachments\\nhttps://microtec.atlassian.net/rest/api/3/attachment/content/16380 |\n\n---\n\n## Contributing 🤝\n\nWe welcome contributions! Here’s how you can help:\n\n1. Fork the repository.\n2. Create a new branch:\n   ```bash\n   git checkout -b feature/your-feature-name\n   ```\n3. Commit your changes:\n   ```bash\n   git commit -m \"Add your feature\"\n   ```\n4. Push to the branch:\n   ```bash\n   git push origin feature/your-feature-name\n   ```\n5. Open a pull request.\n\n---\n\n## License 📜\n\nThis project is licensed under the **Apache 2.0 License**. See the [LICENSE](LICENSE.txt) file for details.\n\n---\n\n## Support 💬\n\nFor questions, issues, or feature requests, please:\n\n- Open an issue on [GitHub](https://github.com/MohamedSci/Jira-to-Azure-DevOps-Migration-Script/issues).\n- Email us at [muhammedsaidsyed215@gmail.com](mailto:muhammedsaidsyed215@gmail.com).\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmohamedsci%2Fjira-to-azure-devops-migration-script","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmohamedsci%2Fjira-to-azure-devops-migration-script","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmohamedsci%2Fjira-to-azure-devops-migration-script/lists"}