parent
							
								
									1606f5b88c
								
							
						
					
					
						commit
						9d57cbc1d5
					
				| 
						 | 
				
			
			@ -1,121 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2023 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.boot.build.cli;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.security.MessageDigest;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.codec.digest.DigestUtils;
 | 
			
		||||
import org.gradle.api.DefaultTask;
 | 
			
		||||
import org.gradle.api.Project;
 | 
			
		||||
import org.gradle.api.file.RegularFile;
 | 
			
		||||
import org.gradle.api.provider.Provider;
 | 
			
		||||
import org.gradle.api.tasks.InputFile;
 | 
			
		||||
import org.gradle.api.tasks.OutputDirectory;
 | 
			
		||||
import org.gradle.api.tasks.PathSensitive;
 | 
			
		||||
import org.gradle.api.tasks.PathSensitivity;
 | 
			
		||||
import org.gradle.api.tasks.TaskExecutionException;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.build.artifactory.ArtifactoryRepository;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Base class for generating a package manager definition file such as a Scoop manifest or
 | 
			
		||||
 * a Homebrew formula.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Andy Wilkinson
 | 
			
		||||
 * @author Phillip Webb
 | 
			
		||||
 */
 | 
			
		||||
public abstract class AbstractPackageManagerDefinitionTask extends DefaultTask {
 | 
			
		||||
 | 
			
		||||
	private static final String SPRING_REPO = "https://repo.spring.io/%s";
 | 
			
		||||
 | 
			
		||||
	private static final String MAVEN_REPO = "https://repo1.maven.org/maven2";
 | 
			
		||||
 | 
			
		||||
	private Provider<RegularFile> archive;
 | 
			
		||||
 | 
			
		||||
	private File template;
 | 
			
		||||
 | 
			
		||||
	private File outputDir;
 | 
			
		||||
 | 
			
