Module: Kettle::Dev

Defined in:
lib/kettle/dev.rb,
lib/kettle/dev/paths.rb,
lib/kettle/dev/version.rb,
lib/kettle/dev/bump_cli.rb,
lib/kettle/dev/dvcs_cli.rb,
lib/kettle/dev/reset_cli.rb,
lib/kettle/dev/ci_helpers.rb,
lib/kettle/dev/ci_monitor.rb,
lib/kettle/dev/commit_msg.rb,
lib/kettle/dev/versioning.rb,
lib/kettle/dev/git_adapter.rb,
lib/kettle/dev/release_cli.rb,
lib/kettle/dev/exit_adapter.rb,
lib/kettle/dev/version_bump.rb,
lib/kettle/dev/changelog_cli.rb,
lib/kettle/dev/input_adapter.rb,
lib/kettle/dev/tasks/ci_task.rb,
lib/kettle/dev/cache_progress.rb,
lib/kettle/dev/lockfile_reset.rb,
lib/kettle/dev/readme_backers.rb,
lib/kettle/dev/gem_spec_reader.rb,
lib/kettle/dev/pre_release_cli.rb,
lib/kettle/dev/release_secrets.rb,
lib/kettle/dev/gem_source_probe.rb,
lib/kettle/dev/gha_sha_pins_cli.rb,
lib/kettle/dev/release_notifier.rb,
lib/kettle/dev/bundler_env_guard.rb,
lib/kettle/dev/git_commit_footer.rb,
lib/kettle/dev/executable_version.rb,
lib/kettle/dev/ruby_gems_versions.rb,
lib/kettle/dev/changelog_entry_adder.rb,
lib/kettle/dev/open_collective_config.rb,
lib/kettle/dev/release_graph_contract.rb,
lib/kettle/dev/release_secrets_doctor.rb,
lib/kettle/dev/interactive_release_command.rb,
lib/kettle/dev/markdown_reference_validator.rb,
sig/kettle/dev.rbs

Defined Under Namespace

Modules: AppraisalsAstMerger, BundlerEnvGuard, CIHelpers, CIMonitor, CommitMsg, ExecutableVersion, ExitAdapter, InputAdapter, ModularGemfiles, OpenCollectiveConfig, Paths, PrismUtils, ReleaseNotifier, ReleaseSecrets, RubyGemsVersions, SourceMerger, Tasks, TemplateHelpers, Version, Versioning Classes: BumpCLI, CacheProgress, ChangelogCLI, ChangelogEntryAdder, DvcsCLI, Error, GemSourceProbe, GemSpecReader, GitAdapter, GitCommitFooter, InteractiveReleaseCommand, LockfileReset, MarkdownReferenceValidator, PreReleaseCLI, ReadmeBackers, ReleaseCLI, ReleaseGraphContract, ReleaseSecretsDoctor, ResetCLI, SetupCLI, VersionBump

Constant Summary collapse

DEBUGGING =

Whether debug logging is enabled for kettle-dev internals. Controlled by KETTLE_DEV_DEBUG=true.

Returns:

  • (Boolean)
ENV.fetch("KETTLE_DEV_DEBUG", "false").casecmp("true").zero?
IS_CI =

Whether we are running on CI.

Returns:

  • (Boolean)
ENV.fetch("CI", "false").casecmp("true") == 0
REQUIRE_BENCH =

Whether to benchmark requires with require_bench.

Returns:

  • (Boolean)
ENV.fetch("REQUIRE_BENCH", "false").casecmp("true").zero?
RUNNING_AS =

The current program name (e.g., "rake", "rspec"). Used to decide whether to auto-load rake tasks at the bottom of this file. Normally tasks are loaded in the host project's Rakefile, but when running under this gem's own test suite we need precise coverage; so we only auto-install tasks when invoked via the rake executable.

Returns:

  • (String)
File.basename($PROGRAM_NAME)
ENV_TRUE_RE =

A case-insensitive regular expression that matches common truthy ENV values. Accepts 1, true, y, yes (any case).

Returns:

  • (Regexp)
/\A(1|true|y|yes)\z/i
ENV_FALSE_RE =

A case-insensitive regular expression that matches common falsy ENV values. Accepts false, n, no, 0 (any case).

Returns:

  • (Regexp)
/\A(false|n|no|0)\z/i
GEM_ROOT =

Absolute path to the root of the kettle-dev gem (repository root when working from source)

Returns:

  • (String)
File.expand_path("../..", __dir__)
VAR_HOME_PREFIX =
%r{\A/var/home(?=/|\z)}
VAR_HOME_TEXT =
%r{/var/home(?=/|\z)}
VERSION =

