Coder Social home page Coder Social logo

solidify / jira-azuredevops-migrator Goto Github PK

View Code? Open in Web Editor NEW
256.0 17.0 216.0 1.41 MB

Tool to migrate work items from Atlassian Jira to Microsoft Azure DevOps/VSTS/TFS.

License: MIT License

C# 92.70% CSS 0.18% Python 7.12%
jira migration-tool azure-devops tfs vsts migration

jira-azuredevops-migrator's Introduction

Jira to Azure DevOps work item migration tool

image

The Jira to Azure DevOps work item migration tool lets you export data from Jira and import it as work items in Azure DevOps or Microsoft Team Foundation Server.

Build Quality Release
Build Status SonarCloud Badge CodeQL Deployment status

Features

This tool lets you migrate work item from Jira to Azure DevOps or Microsoft Team Foundation Server. The tool has two parts, first Jira issues are exported to files then we import the files to Azure DevOps/TFS. We believe this is a good approach to migration since it allows you to export the data to migrate and validate it before importing it. It also makes it easy to migrate in batches.

Some of the capabilities include:

  • Export Jira issues from Jira queries
  • Map users from Jira to users in Azure DevOps/TFS
  • Migrate work item field data
  • Migrate links and attachments
  • Migrate history

Getting the tools

Getting started

The tools are provided as-is and will require detailed understanding of how to migrate work items between different systems in order to do a successful migration.

Support

If you need help with migrations, feel free to contact the team at Solidify for expert consulting services.

Support and bug reporting are managed via GitHub Issues. Please create a new issue and fill in the corresponding issue template.

Note: We do not answer Discussions, as these have less traceability than Issues. Discussions are instead reserved for community discussions.

Jira Azure DevOps Migrator, Premium Offerings

Solidify offers multiple Premium offerings for the Jira Azure DevOps Migrator. All of these come with more features and utilities to further increase your migration capabilities and streamline the migration workflow.

Below, you can find a feature comparison table, as well as a comprehensive overview of the different services and products in our packages.

Products

The Jira Azure DevOps Migrator comes in 3 different plans: Free, PRO and the Solidify Atlassian Migration Suite.

The following list contains all of the products on offer:

  • Jira Azure DevOps Migrator
    • Community Edition
    • PRO Edition
  • Jira Azure DevOps Migrator Bootstrapper
  • Jira Test Management Migrator (XRay, Zephyr, QMetry + more)
  • Confluence to Azure DevOps Wikis Migrator

Contact us at [email protected] to make a product inquiry, or click the Buy Now links below.

Feature comparison

Free PRO Solidify Atlassian Migration Suite
Price Free $1000/Month $3000/Month
Jira Azure DevOps Migrator, Community Edition ✔️ ✔️ ✔️
Jira Azure DevOps Migrator, PRO features ✔️ ✔️
Jira Azure DevOps Migrator Bootstrapper ✔️ ✔️
Jira Test Management Migrator ✔️
Confluence to Azure DevOps Wikis Migrator ✔️
Updates and Upgrades Regular Continuous Continuous
Training Resources Documentation Interactive training material Interactive training material
Support Level Standard Premium Premium
Additional Services None Consultation Services & Instructor-led Training Consultation Services & Instructor-led Training
Link Buy Now Buy Now

Jira Azure DevOps Migrator PRO

Jira Azure DevOps Migrator PRO contains all the features in the Community Edition, plus the following additional functionality:

  • Migrate Releases and the fixes version field
    • Release date, start date, release status and release description
  • Migrate Branch links from Bitbucket to Azure DevOps.
  • Migrate Sprint Dates.
  • Composite field mapper (consolidate multiple Jira fields into a single ADO field)
  • Migrate Remote Links (Web links) to Work Item hyperlinks.
  • Correct any Embedded Links to Jira Issues in text fields such as Description, Repro Steps and comments, so that they point to the correct Work Item in Azure DevOps.
  • Support for state transition dates (e.g. ActivatedDate, ClosedDate) for workflows with custom states. By default, only New, Closed and Done are supported.
  • Select any property for object- and array-type fields for mapping. This allows for:
    • More possibilities when mapping the fixes version and components fields.
    • More possibilities when **mapping Azure DevOps custom

Jira Azure DevOps Migrator Bootstrapper

The Jira Azure DevOps Migrator Bootstrapper is a companion utility for Jira Azure DevOps migrator PRO, which is designed to help you with getting started migrating issues from Jira to Azure DevOps as smoothly as possible and with as little friction as possible.

The bootstrapper can do the following:

  • Automate user mapping between Jira and Azure DevOps
  • Automatically generate the Jira Azure DevOps Migrator configuration file, thus enabling you to get started migrating faster
  • Viewing the Jira workflow and assisting with field and state mapping

Jira Test Management Migrator

The Jira Test Management migrator (JTMM) from Solidify is a powerful tool designed to help you easily migrate your Jira test management data to Azure DevOps Test Plans. With this tool, you can migrate all your test data from Jira to Azure DevOps Test Plans without losing any data or compromising the integrity of your test management system, including:

  • Test cases
  • Test plans
  • Test hierarchy and links.

Our tool supports the following Jira test frameworks:

  • QMetry
  • Zephyr
  • Xray
  • (More to come soon!)

Confluence to Azure DevOps Wikis Migrator

The Confluence to Azure DevOps Wikis Migrator enables you to transfer you existing Confluence spaces to Azure DevOps Wikis, preserving all of your wiki content and formatting in confluence

FAQ - Frequently Asked Questions

Telemetry

In order to improve the tool we collect some telemetry data using Microsoft Application Insights. See Telemetry for more details, including how to disable telemetry collection.

Contributions are welcome

Here is how you can contribute to this project:

  • Fork the repo and submit pull requests for bug fixes and features
  • Submit bugs and help us verify fixes
  • Discuss existing issues/proposals
  • Test and share migration configurations

Please refer to Contribution guidelines and the Code of Conduct for more details, including how to build and debug the tools locally.

Supported versions of ADO/Jira

The Jira to Azure DevOps work item migration tool is officially supported on the following platforms:

  • Atlassian Jira Cloud
  • Atlassian Jira Server
    • 7.x
    • 8.x
    • 9.x
  • Azure DevOps Services
  • Azure DevOps Server
    • 2022
    • 2020
    • 2019
  • Team Foundation Server 2018 update 3

jira-azuredevops-migrator's People

Contributors

alexander-hjelm avatar bameije avatar benoberholzer avatar beverts312 avatar carun avatar chekkan avatar cris-b avatar davacemmc avatar davidhmeadow avatar dependabot[bot] avatar fokkoveegens avatar honzajscz avatar izzy32457 avatar jura avatar kenjdavidson avatar madkoo avatar mammabear123 avatar moerketh avatar molausson avatar nwaterbury avatar pliljecrantz avatar sboulema avatar sgtwilko avatar shweta22992 avatar silentsmuggler avatar susannap2018 avatar vincentverweij avatar webmonger avatar wilkoatwork avatar xvii avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jira-azuredevops-migrator's Issues

TF201077: The work item type Product Backlog Item cannot be found.

I'm having some problem with Importing tickets from JIRA due to problem with mapping types.

  "type-map":{
    "type": [
      {
        "source": "Feature",
        "target": "Feature"
      },
 .....
      {
        "source": "Story",
        "target": "Product Backlog Item"
.....
      {
        "source": "Task",
        "target": "Product Backlog Item"
      }

ech of tickets stored in Json starts with :

{"Type":"Product Backlog Item", "OriginId":"ITSWBIOE-721","WiId":-1, 

what leads to an error

[Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeDeniedOrNotExistException] TF201077: The work item type Product Backlog Item cannot be found. It may have been renamed or destroyed.:
   w Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeCollection.get_Item(String typeName)
   w WorkItemImport.Agent.CreateWI(String type)
   w WorkItemImport.ImportCommandLine.ExecuteMigration(CommandOption token, CommandOption url, CommandOption configFile, Boolean forceFresh)

If I understand it correctly, there's no match in target schema for this type, I believe I should remap it somehow ? I was thinking about :

     {
        "source": "Story",
        "target": "User Story"
      },

and

      {
        "source": "Task",
        "target": "Task"
      },

Email for user 'xxxxx' not found in Jira, using username 'xxxxx' for mapping error

I have couple of users who are no longer in Jira however there are tasks which were assigned to them in previous sprints. Not sure if that is why but i am getting following error while running the migration tool.

Email for user 'OldUserFirstname.OldUserLastname' not found in JIRA, using username 'OldUserFirstname.OldUserLastname' for mapping.
Could fnot find user 'OldUserFirstname.OldUserLastname' identity in user map. Using original identity 'OldUserFirstname.OldUserLastname'

where 'OldUserFirstname.OldUserLastname' is username of old user.

I tried updating 'users.txt' file something like this, but it didn't work
OldUserFirstname.OldUserLastname= [email protected]

Any suggestion to fix this issue?

Thanks
Sanjeev

Add NuGet, Chocolatey or npm support

To improve the getting started experience it would be better to have Azure DevOps publish to a package management system like NuGet or npm.

When using npm the solution should also support running on Linux and Mac. It's a big change, but it will definitely increase the relevant user base.

AB#5916

Rework how user mapping is done

The api's to look up emails have changed, we should find another way of mapping user.

From #87

@MOlausson not sure if this is why, but i believe in current implementation, user info is retrieved by passing username, looking at this api it looks like username is deprecated and prefer using accountid: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-user-get
Also looks like getting user's email address is whole different process too: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-user-email-get

The value '[Insert Project Id]' does not exist for the field 'project'

I'm currently using the latest version, 2.2.25, and migrating a series of projects and last night I started getting this error. No matter what project I try, I consistently get this error right now. I've verified the query I'm using works in Jira but doesn't work in the tool. Let me know what additional information you need for this.

[System.AggregateException] System.AggregateException: One or more errors occurred. ---> System.InvalidOperationException: Response Status Code: 400. Response Content: {"errorMessages":["The value 'COMOB' does not exist for the field 'project'.","Not able to sort using field 'Rank'."],"warningMessages":[]}
   at Atlassian.Jira.Remote.JiraRestClient.GetValidJsonFromResponse(IRestRequest request, IRestResponse response)
   at Atlassian.Jira.Remote.JiraRestClient.<ExecuteRequestAsync>d__10.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at JiraExport.JiraProvider.GetItemCount(String jql)
   at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh)
---> (Inner Exception #0) System.InvalidOperationException: Response Status Code: 400. Response Content: {"errorMessages":["The value 'COMOB' does not exist for the field 'project'.","Not able to sort using field 'Rank'."],"warningMessages":[]}
   at Atlassian.Jira.Remote.JiraRestClient.GetValidJsonFromResponse(IRestRequest request, IRestResponse response)
   at Atlassian.Jira.Remote.JiraRestClient.<ExecuteRequestAsync>d__10.MoveNext()<---
:
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at JiraExport.JiraProvider.GetItemCount(String jql)
   at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh)

Convert Jira formatted descriptions and comments on migration

Azure DevOps does not support Jira formatted texts (and also no markdown). Therefore the Jira formatted texts should be converted to a supported format e.g. HTML at migration time.
This may be done by using expand='renderedFields' on Jira API calls and using Field values from renderedFields instead of fields.

Currently it is not possible to set this option.

wi-import: System.NullReferenceException

Hi,

I exported from my Jira project without error. I can see a whole lot of JiraProject-<NUM>.json files as well as attachments in the Attachments folder. Step 6 in the migration guides mentions a journal file, which I don't see, but I might not be far enough in to process to see one.

When running import, I get the following exception:

Unexpected error: System.NullReferenceException: Object reference not set to an instance of an object. at Migration.WIContract.WiItemProvider.LoadFile(String path) at Migration.WIContract.WiItemProvider.<EnumerateAllItems>d__5.MoveNext() at Migration.Common.MigrationContext.<EnumerateAllItems>d__36.MoveNext() at WorkItemImport.ExecutionPlanBuilder.BuildExecutionPlanFromDir() at WorkItemImport.ExecutionPlanBuilder.BuildExecutionPlan() at WorkItemImport.ImportCommandLine.ExecuteMigration(CommandOption token, CommandOption url, CommandOption configFile, Boolean forceFresh)

The command I use:

.\wi-import.exe --token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --url https://dev.azure.com/MYDEVOPS --config C:\temp\JiraExports\JiryToDevOps\config-JiraProject-DevopsProject.json

The config file:
config-JiraProject-DevopsProject.zip

The import log file.
log.ee3fcdc1-f388-4522-9cc7-c323fa1b45f1.zip

Any help on whether I'm doing something wrong would be appreciated.

Kind regards,
Charl Marais

Links not being added to work items

When attempting to import work items into DevOps, some link types are not getting imported properly, specifically 'Related' and 'Duplicate' link types.

Only some of the 'Hierarchy-Reverse' link types are getting imported properly, and none of the 'Related' and 'Duplicate' link types. Instead, a comment is added to the Work Item that looks like this:

Added link(s): [Added] EN-22/-1->EN-1458/-1 [System.LinkTypes.Hierarchy-Reverse];[Added] EN-22/-1->EN-24/-1 [System.LinkTypes.Relates]

The import log shows the following for that work item import:

[W][14:59:44] '[Added] EN-22/-1->EN-24/-1 [System.LinkTypes.Related]' - target work item for Jira 'EN-24' is not yet created in Azure DevOps/TFS.

The export file for this work item has the following link data:

"Links":[{"Change":0,"TargetOriginId":"EN-1458","TargetWiId":0,"WiType":"System.LinkTypes.Hierarchy-Reverse"},{"Change":0,"TargetOriginId":"EN-24","TargetWiId":0,"WiType":"System.LinkTypes.Related"}]

It seems that the links fail validation because their target doesn't exist yet, so they aren't added as links and comments with the link info are added to the work item instead.

If that's the case, it seems like a chicken or the egg problem (the target work item must exist in order to import a link, but the import must have completed for all targets to exist). How would it be possible to import work items that reference each other without running into this problem?

Also, it seems odd that some of the 'Hierarchy" Linktypes are successfully imported, but none of the 'Related' or 'Duplicate' linktypes are. Are they handled differently?

Thanks in advance to all contributors for your work on this useful migration tool, any help would be greatly appreciated.

David

Unauthorised access error in jira-export

Following command
jira-export -u [bitbucket username] -p [personal token] --url [url of the project] --config config.json --force
producing uncaught 401 Unauthorized error after passing initial connection step. Apparently it fails at

provider.Jira.Fields.GetCustomFieldsAsync().Wait();

since here is what I got in debug log:

Jira Exporter v1.0.10
Copyright (c) Solidify
Connecting to Jira...
Connected to Jira.
Gathering project info...
Unexpected error: System.AggregateException: One or more errors occurred. ---> System.Security.Authentication.AuthenticationException: Response Content: <html>

<head>
    <title>Unauthorized (401)</title>

--- html source of the error page ---

</html>
   at Atlassian.Jira.Remote.JiraRestClient.GetValidJsonFromResponse(IRestRequest request, IRestResponse response)
   at Atlassian.Jira.Remote.JiraRestClient.<ExecuteRequestAsync>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Atlassian.Jira.Remote.JiraRestClient.<ExecuteRequestAsync>d__9`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Atlassian.Jira.Remote.IssueFieldService.<GetCustomFieldsAsync>d__2.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at JiraExport.JiraProvider.Initialize(JiraSettings settings)
   at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh)

Just to be clear - I don't have admin rights for the Jira project, just normal project member access level

Missing type mapping creates corrupt .json file without name

If the an issue type isn't mapped in the config file a corrupt un-named file called ".json" is created. The import of that file generates a "Unexpected error: System.NullReferenceException: Object reference not set to an instance of an object." error.

Replicate backlog priority in Azure Devops

Hi,

Is it possible for the work items in Azure DevOps (in backlogs) to appear in the same order as in JIRA.
Currently, the open work items in Azure DevOps are are ordered based on the creation date in JIRA.

AB#5926

Custom IssueTypes on both ends fails to map

In JIRA our team had created a 'Technical Debt' issuetype. We similarly created a 'Technical Debt' issuetype in ADO. I mapped the objects like I mapped any other object and ran the export. In the individual export items, none of the standard fields (title, description, etc.) were created in the resulting JSON files for those issues. Epics were created, bugs were created, etc. I tried all sorts of variations of the issuetype name to no avail. The only way I could work around it was to export those items to Bugs and then convert them after importing them to ADO.

Is this a limitation of custom to custom objects or possibly just a failure to look it up correctly? I will try to review the code and see if I can find anything but I thought I'd ask first.

Add option to define default target user mapping

Add [optional] possibility to indicate default target user account which should be used to map all unmappable usernames from source repository. Usually there are many historical entities which do not have counterparts in the new setup so export tool should map those to default user.

Activation Date / By not updating if issue state changes from in progress to new / to do

Good day

I am trying to migrate my parked jira issues to Azure Devops work items. This means that the history of the issue usually follows a flow of: New / To Do -> In Progress -> New / To Do.
history

When the tool is used the states do get updated correctly, but the Activated Date and Activated By attributes don't get updated.
not_update

This is causing me to get an error in Azure Devops.
error

When you update the state using Azure Devops UI, the Activated Date and Activate By attributes are correctly updated:
update

I have tried to use the Azure Devops python API to change these values but I couldn't find a solution. Is there a way to add this functionality to the current migrator code? Or, are you familiar with another way for me to update the Activated Date and By attributes?

Thank you in advance.

AreaPath migration

Is there any support/sample configuration for migrating Jira Components => DevOps Area Path?

Incorrect URI for REST call to retrieve changelog records

Jira export tool fails to process issues with the following stack trace:

[l:D][d:17:05:56] Connecting to Jira...
[l:I][d:17:05:56] Connected to Jira.
[l:I][d:17:05:56] Gathering project info...
[l:I][d:17:05:57] Custom field cache set up.
[l:I][d:17:05:57] Custom parsers set up.
[l:I][d:17:05:57] Link types cache set up.
[l:I][d:17:05:57] Processing issues...
[l:D][d:17:05:57] Downloaded [issue ID]
[l:E][d:17:05:57] Unexpected error: System.AggregateException: One or more errors occurred. ---> System.InvalidOperationException: Response Status Code: 404. Response Content: {"message":"null for uri: https://[jira server]/rest/api/2/issue/[issue ID]/changelog?maxResults=100&startAt=0","status-code":404}
   at Atlassian.Jira.Remote.JiraRestClient.GetValidJsonFromResponse(IRestRequest request, IRestResponse response)
   at Atlassian.Jira.Remote.JiraRestClient.<ExecuteRequestAsync>d__10.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at JiraExport.JiraProvider.<DownloadChangelog>d__18.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at JiraExport.JiraItem.BuildRevisions(JiraItem jiraItem, JiraProvider jiraProvider)
   at JiraExport.JiraItem.CreateFromRest(String issueKey, JiraProvider jiraProvider)
   at JiraExport.JiraProvider.ProcessItem(String issueKey, HashSet`1 skipList, String successMessage)
   at JiraExport.JiraProvider.<EnumerateIssues>d__17.MoveNext()
   at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh)

According to the documentation there is no "/changelog" endpoint and it should be referenced as https://[jira server]/rest/api/2/issue/[issue ID]?expand=changelog&maxResults=100&startAt=0 instead.

I've tested this construction and amended URI returns expected results

tested platform: Jira Server v7.12.2

Error : The work item type Product Backlog cannot be found. It may have been renamed or destroyed.

Hi,

I am getting the below error while importing from JIRA. Can you please let me know the fix for this.

[Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeDeniedOrNotExistException] Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeDeniedOrNotExistException: TF201077: The work item type Product Backlog cannot be found. It may have been renamed or destroyed.
at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeCollection.get_Item(String typeName)
at WorkItemImport.Agent.CreateWI(String type)
at WorkItemImport.ImportCommandLine.ExecuteMigration(CommandOption token, CommandOption url, CommandOption configFile, Boolean forceFresh):
at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeCollection.get_Item(String typeName)
at WorkItemImport.Agent.CreateWI(String type)
at WorkItemImport.ImportCommandLine.ExecuteMigration(CommandOption token, CommandOption url, CommandOption configFile, Boolean forceFresh)

Failed to get Azure DevOps/TFS project '<projectName>'

Need help. it fails when I try to import the Project data when there is no project created in the Azure DevOps.
Does the script have the functionality to create Project automatically when not found?

On Console

[W][19:10:28] Project '' does not exist.
Would you like to create one? (Y/N)
y[I][19:10:31] Creating project ''.
[E][19:10:31] Unexpected migration error.
[System.AggregateException] System.AggregateException: One or more errors occurred. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at WorkItemImport.Agent.d__42.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at WorkItemImport.Agent.d__41.MoveNext()
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result()
at WorkItemImport.Agent.Initialize(MigrationContext context, Settings settings)
at WorkItemImport.ImportCommandLine.ExecuteMigration(CommandOption token, CommandOption url, CommandOption configFile, Boolean forceFresh)
---> (Inner Exception #0) System.NullReferenceException: Object reference not set to an instance of an object.
at WorkItemImport.Agent.d__42.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at WorkItemImport.Agent.d__41.MoveNext()<---
:
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result()
at WorkItemImport.Agent.Initialize(MigrationContext context, Settings settings)
at WorkItemImport.ImportCommandLine.ExecuteMigration(CommandOption token, CommandOption url, CommandOption configFile, Boolean forceFresh)
[I][19:10:31] Import complete. Imported 0 items, 0 revisions (2 errors, 1 warnings) in 00:00:04.

Log file Info
[Microsoft.TeamFoundation.Core.WebApi.ProjectDoesNotExistWithNameException] Microsoft.TeamFoundation.Core.WebApi.ProjectDoesNotExistWithNameException: TF200016: The following project does not exist: . Verify that the name of the project is correct and that the project exists on the specified Azure DevOps Server.
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.d__52.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.d__50.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.d__471.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__281.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at WorkItemImport.Agent.d__41.MoveNext():
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.d__52.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.d__50.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.d__471.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__281.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at WorkItemImport.Agent.d__41.MoveNext()

User mapping file cannot have empty lines

When an empty line (CRLF) is inserted in the user mapping file, the jira-export fails with the below message.
Maybe need to tolerate empty lines.

[E][16:50:05] Unexpected migration error.
[System.IndexOutOfRangeException] System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Migration.Common.BaseMapper1.ParseUserMappings(String userMappingPath) at Migration.Common.BaseMapper1..ctor(String userMappingPath)
at JiraExport.JiraMapper..ctor(JiraProvider jiraProvider, ConfigJson config)
at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh):
at Migration.Common.BaseMapper1.ParseUserMappings(String userMappingPath) at Migration.Common.BaseMapper1..ctor(String userMappingPath)
at JiraExport.JiraMapper..ctor(JiraProvider jiraProvider, ConfigJson config)
at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh)

Migrate JIRA WIKI to Azure DevOps WIKI

Hi All,

Can we migrate JIRA WIKI to Azure DevOps WIKI using this tool? If yes, can you please help in this.
I did not find any documentation for this. It will be helpful if someone can share the documentation for the same.

batch size limit?

what is the limit of the batch size? can we export 40k work item in one single export.

Can't map GitHub PR links in Jira to DevOps

I'm trying to get the github PR links in my Jira tickets to show up as plain text links (anywhere in the work item) in DevOps.

No combination of source & target in the link mapping or field mapping has been successful

Problem with the attachments

Hi, all seems fine except with the attachements. I have the following message with a ticket (during the JIRA import step) :

[E][18:34:42] Cannot find info for attachment '12604'. Skipping.
[System.InvalidOperationException] System.InvalidOperationException: Response Status Code: 404. Response Content: {"errorMessages":["La pièce jointe avec l'ID '12604' n'existe pas"],"errors":{}}
   at Atlassian.Jira.Remote.JiraRestClient.GetValidJsonFromResponse(IRestRequest request, IRestResponse response)
   at Atlassian.Jira.Remote.JiraRestClient.<ExecuteRequestAsync>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at JiraExport.JiraProvider.<GetAttachmentInfo>d__18.MoveNext():
   at Atlassian.Jira.Remote.JiraRestClient.GetValidJsonFromResponse(IRestRequest request, IRestResponse response)
   at Atlassian.Jira.Remote.JiraRestClient.<ExecuteRequestAsync>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at JiraExport.JiraProvider.<GetAttachmentInfo>d__18.MoveNext()
[E][18:34:42] Unexpected migration error.
[System.AggregateException] System.AggregateException: One or more errors occurred. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at JiraExport.JiraProvider.<DownloadAttachmentAsync>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at JiraExport.JiraProvider.<DownloadAttachments>d__27.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at JiraExport.JiraMapper.MapAttachments(JiraRevision rev)
   at JiraExport.JiraMapper.MapRevision(JiraRevision r)
   at JiraExport.JiraMapper.<>c__DisplayClass8_0.<Map>b__2(JiraRevision r)
   at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at JiraExport.JiraMapper.Map(JiraItem issue)
   at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh)
---> (Inner Exception #0) System.NullReferenceException: Object reference not set to an instance of an object.
   at JiraExport.JiraProvider.<DownloadAttachmentAsync>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at JiraExport.JiraProvider.<DownloadAttachments>d__27.MoveNext()<---
:
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at JiraExport.JiraMapper.MapAttachments(JiraRevision rev)
   at JiraExport.JiraMapper.MapRevision(JiraRevision r)
   at JiraExport.JiraMapper.<>c__DisplayClass8_0.<Map>b__2(JiraRevision r)
   at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at JiraExport.JiraMapper.Map(JiraItem issue)
   at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh)

All the process is stopped, so the import is not correctly finished.
Does someone could help me please ? thx

