package io.qameta.allure.bamboo; import com.atlassian.bamboo.v2.build.agent.capability.Capability; import com.atlassian.bamboo.v2.build.agent.capability.CapabilityDefaultsHelper; import com.atlassian.bamboo.v2.build.agent.capability.CapabilityImpl; import com.atlassian.bamboo.v2.build.agent.capability.CapabilitySetManager; import com.atlassian.bamboo.v2.build.agent.capability.LocalCapabilitySet; import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.List; import java.util.Optional; import static com.atlassian.bamboo.v2.build.agent.capability.CapabilitySetManagerUtils.getSharedCapabilitySet; import static io.qameta.allure.bamboo.AllureExecutableProvider.DEFAULT_PATH; import static io.qameta.allure.bamboo.AllureExecutableProvider.DEFAULT_VERSION; import static java.lang.String.format; import static java.util.Optional.ofNullable; import static java.util.stream.Collectors.toList; public class BambooExecutablesManager { private static final String ALLURE_EXEC_PREFIX = "system.builder.allure."; private final CapabilitySetManager capabilitySetManager; public BambooExecutablesManager(CapabilitySetManager capabilitySetManager) { this.capabilitySetManager = capabilitySetManager; } List<String> getAllureExecutables() { return getCapabilityKeys().stream() .filter(capKey -> capKey.toLowerCase().startsWith(ALLURE_EXEC_PREFIX.toLowerCase())) .map(this::getCapability) .filter(Optional::isPresent) .map(Optional::get) .map(Capability::getKey) .map(cap -> cap.replaceFirst(ALLURE_EXEC_PREFIX, "")) .collect(toList()); } Optional<String> getDefaultAllureExecutable() { return getAllureExecutables().stream().findAny(); } Optional<String> getExecutableByName(String executableName) { return getCapabilityKeys().stream() .filter(capKey -> { final String[] strings = capKey.split("\\.", 4); return strings.length == 4 && executableName.equals(strings[3]); }) .findFirst() .map(this::getCapability) .filter(Optional::isPresent) .map(Optional::get) .map(Capability::getValue); } void addDefaultAllureExecutableCapability() { ofNullable(getSharedCapabilitySet(capabilitySetManager, LocalCapabilitySet.class)).ifPresent(capSet -> { final CapabilityImpl capability = new CapabilityImpl(format("%sAllure %s", ALLURE_EXEC_PREFIX, DEFAULT_VERSION), DEFAULT_PATH); capSet.addCapability(capability); capabilitySetManager.saveCapabilitySet(capSet); }); } @NotNull private Collection<String> getCapabilityKeys() { return capabilitySetManager.getSystemCapabilityKeys(CapabilityDefaultsHelper.CAPABILITY_BUILDER_TYPE, false); } private Optional<Capability> getCapability(String capabilityKey) { return ofNullable(capabilitySetManager.getSharedLocalCapabilitySet().getCapability(capabilityKey)); } }