Latest commit

History

History
39 lines (29 loc) · 1.83 KB

File metadata and controls

39 lines (29 loc) · 1.83 KB

bugzilla2github

Code to migrate Bugzilla (version 4.0.2) to GitHub issues

Introduction

For years all bugs have been managed using Bugzilla on bugs.libreplan.org For several reasons this however is coming to an end.

The succesor is going to be GitHub Issues.

This means all current issues need to be transfered to GitHub Issues.

For this GitHub has a special REST API

How to go from Bugzilla to GitHub Issues

There are several steps to consider

  • How to retrieve from Bugzilla: we chose to use a direct database connection
  • How to upload issues to GitHub: we chose to use a special GitHub API
  • How to handle assignees: Chosen to reset to empty
  • How to handle attachments: Since the GitHub API does not support adding attachments there are several options:
    • It is possible to manually upload attachments to issues. At over 500 attachments this was not a really an option.
    • There is an unmaintained ruby script to upload files to GitHub. Decided not to use it.
    • Since the migration is only done once we can dump all attachments to a subdirectory, upload that to a repo and generate a link to the file in the issue comments. So that is what we will do.
  • Yes, we could do fancy "if already exist..." etc, but this is a one off, so we simply add issues.

Sources of inspiration

GitHub description of API: https://gist.github.com/jonmagic/5282384165e0f86ef105

Bugzilla database model: https://www.bugzilla.org/docs/2.16/html/dbschema.html And a little help: https://www.ravenbrook.com/tool/bugzilla-schema/

Inspired by the work of Andriy Berestovskyy who wrote Bugzilla XML File to GitHub Issues Converter https://github.com/semihalf-berestovskyy-andriy/tools/blob/master/bugzilla2github Elaborate description https://www.theozimmermann.net/2017/10/bugzilla-to-github

example: http://bugs.libreplan.org/attachment.cgi?id=212 belongs to ticket 635

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

History
39 lines (29 loc) · 1.83 KB

File metadata and controls

39 lines (29 loc) · 1.83 KB

bugzilla2github

Code to migrate Bugzilla (version 4.0.2) to GitHub issues

Introduction

For years all bugs have been managed using Bugzilla on bugs.libreplan.org For several reasons this however is coming to an end.

The succesor is going to be GitHub Issues.

This means all current issues need to be transfered to GitHub Issues.

For this GitHub has a special REST API

How to go from Bugzilla to GitHub Issues

There are several steps to consider

  • How to retrieve from Bugzilla: we chose to use a direct database connection
  • How to upload issues to GitHub: we chose to use a special GitHub API
  • How to handle assignees: Chosen to reset to empty
  • How to handle attachments: Since the GitHub API does not support adding attachments there are several options:
    • It is possible to manually upload attachments to issues. At over 500 attachments this was not a really an option.
    • There is an unmaintained ruby script to upload files to GitHub. Decided not to use it.
    • Since the migration is only done once we can dump all attachments to a subdirectory, upload that to a repo and generate a link to the file in the issue comments. So that is what we will do.
  • Yes, we could do fancy "if already exist..." etc, but this is a one off, so we simply add issues.

Sources of inspiration

GitHub description of API: https://gist.github.com/jonmagic/5282384165e0f86ef105

Bugzilla database model: https://www.bugzilla.org/docs/2.16/html/dbschema.html And a little help: https://www.ravenbrook.com/tool/bugzilla-schema/

Inspired by the work of Andriy Berestovskyy who wrote Bugzilla XML File to GitHub Issues Converter https://github.com/semihalf-berestovskyy-andriy/tools/blob/master/bugzilla2github Elaborate description https://www.theozimmermann.net/2017/10/bugzilla-to-github

example: http://bugs.libreplan.org/attachment.cgi?id=212 belongs to ticket 635

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
39 lines (29 loc) · 1.83 KB

File metadata and controls

39 lines (29 loc) · 1.83 KB

bugzilla2github

Code to migrate Bugzilla (version 4.0.2) to GitHub issues

Introduction

For years all bugs have been managed using Bugzilla on bugs.libreplan.org For several reasons this however is coming to an end.

The succesor is going to be GitHub Issues.

This means all current issues need to be transfered to GitHub Issues.

For this GitHub has a special REST API

How to go from Bugzilla to GitHub Issues

There are several steps to consider

  • How to retrieve from Bugzilla: we chose to use a direct database connection
  • How to upload issues to GitHub: we chose to use a special GitHub API
  • How to handle assignees: Chosen to reset to empty
  • How to handle attachments: Since the GitHub API does not support adding attachments there are several options:
    • It is possible to manually upload attachments to issues. At over 500 attachments this was not a really an option.
    • There is an unmaintained ruby script to upload files to GitHub. Decided not to use it.
    • Since the migration is only done once we can dump all attachments to a subdirectory, upload that to a repo and generate a link to the file in the issue comments. So that is what we will do.
  • Yes, we could do fancy "if already exist..." etc, but this is a one off, so we simply add issues.

Sources of inspiration