Cannot log in to JIRA cloud via API key

How do you authenticate via JIRA API KEY?

I have two-factor authentication in my JIRA account in the cloud.
In the jira-export.exe I used
-u [email protected]:APIKEY
and did not use -p switch.

The application logs in but cannot see any projects.
I get this

"The value 'PROJECTNAME' does not exist for the field 'project'."

Which suggests that there is no visibility of the project,

Some items get assigned to the wrong user

If in the JIRA history the item only changes state, we end up generating a revision like:

{
  "Author": "[email protected]",
  "Time": "2019-05-17T09:07:25+01:00",
  "Index": 2,
  "Fields": [
    {
      "ReferenceName": "System.State",
      "Value": "Active"
    }
  ],
  "Links": [],
  "Attachments": [],
  "AttachmentReferences": false
}

but it seems like the devops REST API interprets this as changing state and user (to the user making the request).

So imported items end up assigned to the person doing the importing rather than the person who was actually assigned the JIRA.

Issue when exporting work items

I'm trying to export multiple work items from JIRA and when I execute the export tool I recive following issue. I was only able to export one work item from JIRA.
image
image

[D][15:38:12] Mapped value 'Committed' to field 'System.State'.
[D][15:38:12] Exported as type 'Product Backlog Item'.
[E][15:38:12] Unexpected migration error.
[Newtonsoft.Json.JsonException] Newtonsoft.Json.JsonException: Unexpected end while parsing path.
at Newtonsoft.Json.Linq.JsonPath.JPath.ParsePath(List1 filters, Int32 currentPartStartIndex, Boolean query) at Newtonsoft.Json.Linq.JsonPath.JPath.ParseMain() at Newtonsoft.Json.Linq.JsonPath.JPath..ctor(String expression) at Newtonsoft.Json.Linq.JToken.SelectToken(String path, Boolean errorWhenNoMatch) at Migration.Common.JsonExtensions.ExValue[T](JToken token, String path) at JiraExport.JiraItem.get_EpicParent() at JiraExport.JiraProvider.d__21.MoveNext() at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh): at Newtonsoft.Json.Linq.JsonPath.JPath.ParsePath(List1 filters, Int32 currentPartStartIndex, Boolean query)
at Newtonsoft.Json.Linq.JsonPath.JPath.ParseMain()
at Newtonsoft.Json.Linq.JsonPath.JPath..ctor(String expression)
at Newtonsoft.Json.Linq.JToken.SelectToken(String path, Boolean errorWhenNoMatch)
at Migration.Common.JsonExtensions.ExValue[T](JToken token, String path)
at JiraExport.JiraItem.get_EpicParent()
at JiraExport.JiraProvider.d__21.MoveNext()
at JiraExport.JiraCommandLine.ExecuteMigration(CommandOption user, CommandOption password, CommandOption url, CommandOption configFile, Boolean forceFresh)
[I][15:38:12] Export complete. Exported 49 items (1 errors, 1 warnings) in 00:00:06.

