3 changed files with 87 additions and 0 deletions
@ -0,0 +1,82 @@
@@ -0,0 +1,82 @@
|
||||
/* |
||||
* Copyright 2002-2024 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; |
||||
|
||||
import java.io.ByteArrayOutputStream; |
||||
import java.io.IOException; |
||||
|
||||
import org.gradle.api.DefaultTask; |
||||
import org.gradle.api.Plugin; |
||||
import org.gradle.api.Project; |
||||
import org.gradle.api.plugins.JavaBasePlugin; |
||||
import org.gradle.api.tasks.TaskAction; |
||||
import org.gradle.api.tasks.TaskProvider; |
||||
|
||||
/** |
||||
* @author Marcus da Coregio |
||||
*/ |
||||
public class CheckExpectedBranchVersionPlugin implements Plugin<Project> { |
||||
|
||||
@Override |
||||
public void apply(Project project) { |
||||
TaskProvider<CheckExpectedBranchVersionTask> checkExpectedBranchVersionTask = project.getTasks().register("checkExpectedBranchVersion", CheckExpectedBranchVersionTask.class, (task) -> { |
||||
task.setGroup("Build"); |
||||
task.setDescription("Check if the project version matches the branch version"); |
||||
}); |
||||
project.getTasks().named(JavaBasePlugin.CHECK_TASK_NAME, checkTask -> checkTask.dependsOn(checkExpectedBranchVersionTask)); |
||||
} |
||||
|
||||
public static class CheckExpectedBranchVersionTask extends DefaultTask { |
||||
|
||||
@TaskAction |
||||
public void run() throws IOException { |
||||
Project project = getProject(); |
||||
String version = (String) project.getVersion(); |
||||
String branchVersion = getBranchVersion(project); |
||||
if (!branchVersion.matches("^[0-9]+\\.[0-9]+\\.x$")) { |
||||
System.out.println("Branch version does not match *.x, ignoring"); |
||||
return; |
||||
} |
||||
if (!versionsMatch(version, branchVersion)) { |
||||
throw new IllegalStateException(String.format("Project version [%s] does not match branch version [%s]. " + |
||||
"Please verify that the branch contains the right version.", version, branchVersion)); |
||||
} |
||||
} |
||||
|
||||
private static String getBranchVersion(Project project) throws IOException { |
||||
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { |
||||
project.exec((exec) -> { |
||||
exec.commandLine("git", "symbolic-ref", "--short", "HEAD"); |
||||
exec.setErrorOutput(System.err); |
||||
exec.setStandardOutput(baos); |
||||
}); |
||||
return baos.toString(); |
||||
} |
||||
} |
||||
|
||||
private boolean versionsMatch(String projectVersion, String branchVersion) { |
||||
String[] projectVersionParts = projectVersion.split("\\."); |
||||
String[] branchVersionParts = branchVersion.split("\\."); |
||||
if (projectVersionParts.length < 2 || branchVersionParts.length < 2) { |
||||
return false; |
||||
} |
||||
return projectVersionParts[0].equals(branchVersionParts[0]) && projectVersionParts[1].equals(branchVersionParts[1]); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue