4 changed files with 124 additions and 0 deletions
@ -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 @@ |
|||||||
|
/* |
||||||
|
* 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