use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class AssemblerUtils method copyJars.
public static Set<Path> copyJars(JReleaserContext context, JavaAssembler assembler, Path jarsDirectory, String platform) throws AssemblerProcessingException {
Set<Path> paths = new LinkedHashSet<>();
// resolve all first
if (isBlank(platform)) {
paths.add(assembler.getMainJar().getEffectivePath(context, assembler));
}
for (Glob glob : assembler.getJars()) {
if ((isBlank(platform) && isBlank(glob.getPlatform())) || (isNotBlank(platform) && PlatformUtils.isCompatible(platform, glob.getPlatform()))) {
glob.getResolvedArtifacts(context).stream().map(artifact -> artifact.getResolvedPath(context, assembler)).forEach(paths::add);
}
}
// copy all next
try {
Files.createDirectories(jarsDirectory);
for (Path path : paths) {
context.getLogger().debug(RB.$("assembler.copying"), path.getFileName());
Files.copy(path, jarsDirectory.resolve(path.getFileName()), REPLACE_EXISTING);
}
} catch (IOException e) {
throw new AssemblerProcessingException(RB.$("ERROR_assembler_copying_jars"), e);
}
return paths;
}
use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class ClientUtils method builder.
public static Feign.Builder builder(JReleaserLogger logger, int connectTimeout, int readTimeout) {
requireNonNull(logger, "'logger' must not be null");
Feign.Builder builder = Feign.builder();
if (Boolean.getBoolean("jreleaser.disableSslValidation")) {
logger.warn(RB.$("warn_ssl_disabled"));
builder = builder.client(new Client.Default(nonValidatingSSLSocketFactory(), new NonValidatingHostnameVerifier()));
}
return builder.encoder(new FormEncoder(new JacksonEncoder())).decoder(new JacksonDecoder()).requestInterceptor(template -> template.header("User-Agent", "JReleaser/" + JReleaserVersion.getPlainVersion())).errorDecoder((methodKey, response) -> new RestAPIException(response.request(), response.status(), response.reason(), response.headers())).options(new Request.Options(connectTimeout, TimeUnit.SECONDS, readTimeout, TimeUnit.SECONDS, true));
}
use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class SdkmanAnnouncer method announce.
@Override
public void announce() throws AnnounceException {
Map<String, Distribution> distributions = context.getModel().getActiveDistributions().stream().filter(d -> d.getSdkman().isEnabled()).filter(d -> !JReleaserCommand.supportsPublish(context.getCommand()) || d.getSdkman().isPublished()).collect(Collectors.toMap(distribution -> {
Sdkman sdkman = distribution.getSdkman();
return isNotBlank(sdkman.getCandidate()) ? sdkman.getCandidate().trim() : context.getModel().getProject().getName();
}, distribution -> distribution));
Boolean set = (Boolean) context.getModel().getAnnounce().getSdkman().getExtraProperties().remove(MAGIC_SET);
if (distributions.isEmpty()) {
if (set == null || !set) {
announceProject();
} else {
context.getLogger().debug(RB.$("announcers.announcer.disabled"));
}
return;
}
boolean failures = false;
for (Map.Entry<String, Distribution> e : distributions.entrySet()) {
String candidate = e.getKey();
Distribution distribution = e.getValue();
Sdkman sdkman = distribution.getSdkman();
Map<String, Object> props = context.fullProps();
props.putAll(distribution.props());
String releaseNotesUrl = resolveTemplate(sdkman.getReleaseNotesUrl(), props);
String command = sdkman.getCommand().name().toLowerCase();
context.getLogger().info(RB.$("sdkman.release.announce"), command, candidate);
try {
AnnounceSdkmanCommand.builder(context.getLogger()).connectTimeout(sdkman.getConnectTimeout()).readTimeout(sdkman.getReadTimeout()).consumerKey(context.isDryrun() ? "**UNDEFINED**" : sdkman.getResolvedConsumerKey()).consumerToken(context.isDryrun() ? "**UNDEFINED**" : sdkman.getResolvedConsumerToken()).candidate(candidate).version(context.getModel().getProject().getVersion()).releaseNotesUrl(releaseNotesUrl).dryrun(context.isDryrun()).build().execute();
} catch (SdkmanException x) {
context.getLogger().warn(x.getMessage().trim());
failures = true;
}
}
if (failures) {
throw new AnnounceException(RB.$("ERROR_sdkman_announce"));
}
}
use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class AbstractPackagerProcessor method verifyAndAddArtifacts.
protected boolean verifyAndAddArtifacts(Map<String, Object> props, Distribution distribution, List<Artifact> artifacts) throws PackagerProcessingException {
List<Artifact> activeArtifacts = artifacts.stream().filter(Artifact::isActive).collect(Collectors.toList());
if (activeArtifacts.size() == 0) {
// we can't proceed
context.getLogger().warn(RB.$("packager.no.matching.artifacts"), distribution.getName(), capitalize(packager.getType()));
return false;
}
int count = 0;
for (Artifact artifact : activeArtifacts) {
String artifactUrl = Artifacts.resolveDownloadUrl(context, packager.getType(), distribution, artifact);
if (isBlank(artifactUrl))
continue;
count++;
String platform = artifact.getPlatform();
String artifactPlatform = isNotBlank(platform) ? capitalize(platform) : "";
String platformReplaced = distribution.getPlatform().applyReplacements(platform);
String artifactPlatformReplaced = isNotBlank(platformReplaced) ? capitalize(platformReplaced) : "";
// add extra properties without clobbering existing keys
Map<String, Object> artifactProps = artifact.getResolvedExtraProperties(ARTIFACT + artifactPlatform);
artifactProps.keySet().stream().filter(k -> !props.containsKey(k)).forEach(k -> props.put(k, artifactProps.get(k)));
Path artifactPath = artifact.getEffectivePath(context, distribution);
long artifactSize = 0;
try {
artifactSize = Files.size(artifactPath);
} catch (IOException ignored) {
// this would be strange
context.getLogger().trace(ignored);
}
String artifactFile = artifact.getEffectivePath().getFileName().toString();
String artifactFileName = getFilename(artifactFile, FileType.getSupportedExtensions());
String artifactFileExtension = artifactFile.substring(artifactFileName.length());
String artifactFileFormat = artifactFileExtension.substring(1);
String artifactName = "";
String artifactVersion = "";
String projectVersion = context.getModel().getProject().getEffectiveVersion();
if (isNotBlank(projectVersion) && artifactFileName.contains(projectVersion)) {
artifactName = artifactFileName.substring(0, artifactFileName.indexOf(projectVersion));
if (artifactName.endsWith("-")) {
artifactName = artifactName.substring(0, artifactName.length() - 1);
}
artifactVersion = projectVersion;
}
projectVersion = context.getModel().getProject().getVersion();
if (isBlank(artifactName) && isNotBlank(projectVersion) && artifactFileName.contains(projectVersion)) {
artifactName = artifactFileName.substring(0, artifactFileName.indexOf(projectVersion));
if (artifactName.endsWith("-")) {
artifactName = artifactName.substring(0, artifactName.length() - 1);
}
artifactVersion = projectVersion;
}
String artifactOs = "";
String artifactArch = "";
if (isNotBlank(platform)) {
if (platform.contains("-")) {
String[] parts = platform.split("-");
artifactOs = parts[0];
artifactArch = parts[1];
}
}
safePut(props, ARTIFACT + artifactPlatform + NAME, artifactName);
safePut(props, ARTIFACT + artifactPlatform + VERSION, artifactVersion);
safePut(props, ARTIFACT + artifactPlatform + OS, artifactOs);
safePut(props, ARTIFACT + artifactPlatform + ARCH, artifactArch);
safePut(props, ARTIFACT + artifactPlatform + FILE, artifactFile);
safePut(props, ARTIFACT + artifactPlatform + SIZE, artifactSize);
safePut(props, ARTIFACT + artifactPlatform + FILE_NAME, artifactFileName);
safePut(props, ARTIFACT + artifactPlatform + FILE_EXTENSION, artifactFileExtension);
safePut(props, ARTIFACT + artifactPlatform + FILE_FORMAT, artifactFileFormat);
safePut(props, ARTIFACT + artifactPlatformReplaced + NAME, artifactName);
safePut(props, ARTIFACT + artifactPlatformReplaced + VERSION, artifactVersion);
safePut(props, ARTIFACT + artifactPlatformReplaced + OS, artifactOs);
safePut(props, ARTIFACT + artifactPlatformReplaced + ARCH, artifactArch);
safePut(props, ARTIFACT + artifactPlatformReplaced + FILE, artifactFile);
safePut(props, ARTIFACT + artifactPlatformReplaced + SIZE, artifactSize);
safePut(props, ARTIFACT + artifactPlatformReplaced + FILE_NAME, artifactFileName);
safePut(props, ARTIFACT + artifactPlatformReplaced + FILE_EXTENSION, artifactFileExtension);
safePut(props, ARTIFACT + artifactPlatformReplaced + FILE_FORMAT, artifactFileFormat);
for (Algorithm algorithm : context.getModel().getChecksum().getAlgorithms()) {
safePut(props, ARTIFACT + artifactPlatform + CHECKSUM + capitalize(algorithm.formatted()), artifact.getHash(algorithm));
safePut(props, ARTIFACT + artifactPlatformReplaced + CHECKSUM + capitalize(algorithm.formatted()), artifact.getHash(algorithm));
}
safePut(props, ARTIFACT + artifactPlatform + URL, artifactUrl);
safePut(props, ARTIFACT + artifactPlatformReplaced + URL, artifactUrl);
props.putAll(context.getModel().getUpload().resolveDownloadUrls(context, distribution, artifact, ARTIFACT + artifactPlatform));
props.putAll(context.getModel().getUpload().resolveDownloadUrls(context, distribution, artifact, ARTIFACT + artifactPlatformReplaced));
if (count == 1) {
props.putAll(context.getModel().getUpload().resolveDownloadUrls(context, distribution, artifact, DISTRIBUTION));
safePut(props, KEY_DISTRIBUTION_ARTIFACT, artifact);
safePut(props, KEY_DISTRIBUTION_URL, artifactUrl);
safePut(props, KEY_DISTRIBUTION_SIZE, artifactSize);
safePut(props, KEY_DISTRIBUTION_SHA_256, artifact.getHash(Algorithm.SHA_256));
for (Algorithm algorithm : context.getModel().getChecksum().getAlgorithms()) {
safePut(props, DISTRIBUTION + CHECKSUM + capitalize(algorithm.formatted()), artifact.getHash(algorithm));
}
safePut(props, KEY_DISTRIBUTION_ARTIFACT_PLATFORM, platform);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_PLATFORM_REPLACED, platformReplaced);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_NAME, artifactName);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_VERSION, artifactVersion);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_OS, artifactOs);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_ARCH, artifactArch);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_SIZE, artifactSize);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_FILE, artifactFile);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_FILE_NAME, artifactFileName);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_FILE_EXTENSION, artifactFileExtension);
safePut(props, KEY_DISTRIBUTION_ARTIFACT_FILE_FORMAT, artifactFileFormat);
safePut(props, KEY_ARTIFACT_PLATFORM, platform);
safePut(props, KEY_ARTIFACT_PLATFORM_REPLACED, platformReplaced);
safePut(props, KEY_ARTIFACT_NAME, artifactName);
safePut(props, KEY_ARTIFACT_VERSION, artifactVersion);
safePut(props, KEY_ARTIFACT_OS, artifactOs);
safePut(props, KEY_ARTIFACT_ARCH, artifactArch);
safePut(props, KEY_ARTIFACT_SIZE, artifactSize);
safePut(props, KEY_ARTIFACT_FILE, artifactFile);
safePut(props, KEY_ARTIFACT_FILE_NAME, artifactFileName);
safePut(props, KEY_ARTIFACT_FILE_EXTENSION, artifactFileExtension);
safePut(props, KEY_ARTIFACT_FILE_FORMAT, artifactFileFormat);
// add extra properties without clobbering existing keys
Map<String, Object> aprops = artifact.getResolvedExtraProperties();
Map<String, Object> bprops = new LinkedHashMap<>(aprops);
applyTemplates(aprops, bprops);
aprops.keySet().stream().filter(k -> !props.containsKey(k)).forEach(k -> props.put(k, aprops.get(k)));
}
}
return count > 0;
}
use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class DistributionsValidator method validateArtifactPlatforms.
public static void validateArtifactPlatforms(JReleaserContext context, Distribution distribution, Packager packager, List<Artifact> candidateArtifacts, Errors errors) {
// validate distribution type
if (distribution.getType() == Distribution.DistributionType.BINARY || distribution.getType() == Distribution.DistributionType.JLINK || distribution.getType() == Distribution.DistributionType.NATIVE_IMAGE || distribution.getType() == Distribution.DistributionType.NATIVE_PACKAGE) {
// ensure all artifacts define a platform
AtomicBoolean universal = new AtomicBoolean();
String noPlatform = "<nil>";
Map<String, List<Artifact>> byPlatform = candidateArtifacts.stream().peek(artifact -> {
if (distribution.getType() == Distribution.DistributionType.BINARY && artifact.extraPropertyIsTrue("universal")) {
universal.compareAndSet(false, true);
}
}).collect(groupingBy(artifact -> isBlank(artifact.getPlatform()) ? noPlatform : artifact.getPlatform()));
if (byPlatform.containsKey(noPlatform) && !universal.get()) {
errors.configuration(RB.$("validation_distributions_platform_check", distribution.getName(), distribution.getType(), packager.getType()));
}
if (byPlatform.keySet().stream().noneMatch(packager::supportsPlatform) && !universal.get()) {
context.getLogger().warn(RB.$("validation_distributions_disable", distribution.getName(), packager.getType()));
packager.disable();
}
}
}
Aggregations