parent
3387149a0f
commit
7756247c3a
|
@ -98,13 +98,15 @@ jobs:
|
||||||
- name: Check samples project
|
- name: Check samples project
|
||||||
env:
|
env:
|
||||||
LOCAL_REPOSITORY_PATH: ${{ github.workspace }}/build/publications/repos
|
LOCAL_REPOSITORY_PATH: ${{ github.workspace }}/build/publications/repos
|
||||||
SAMPLES_INIT_SCRIPT: ${{ github.workspace }}/build/includeRepo/spring-security-ci.gradle
|
SAMPLES_DIR: ../spring-security-samples
|
||||||
|
VERSION: ${{ needs.prerequisites.outputs.project_version }}
|
||||||
run: |
|
run: |
|
||||||
export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
|
export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
|
||||||
export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
|
export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
|
||||||
export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
|
export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
|
||||||
./gradlew publishMavenJavaPublicationToLocalRepository
|
./gradlew publishMavenJavaPublicationToLocalRepository
|
||||||
./gradlew checkSamples -PsamplesInitScript="$SAMPLES_INIT_SCRIPT" -PlocalRepositoryPath="$LOCAL_REPOSITORY_PATH" --stacktrace
|
./gradlew cloneSamples -PcloneOutputDirectory="$SAMPLES_DIR"
|
||||||
|
./gradlew --project-dir "$SAMPLES_DIR" --init-script spring-security-ci.gradle -PlocalRepositoryPath="$LOCAL_REPOSITORY_PATH" -PspringSecurityVersion="$VERSION" :runAllTests
|
||||||
check_tangles:
|
check_tangles:
|
||||||
name: Check for Package Tangles
|
name: Check for Package Tangles
|
||||||
needs: [ prerequisites ]
|
needs: [ prerequisites ]
|
||||||
|
|
17
build.gradle
17
build.gradle
|
@ -1,3 +1,5 @@
|
||||||
|
import io.spring.gradle.IncludeRepoTask
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath "io.spring.javaformat:spring-javaformat-gradle-plugin:$springJavaformatVersion"
|
classpath "io.spring.javaformat:spring-javaformat-gradle-plugin:$springJavaformatVersion"
|
||||||
|
@ -16,7 +18,6 @@ apply plugin: 'io.spring.nohttp'
|
||||||
apply plugin: 'locks'
|
apply plugin: 'locks'
|
||||||
apply plugin: 's101'
|
apply plugin: 's101'
|
||||||
apply plugin: 'io.spring.convention.root'
|
apply plugin: 'io.spring.convention.root'
|
||||||
apply plugin: 'io.spring.convention.include-check-remote'
|
|
||||||
apply plugin: 'org.jetbrains.kotlin.jvm'
|
apply plugin: 'org.jetbrains.kotlin.jvm'
|
||||||
apply plugin: 'org.springframework.security.update-dependencies'
|
apply plugin: 'org.springframework.security.update-dependencies'
|
||||||
apply plugin: 'org.springframework.security.update-version'
|
apply plugin: 'org.springframework.security.update-version'
|
||||||
|
@ -201,17 +202,13 @@ nohttp {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register('checkSamples') {
|
tasks.register('cloneSamples', IncludeRepoTask) {
|
||||||
includeCheckRemote {
|
if (!project.hasProperty("cloneOutputDirectory")) {
|
||||||
|
throw new GradleException("Required parameter 'cloneOutputDirectory' not found")
|
||||||
|
}
|
||||||
repository = 'spring-projects/spring-security-samples'
|
repository = 'spring-projects/spring-security-samples'
|
||||||
ref = samplesBranch
|
ref = samplesBranch
|
||||||
buildScan = true
|
outputDirectory = project.file("$cloneOutputDirectory")
|
||||||
if (project.hasProperty("samplesInitScript")) {
|
|
||||||
initScripts = [samplesInitScript]
|
|
||||||
projectProperties = ["localRepositoryPath": localRepositoryPath, "springSecurityVersion": project.version]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dependsOn checkRemote
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s101 {
|
s101 {
|
||||||
|
|
|
@ -54,7 +54,7 @@ abstract class IncludeRepoTask extends DefaultTask {
|
||||||
* Directory where the project template should be copied.
|
* Directory where the project template should be copied.
|
||||||
*/
|
*/
|
||||||
@OutputDirectory
|
@OutputDirectory
|
||||||
final File outputDirectory = project.file("$project.buildDir/$name")
|
File outputDirectory = project.file("$project.buildDir/$name")
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
void checkoutAndCopy() {
|
void checkoutAndCopy() {
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2002-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 io.spring.gradle.convention
|
|
||||||
|
|
||||||
import io.spring.gradle.IncludeRepoTask
|
|
||||||
import org.gradle.api.Plugin
|
|
||||||
import org.gradle.api.Project
|
|
||||||
import org.gradle.api.tasks.GradleBuild
|
|
||||||
import org.gradle.api.tasks.TaskProvider
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a set of tasks that make easy to clone a remote repository and perform some task
|
|
||||||
*
|
|
||||||
* @author Marcus Da Coregio
|
|
||||||
*/
|
|
||||||
class IncludeCheckRemotePlugin implements Plugin<Project> {
|
|
||||||
@Override
|
|
||||||
void apply(Project project) {
|
|
||||||
IncludeCheckRemoteExtension extension = project.extensions.create('includeCheckRemote', IncludeCheckRemoteExtension)
|
|
||||||
TaskProvider<IncludeRepoTask> includeRepoTask = project.tasks.register('includeRepo', IncludeRepoTask) { IncludeRepoTask it ->
|
|
||||||
it.repository = extension.repository
|
|
||||||
it.ref = extension.ref
|
|
||||||
}
|
|
||||||
project.tasks.register('checkRemote', GradleBuild) {
|
|
||||||
it.dependsOn 'includeRepo'
|
|
||||||
it.dir = includeRepoTask.get().outputDirectory
|
|
||||||
it.tasks = extension.getTasks()
|
|
||||||
it.startParameter.buildScan = extension.getBuildScan()
|
|
||||||
extension.getInitScripts().forEach {script ->
|
|
||||||
it.startParameter.addInitScript(new File(script))
|
|
||||||
}
|
|
||||||
extension.getProjectProperties().entrySet().forEach { entry ->
|
|
||||||
it.startParameter.projectProperties.put(entry.getKey(), entry.getValue())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract static class IncludeCheckRemoteExtension {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Git repository to clone
|
|
||||||
*/
|
|
||||||
String repository;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Git ref to checkout
|
|
||||||
*/
|
|
||||||
String ref
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Task to run in the repository
|
|
||||||
*/
|
|
||||||
List<String> tasks = ['check']
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Init scripts for the build
|
|
||||||
*/
|
|
||||||
List<String> initScripts = []
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Map of properties for the build
|
|
||||||
*/
|
|
||||||
Map<String, String> projectProperties = [:]
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the Build Scan should be published
|
|
||||||
*/
|
|
||||||
boolean buildScan = false
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
implementation-class=io.spring.gradle.convention.IncludeCheckRemotePlugin
|
|
|
@ -1,179 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2002-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 io.spring.gradle.convention;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import io.spring.gradle.IncludeRepoTask;
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.gradle.api.Project;
|
|
||||||
import org.gradle.api.tasks.GradleBuild;
|
|
||||||
import org.gradle.testfixtures.ProjectBuilder;
|
|
||||||
import org.junit.jupiter.api.AfterEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
class IncludeCheckRemotePluginTest {
|
|
||||||
|
|
||||||
Project rootProject;
|
|
||||||
|
|
||||||
@AfterEach
|
|
||||||
public void cleanup() throws Exception {
|
|
||||||
if (rootProject != null) {
|
|
||||||
FileUtils.deleteDirectory(rootProject.getProjectDir());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void applyWhenExtensionPropertiesNoTasksThenCreateCheckRemoteTaskWithDefaultTask() {
|
|
||||||
this.rootProject = ProjectBuilder.builder().build();
|
|
||||||
this.rootProject.getPluginManager().apply(IncludeCheckRemotePlugin.class);
|
|
||||||
this.rootProject.getExtensions().configure(IncludeCheckRemotePlugin.IncludeCheckRemoteExtension.class,
|
|
||||||
(includeCheckRemoteExtension) -> {
|
|
||||||
includeCheckRemoteExtension.setProperty("repository", "my-project/my-repository");
|
|
||||||
includeCheckRemoteExtension.setProperty("ref", "main");
|
|
||||||
});
|
|
||||||
|
|
||||||
GradleBuild checkRemote = (GradleBuild) this.rootProject.getTasks().named("checkRemote").get();
|
|
||||||
assertThat(checkRemote.getTasks()).containsExactly("check");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void applyWhenExtensionPropertiesTasksThenCreateCheckRemoteWithProvidedTasks() {
|
|
||||||
this.rootProject = ProjectBuilder.builder().build();
|
|
||||||
this.rootProject.getPluginManager().apply(IncludeCheckRemotePlugin.class);
|
|
||||||
this.rootProject.getExtensions().configure(IncludeCheckRemotePlugin.IncludeCheckRemoteExtension.class,
|
|
||||||
(includeCheckRemoteExtension) -> {
|
|
||||||
includeCheckRemoteExtension.setProperty("repository", "my-project/my-repository");
|
|
||||||
includeCheckRemoteExtension.setProperty("ref", "main");
|
|
||||||
includeCheckRemoteExtension.setProperty("tasks", Arrays.asList("clean", "build", "test"));
|
|
||||||
});
|
|
||||||
|
|
||||||
GradleBuild checkRemote = (GradleBuild) this.rootProject.getTasks().named("checkRemote").get();
|
|
||||||
assertThat(checkRemote.getTasks()).containsExactly("clean", "build", "test");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void applyWhenExtensionPropertiesInitScriptsThenCreateCheckRemoteWithProvidedTasks() {
|
|
||||||
this.rootProject = ProjectBuilder.builder().build();
|
|
||||||
this.rootProject.getPluginManager().apply(IncludeCheckRemotePlugin.class);
|
|
||||||
this.rootProject.getExtensions().configure(IncludeCheckRemotePlugin.IncludeCheckRemoteExtension.class,
|
|
||||||
(includeCheckRemoteExtension) -> {
|
|
||||||
includeCheckRemoteExtension.setProperty("repository", "my-project/my-repository");
|
|
||||||
includeCheckRemoteExtension.setProperty("ref", "main");
|
|
||||||
includeCheckRemoteExtension.setProperty("initScripts", Arrays.asList("spring-security-ci.gradle"));
|
|
||||||
});
|
|
||||||
|
|
||||||
GradleBuild checkRemote = (GradleBuild) this.rootProject.getTasks().named("checkRemote").get();
|
|
||||||
assertThat(checkRemote.getStartParameter().getAllInitScripts()).extracting(File::getName).containsExactly("spring-security-ci.gradle");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void applyWhenExtensionPropertiesBuildPropertiesThenCreateCheckRemoteWithProvidedTasks() {
|
|
||||||
Map<String, String> projectProperties = new HashMap<>();
|
|
||||||
projectProperties.put("localRepositoryPath", "~/local/repository");
|
|
||||||
projectProperties.put("anotherProperty", "some_value");
|
|
||||||
this.rootProject = ProjectBuilder.builder().build();
|
|
||||||
this.rootProject.getPluginManager().apply(IncludeCheckRemotePlugin.class);
|
|
||||||
this.rootProject.getExtensions().configure(IncludeCheckRemotePlugin.IncludeCheckRemoteExtension.class,
|
|
||||||
(includeCheckRemoteExtension) -> {
|
|
||||||
includeCheckRemoteExtension.setProperty("repository", "my-project/my-repository");
|
|
||||||
includeCheckRemoteExtension.setProperty("ref", "main");
|
|
||||||
includeCheckRemoteExtension.setProperty("projectProperties", projectProperties);
|
|
||||||
});
|
|
||||||
|
|
||||||
GradleBuild checkRemote = (GradleBuild) this.rootProject.getTasks().named("checkRemote").get();
|
|
||||||
assertThat(checkRemote.getStartParameter().getProjectProperties()).containsEntry("localRepositoryPath", "~/local/repository")
|
|
||||||
.containsEntry("anotherProperty", "some_value");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void applyWhenExtensionPropertiesThenRegisterIncludeRepoTaskWithExtensionProperties() {
|
|
||||||
this.rootProject = ProjectBuilder.builder().build();
|
|
||||||
this.rootProject.getPluginManager().apply(IncludeCheckRemotePlugin.class);
|
|
||||||
this.rootProject.getExtensions().configure(IncludeCheckRemotePlugin.IncludeCheckRemoteExtension.class,
|
|
||||||
(includeCheckRemoteExtension) -> {
|
|
||||||
includeCheckRemoteExtension.setProperty("repository", "my-project/my-repository");
|
|
||||||
includeCheckRemoteExtension.setProperty("ref", "main");
|
|
||||||
});
|
|
||||||
|
|
||||||
IncludeRepoTask includeRepo = (IncludeRepoTask) this.rootProject.getTasks().named("includeRepo").get();
|
|
||||||
assertThat(includeRepo).isNotNull();
|
|
||||||
assertThat(includeRepo.getRepository().get()).isEqualTo("my-project/my-repository");
|
|
||||||
assertThat(includeRepo.getRef().get()).isEqualTo("main");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void applyWhenRegisterTasksThenCheckRemoteDirSameAsIncludeRepoOutputDir() {
|
|
||||||
this.rootProject = ProjectBuilder.builder().build();
|
|
||||||
this.rootProject.getPluginManager().apply(IncludeCheckRemotePlugin.class);
|
|
||||||
this.rootProject.getExtensions().configure(IncludeCheckRemotePlugin.IncludeCheckRemoteExtension.class,
|
|
||||||
(includeCheckRemoteExtension) -> {
|
|
||||||
includeCheckRemoteExtension.setProperty("repository", "my-project/my-repository");
|
|
||||||
includeCheckRemoteExtension.setProperty("ref", "main");
|
|
||||||
});
|
|
||||||
IncludeRepoTask includeRepo = (IncludeRepoTask) this.rootProject.getTasks().named("includeRepo").get();
|
|
||||||
GradleBuild checkRemote = (GradleBuild) this.rootProject.getTasks().named("checkRemote").get();
|
|
||||||
assertThat(checkRemote.getDir()).isEqualTo(includeRepo.getOutputDirectory());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void applyWhenNoExtensionPropertiesThenRegisterTasks() {
|
|
||||||
this.rootProject = ProjectBuilder.builder().build();
|
|
||||||
this.rootProject.getPluginManager().apply(IncludeCheckRemotePlugin.class);
|
|
||||||
IncludeRepoTask includeRepo = (IncludeRepoTask) this.rootProject.getTasks().named("includeRepo").get();
|
|
||||||
GradleBuild checkRemote = (GradleBuild) this.rootProject.getTasks().named("checkRemote").get();
|
|
||||||
assertThat(includeRepo).isNotNull();
|
|
||||||
assertThat(checkRemote).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void applyWhenNoBuildScanSpecifiedThenRegisterCheckRemoteTaskWithBuildScanFalse() {
|
|
||||||
this.rootProject = ProjectBuilder.builder().build();
|
|
||||||
this.rootProject.getPluginManager().apply(IncludeCheckRemotePlugin.class);
|
|
||||||
this.rootProject.getExtensions().configure(IncludeCheckRemotePlugin.IncludeCheckRemoteExtension.class,
|
|
||||||
(includeCheckRemoteExtension) -> {
|
|
||||||
includeCheckRemoteExtension.setProperty("repository", "my-project/my-repository");
|
|
||||||
includeCheckRemoteExtension.setProperty("ref", "main");
|
|
||||||
});
|
|
||||||
|
|
||||||
GradleBuild checkRemote = (GradleBuild) this.rootProject.getTasks().named("checkRemote").get();
|
|
||||||
assertThat(checkRemote).isNotNull();
|
|
||||||
assertThat(checkRemote.getStartParameter().isBuildScan()).isFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void applyWhenBuildScanTrueThenRegisterCheckRemoteTaskWithBuildScanTrue() {
|
|
||||||
this.rootProject = ProjectBuilder.builder().build();
|
|
||||||
this.rootProject.getPluginManager().apply(IncludeCheckRemotePlugin.class);
|
|
||||||
this.rootProject.getExtensions().configure(IncludeCheckRemotePlugin.IncludeCheckRemoteExtension.class,
|
|
||||||
(includeCheckRemoteExtension) -> {
|
|
||||||
includeCheckRemoteExtension.setProperty("repository", "my-project/my-repository");
|
|
||||||
includeCheckRemoteExtension.setProperty("ref", "main");
|
|
||||||
includeCheckRemoteExtension.setProperty("buildScan", true);
|
|
||||||
});
|
|
||||||
|
|
||||||
GradleBuild checkRemote = (GradleBuild) this.rootProject.getTasks().named("checkRemote").get();
|
|
||||||
assertThat(checkRemote).isNotNull();
|
|
||||||
assertThat(checkRemote.getStartParameter().isBuildScan()).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue