commit
						53ed6c3138
					
				| 
						 | 
				
			
			@ -98,13 +98,15 @@ jobs:
 | 
			
		|||
      - name: Check samples project
 | 
			
		||||
        env:
 | 
			
		||||
          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: |
 | 
			
		||||
          export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
 | 
			
		||||
          export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
 | 
			
		||||
          export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
 | 
			
		||||
          ./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:
 | 
			
		||||
    name: Check for Package Tangles
 | 
			
		||||
    needs: [ prerequisites ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										19
									
								
								build.gradle
								
								
								
								
							
							
						
						
									
										19
									
								
								build.gradle
								
								
								
								
							| 
						 | 
				
			
			@ -1,3 +1,5 @@
 | 
			
		|||
import io.spring.gradle.IncludeRepoTask
 | 
			
		||||
 | 
			
		||||
buildscript {
 | 
			
		||||
	dependencies {
 | 
			
		||||
		classpath "io.spring.javaformat:spring-javaformat-gradle-plugin:$springJavaformatVersion"
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +17,6 @@ apply plugin: 'io.spring.nohttp'
 | 
			
		|||
apply plugin: 'locks'
 | 
			
		||||
apply plugin: 's101'
 | 
			
		||||
apply plugin: 'io.spring.convention.root'
 | 
			
		||||
apply plugin: 'io.spring.convention.include-check-remote'
 | 
			
		||||
apply plugin: 'org.jetbrains.kotlin.jvm'
 | 
			
		||||
apply plugin: 'org.springframework.security.update-dependencies'
 | 
			
		||||
apply plugin: 'org.springframework.security.update-version'
 | 
			
		||||
| 
						 | 
				
			
			@ -184,17 +185,13 @@ nohttp {
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tasks.register('checkSamples') {
 | 
			
		||||
	includeCheckRemote {
 | 
			
		||||
		repository = 'spring-projects/spring-security-samples'
 | 
			
		||||
		ref = samplesBranch
 | 
			
		||||
		buildScan = true
 | 
			
		||||
		if (project.hasProperty("samplesInitScript")) {
 | 
			
		||||
			initScripts = [samplesInitScript]
 | 
			
		||||
			projectProperties = ["localRepositoryPath": localRepositoryPath, "springSecurityVersion": project.version]
 | 
			
		||||
		}
 | 
			
		||||
tasks.register('cloneSamples', IncludeRepoTask) {
 | 
			
		||||
	if (!project.hasProperty("cloneOutputDirectory")) {
 | 
			
		||||
		throw new GradleException("Required parameter 'cloneOutputDirectory' not found")
 | 
			
		||||
	}
 | 
			
		||||
	dependsOn checkRemote
 | 
			
		||||
	repository = 'spring-projects/spring-security-samples'
 | 
			
		||||
	ref = samplesBranch
 | 
			
		||||
	outputDirectory = project.file("$cloneOutputDirectory")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s101 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ abstract class IncludeRepoTask extends DefaultTask {
 | 
			
		|||
	 * Directory where the project template should be copied.
 | 
			
		||||
	 */
 | 
			
		||||
	@OutputDirectory
 | 
			
		||||
	final File outputDirectory = project.file("$project.buildDir/$name")
 | 
			
		||||
	File outputDirectory = project.file("$project.buildDir/$name")
 | 
			
		||||
 | 
			
		||||
	@TaskAction
 | 
			
		||||
	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