@@ -137,6 +137,13 @@ async function migrate() {
137137 await transferLabels ( true , settings . conversion . useLowerCaseLabels ) ;
138138 }
139139
140+
141+ // transfer GitLab releases to GitHub
142+ if ( settings . transfer . releases ) {
143+ await transferReleases ( ) ;
144+ }
145+
146+
140147 // Transfer issues with their comments; do this before transferring the merge requests
141148 if ( settings . transfer . issues ) {
142149 await transferIssues ( ) ;
@@ -149,6 +156,8 @@ async function migrate() {
149156 await transferMergeRequests ( ) ;
150157 }
151158 }
159+
160+
152161 } catch ( err ) {
153162 console . error ( 'Error during transfer:' ) ;
154163 console . error ( err ) ;
@@ -447,6 +456,63 @@ async function transferMergeRequests() {
447456 }
448457}
449458
459+ /**
460+ * Transfer any releases that exist in GitLab that do not exist in GitHub
461+ * Please note that due to github api restrictions, this only transfers the
462+ * name, description and tag name of the release. It sorts the releases chronologically
463+ * and creates them on github one by one
464+ * @returns {Promise<void> }
465+ */
466+ async function transferReleases ( ) {
467+ inform ( 'Transferring Releases' ) ;
468+
469+ // Get a list of all releases associated with this project
470+ let releases = await gitlabApi . Releases . all ( settings . gitlab . projectId ) as any ;
471+
472+ // Sort releases in ascending order of their release date
473+ releases = releases . sort ( ( a , b ) => {
474+ return ( new Date ( a . released_at ) as any ) - ( new Date ( b . released_at ) as any ) ;
475+ } ) ;
476+
477+ console . log (
478+ 'Transferring ' + releases . length . toString ( ) + ' releases'
479+ ) ;
480+
481+ //
482+ // Create GitHub release for each GitLab release
483+ //
484+
485+ // if a GitLab release does not exist in GitHub repo, create it
486+ for ( let release of releases ) {
487+ // Try to find a GitHub pull request that already exists for this GitLab
488+ // merge request
489+ let githubRelease = await githubHelper . getReleaseByTag ( release . tag_name ) ;
490+
491+ if ( ! githubRelease ) {
492+ console . log (
493+ 'Creating release: !' + release . name + ' - ' + release . tag_name
494+ ) ;
495+ try {
496+ // process asynchronous code in sequence
497+ await githubHelper . createRelease ( release . tag_name , release . name , release . description ) ;
498+ } catch ( err ) {
499+ console . error (
500+ 'Could not create release: !' +
501+ release . name + ' - ' + release . tag_name
502+ ) ;
503+ console . error ( err ) ;
504+ }
505+ } else {
506+ if ( githubRelease ) {
507+ console . log (
508+ 'Gitlab release already exists (as github release): ' +
509+ githubRelease . data . name + ' - ' + githubRelease . data . tag_name
510+ ) ;
511+ }
512+ }
513+ }
514+ }
515+
450516//-----------------------------------------------------------------------------
451517
452518/**
0 commit comments