Search in sources :

Example 1 with PowerShellBitness

use of jetbrains.buildServer.powershell.common.PowerShellBitness in project teamcity-powershell by JetBrains.

the class BasePowerShellService method selectTool.

private PowerShellInfo selectTool() throws RunBuildException {
    final BuildProgressLogger buildLogger = getBuild().getBuildLogger();
    PowerShellInfo result;
    if (getRunnerContext().isVirtualContext()) {
        if (SystemInfo.isWindows) {
            throw new RunBuildException("PowerShell is not supported on windows containers");
        }
        buildLogger.logMessage(internalize(createTextMessage("PowerShell is running in virtual agent context")));
        result = VirtualPowerShellSupport.getVirtualPowerShell();
    } else {
        buildLogger.logMessage(internalize(createTextMessage("PowerShell running in non-virtual agent context")));
        final PowerShellBitness bit = PowerShellBitness.fromString(getRunnerParameters().get(RUNNER_BITNESS));
        final String version = getRunnerParameters().get(RUNNER_MIN_VERSION);
        final PowerShellEdition edition = PowerShellEdition.fromString(getRunnerParameters().get(RUNNER_EDITION));
        result = myInfoProvider.selectTool(bit, version, edition);
        if (result == null) {
            throw new RunBuildException("Could not select PowerShell for given bitness " + (bit == null ? "<Auto>" : bit.getDisplayName() + " and version " + (version == null ? "<Any>" : version)));
        }
    }
    return result;
}
Also used : PowerShellEdition(jetbrains.buildServer.powershell.common.PowerShellEdition) BuildProgressLogger(jetbrains.buildServer.agent.BuildProgressLogger) PowerShellInfo(jetbrains.buildServer.powershell.agent.detect.PowerShellInfo) RunBuildException(jetbrains.buildServer.RunBuildException) PowerShellBitness(jetbrains.buildServer.powershell.common.PowerShellBitness)

Example 2 with PowerShellBitness

use of jetbrains.buildServer.powershell.common.PowerShellBitness in project teamcity-powershell by JetBrains.

the class PowerShellInfoProvider method selectTool.

@Nullable
public PowerShellInfo selectTool(@Nullable final PowerShellBitness bit, @Nullable final String version, @Nullable final PowerShellEdition edition) {
    // filter by edition
    List<PowerShellInfo> availableShells = myHolder.getShells();
    if (edition != null) {
        availableShells = CollectionsUtil.filterCollection(availableShells, new Filter<PowerShellInfo>() {

            @Override
            public boolean accept(@NotNull PowerShellInfo data) {
                return edition.equals(data.getEdition());
            }
        });
    }
    // filter by version
    if (version != null) {
        availableShells = CollectionsUtil.filterCollection(availableShells, new Filter<PowerShellInfo>() {

            @Override
            public boolean accept(@NotNull PowerShellInfo data) {
                return VersionComparatorUtil.compare(data.getVersion(), version) >= 0;
            }
        });
    }
    // filter by bitness
    if (bit != null) {
        availableShells = CollectionsUtil.filterCollection(availableShells, new Filter<PowerShellInfo>() {

            @Override
            public boolean accept(@NotNull PowerShellInfo data) {
                return data.getBitness().equals(bit);
            }
        });
    }
    if (availableShells.isEmpty()) {
        return null;
    }
    if (availableShells.size() == 1) {
        return availableShells.get(0);
    }
    // prefer desktop over core
    if (edition == null) {
        Map<PowerShellEdition, List<PowerShellInfo>> byEdition = new HashMap<PowerShellEdition, List<PowerShellInfo>>();
        for (PowerShellInfo info : availableShells) {
            if (!byEdition.containsKey(info.getEdition())) {
                byEdition.put(info.getEdition(), new ArrayList<PowerShellInfo>());
            }
            byEdition.get(info.getEdition()).add(info);
        }
        if (byEdition.get(PowerShellEdition.DESKTOP) != null) {
            availableShells = byEdition.get(PowerShellEdition.DESKTOP);
        } else {
            availableShells = byEdition.get(PowerShellEdition.CORE);
        }
    }
    if (availableShells.size() == 1) {
        return availableShells.get(0);
    }
    // prefer 64bit over 32bit
    if (bit == null) {
        Map<PowerShellBitness, List<PowerShellInfo>> byBits = new HashMap<PowerShellBitness, List<PowerShellInfo>>();
        for (PowerShellInfo info : availableShells) {
            if (!byBits.containsKey(info.getBitness())) {
                byBits.put(info.getBitness(), new ArrayList<PowerShellInfo>());
            }
            byBits.get(info.getBitness()).add(info);
        }
        if (byBits.containsKey(PowerShellBitness.x64)) {
            availableShells = byBits.get(PowerShellBitness.x64);
        } else {
            availableShells = byBits.get(PowerShellBitness.x86);
        }
    }
    if (availableShells.size() == 1) {
        return availableShells.get(0);
    }
    // select max available version
    Collections.sort(availableShells, new Comparator<PowerShellInfo>() {

        @Override
        public int compare(PowerShellInfo info1, PowerShellInfo info2) {
            return VersionComparatorUtil.compare(info1.getVersion(), info2.getVersion());
        }
    });
    return availableShells.get(0);
}
Also used : PowerShellEdition(jetbrains.buildServer.powershell.common.PowerShellEdition) NotNull(org.jetbrains.annotations.NotNull) Filter(jetbrains.buildServer.util.filters.Filter) PowerShellInfo(jetbrains.buildServer.powershell.agent.detect.PowerShellInfo) PowerShellBitness(jetbrains.buildServer.powershell.common.PowerShellBitness) Nullable(org.jetbrains.annotations.Nullable)

Example 3 with PowerShellBitness

use of jetbrains.buildServer.powershell.common.PowerShellBitness in project teamcity-powershell by JetBrains.

the class RegistryPowerShellDetector method findShells.

@NotNull
@Override
public Map<String, PowerShellInfo> findShells(@NotNull DetectionContext detectionContext) {
    Map<String, PowerShellInfo> result = new HashMap<String, PowerShellInfo>();
    LOG.info("Detecting PowerShell using RegistryPowerShellDetector");
    if (!SystemInfo.isWindows) {
        LOG.info("RegistryPowerShellDetector is only available on Windows");
        return Collections.emptyMap();
    }
    for (PowerShellBitness bitness : PowerShellBitness.values()) {
        final PowerShellRegistry reg = new PowerShellRegistry(bitness.toBitness(), myAccessor);
        if (!reg.isPowerShellInstalled()) {
            LOG.debug("Powershell for " + bitness + " was not found.");
            continue;
        }
        final String ver = reg.getInstalledVersion();
        final File home = reg.getPowerShellHome();
        if (ver == null || home == null) {
            LOG.debug("Found powershell: " + bitness + " " + ver + " " + home);
            continue;
        }
        final PowerShellInfo info = new PowerShellInfo(bitness, home, ver, PowerShellEdition.DESKTOP, "powershell.exe");
        LOG.info("Found: " + info);
        result.put(info.getHome().getAbsolutePath(), info);
    }
    return result;
}
Also used : PowerShellInfo(jetbrains.buildServer.powershell.agent.detect.PowerShellInfo) PowerShellBitness(jetbrains.buildServer.powershell.common.PowerShellBitness) File(java.io.File) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

PowerShellInfo (jetbrains.buildServer.powershell.agent.detect.PowerShellInfo)3 PowerShellBitness (jetbrains.buildServer.powershell.common.PowerShellBitness)3 PowerShellEdition (jetbrains.buildServer.powershell.common.PowerShellEdition)2 NotNull (org.jetbrains.annotations.NotNull)2 File (java.io.File)1 RunBuildException (jetbrains.buildServer.RunBuildException)1 BuildProgressLogger (jetbrains.buildServer.agent.BuildProgressLogger)1 Filter (jetbrains.buildServer.util.filters.Filter)1 Nullable (org.jetbrains.annotations.Nullable)1