GitHub description of API: https://gist.github.com/jonmagic/5282384165e0f86ef105

Bugzilla database model: https://www.bugzilla.org/docs/2.16/html/dbschema.html And a little help: https://www.ravenbrook.com/tool/bugzilla-schema/

Inspired by the work of Andriy Berestovskyy who wrote Bugzilla XML File to GitHub Issues Converter https://github.com/semihalf-berestovskyy-andriy/tools/blob/master/bugzilla2github Elaborate description https://www.theozimmermann.net/2017/10/bugzilla-to-github

example: http://bugs.libreplan.org/attachment.cgi?id=212 belongs to ticket 635

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
39 lines (29 loc) · 1.83 KB

File metadata and controls

39 lines (29 loc) · 1.83 KB

bugzilla2github

Code to migrate Bugzilla (version 4.0.2) to GitHub issues

Introduction

For years all bugs have been managed using Bugzilla on bugs.libreplan.org For several reasons this however is coming to an end.

The succesor is going to be GitHub Issues.

This means all current issues need to be transfered to GitHub Issues.

For this GitHub has a special REST API

How to go from Bugzilla to GitHub Issues

There are several steps to consider

  • How to retrieve from Bugzilla: we chose to use a direct database connection
  • How to upload issues to GitHub: we chose to use a special GitHub API
  • How to handle assignees: Chosen to reset to empty
  • How to handle attachments: Since the GitHub API does not support adding attachments there are several options:
    • It is possible to manually upload attachments to issues. At over 500 attachments this was not a really an option.
    • There is an unmaintained ruby script to upload files to GitHub. Decided not to use it.
    • Since the migration is only done once we can dump all attachments to a subdirectory, upload that to a repo and generate a link to the file in the issue comments. So that is what we will do.
  • Yes, we could do fancy "if already exist..." etc, but this is a one off, so we simply add issues.

Sources of inspiration

GitHub description of API: https://gist.github.com/jonmagic/5282384165e0f86ef105

Bugzilla database model: https://www.bugzilla.org/docs/2.16/html/dbschema.html And a little help: https://www.ravenbrook.com/tool/bugzilla-schema/

Inspired by the work of Andriy Berestovskyy who wrote Bugzilla XML File to GitHub Issues Converter https://github.com/semihalf-berestovskyy-andriy/tools/blob/master/bugzilla2github Elaborate description https://www.theozimmermann.net/2017/10/bugzilla-to-github

example: http://bugs.libreplan.org/attachment.cgi?id=212 belongs to ticket 635

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

History
39 lines (29 loc) · 1.83 KB

File metadata and controls

39 lines (29 loc) · 1.83 KB

bugzilla2github

Code to migrate Bugzilla (version 4.0.2) to GitHub issues

Introduction

For years all bugs have been managed using Bugzilla on bugs.libreplan.org For several reasons this however is coming to an end.

The succesor is going to be GitHub Issues.

This means all current issues need to be transfered to GitHub Issues.

For this GitHub has a special REST API

How to go from Bugzilla to GitHub Issues

There are several steps to consider

  • How to retrieve from Bugzilla: we chose to use a direct database connection
  • How to upload issues to GitHub: we chose to use a special GitHub API
  • How to handle assignees: Chosen to reset to empty
  • How to handle attachments: Since the GitHub API does not support adding attachments there are several options:
    • It is possible to manually upload attachments to issues. At over 500 attachments this was not a really an option.
    • There is an unmaintained ruby script to upload files to GitHub. Decided not to use it.
    • Since the migration is only done once we can dump all attachments to a subdirectory, upload that to a repo and generate a link to the file in the issue comments. So that is what we will do.
  • Yes, we could do fancy "if already exist..." etc, but this is a one off, so we simply add issues.

Sources of inspiration

GitHub description of API: https://gist.github.com/jonmagic/5282384165e0f86ef105

Bugzilla database model: https://www.bugzilla.org/docs/2.16/html/dbschema.html And a little help: https://www.ravenbrook.com/tool/bugzilla-schema/

Inspired by the work of Andriy Berestovskyy who wrote Bugzilla XML File to GitHub Issues Converter https://github.com/semihalf-berestovskyy-andriy/tools/blob/master/bugzilla2github Elaborate description https://www.theozimmermann.net/2017/10/bugzilla-to-github

example: http://bugs.libreplan.org/attachment.cgi?id=212 belongs to ticket 635

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
39 lines (29 loc) · 1.83 KB

File metadata and controls

39 lines (29 loc) · 1.83 KB

bugzilla2github

Code to migrate Bugzilla (version 4.0.2) to GitHub issues

Introduction

For years all bugs have been managed using Bugzilla on bugs.libreplan.org For several reasons this however is coming to an end.

The succesor is going to be GitHub Issues.

This means all current issues need to be transfered to GitHub Issues.

For this GitHub has a special REST API

How to go from Bugzilla to GitHub Issues

