parent
8cc18fa9dc
commit
f8675343e6
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* 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 java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
class CommandLineUtils {
|
||||||
|
static void runCommand(File dir, String... args) {
|
||||||
|
try {
|
||||||
|
Process process = new ProcessBuilder()
|
||||||
|
.directory(dir)
|
||||||
|
.command(args)
|
||||||
|
.start();
|
||||||
|
writeLinesTo(process.getInputStream(), System.out);
|
||||||
|
writeLinesTo(process.getErrorStream(), System.out);
|
||||||
|
if (process.waitFor() != 0) {
|
||||||
|
new RuntimeException("Failed to run " + Arrays.toString(args));
|
||||||
|
}
|
||||||
|
} catch (IOException | InterruptedException e) {
|
||||||
|
throw new RuntimeException("Failed to run " + Arrays.toString(args), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeLinesTo(InputStream input, PrintStream out) {
|
||||||
|
Scanner scanner = new Scanner(input);
|
||||||
|
while(scanner.hasNextLine()) {
|
||||||
|
out.println(scanner.nextLine());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* 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 java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
class FileUtils {
|
||||||
|
static void replaceFileText(File file, Function<String, String> replaceText) {
|
||||||
|
String buildFileText = readString(file);
|
||||||
|
String updatedBuildFileText = replaceText.apply(buildFileText);
|
||||||
|
writeString(file, updatedBuildFileText);
|
||||||
|
}
|
||||||
|
|
||||||
|
static String readString(File file) {
|
||||||
|
try {
|
||||||
|
byte[] bytes = Files.readAllBytes(file.toPath());
|
||||||
|
return new String(bytes);
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeString(File file, String text) {
|
||||||
|
try {
|
||||||
|
Files.write(file.toPath(), text.getBytes());
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -33,13 +33,8 @@ import org.gradle.api.artifacts.component.ModuleComponentIdentifier;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -168,7 +163,7 @@ public class UpdateDependenciesPlugin implements Plugin<Project> {
|
||||||
Integer issueNumber = gitHubApi.createIssue(createIssueResult.getRepositoryId(), title, createIssueResult.getLabelIds(), createIssueResult.getMilestoneId(), createIssueResult.getAssigneeId()).delayElement(Duration.ofSeconds(1)).block();
|
Integer issueNumber = gitHubApi.createIssue(createIssueResult.getRepositoryId(), title, createIssueResult.getLabelIds(), createIssueResult.getMilestoneId(), createIssueResult.getAssigneeId()).delayElement(Duration.ofSeconds(1)).block();
|
||||||
commitMessage += "\n\nCloses gh-" + issueNumber;
|
commitMessage += "\n\nCloses gh-" + issueNumber;
|
||||||
}
|
}
|
||||||
runCommand(rootDir, "git", "commit", "-am", commitMessage);
|
CommandLineUtils.runCommand(rootDir, "git", "commit", "-am", commitMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Mono<GitHubApi.FindCreateIssueResult> createIssueResultMono(UpdateDependenciesExtension updateDependenciesExtension) {
|
private Mono<GitHubApi.FindCreateIssueResult> createIssueResultMono(UpdateDependenciesExtension updateDependenciesExtension) {
|
||||||
|
@ -187,7 +182,7 @@ public class UpdateDependenciesPlugin implements Plugin<Project> {
|
||||||
if (current.compareTo(running) > 0) {
|
if (current.compareTo(running) > 0) {
|
||||||
String title = "Update Gradle to " + current.getVersion();
|
String title = "Update Gradle to " + current.getVersion();
|
||||||
System.out.println(title);
|
System.out.println(title);
|
||||||
runCommand(project.getRootDir(), "./gradlew", "wrapper", "--gradle-version", current.getVersion(), "--no-daemon");
|
CommandLineUtils.runCommand(project.getRootDir(), "./gradlew", "wrapper", "--gradle-version", current.getVersion(), "--no-daemon");
|
||||||
afterGroup(updateDependenciesSettings, project.getRootDir(), title, createIssueResultMono(updateDependenciesSettings));
|
afterGroup(updateDependenciesSettings, project.getRootDir(), title, createIssueResultMono(updateDependenciesSettings));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -204,30 +199,6 @@ public class UpdateDependenciesPlugin implements Plugin<Project> {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static void runCommand(File dir, String... args) {
|
|
||||||
try {
|
|
||||||
Process process = new ProcessBuilder()
|
|
||||||
.directory(dir)
|
|
||||||
.command(args)
|
|
||||||
.start();
|
|
||||||
writeLinesTo(process.getInputStream(), System.out);
|
|
||||||
writeLinesTo(process.getErrorStream(), System.out);
|
|
||||||
if (process.waitFor() != 0) {
|
|
||||||
new RuntimeException("Failed to run " + Arrays.toString(args));
|
|
||||||
}
|
|
||||||
} catch (IOException | InterruptedException e) {
|
|
||||||
throw new RuntimeException("Failed to run " + Arrays.toString(args), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void writeLinesTo(InputStream input, PrintStream out) {
|
|
||||||
Scanner scanner = new Scanner(input);
|
|
||||||
while(scanner.hasNextLine()) {
|
|
||||||
out.println(scanner.nextLine());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static Action<ComponentSelectionWithCurrent> excludeWithRegex(String regex, String reason) {
|
static Action<ComponentSelectionWithCurrent> excludeWithRegex(String regex, String reason) {
|
||||||
Pattern pattern = Pattern.compile(regex);
|
Pattern pattern = Pattern.compile(regex);
|
||||||
return (selection) -> {
|
return (selection) -> {
|
||||||
|
@ -242,40 +213,17 @@ public class UpdateDependenciesPlugin implements Plugin<Project> {
|
||||||
String ga = dependency.getGroup() + ":" + dependency.getName() + ":";
|
String ga = dependency.getGroup() + ":" + dependency.getName() + ":";
|
||||||
String originalDependency = ga + dependency.getVersion();
|
String originalDependency = ga + dependency.getVersion();
|
||||||
String replacementDependency = ga + updatedVersion(dependency);
|
String replacementDependency = ga + updatedVersion(dependency);
|
||||||
replaceFileText(buildFile, buildFileText -> buildFileText.replace(originalDependency, replacementDependency));
|
FileUtils.replaceFileText(buildFile, buildFileText -> buildFileText.replace(originalDependency, replacementDependency));
|
||||||
}
|
|
||||||
|
|
||||||
static void replaceFileText(File file, Function<String, String> replaceText) {
|
|
||||||
String buildFileText = readString(file);
|
|
||||||
String updatedBuildFileText = replaceText.apply(buildFileText);
|
|
||||||
writeString(file, updatedBuildFileText);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String readString(File file) {
|
|
||||||
try {
|
|
||||||
byte[] bytes = Files.readAllBytes(file.toPath());
|
|
||||||
return new String(bytes);
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void writeString(File file, String text) {
|
|
||||||
try {
|
|
||||||
Files.write(file.toPath(), text.getBytes());
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void updateDependencyWithVersionVariable(File scanFile, File gradlePropertiesFile, DependencyOutdated dependency) {
|
static void updateDependencyWithVersionVariable(File scanFile, File gradlePropertiesFile, DependencyOutdated dependency) {
|
||||||
if (!gradlePropertiesFile.exists()) {
|
if (!gradlePropertiesFile.exists()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
replaceFileText(gradlePropertiesFile, (gradlePropertiesText) -> {
|
FileUtils.replaceFileText(gradlePropertiesFile, (gradlePropertiesText) -> {
|
||||||
String ga = dependency.getGroup() + ":" + dependency.getName() + ":";
|
String ga = dependency.getGroup() + ":" + dependency.getName() + ":";
|
||||||
Pattern pattern = Pattern.compile("\"" + ga + "\\$\\{?([^'\"]+?)\\}?\"");
|
Pattern pattern = Pattern.compile("\"" + ga + "\\$\\{?([^'\"]+?)\\}?\"");
|
||||||
String buildFileText = readString(scanFile);
|
String buildFileText = FileUtils.readString(scanFile);
|
||||||
Matcher matcher = pattern.matcher(buildFileText);
|
Matcher matcher = pattern.matcher(buildFileText);
|
||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
String versionVariable = matcher.group(1);
|
String versionVariable = matcher.group(1);
|
||||||
|
|
Loading…
Reference in New Issue