Current gem version exposed at the traditional constant location.

Returns:

  • (String)
Version::VERSION

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.defaults ⇒ Array<String> (readonly)

Registry for tasks that should be prerequisites of the default task

Returns:

  • (Array<String>)


170
171
172
# File 'lib/kettle/dev.rb', line 170

def defaults
  @defaults
end

Class Method Details

.debug_error(error, context = nil, backtrace: true) ⇒ void

This method returns an undefined value.

Emit a debug warning for rescued errors when kettle-dev debugging is enabled. Controlled by KETTLE_DEV_DEBUG=true.

Parameters:

  • error (Exception)
  • context (String, Symbol, nil) (defaults to: nil) —

    optional label, often method

  • backtrace (Boolean) (defaults to: true) —

    whether to emit the rescued error backtrace



134
135
136
137
138
139
140
141
142
# File 'lib/kettle/dev.rb', line 134

def debug_error(error, context = nil, backtrace: true)
  return unless DEBUGGING

  ctx = context ? context.to_s : "KETTLE-DEV-RESCUE"
  Kernel.warn("[#{ctx}] #{error.class}: #{error.message}")
  Kernel.warn(Array(error.backtrace).first(5).join("\n")) if backtrace && error.respond_to?(:backtrace) && error.backtrace
rescue
  # never raise from debug logging
end

.debug_log(msg, context = nil) ⇒ void

This method returns an undefined value.

Emit a debug log line when kettle-dev debugging is enabled. Controlled by KETTLE_DEV_DEBUG=true.

Parameters:

  • msg (String)


148
149
150
151
152
153
154
155
# File 'lib/kettle/dev.rb', line 148

def debug_log(msg, context = nil)
  return unless DEBUGGING

  ctx = context ? context.to_s : "KETTLE-DEV-DEBUG"
  Kernel.warn("[#{ctx}] #{msg}")
rescue
  # never raise from debug logging
end

.default_registered?(task_name) ⇒ Boolean

Returns:

  • (Boolean)


191
192
193
# File 'lib/kettle/dev.rb', line 191

def default_registered?(task_name)
  defaults.include?(task_name.to_s)
end

.display_path(path) ⇒ Object



106
107
108
109
110
# File 'lib/kettle/dev.rb', line 106

def display_path(path)
  return path if path.nil?

  path.to_s.sub(VAR_HOME_PREFIX, "/home")
end

.display_text(text) ⇒ Object



112
113
114
115
116
# File 'lib/kettle/dev.rb', line 112

def display_text(text)
  return text if text.nil?

  text.to_s.gsub(VAR_HOME_TEXT, "/home")
end

.install_tasks ⇒ void

This method returns an undefined value.

Singleton methods



162
163
164
165
166
# File 'lib/kettle/dev.rb', line 162

def install_tasks
  linting_tasks
  coverage_tasks
  load("kettle/dev/tasks.rb")
end

.register_default(task_name) ⇒ Array<String>

Register a task name to be run by the default task. Also enhances the :default task immediately if it exists.

Parameters:

  • task_name (String, Symbol)

Returns:

  • (Array<String>) —

    the updated defaults registry



176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/kettle/dev.rb', line 176

def register_default(task_name)
  task_name = task_name.to_s
  unless defaults.include?(task_name)
    @defaults = (defaults + [task_name]).freeze # rubocop:disable ThreadSafety/ClassInstanceVariable
    if defined?(Rake) && Rake::Task.task_defined?(:default)
      begin
        Rake::Task[:default].enhance([task_name])
      rescue => e
        Kernel.warn("kettle-dev: failed to enhance :default with #{task_name}: #{e.message}") if DEBUGGING
      end
    end
  end
  defaults
end

.safe_load_yaml(content) ⇒ Object



118
119
120
121
122
# File 'lib/kettle/dev.rb', line 118

def safe_load_yaml(content)
  YAML.safe_load(content, permitted_classes: [], aliases: false)
rescue ArgumentError
  YAML.safe_load(content, [], [], false)
end

.safe_load_yaml_file(path) ⇒ Object



124
125
126
# File 'lib/kettle/dev.rb', line 124

def safe_load_yaml_file(path)
  safe_load_yaml(File.read(path))
end

.skip_test_tasks? ⇒ Boolean

Returns:

  • (Boolean)


195
196
197
# File 'lib/kettle/dev.rb', line 195

def skip_test_tasks?
  ENV_TRUE_RE.match?(ENV.fetch("KETTLE_DEV_SKIP_TESTS", ""))
end