There are several steps to consider

  • How to retrieve from Bugzilla: we chose to use a direct database connection
  • How to upload issues to GitHub: we chose to use a special GitHub API
  • How to handle assignees: Chosen to reset to empty
  • How to handle attachments: Since the GitHub API does not support adding attachments there are several options:
    • It is possible to manually upload attachments to issues. At over 500 attachments this was not a really an option.
    • There is an unmaintained ruby script to upload files to GitHub. Decided not to use it.
    • Since the migration is only done once we can dump all attachments to a subdirectory, upload that to a repo and generate a link to the file in the issue comments. So that is what we will do.
  • Yes, we could do fancy "if already exist..." etc, but this is a one off, so we simply add issues.

Sources of inspiration

GitHub description of API: https://gist.github.com/jonmagic/5282384165e0f86ef105

Bugzilla database model: https://www.bugzilla.org/docs/2.16/html/dbschema.html And a little help: https://www.ravenbrook.com/tool/bugzilla-schema/

Inspired by the work of Andriy Berestovskyy who wrote Bugzilla XML File to GitHub Issues Converter https://github.com/semihalf-berestovskyy-andriy/tools/blob/master/bugzilla2github Elaborate description https://www.theozimmermann.net/2017/10/bugzilla-to-github

example: http://bugs.libreplan.org/attachment.cgi?id=212 belongs to ticket 635

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
39 lines (29 loc) · 1.83 KB

File metadata and controls

39 lines (29 loc) · 1.83 KB

bugzilla2github

Code to migrate Bugzilla (version 4.0.2) to GitHub issues

Introduction

For years all bugs have been managed using Bugzilla on bugs.libreplan.org For several reasons this however is coming to an end.

The succesor is going to be GitHub Issues.

This means all current issues need to be transfered to GitHub Issues.

For this GitHub has a special REST API

How to go from Bugzilla to GitHub Issues

There are several steps to consider

  • How to retrieve from Bugzilla: we chose to use a direct database connection
  • How to upload issues to GitHub: we chose to use a special GitHub API
  • How to handle assignees: Chosen to reset to empty
  • How to handle attachments: Since the GitHub API does not support adding attachments there are several options:
    • It is possible to manually upload attachments to issues. At over 500 attachments this was not a really an option.
    • There is an unmaintained ruby script to upload files to GitHub. Decided not to use it.
    • Since the migration is only done once we can dump all attachments to a subdirectory, upload that to a repo and generate a link to the file in the issue comments. So that is what we will do.
  • Yes, we could do fancy "if already exist..." etc, but this is a one off, so we simply add issues.

Sources of inspiration

GitHub description of API: https://gist.github.com/jonmagic/5282384165e0f86ef105

Bugzilla database model: https://www.bugzilla.org/docs/2.16/html/dbschema.html And a little help: https://www.ravenbrook.com/tool/bugzilla-schema/

Inspired by the work of Andriy Berestovskyy who wrote Bugzilla XML File to GitHub Issues Converter https://github.com/semihalf-berestovskyy-andriy/tools/blob/master/bugzilla2github Elaborate description https://www.theozimmermann.net/2017/10/bugzilla-to-github

example: http://bugs.libreplan.org/attachment.cgi?id=212 belongs to ticket 635

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

History
39 lines (29 loc) · 1.83 KB

File metadata and controls

39 lines (29 loc) · 1.83 KB

bugzilla2github

Code to migrate Bugzilla (version 4.0.2) to GitHub issues

Introduction

For years all bugs have been managed using Bugzilla on bugs.libreplan.org For several reasons this however is coming to an end.

The succesor is going to be GitHub Issues.

This means all current issues need to be transfered to GitHub Issues.

For this GitHub has a special REST API

How to go from Bugzilla to GitHub Issues

There are several steps to consider

  • How to retrieve from Bugzilla: we chose to use a direct database connection
  • How to upload issues to GitHub: we chose to use a special GitHub API
  • How to handle assignees: Chosen to reset to empty
  • How to handle attachments: Since the GitHub API does not support adding attachments there are several options:
    • It is possible to manually upload attachments to issues. At over 500 attachments this was not a really an option.
    • There is an unmaintained ruby script to upload files to GitHub. Decided not to use it.
    • Since the migration is only done once we can dump all attachments to a subdirectory, upload that to a repo and generate a link to the file in the issue comments. So that is what we will do.
  • Yes, we could do fancy "if already exist..." etc, but this is a one off, so we simply add issues.

Sources of inspiration

GitHub description of API: https://gist.github.com/jonmagic/5282384165e0f86ef105

Bugzilla database model: https://www.bugzilla.org/docs/2.16/html/dbschema.html And a little help: https://www.ravenbrook.com/tool/bugzilla-schema/

Inspired by the work of Andriy Berestovskyy who wrote Bugzilla XML File to GitHub Issues Converter https://github.com/semihalf-berestovskyy-andriy/tools/blob/master/bugzilla2github Elaborate description https://www.theozimmermann.net/2017/10/bugzilla-to-github

example: http://bugs.libreplan.org/attachment.cgi?id=212 belongs to ticket 635