1- using Nuke . Common ;
1+ using System ;
2+ using System . Linq ;
3+ using NuGet . Versioning ;
4+ using Nuke . Common ;
5+ using Nuke . Common . ChangeLog ;
26using Nuke . Common . CI . GitHubActions ;
37using Nuke . Common . Git ;
8+ using Nuke . Common . IO ;
9+ using Nuke . Common . Tools . GitHub ;
10+ using Nuke . Common . Utilities . Collections ;
11+ using Octokit ;
412using Serilog ;
513
614[ ParameterPrefix ( nameof ( PublishGitHubRelease ) ) ]
715interface IPublishGitHubRelease : INukeBuild
816{
917 [ GitRepository ] private GitRepository GitRepository => TryGetValue ( ( ) => GitRepository ) ;
1018
19+ [ Parameter ] AbsolutePath ChangelogFile => TryGetValue ( ( ) => ChangelogFile ) ;
20+
1121 Target PublishGitHubRelease => _ => _
12- . OnlyWhenStatic ( ( ) => GitRepository . CurrentCommitHasVersionTag ( ) )
13- . OnlyWhenStatic ( ( ) => IsServerBuild )
14- . DependsOn < IUnityPackageVersionMatchesGitTagVersion > ( )
15- . DependsOn < IChangelogVersionMatchesGitTagVersion > ( )
16- . Executes ( ( ) =>
22+ // .OnlyWhenStatic(() => GitRepository.CurrentCommitHasVersionTag())
23+ // .OnlyWhenStatic(() => IsServerBuild)
24+ // .DependsOn<IUnityPackageVersionMatchesGitTagVersion>()
25+ // .DependsOn<IChangelogVersionMatchesGitTagVersion>()
26+ . Executes ( async ( ) =>
1727 {
18- Log . Warning ( "TODO" ) ;
28+ Assert . True ( ChangelogFile != null , "No path has been provided!" ) ;
29+
30+ ChangeLog changelog = ChangelogTasks . ReadChangelog ( ChangelogFile ) ;
31+ ReleaseNotes latestReleaseNotes = changelog . GetLatestReleaseNotes ( ) ;
32+ var trimmedNotes = latestReleaseNotes . Notes . SkipUntil ( n => ! string . IsNullOrWhiteSpace ( n ) ) . Reverse ( ) . SkipUntil ( n => ! string . IsNullOrWhiteSpace ( n ) ) . Reverse ( ) ;
33+
34+ string changelogBody = string . Join ( Environment . NewLine , trimmedNotes ) ;
35+
36+ SemanticVersion version = GitRepository . GetLatestVersionTagOnCurrentCommit ( ) ;
37+
38+ var release = new NewRelease ( $ "v{ version } ")
39+ {
40+ Draft = true ,
41+ Name = $ "v{ version } ",
42+ Prerelease = version . IsPrerelease ,
43+ Body = changelogBody
44+ } ;
45+
46+ string owner = GitRepository . GetGitHubOwner ( ) ;
47+ string name = GitRepository . GetGitHubName ( ) ;
48+
49+ var credentials = new Credentials ( GitHubActions . Instance . Token ) ;
50+ GitHubTasks . GitHubClient = new GitHubClient ( new ProductHeaderValue ( nameof ( NukeBuild ) ) , new Octokit . Internal . InMemoryCredentialStore ( credentials ) ) ;
51+
52+ Log . Information ( "Creating GitHub release..." ) ;
53+
54+ Release createdRelease = await GitHubTasks . GitHubClient . Repository . Release . Create ( owner , name , release ) ;
55+
56+ // await GitHubTasks.GitHubClient.Repository.Release.Edit(owner, name, createdRelease.Id, new ReleaseUpdate { Draft = false });
1957 } ) ;
2058}
0 commit comments