appreciate your inputs on this issue.

thanks,
Hasitha

Product Backlog Items and iterations

Summary

I exported my Jira content successfully (I guess) and now, I can import it to DevOps but something is missing...

Current Behavior

Iterations

My iterations are created successfully (from the project settings):

Screen Shot 2019-04-17 at 16 51 26

but not "recognize" by DevOps. From Sprints view, I have no sprint available:

Screen Shot 2019-04-17 at 16 52 38

Product Backlog Iteration

If I fix manually the issue with iteration and I'm selecting one from the Sprints view, I have no Product Backlog is appearing...

Screen Shot 2019-04-17 at 16 59 09

Screen Shot 2019-04-17 at 17 00 08

I have to edit and save each Product Backlog Item (bug and tasks too) and after that I can see them to the Sprint

I did something wrong?
Something is missing?

AssignedTo is generated with the null at the export. Import fails with [System.NullReferenceException] System.NullReferenceException: Object reference not set to an instance of an object.

I have a user mapping file, which has the *=[email protected] clause in the end of the file.
When exporting, the files are generated properly and look okay, no errors.
When importing, the wi-import gives

[System.NullReferenceException] System.NullReferenceException: Object reference not set to an instance of an object.

The section of the JIRA file is below:

"Index":6,"Fields":[{"ReferenceName":"System.AssignedTo","Value":null}],"Links":[],"Attachments":[],"AttachmentReferences":false},{"Author":"[email protected]","Time":"2019-03-27T12:09:03.42+11:00",

Note the "Value":null in there.
The change number 7 in JIRA was that the assigned user was changed from a real user to Unassigned.

Error, failed to import revisions

When running a recent import, many of the work item revisions showed this error:

[E][13:17:07] Failed to import revisions for '1232973'.
[Microsoft.TeamFoundation.WorkItemTracking.Client.UnexpectedErrorException] Microsoft.TeamFoundation.WorkItemTracking.Client.UnexpectedErrorException: TF237121: Cannot complete the operation. An unexpected error occurred.

Technical information (for administrator):
VS402625: Dates must be increasing with each revision.
   ---> System.Web.Services.Protocols.SoapException: VS402625: Dates must be increasing with each revision.
   at Microsoft.TeamFoundation.WorkItemTracking.Proxy.RetryHandler.HandleSoapException(SoapException se)
   at Microsoft.TeamFoundation.WorkItemTracking.Proxy.WorkItemServer.Update(String requestId, XmlElement package, XmlElement& result, MetadataTableHaveEntry[] metadataHave, String& dbStamp, IMetadataRowSets& metadata)
   at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.SendUpdatePackage(XmlElement package, XmlElement& result, Boolean bulk)
   --- End of inner exception stack trace ---
   at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.SendUpdatePackage(XmlElement package, XmlElement& result, Boolean bulk)
   at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.SaveWorkItems(WorkItem[] workitems, Boolean bulk, SaveFlags saveFlags)
   at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.Save(SaveFlags saveFlags)
   at WorkItemImport.Agent.SaveWorkItem(WiRevision rev, WorkItem newWorkItem)
   at WorkItemImport.Agent.ImportRevision(WiRevision rev, WorkItem wi):
   at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.SendUpdatePackage(XmlElement package, XmlElement& result, Boolean bulk)
   at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.SaveWorkItems(WorkItem[] workitems, Boolean bulk, SaveFlags saveFlags)
   at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.Save(SaveFlags saveFlags)
   at WorkItemImport.Agent.SaveWorkItem(WiRevision rev, WorkItem newWorkItem)
   at WorkItemImport.Agent.ImportRevision(WiRevision rev, WorkItem wi)

Looking through the Jira issues that triggered this error, I have not been able to find the cause of this. Do you have any thoughts or suggestions?

Problem with the import of a "Test"

I have a problem with the type "Test". When I try to import a "Test" from Jira, the workitem is empty if it's mapped with the type "Test Case" of VSTS. Could you help me please ?

AB#5920

The request was rejected by the server because of unicode control characters

When there is an unicode control character (like \u000b) in the JSON file in the "Value": section the JSON file import generates an error:

[l:E][d:16:40:23] [Microsoft.TeamFoundation.TeamFoundationServerInvalidRequestException] The request was rejected by the server. Technical information: HTTP code 400: Bad Request: at Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.ReadResponse(HttpWebResponse webResponse, WebException webException) at Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.IsAuthenticationChallenge(TfsMessage requestMessage, HttpWebResponse webResponse, WebException webException, TfsMessage& responseMessage) at Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.SendRequest() at Microsoft.TeamFoundation.Client.Channels.TfsHttpRequestChannel.Request(TfsMessage message, TimeSpan timeout) at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters, TimeSpan timeout, Object[]& outputs) at Microsoft.TeamFoundation.WorkItemTracking.Proxy.ClientService.Update(XmlNode package, XmlNode& result, MetadataTableHaveEntry[] metadataHave, String& dbStamp, RowSetCollection& metadata) at Microsoft.TeamFoundation.WorkItemTracking.Proxy.WorkItemServer.Update(String requestId, XmlElement package, XmlElement& result, MetadataTableHaveEntry[] metadataHave, String& dbStamp, IMetadataRowSets& metadata) at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.SendUpdatePackage(XmlElement package, XmlElement& result, Boolean bulk) at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.SaveWorkItems(WorkItem[] workitems, Boolean bulk, SaveFlags saveFlags) at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.Save(SaveFlags saveFlags) at WorkItemImport.Agent.SaveWorkItem(WiRevision rev, WorkItem newWorkItem) in C:\jira-azuredevops-migrator\WorkItemImport\Agent.cs:line 645 at WorkItemImport.Agent.ImportRevision(WiRevision rev, WorkItem wi) in C:\jira-azuredevops-migrator\WorkItemImport\Agent.cs:line 763

