diff --git a/.github/workflows/dependabot-changesets.yml b/.github/workflows/dependabot-changesets.yml
index c3efc07..c2c1432 100644
--- a/.github/workflows/dependabot-changesets.yml
+++ b/.github/workflows/dependabot-changesets.yml
@@ -13,7 +13,7 @@ jobs:
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'FortnoxAB/changesets-java'
steps:
- name: Dependabot metadata
- id: metadata
+ id: dependabot-metadata
uses: dependabot/fetch-metadata@v2
with:
skip-verification: true
@@ -22,4 +22,8 @@ jobs:
run: |
echo "dependency-names: ${{ steps.dependabot-metadata.outputs.dependency-names }}"
echo "new-version: ${{ steps.dependabot-metadata.outputs.new-version }}"
- echo "${{ toJSON(steps.metadata.outputs) }}"
+ echo "${{ toJSON(steps.dependabot-metadata.outputs) }}"
+
+ # Fake adding a changeset so we see that it runs with the correct parameters
+ echo "./mvnw se.fortnox.changesets:changesets-maven-plugin:add -DchangesetLevel=dependency -DchangesetContent=\"- ${{ steps.dependabot-metadata.outputs.dependency-names }}: ${{ steps.dependabot-metadata.outputs.new-version }}\""
+
diff --git a/changesets-java/src/main/java/se/fortnox/changesets/ChangesetWriter.java b/changesets-java/src/main/java/se/fortnox/changesets/ChangesetWriter.java
index 3d7e82f..6c93ddd 100644
--- a/changesets-java/src/main/java/se/fortnox/changesets/ChangesetWriter.java
+++ b/changesets-java/src/main/java/se/fortnox/changesets/ChangesetWriter.java
@@ -2,6 +2,7 @@
import org.slf4j.Logger;
+import java.io.File;
import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
@@ -31,10 +32,14 @@ public ChangesetWriter(Path baseDir) {
}
public void writeChangeset(Changeset changeset) throws FileAlreadyExistsException {
- writeChangeset(changeset.packageName(), changeset.level(), changeset.message());
+ writeChangeset(changeset.packageName(), changeset.level(), changeset.message(), changeset.file());
}
Path writeChangeset(String packageName, Level changeLevel, String message) throws FileAlreadyExistsException {
+ return writeChangeset(packageName, changeLevel, message, null);
+ }
+
+ Path writeChangeset(String packageName, Level changeLevel, String message, File file) throws FileAlreadyExistsException {
final String fileContent;
if(message == null) {
fileContent = """
@@ -62,6 +67,26 @@ Path writeChangeset(String packageName, Level changeLevel, String message) throw
}
}
+
+ Path changesetFile;
+ if (file != null) {
+ // TODO Add tests
+ changesetFile = file.toPath();
+ } else {
+ changesetFile = generateChangesetFilename(changesetsDir);
+ }
+
+ try {
+ LOG.info("Writing changeset to {}", changesetFile);
+ Files.writeString(changesetFile, fileContent, StandardOpenOption.CREATE_NEW);
+ } catch (IOException e) {
+ LOG.error("Failed to create new changeset", e);
+ }
+
+ return changesetFile;
+ }
+
+ private Path generateChangesetFilename(Path changesetsDir) throws FileAlreadyExistsException {
String newFileName = this.nameGenerator.humanId() + ".md";
Path changesetFile = changesetsDir.resolve(newFileName);
@@ -80,14 +105,6 @@ Path writeChangeset(String packageName, Level changeLevel, String message) throw
throw new FileAlreadyExistsException(string, null, "Failed to generate a unique name after %s attempts".formatted(attempt));
}
}
-
- try {
- LOG.info("Writing changeset to {}", changesetFile);
- Files.writeString(changesetFile, fileContent, StandardOpenOption.CREATE_NEW);
- } catch (IOException e) {
- LOG.error("Failed to create new changeset", e);
- }
-
return changesetFile;
}
}
diff --git a/changesets-maven-plugin/pom.xml b/changesets-maven-plugin/pom.xml
index a230e38..25b6c56 100644
--- a/changesets-maven-plugin/pom.xml
+++ b/changesets-maven-plugin/pom.xml
@@ -168,6 +168,8 @@
src/it/settings.xml
true
true
+
+ ${skipTests}
clean
test-compile
diff --git a/changesets-maven-plugin/src/it/add-changeset-from-property/invoker.properties b/changesets-maven-plugin/src/it/add-changeset-from-property/invoker.properties
index 7f4ee33..c35c77b 100644
--- a/changesets-maven-plugin/src/it/add-changeset-from-property/invoker.properties
+++ b/changesets-maven-plugin/src/it/add-changeset-from-property/invoker.properties
@@ -1 +1,8 @@
-invoker.goals=${project.groupId}:${project.artifactId}:${project.version}:add -DchangesetContent='thecontent'
\ No newline at end of file
+# changesetFilename is used to get predictable names for the changesets, so testing is easier
+
+invoker.goals.1=${project.groupId}:${project.artifactId}:${project.version}:add -DchangesetContent='Patch change' -DchangesetLevel=Patch -DchangesetFilename=patch.md
+invoker.goals.2=${project.groupId}:${project.artifactId}:${project.version}:add -DchangesetContent='Minor change' -DchangesetLevel=MINOR -DchangesetFilename=minor.md
+invoker.goals.3=${project.groupId}:${project.artifactId}:${project.version}:add -DchangesetContent='Major change' -DchangesetLevel=major -DchangesetFilename=major.md
+
+# TODO Enable this goal to test the dependency change, once that PR is merged
+# invoker.goals.4=${project.groupId}:${project.artifactId}:${project.version}:add -DchangesetContent='Dependency change' -DchangesetLevel=Dependency -DchangesetFilename=dependency.md
\ No newline at end of file
diff --git a/changesets-maven-plugin/src/it/add-changeset-from-property/verify.groovy b/changesets-maven-plugin/src/it/add-changeset-from-property/verify.groovy
index 815a61d..4cf4dc4 100644
--- a/changesets-maven-plugin/src/it/add-changeset-from-property/verify.groovy
+++ b/changesets-maven-plugin/src/it/add-changeset-from-property/verify.groovy
@@ -1,11 +1,32 @@
-// Verify that exactly one markdown file was added to the .changeset folder and has the expected content
-def firstChangeset = new File(basedir, ".changeset")
+def changesetFiles = new File(basedir, ".changeset")
.listFiles()
.findAll { it.name ==~ /.*\.md/ }
- .first()
+assert changesetFiles.size() == 3
-assert firstChangeset.text.equals("---\n" +
+
+assert new File(basedir, ".changeset/patch.md").text.equals("---\n" +
"\"add-blank-changelog\": patch\n" +
"---\n" +
"\n" +
- "thecontent");
\ No newline at end of file
+ "Patch change");
+
+assert new File(basedir, ".changeset/minor.md").text.equals("---\n" +
+ "\"add-blank-changelog\": minor\n" +
+ "---\n" +
+ "\n" +
+ "Minor change");
+
+assert new File(basedir, ".changeset/major.md").text.equals("---\n" +
+ "\"add-blank-changelog\": major\n" +
+ "---\n" +
+ "\n" +
+ "Major change");
+
+// See invoker.properties for the dependency change details
+/*
+assert new File(basedir, ".changeset/dependency.md").text.equals("---\n" +
+ "\"add-blank-changelog\": dependency\n" +
+ "---\n" +
+ "\n" +
+ "Dependency change");
+*/
\ No newline at end of file
diff --git a/changesets-maven-plugin/src/main/java/se/fortnox/changesets/maven/AddMojo.java b/changesets-maven-plugin/src/main/java/se/fortnox/changesets/maven/AddMojo.java
index c8179d4..7a8f247 100644
--- a/changesets-maven-plugin/src/main/java/se/fortnox/changesets/maven/AddMojo.java
+++ b/changesets-maven-plugin/src/main/java/se/fortnox/changesets/maven/AddMojo.java
@@ -8,25 +8,60 @@
import se.fortnox.changesets.ChangesetWriter;
import se.fortnox.changesets.Level;
+import java.io.File;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.List;
+
+import static se.fortnox.changesets.ChangesetWriter.CHANGESET_DIR;
@Mojo(name = "add", defaultPhase = LifecyclePhase.INITIALIZE, aggregator = true)
public class AddMojo extends AbstractMojo {
@Parameter(defaultValue = "${project}", readonly = true, required = true)
private org.apache.maven.project.MavenProject project;
+ /**
+ * Default content of the changeset.
+ */
@Parameter(property = "changesetContent")
String changesetContent;
+ /**
+ * Level of the changeset, e.g. patch, minor, major.
+ */
+ @Parameter(property = "changesetLevel", defaultValue = "patch")
+ String changesetLevel;
+
+ /**
+ * Create the changeset with a specific filename.
+ * By default, a filename will be automatically generated.
+ */
+ @Parameter(property = "changesetFilename")
+ String changesetFilename;
+
@Override
public void execute() {
Path baseDir = project.getBasedir().toPath();
ChangesetWriter changesetWriter = new ChangesetWriter(baseDir);
+ Level level;
+ try {
+ level = Level.valueOf(this.changesetLevel.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ List validLevels = Arrays.stream(Level.values()).map(Enum::name).toList();
+ getLog().error("Invalid changeset level: %s. Valid values are: %s".formatted(this.changesetLevel, validLevels));
+ return;
+ }
+
+ File changesetFile = null;
+ if (changesetFilename != null && !changesetFilename.isBlank()) {
+ changesetFile = baseDir.resolve(CHANGESET_DIR).resolve(changesetFilename).toFile();
+ }
+
try {
- var changeset = new Changeset("%s".formatted(project.getArtifactId()), Level.PATCH, changesetContent, null);
+ var changeset = new Changeset(project.getArtifactId(), level, changesetContent, changesetFile);
changesetWriter.writeChangeset(changeset);
} catch (FileAlreadyExistsException e) {
throw new RuntimeException(e);