Skip to content

Commit 0efed34

Browse files
committed
propose version bumps from unreleased changes
1 parent 53dfbd0 commit 0efed34

File tree

5 files changed

+206
-104
lines changed

5 files changed

+206
-104
lines changed

.editorconfig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
root = true
2+
3+
# All files
4+
[*]
5+
indent_style = space
6+
trim_trailing_whitespace = true
7+
8+
# Xml files
9+
[*.xml]
10+
indent_size = 2
11+
12+
[.fs]
13+
indent_size = 2

src/Ionide.KeepAChangelog.Tasks/Library.fs

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,34 @@ open Microsoft.Build.Utilities
44
open Microsoft.Build.Framework
55
open System.IO
66
open Ionide.KeepAChangelog
7-
open Ionide.KeepAChangelog.Domain
87
open System.Linq
8+
open SemVersion
9+
open System
910

1011
module Util =
11-
let mapReleaseInfo (version: SemVersion.SemanticVersion) (date: System.DateTime) (item: ITaskItem) : ITaskItem =
12+
let mapReleaseInfo (version: SemanticVersion) (date: DateTime) (item: ITaskItem) : ITaskItem =
1213
item.ItemSpec <- string version
1314
item.SetMetadata("Date", date.ToString("yyyy-MM-dd"))
1415
item
1516

16-
let mapUnreleasedInfo (item: ITaskItem) : ITaskItem =
17-
item.ItemSpec <- "Unreleased"
18-
item
19-
2017
let allReleaseNotesFor (data: ChangelogData) =
2118
let section name items =
2219
match items with
2320
| [] -> []
2421
| items -> $"### {name}" :: items @ [ "" ]
2522

2623
String.concat
27-
System.Environment.NewLine
24+
Environment.NewLine
2825
([ yield! section "Added" data.Added
2926
yield! section "Changed" data.Changed
3027
yield! section "Deprecated" data.Deprecated
3128
yield! section "Removed" data.Removed
3229
yield! section "Fixed" data.Fixed
3330
yield! section "Security" data.Security
34-
for KeyValue(heading, lines) in data.Custom do
35-
yield! section heading lines ])
31+
for KeyValue (heading, lines) in data.Custom do
32+
yield! section heading lines ])
3633

37-
let stitch items =
38-
String.concat System.Environment.NewLine items
34+
let stitch items = String.concat Environment.NewLine items
3935

4036
let mapChangelogData (data: ChangelogData) (item: ITaskItem) : ITaskItem =
4137
item.SetMetadata("Added", stitch data.Added)
@@ -44,10 +40,27 @@ module Util =
4440
item.SetMetadata("Removed", stitch data.Removed)
4541
item.SetMetadata("Fixed", stitch data.Fixed)
4642
item.SetMetadata("Security", stitch data.Security)
47-
for (KeyValue(heading, lines)) in data.Custom do
43+
44+
for (KeyValue (heading, lines)) in data.Custom do
4845
item.SetMetadata(heading, stitch lines)
46+
4947
item
5048

49+
let mapUnreleasedInfo changelogs (item: ITaskItem) : ITaskItem =
50+
match Promote.fromUnreleased changelogs with
51+
| None ->
52+
item.ItemSpec <- "Unreleased"
53+
54+
changelogs.Unreleased
55+
|> Option.map (fun d -> mapChangelogData d item)
56+
|> Option.defaultValue item
57+
| Some (unreleasedVersion, releaseDate, data) ->
58+
let item = mapReleaseInfo unreleasedVersion releaseDate item
59+
60+
data
61+
|> Option.map (fun d -> mapChangelogData d item)
62+
|> Option.defaultValue item
63+
5164
type ParseChangelogs() =
5265
inherit Task()
5366

@@ -57,6 +70,9 @@ type ParseChangelogs() =
5770
[<Output>]
5871
member val UnreleasedChangelog: ITaskItem = null with get, set
5972

73+
[<Output>]
74+
member val UnreleasedReleaseNotes: string = null with get, set
75+
6076
[<Output>]
6177
member val CurrentReleaseChangelog: ITaskItem = null with get, set
6278

@@ -66,6 +82,7 @@ type ParseChangelogs() =
6682
[<Output>]
6783
member val LatestReleaseNotes: string = null with get, set
6884

85+
6986
override this.Execute() : bool =
7087
let file = this.ChangelogFile |> FileInfo
7188

@@ -77,10 +94,8 @@ type ParseChangelogs() =
7794
| Ok changelogs ->
7895
changelogs.Unreleased
7996
|> Option.iter (fun unreleased ->
80-
this.UnreleasedChangelog <-
81-
TaskItem()
82-
|> Util.mapChangelogData unreleased
83-
|> Util.mapUnreleasedInfo)
97+
this.UnreleasedChangelog <- TaskItem() |> Util.mapUnreleasedInfo changelogs
98+
this.UnreleasedReleaseNotes <- Util.allReleaseNotesFor unreleased)
8499

85100
let sortedReleases =
86101
// have to use LINQ here because List.sortBy* require IComparable, which
@@ -92,8 +107,10 @@ type ParseChangelogs() =
92107
|> Seq.map (fun (version, date, data) ->
93108
TaskItem()
94109
|> Util.mapReleaseInfo version date
95-
|> fun d -> match data with Some data -> Util.mapChangelogData data d | None -> d
96-
)
110+
|> fun d ->
111+
match data with
112+
| Some data -> Util.mapChangelogData data d
113+
| None -> d)
97114
|> Seq.toArray
98115

99116
this.AllReleasedChangelogs <- items
@@ -103,9 +120,7 @@ type ParseChangelogs() =
103120
|> Seq.tryHead
104121
|> Option.iter (fun (version, date, data) ->
105122
data
106-
|> Option.iter (fun data ->
107-
this.LatestReleaseNotes <- Util.allReleaseNotesFor data)
108-
)
123+
|> Option.iter (fun data -> this.LatestReleaseNotes <- Util.allReleaseNotesFor data))
109124

110125
true
111126
| Error (formatted, msg) ->
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
22
<PropertyGroup>
3+
<!-- Points to the location of the file used to determine the assembly/package version and release notes -->
34
<ChangelogFile Condition="'$(ChangelogFile)' == ''">CHANGELOG.md</ChangelogFile>
5+
<!-- If true, assembly metadata for the build date of the release will be written -->
6+
<GenerateAssemblyBuildDateAttribute Condition="'$(GenerateAssemblyBuildDateAttribute)' == ''">true</GenerateAssemblyBuildDateAttribute>
7+
<!-- If set, the assembly/package version and release notes will be set from Unreleased changes, if any are present -->
8+
<GenerateVersionForUnreleasedChanges Condition="'$(GenerateVersionForUnreleasedChanges)' == ''">true</GenerateVersionForUnreleasedChanges>
49
</PropertyGroup>
510
</Project>

src/Ionide.KeepAChangelog.Tasks/build/Ionide.KeepAChangelog.Tasks.targets

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
$(PrepareForBuildDependsOn)
88
</PrepareForBuildDependsOn>
99
</PropertyGroup>
10-
10+
1111
<Target Name="GetChangelogVersion"
1212
Condition="'$(ChangelogFile)' != '' and Exists('$(ChangelogFile)')"
1313
Inputs="$(ChangelogFile)"
1414
Outputs="UnreleasedChangelog;CurrentReleaseChangelog;AllReleasedChangelogslLatestReleaseNotes">
15-
<Ionide.KeepAChangelog.Tasks.ParseChangeLogs
15+
<Ionide.KeepAChangelog.Tasks.ParseChangeLogs
1616
ChangelogFile="$(ChangelogFile)">
1717
<Output TaskParameter="UnreleasedChangelog" ItemName="UnreleasedChangelog"/>
18+
<Output TaskParameter="UnreleasedReleaseNotes" ItemName="UnreleasedReleaseNotes"/>
1819
<Output TaskParameter="CurrentReleaseChangelog" ItemName="CurrentReleaseChangelog"/>
1920
<Output TaskParameter="AllReleasedChangelogs" ItemName="AllReleasedChangelogs" />
2021
<Output TaskParameter="LatestReleaseNotes" ItemName="LatestReleaseNotes" />
@@ -24,15 +25,24 @@
2425
<Target Name="SetVersionFromChangelog"
2526
DependsOnTargets="GetChangelogVersion">
2627
<PropertyGroup Condition="'@(CurrentReleaseChangelog)' != ''">
28+
<!-- Set the version to the version of the latest release -->
2729
<Version>%(CurrentReleaseChangelog.Identity)</Version>
2830
<PackageVersion>%(CurrentReleaseChangelog.Identity)</PackageVersion>
2931
<PackageReleaseNotes>@(LatestReleaseNotes)</PackageReleaseNotes>
32+
<_ReleaseDate>%(CurrentReleaseChangelog.Date)</_ReleaseDate>
33+
</PropertyGroup>
34+
<PropertyGroup Condition="'@(UnreleasedChangelog)' != '' and '$(GenerateVersionForUnreleasedChanges)' == 'true'">
35+
<!-- Set the version to the derived version of the unreleased changelog -->
36+
<Version>%(UnreleasedChangelog.Identity)</Version>
37+
<PackageVersion>%(UnreleasedChangelog.Identity)</PackageVersion>
38+
<PackageReleaseNotes>@(UnreleasedReleaseNotes)</PackageReleaseNotes>
39+
<_ReleaseDate>%(UnreleasedChangelog.Date)</_ReleaseDate>
3040
</PropertyGroup>
3141

32-
<ItemGroup Condition="'@(CurrentReleaseChangelog)' != '' and '$(GenerateAssemblyInfo)' == 'true'">
33-
<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute" Condition="'$(GenerateRepositoryUrlAttribute)' == 'true' and ('$(RepositoryUrl)' != '' or '$(PublishRepositoryUrl)' == 'true')" >
42+
<ItemGroup Condition="'@(_ReleaseDate)' != '' and '$(GenerateAssemblyInfo)' == 'true'">
43+
<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute" Condition="'$(GenerateAssemblyBuildDateAttribute)' == 'true'" >
3444
<_Parameter1>BuildDate</_Parameter1>
35-
<_Parameter2>%(CurrentReleaseChangelog.Date)</_Parameter2>
45+
<_Parameter2>@(_ReleaseDate)</_Parameter2>
3646
</AssemblyAttribute>
3747
</ItemGroup>
3848
</Target>

0 commit comments

Comments
 (0)