		||||
	public AbstractPackageManagerDefinitionTask() {
 | 
			
		||||
		getInputs().property("version", getProject().provider(getProject()::getVersion));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@InputFile
 | 
			
		||||
	@PathSensitive(PathSensitivity.RELATIVE)
 | 
			
		||||
	public RegularFile getArchive() {
 | 
			
		||||
		return this.archive.get();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setArchive(Provider<RegularFile> archive) {
 | 
			
		||||
		this.archive = archive;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@InputFile
 | 
			
		||||
	@PathSensitive(PathSensitivity.RELATIVE)
 | 
			
		||||
	public File getTemplate() {
 | 
			
		||||
		return this.template;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setTemplate(File template) {
 | 
			
		||||
		this.template = template;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@OutputDirectory
 | 
			
		||||
	public File getOutputDir() {
 | 
			
		||||
		return this.outputDir;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setOutputDir(File outputDir) {
 | 
			
		||||
		this.outputDir = outputDir;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	protected void createDescriptor(Map<String, Object> additionalProperties) {
 | 
			
		||||
		getProject().copy((copy) -> {
 | 
			
		||||
			copy.from(this.template);
 | 
			
		||||
			copy.into(this.outputDir);
 | 
			
		||||
			copy.expand(getProperties(additionalProperties));
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private Map<String, Object> getProperties(Map<String, Object> additionalProperties) {
 | 
			
		||||
		Map<String, Object> properties = new HashMap<>(additionalProperties);
 | 
			
		||||
		Project project = getProject();
 | 
			
		||||
		properties.put("hash", sha256(this.archive.get().getAsFile()));
 | 
			
		||||
		properties.put("repo", getRepo(project));
 | 
			
		||||
		properties.put("project", project);
 | 
			
		||||
		return properties;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private String sha256(File file) {
 | 
			
		||||
		try {
 | 
			
		||||
			MessageDigest digest = MessageDigest.getInstance("SHA-256");
 | 
			
		||||
			return new DigestUtils(digest).digestAsHex(file);
 | 
			
		||||
		}
 | 
			
		||||
		catch (Exception ex) {
 | 
			
		||||
			throw new TaskExecutionException(this, ex);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private String getRepo(Project project) {
 | 
			
		||||
		ArtifactoryRepository artifactoryRepo = ArtifactoryRepository.forProject(project);
 | 
			
		||||
		return (!artifactoryRepo.isRelease()) ? String.format(SPRING_REPO, artifactoryRepo.getName()) : MAVEN_REPO;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2020 the original author or authors.
 | 
			
		||||
 * Copyright 2012-2023 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.
 | 
			
		||||
| 
						 | 
				
			
			@ -16,17 +16,108 @@
 | 
			
		|||
 | 
			
		||||
package org.springframework.boot.build.cli;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.security.MessageDigest;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.codec.digest.DigestUtils;
 | 
			
		||||
import org.gradle.api.DefaultTask;
 | 
			
		||||
import org.gradle.api.Project;
 | 
			
		||||
import org.gradle.api.Task;
 | 
			
		||||
import org.gradle.api.file.RegularFile;
 | 
			
		||||
import org.gradle.api.provider.Provider;
 | 
			
		||||
import org.gradle.api.tasks.InputFile;
 | 
			
		||||
import org.gradle.api.tasks.OutputDirectory;
 | 
			
		||||
import org.gradle.api.tasks.PathSensitive;
 | 
			
		||||
import org.gradle.api.tasks.PathSensitivity;
 | 
			
		||||
import org.gradle.api.tasks.TaskAction;
 | 
			
		||||
import org.gradle.api.tasks.TaskExecutionException;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.build.artifactory.ArtifactoryRepository;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A {@link Task} for creating a Homebrew formula manifest.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Andy Wilkinson
 | 
			
		||||
 */
 | 
			
		||||
public class HomebrewFormula extends AbstractPackageManagerDefinitionTask {
 | 
			
		||||
public class HomebrewFormula extends DefaultTask {
 | 
			
		||||
 | 
			
		||||
	private static final String SPRING_REPO = "https://repo.spring.io/%s";
 | 
			
		||||
 | 
			
		||||
	private static final String MAVEN_REPO = "https://repo1.maven.org/maven2";
 | 
			
		||||
 | 
			
		||||
	private Provider<RegularFile> archive;
 | 
			
		||||
 | 
			
		||||
	private File template;
 | 
			
		||||
 | 
			
		||||
	private File outputDir;
 | 
			
		||||
 | 
			
		||||
	public HomebrewFormula() {
 | 
			
		||||
		getInputs().property("version", getProject().provider(getProject()::getVersion));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@InputFile
 | 
			
		||||
	@PathSensitive(PathSensitivity.RELATIVE)
 | 
			
		||||
	public RegularFile getArchive() {
 | 
			
		||||
		return this.archive.get();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setArchive(Provider<RegularFile> archive) {
 | 
			
		||||
		this.archive = archive;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@InputFile
 | 
			
		||||
	@PathSensitive(PathSensitivity.RELATIVE)
 | 
			
		||||
	public File getTemplate() {
 | 
			
		||||
		return this.template;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setTemplate(File template) {
 | 
			
		||||
		this.template = template;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@OutputDirectory
 | 
			
		||||
	public File getOutputDir() {
 | 
			
		||||
		return this.outputDir;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setOutputDir(File outputDir) {
 | 
			
		||||
		this.outputDir = outputDir;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	protected void createDescriptor(Map<String, Object> additionalProperties) {
 | 
			
		||||
		getProject().copy((copy) -> {
 | 
			
		||||
			copy.from(this.template);
 | 
			
		||||
			copy.into(this.outputDir);
 | 
			
		||||
			copy.expand(getProperties(additionalProperties));
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private Map<String, Object> getProperties(Map<String, Object> additionalProperties) {
 | 
			
		||||
		Map<String, Object> properties = new HashMap<>(additionalProperties);
 | 
			
		||||
		Project project = getProject();
 | 
			
		||||
		properties.put("hash", sha256(this.archive.get().getAsFile()));
 | 
			
		||||
		properties.put("repo", getRepo(project));
 | 
			
		||||
		properties.put("project", project);
 | 
			
		||||
		return properties;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private String sha256(File file) {
 | 
			
		||||
		try {
 | 
			
		||||
			MessageDigest digest = MessageDigest.getInstance("SHA-256");
 | 
			
		||||
			return new DigestUtils(digest).digestAsHex(file);
 | 
			
		||||
		}
 | 
			
		||||
		catch (Exception ex) {
 | 
			
		||||
			throw new TaskExecutionException(this, ex);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private String getRepo(Project project) {
 | 
			
		||||
		ArtifactoryRepository artifactoryRepo = ArtifactoryRepository.forProject(project);
 | 
			
		||||
		return (!artifactoryRepo.isRelease()) ? String.format(SPRING_REPO, artifactoryRepo.getName()) : MAVEN_REPO;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@TaskAction
 | 
			
		||||
	void createFormula() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,37 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2020 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.boot.build.cli;
 | 
			
		||||
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
 | 
			
		||||
import org.gradle.api.Task;
 | 
			
		||||
import org.gradle.api.tasks.TaskAction;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A {@link Task} for creating a Scoop manifest.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Andy Wilkinson
 | 
			
		||||
 */
 | 
			
		||||
public class ScoopManifest extends AbstractPackageManagerDefinitionTask {
 | 
			
		||||
 | 
			
		||||
	@TaskAction
 | 
			
		||||
	void createManifest() {
 | 
			
		||||
		String version = getProject().getVersion().toString();
 | 
			
		||||
		createDescriptor(Collections.singletonMap("scoopVersion", version.substring(0, version.lastIndexOf('.'))));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -161,19 +161,6 @@ task tar(type: Tar) {
 | 
			
		|||
	configureArchive it
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task scoopManifest(type: org.springframework.boot.build.cli.ScoopManifest) {
 | 
			
		||||
	dependsOn zip
 | 
			
		||||
	outputDir = file("${buildDir}/scoop")
 | 
			
		||||
	template = file("src/main/scoop/springboot.json")
 | 
			
		||||
	archive = zip.archiveFile
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
def scoopManifestArtifact = artifacts.add("archives", file("${buildDir}/scoop/springboot.json")) {
 | 
			
		||||
	type "json"
 | 
			
		||||
	classifier "scoop"
 | 
			
		||||
	builtBy "scoopManifest"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task homebrewFormula(type: org.springframework.boot.build.cli.HomebrewFormula) {
 | 
			
		||||
	dependsOn tar
 | 
			
		||||
	outputDir = file("${buildDir}/homebrew")
 | 
			
		||||
| 
						 | 
				
			
			@ -193,7 +180,6 @@ publishing {
 | 
			
		|||
			artifact fullJar
 | 
			
		||||
			artifact tar
 | 
			
		||||
			artifact zip
 | 
			
		||||
			artifact scoopManifestArtifact
 | 
			
		||||
			artifact homebrewFormulaArtifact
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,26 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
  "homepage": "https://projects.spring.io/spring-boot/",
 | 
			
		||||
  "version": "${scoopVersion}",
 | 
			
		||||
  "license": "Apache 2.0",
 | 
			
		||||
  "hash": "${hash}",
 | 
			
		||||
  "url": "${repo}/org/springframework/boot/spring-boot-cli/${project.version}/spring-boot-cli-${project.version}-bin.zip",
 | 
			
		||||
  "extract_dir": "spring-${project.version}",
 | 
			
		||||
  "bin": "bin\\\\spring.bat",
 | 
			
		||||
  "suggest": {
 | 
			
		||||
    "JDK": [
 | 
			
		||||
      "java/oraclejdk",
 | 
			
		||||
      "java/openjdk"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "checkver": {
 | 
			
		||||
    "github": "https://github.com/spring-projects/spring-boot",
 | 
			
		||||
    "re": "/releases/tag/(?:v)?(2[\\d.]+)\\\\.RELEASE"
 | 
			
		||||
  },
 | 
			
		||||
  "autoupdate": {
 | 
			
		||||
    "url": "https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/\$version.RELEASE/spring-boot-cli-\$version.RELEASE-bin.zip",
 | 
			
		||||
    "extract_dir": "spring-\$version.RELEASE",
 | 
			
		||||
    "hash": {
 | 
			
		||||
      "url": "\$url.sha256"
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue