4 changed files with 124 additions and 0 deletions
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
/* |
||||
* Copyright 2019-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.security.convention.versions; |
||||
|
||||
import org.gradle.api.Action; |
||||
import org.gradle.api.Plugin; |
||||
import org.gradle.api.Project; |
||||
|
||||
public class UpdateProjectVersionPlugin implements Plugin<Project> { |
||||
@Override |
||||
public void apply(Project project) { |
||||
project.getTasks().register("updateProjectVersion", UpdateProjectVersionTask.class, new Action<UpdateProjectVersionTask>() { |
||||
@Override |
||||
public void execute(UpdateProjectVersionTask updateProjectVersionTask) { |
||||
updateProjectVersionTask.setGroup("Release"); |
||||
updateProjectVersionTask.setDescription( |
||||
"Updates the project version to the next release in gradle.properties and optionally commits the changes"); |
||||
updateProjectVersionTask.dependsOn("gitHubNextReleaseMilestone"); |
||||
updateProjectVersionTask.getNextVersionFile().fileProvider(project.provider(() -> project.file("next-release.yml"))); |
||||
updateProjectVersionTask.setCommit("true".equals(project.findProperty("commit"))); |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
@ -0,0 +1,81 @@
@@ -0,0 +1,81 @@
|
||||
/* |
||||
* Copyright 2019-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.security.convention.versions; |
||||
|
||||
import org.gradle.api.DefaultTask; |
||||
import org.gradle.api.Project; |
||||
import org.gradle.api.file.RegularFileProperty; |
||||
import org.gradle.api.tasks.Input; |
||||
import org.gradle.api.tasks.InputFile; |
||||
import org.gradle.api.tasks.Optional; |
||||
import org.gradle.api.tasks.TaskAction; |
||||
import org.yaml.snakeyaml.Yaml; |
||||
import org.yaml.snakeyaml.constructor.Constructor; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileInputStream; |
||||
import java.io.FileNotFoundException; |
||||
|
||||
import org.springframework.gradle.github.milestones.NextVersionYml; |
||||
|
||||
public abstract class UpdateProjectVersionTask extends DefaultTask { |
||||
|
||||
@InputFile |
||||
public abstract RegularFileProperty getNextVersionFile(); |
||||
|
||||
@Input |
||||
@Optional |
||||
private Boolean commit; |
||||
|
||||
@TaskAction |
||||
public void checkReleaseDueToday() throws FileNotFoundException { |
||||
File nextVersionFile = getNextVersionFile().getAsFile().get(); |
||||
Yaml yaml = new Yaml(new Constructor(NextVersionYml.class)); |
||||
NextVersionYml nextVersionYml = yaml.load(new FileInputStream(nextVersionFile)); |
||||
String nextVersion = nextVersionYml.getVersion(); |
||||
if (nextVersion == null) { |
||||
throw new IllegalArgumentException( |
||||
"Could not find version property in provided file " + nextVersionFile.getName()); |
||||
} |
||||
String currentVersion = getProject().getVersion().toString(); |
||||
File gradlePropertiesFile = getProject().getRootProject().file(Project.GRADLE_PROPERTIES); |
||||
if (!gradlePropertiesFile.exists()) { |
||||
return; |
||||
} |
||||
System.out.println("Updating the project version in " + Project.GRADLE_PROPERTIES + " from " + currentVersion |
||||
+ " to " + nextVersion); |
||||
FileUtils.replaceFileText(gradlePropertiesFile, (gradlePropertiesText) -> { |
||||
gradlePropertiesText = gradlePropertiesText.replace("version=" + currentVersion, "version=" + nextVersion); |
||||
return gradlePropertiesText; |
||||
}); |
||||
if (this.commit) { |
||||
System.out.println("Committing the version update"); |
||||
File rootDir = getProject().getRootDir(); |
||||
String commitMessage = "Release " + nextVersion; |
||||
CommandLineUtils.runCommand(rootDir, "git", "commit", "-am", commitMessage); |
||||
} |
||||
} |
||||
|
||||
public Boolean getCommit() { |
||||
return commit; |
||||
} |
||||
|
||||
public void setCommit(Boolean commit) { |
||||
this.commit = commit; |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue