• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

devonfw / IDEasy / 16593268168

29 Jul 2025 10:15AM UTC coverage: 68.618% (-0.07%) from 68.686%
16593268168

push

github

web-flow
#1389: Add podman support (#1431)

Co-authored-by: Jörg Hohwiller <hohwille@users.noreply.github.com>

3302 of 5220 branches covered (63.26%)

Branch coverage included in aggregate %.

8422 of 11866 relevant lines covered (70.98%)

3.14 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

4.17
cli/src/main/java/com/devonfw/tools/ide/tool/docker/Docker.java
1
package com.devonfw.tools.ide.tool.docker;
2

3
import java.nio.file.Files;
4
import java.nio.file.Path;
5
import java.util.ArrayList;
6
import java.util.Arrays;
7
import java.util.List;
8
import java.util.Set;
9

10
import com.devonfw.tools.ide.common.Tag;
11
import com.devonfw.tools.ide.context.IdeContext;
12
import com.devonfw.tools.ide.os.SystemArchitecture;
13
import com.devonfw.tools.ide.process.ProcessContext;
14
import com.devonfw.tools.ide.step.Step;
15
import com.devonfw.tools.ide.tool.GlobalToolCommandlet;
16
import com.devonfw.tools.ide.tool.PackageManager;
17
import com.devonfw.tools.ide.tool.PackageManagerCommand;
18
import com.devonfw.tools.ide.tool.repository.ToolRepository;
19
import com.devonfw.tools.ide.version.VersionIdentifier;
20

21
/**
22
 * {@link GlobalToolCommandlet} for <a href="https://www.docker.com/">docker</a> either as
23
 * <a href="https://rancherdesktop.io/">Rancher Desktop</a> or as
24
 * <a href="https://www.docker.com/products/docker-desktop/">Docker Desktop</a>.
25
 */
26
public class Docker extends GlobalToolCommandlet {
27

28
  private static final String PODMAN = "podman";
29

30
  /**
31
   * The constructor.
32
   *
33
   * @param context the {@link IdeContext}.
34
   */
35
  public Docker(IdeContext context) {
36

37
    super(context, "docker", Set.of(Tag.DOCKER));
6✔
38
  }
1✔
39

40
  @Override
41
  public String getBinaryName() {
42
    return detectContainerRuntime();
×
43
  }
44

45
  private String detectContainerRuntime() {
46
    if (isCommandAvailable(this.tool)) {
×
47
      return this.tool;
×
48
    } else if (isCommandAvailable(PODMAN)) {
×
49
      return PODMAN;
×
50
    } else {
51
      return this.tool;
×
52
    }
53
  }
54

55
  private boolean isCommandAvailable(String command) {
56
    return this.context.getPath().hasBinaryOnPath(command);
×
57
  }
58

59
  @Override
60
  public boolean isExtract() {
61

62
    return switch (this.context.getSystemInfo().getOs()) {
×
63
      case WINDOWS -> false;
×
64
      case MAC -> this.context.getSystemInfo().getArchitecture().equals(SystemArchitecture.ARM64);
×
65
      case LINUX -> true;
×
66
    };
67
  }
68

69
  @Override
70
  public boolean install(boolean silent, ProcessContext processContext, Step step) {
71

72
    if (this.context.getSystemInfo().isLinux()) {
×
73
      return runWithPackageManager(silent, getPackageManagerCommandsInstall());
×
74
    } else {
75
      return super.install(silent, processContext, step);
×
76
    }
77
  }
78

79
  private List<PackageManagerCommand> getPackageManagerCommandsInstall() {
80

81
    String edition = getConfiguredEdition();
×
82
    ToolRepository toolRepository = getToolRepository();
×
83
    VersionIdentifier configuredVersion = getConfiguredVersion();
×
84
    String resolvedVersion = toolRepository.resolveVersion(this.tool, edition, configuredVersion, this).toString();
×
85

86
    List<PackageManagerCommand> pmCommands = new ArrayList<>();
×
87
    pmCommands.add(new PackageManagerCommand(PackageManager.ZYPPER, Arrays.asList(
×
88
        "sudo zypper addrepo https://download.opensuse.org/repositories/isv:/Rancher:/stable/rpm/isv:Rancher:stable.repo",
89
        String.format("sudo zypper --no-gpg-checks install rancher-desktop=%s*", resolvedVersion))));
×
90
    pmCommands.add(new PackageManagerCommand(PackageManager.APT, Arrays.asList(
×
91
        "curl -s https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/Release.key | gpg --dearmor |"
92
            + " sudo dd status=none of=/usr/share/keyrings/isv-rancher-stable-archive-keyring.gpg",
93
        "echo 'deb [signed-by=/usr/share/keyrings/isv-rancher-stable-archive-keyring.gpg]"
94
            + " https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/ ./' |"
95
            + " sudo dd status=none of=/etc/apt/sources.list.d/isv-rancher-stable.list", "sudo apt update",
96
        String.format("sudo apt install -y --allow-downgrades rancher-desktop=%s*", resolvedVersion))));
×
97

98
    return pmCommands;
×
99
  }
100

101
  @Override
102
  public void uninstall() {
103

104
    if (this.context.getSystemInfo().isLinux()) {
×
105
      runWithPackageManager(false, getPackageManagerCommandsUninstall());
×
106
    } else {
107
      super.uninstall();
×
108
    }
109

110
  }
×
111

112
  private List<PackageManagerCommand> getPackageManagerCommandsUninstall() {
113

114
    List<PackageManagerCommand> pmCommands = new ArrayList<>();
×
115
    pmCommands.add(
×
116
        new PackageManagerCommand(PackageManager.ZYPPER, Arrays.asList("sudo zypper remove rancher-desktop")));
×
117
    pmCommands.add(
×
118
        new PackageManagerCommand(PackageManager.APT, Arrays.asList("sudo apt -y autoremove rancher-desktop")));
×
119

120
    return pmCommands;
×
121
  }
122

123
  @Override
124
  public String getToolHelpArguments() {
125

126
    return "help";
×
127
  }
128
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc