public void canStart()

in rake-runner-agent/src/jetbrains/buildServer/agent/feature/RubyEnvConfiguratorService.java [46:97]


  public void canStart(@NotNull final BuildRunnerContext context) throws RunBuildException {
    // check if feature is enabled
    final Collection<AgentBuildFeature> features =
      context.getBuild().getBuildFeaturesOfType(RubyEnvConfiguratorConstants.RUBY_ENV_CONFIGURATOR_FEATURE_TYPE);
    if (features.isEmpty()) {
      return;
    }
    final Map<String, String> featureParameters = features.iterator().next().getParameters();

    final RubyEnvConfiguratorConfiguration configuration = new RubyEnvConfiguratorConfiguration(featureParameters);

    RVMPathsSettings.getInstanceEx().initialize(context.getBuildParameters().getEnvironmentVariables());
    RbEnvPathsSettings.getInstance().initialize(context.getBuildParameters().getEnvironmentVariables());

    final SharedParams sharedParams = new SharedParams();

    // Configure runner parameters
    configureSharedParameters(configuration, sharedParams);
    sharedParams.applyToContext(context);

    final RubySdk sdk;

    // validate params:
    try {
      validateConfiguratorParams(configuration);
    } catch (RakeTasksBuildService.InvalidConfigurationException e) {
      if (configuration.isShouldFailBuildIfNoSdkFound() || !e.isCanBeIgnored()) {
        // fail build
        throw new RunBuildException(e.getMessage());
      }
    }
    // try to create sdk, it will validate paths
    try {
      sdk = RubySDKUtil.createAndSetupSdk(context.getRunnerParameters(), context);
    } catch (RakeTasksBuildService.MyBuildFailureException e) {
      if (configuration.isShouldFailBuildIfNoSdkFound() || !e.isCanBeIgnored()) {
        // fail build
        throw new RunBuildException(e.getMessage());
      }

      // else just show warning and quit:
      context.getBuild().getBuildLogger().warning(e.getMessage());
      return;
    }

    // validation has passed. let's path environment
    final EnvironmentPatchableMap newEnv = patchRunnerEnvironment(context, sdk, configuration, sharedParams);
    sharedParams.applyToContext(context);
    if (sdk instanceof RVMRCBasedRubySdkImpl) {
      RVMRCBasedRubySdkImpl.cache(sdk, newEnv, ((RVMRCBasedRubySdkImpl)sdk).getPathToRVMRCFolder());
    }
  }