Skip to content

Commit 27a612f

Browse files
committed
Cleanup/etc
1 parent 79dd5e6 commit 27a612f

File tree

3 files changed

+48
-65
lines changed

3 files changed

+48
-65
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/BundleChangelogsTask.java

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -53,23 +53,16 @@ public class BundleChangelogsTask extends DefaultTask {
5353

5454
private final RegularFileProperty bundleFile;
5555
private final DirectoryProperty changelogDirectory;
56+
private final DirectoryProperty changelogBundlesDirectory;
5657

5758
private final GitWrapper gitWrapper;
5859

5960
@Nullable
6061
private String branch;
6162
@Nullable
6263
private String bcRef;
63-
// private boolean updateExisting;
64-
private boolean finalize;
6564

66-
// @Option(
67-
// option = "update-existing",
68-
// description = "Only update entries that are already in the bundle. Useful for updating the bundle after a BC has been cut."
69-
// )
70-
// public void setUpdateExisting(boolean updateExisting) {
71-
// this.updateExisting = updateExisting;
72-
// }
65+
private boolean finalize;
7366

7467
@Option(option = "branch", description = "Branch (or other ref) to use for generating the changelog bundle.")
7568
public void setBranch(String branch) {
@@ -105,6 +98,7 @@ public BundleChangelogsTask(ObjectFactory objectFactory, ExecOperations execOper
10598

10699
bundleFile = objectFactory.fileProperty();
107100
changelogDirectory = objectFactory.directoryProperty();
101+
changelogBundlesDirectory = objectFactory.directoryProperty();
108102

109103
gitWrapper = new GitWrapper(execOperations);
110104
}
@@ -118,27 +112,34 @@ public void executeTask() throws IOException {
118112
final String upstreamRemote = gitWrapper.getUpstream();
119113
Set<String> entriesFromBc = Set.of();
120114

115+
var didCheckoutChangelogs = false;
121116
try {
122117
var usingBcRef = bcRef != null && bcRef.isEmpty() == false;
123118
if (usingBcRef) {
124119
// Check out all the changelogs that existed at the time of the BC
125120
checkoutChangelogs(gitWrapper, upstreamRemote, bcRef);
126-
entriesFromBc = this.changelogDirectory.getAsFileTree().getFiles().stream().map(File::getName).collect(Collectors.toSet());
121+
entriesFromBc = changelogDirectory.getAsFileTree().getFiles().stream().map(File::getName).collect(Collectors.toSet());
127122

128123
// Then add/update changelogs from the HEAD of the branch
129124
// We do an "add" here, rather than checking out the entire directory, in case changelogs have been removed for some reason
130125
addChangelogsFromRef(gitWrapper, upstreamRemote, branch);
131126
} else {
132127
checkoutChangelogs(gitWrapper, upstreamRemote, branch);
133128
}
129+
130+
didCheckoutChangelogs = true;
134131
Properties props = new Properties();
135-
props.load(new StringReader(gitWrapper.runCommand("git", "show", upstreamRemote + "/" + branch + ":build-tools-internal/version.properties")));
132+
props.load(
133+
new StringReader(
134+
gitWrapper.runCommand("git", "show", upstreamRemote + "/" + branch + ":build-tools-internal/version.properties")
135+
)
136+
);
136137
String version = props.getProperty("elasticsearch");
137138

138139
LOGGER.info("Finding changelog files for " + version + "...");
139140

140141
Set<String> finalEntriesFromBc = entriesFromBc;
141-
List<ChangelogEntry> entries = this.changelogDirectory.getAsFileTree().getFiles().stream().filter(f -> {
142+
List<ChangelogEntry> entries = changelogDirectory.getAsFileTree().getFiles().stream().filter(f -> {
142143
// When not using a bc ref, we just take everything from the branch/sha passed in
143144
if (usingBcRef == false) {
144145
return true;
@@ -157,50 +158,46 @@ public void executeTask() throws IOException {
157158
return output.trim().isEmpty() == false;
158159
}).map(ChangelogEntry::parse).sorted(Comparator.comparing(ChangelogEntry::getPr)).collect(toList());
159160

160-
ChangelogBundle existingBundle = null;
161-
// if (updateExisting) {
162-
// var existingBundleFile = new File("docs/release-notes/changelog-bundles/" + version + ".yml");
163-
// if (existingBundleFile.exists()) {
164-
// var bundle = ChangelogBundle.parse(existingBundleFile);
165-
// existingBundle = bundle;
166-
// entries = entries.stream()
167-
// .filter(e -> bundle.changelogs().stream().anyMatch(c -> c.getPr().equals(e.getPr())))
168-
// .toList();
169-
// }
170-
// }
171-
172-
var isReleased = finalize == true;
173-
174-
ChangelogBundle bundle = new ChangelogBundle(version, isReleased, Instant.now().toString(), entries);
161+
ChangelogBundle bundle = new ChangelogBundle(version, finalize, Instant.now().toString(), entries);
175162

176163
yamlMapper.writeValue(new File("docs/release-notes/changelog-bundles/" + version + ".yml"), bundle);
177164
} finally {
178-
gitWrapper.runCommand("git", "restore", "-s@", "-SW", "--", "docs/changelog");
165+
if (didCheckoutChangelogs) {
166+
gitWrapper.runCommand("git", "restore", "-s@", "-SW", "--", changelogDirectory.get().toString());
167+
}
179168
}
180169
}
181170

182-
private static void checkoutChangelogs(GitWrapper gitWrapper, String upstream, String ref) {
171+
private void checkoutChangelogs(GitWrapper gitWrapper, String upstream, String ref) {
183172
gitWrapper.updateRemote(upstream);
184-
// TODO check for changes first
185-
gitWrapper.runCommand("rm", "-rf", "docs/changelog");
173+
174+
// If the changelog directory contains modified/new files, we should error out instead of wiping them out silently
175+
var output = gitWrapper.runCommand("git", "status", "--porcelain", changelogDirectory.get().toString()).trim();
176+
if (output.isEmpty() == false) {
177+
throw new IllegalStateException(
178+
"Changelog directory contains changes that will be wiped out by this task:\n" + changelogDirectory.get() + "\n" + output
179+
);
180+
}
181+
182+
gitWrapper.runCommand("rm", "-rf", changelogDirectory.get().toString());
186183
var refSpec = upstream + "/" + ref;
187184
if (ref.contains("upstream/")) {
188185
refSpec = ref.replace("upstream/", upstream + "/");
189186
} else if (ref.matches("^[0-9a-f]+$")) {
190187
refSpec = ref;
191188
}
192-
gitWrapper.runCommand("git", "checkout", refSpec, "--", "docs/changelog");
189+
gitWrapper.runCommand("git", "checkout", refSpec, "--", changelogDirectory.get().toString());
193190
}
194191

195-
private static void addChangelogsFromRef(GitWrapper gitWrapper, String upstream, String ref) {
192+
private void addChangelogsFromRef(GitWrapper gitWrapper, String upstream, String ref) {
196193
var refSpec = upstream + "/" + ref;
197194
if (ref.contains("upstream/")) {
198195
refSpec = ref.replace("upstream/", upstream + "/");
199196
} else if (ref.matches("^[0-9a-f]+$")) {
200197
refSpec = ref;
201198
}
202199

203-
gitWrapper.runCommand("git", "checkout", refSpec, "--", "docs/changelog/*.yaml");
200+
gitWrapper.runCommand("git", "checkout", refSpec, "--", changelogDirectory.get() + "/*.yaml");
204201
}
205202

206203
@InputDirectory
@@ -212,6 +209,15 @@ public void setChangelogDirectory(Directory dir) {
212209
this.changelogDirectory.set(dir);
213210
}
214211

212+
@InputDirectory
213+
public DirectoryProperty getChangelogBundlesDirectory() {
214+
return changelogBundlesDirectory;
215+
}
216+
217+
public void setChangelogBundlesDirectory(Directory dir) {
218+
this.changelogBundlesDirectory.set(dir);
219+
}
220+
215221
@InputFiles
216222
public FileCollection getChangelogs() {
217223
return changelogs;

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/GenerateReleaseNotesTask.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,15 @@
1414
import org.elasticsearch.gradle.VersionProperties;
1515
import org.gradle.api.DefaultTask;
1616
import org.gradle.api.GradleException;
17-
import org.gradle.api.file.ConfigurableFileCollection;
1817
import org.gradle.api.file.Directory;
1918
import org.gradle.api.file.DirectoryProperty;
20-
import org.gradle.api.file.FileCollection;
2119
import org.gradle.api.file.RegularFile;
2220
import org.gradle.api.file.RegularFileProperty;
2321
import org.gradle.api.logging.Logger;
2422
import org.gradle.api.logging.Logging;
2523
import org.gradle.api.model.ObjectFactory;
2624
import org.gradle.api.tasks.InputDirectory;
2725
import org.gradle.api.tasks.InputFile;
28-
import org.gradle.api.tasks.InputFiles;
2926
import org.gradle.api.tasks.OutputFile;
3027
import org.gradle.api.tasks.TaskAction;
3128
import org.gradle.process.ExecOperations;
@@ -45,8 +42,6 @@
4542
public class GenerateReleaseNotesTask extends DefaultTask {
4643
private static final Logger LOGGER = Logging.getLogger(GenerateReleaseNotesTask.class);
4744

48-
private final ConfigurableFileCollection changelogs;
49-
5045
private final RegularFileProperty releaseNotesTemplate;
5146
private final RegularFileProperty releaseHighlightsTemplate;
5247
private final RegularFileProperty breakingChangesTemplate;
@@ -63,8 +58,6 @@ public class GenerateReleaseNotesTask extends DefaultTask {
6358

6459
@Inject
6560
public GenerateReleaseNotesTask(ObjectFactory objectFactory, ExecOperations execOperations) {
66-
changelogs = objectFactory.fileCollection();
67-
6861
releaseNotesTemplate = objectFactory.fileProperty();
6962
releaseHighlightsTemplate = objectFactory.fileProperty();
7063
breakingChangesTemplate = objectFactory.fileProperty();
@@ -107,7 +100,6 @@ public void executeTask() throws IOException {
107100
@VisibleForTesting
108101
static List<ChangelogBundle> getSortedBundlesWithUniqueChangelogs(List<ChangelogBundle> bundles) {
109102
List<ChangelogBundle> sorted = bundles.stream()
110-
// .map(ChangelogBundle::copy)
111103
.sorted(Comparator.comparing(ChangelogBundle::released).reversed().thenComparing(ChangelogBundle::generated))
112104
.toList();
113105

@@ -176,15 +168,6 @@ static boolean needsGitTags(String versionString) {
176168
return true;
177169
}
178170

179-
@InputFiles
180-
public FileCollection getChangelogs() {
181-
return changelogs;
182-
}
183-
184-
public void setChangelogs(FileCollection files) {
185-
this.changelogs.setFrom(files);
186-
}
187-
188171
@InputDirectory
189172
public DirectoryProperty getChangelogBundleDirectory() {
190173
return changelogBundleDirectory;

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/ReleaseToolsPlugin.java

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public void apply(Project project) {
5656
project.getTasks().register("setCompatibleVersions", SetCompatibleVersionsTask.class, t -> t.setThisVersion(version));
5757

5858
final Directory changeLogDirectory = projectDirectory.dir("docs/changelog");
59+
final Directory changeLogBundlesDirectory = projectDirectory.dir("docs/release-notes/changelog-bundles");
5960
final FileTree yamlFiles = changeLogDirectory.getAsFileTree().matching(new PatternSet().include("**/*.yml", "**/*.yaml"));
6061

6162
final Provider<ValidateYamlAgainstSchemaTask> validateChangelogsTask = project.getTasks()
@@ -67,23 +68,19 @@ public void apply(Project project) {
6768
task.setReport(new File(project.getBuildDir(), "reports/validateYaml.txt"));
6869
});
6970

70-
final Function<Boolean, Action<BundleChangelogsTask>> configureBundleTask = shouldConfigureYamlFiles -> task -> {
71+
final Action<BundleChangelogsTask> configureBundleTask = task -> {
7172
task.setGroup("Documentation");
7273
task.setDescription("Generates release notes from changelog files held in this checkout");
7374
task.setChangelogs(yamlFiles);
7475
task.setChangelogDirectory(changeLogDirectory);
76+
task.setChangelogBundlesDirectory(changeLogBundlesDirectory);
7577
task.setBundleFile(projectDirectory.file("docs/release-notes/changelogs-" + version.toString() + ".yml"));
7678
task.getOutputs().upToDateWhen(o -> false);
7779
};
7880

79-
final Function<Boolean, Action<GenerateReleaseNotesTask>> configureGenerateTask = shouldConfigureYamlFiles -> task -> {
81+
final Action<GenerateReleaseNotesTask> configureGenerateTask = task -> {
8082
task.setGroup("Documentation");
81-
if (shouldConfigureYamlFiles) {
82-
task.setChangelogs(yamlFiles);
83-
task.setDescription("Generates release notes from changelog files held in this checkout");
84-
} else {
85-
task.setDescription("Generates stub release notes e.g. after feature freeze");
86-
}
83+
task.setDescription("Generates release notes for all versions/branches using changelog bundles in this checkout");
8784

8885
task.setReleaseNotesTemplate(projectDirectory.file(RESOURCES + "templates/index.md"));
8986
task.setReleaseNotesFile(projectDirectory.file("docs/release-notes/index.md"));
@@ -97,18 +94,15 @@ public void apply(Project project) {
9794
task.setDeprecationsTemplate(projectDirectory.file(RESOURCES + "templates/deprecations.md"));
9895
task.setDeprecationsFile(projectDirectory.file("docs/release-notes/deprecations.md"));
9996

100-
task.setChangelogBundleDirectory(projectDirectory.dir("docs/release-notes/changelog-bundles"));
97+
task.setChangelogBundleDirectory(changeLogBundlesDirectory);
10198

10299
task.getOutputs().upToDateWhen(o -> false);
103100

104101
task.dependsOn(validateChangelogsTask);
105102
};
106103

107-
project.getTasks().register("bundleChangelogs", BundleChangelogsTask.class).configure(configureBundleTask.apply(true));
108-
project.getTasks().register("generateReleaseNotes", GenerateReleaseNotesTask.class).configure(configureGenerateTask.apply(true));
109-
project.getTasks()
110-
.register("generateStubReleaseNotes", GenerateReleaseNotesTask.class)
111-
.configure(configureGenerateTask.apply(false));
104+
project.getTasks().register("bundleChangelogs", BundleChangelogsTask.class).configure(configureBundleTask);
105+
project.getTasks().register("generateReleaseNotes", GenerateReleaseNotesTask.class).configure(configureGenerateTask);
112106

113107
project.getTasks().register("pruneChangelogs", PruneChangelogsTask.class).configure(task -> {
114108
task.setGroup("Documentation");

0 commit comments

Comments
 (0)