Wen we looked into the issue we can see at this situation it's a copy/paste action from a Confluence table in the description field.

Is it possible to validate on this and escape or delete these unicode control characters in the export step?

is jira custom field type option supported?

I have been trying to export a jira custom field but I cannot get it to work. It is a dropdown field in Jira with type "option" where the user selects 1 of the options presented.

I was able to get a different custom field to work; just not any of the ones that we have of type "option."

If I put it in the config file, the export ignores it entirely. The field is not contained in the exported file or export log.

FieldDefinitionNotExistException because of ReproSteps

I have migrated a project with the "Sample config" as a test, only the project names and the Jira query have been changed.
The jira export seem to work fine, but during the import I get the above mentioned exception.

Acceptance Criteria not being passed

It is not passing the acceptance criteria for User Stories or PBIs.

"field-map": {
"field": [
{
"source": "Acceptance Criteria",
"target": "System.AcceptanceCriteria"
},

Tried mapping other fields to the acceptance criteria and errors in log claiming acceptance criteria isn't defined. Is the target not correct for acceptance criteria?

Custom field mapping to Microsoft.VSTS.TCM.ReproSteps is ignored

Mapping any field other than description to Microsoft.VSTS.TCM.ReproSteps does not work as expected. Instead of copying the field details from the specified field (eg a custom repro steps field in Jira), the contents from the description field are used.

This occurs because the description field is always mapped to the repro steps field for bugs by the first line in the MapLastDescription method inside the JiraMapper class.

  private void MapLastDescription(List<WiRevision> revisions, JiraItem issue)
        {
            var descFieldName = issue.Type == "Bug" ? "Microsoft.VSTS.TCM.ReproSteps" : "System.Description";

Sample config:

      {
        "source": "Steps to Reproduce",
        "source-type": "name",
        "target": "Microsoft.VSTS.TCM.ReproSteps",
        "for": "Bug"
      },

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.