Module: Prebake

Defined in:
lib/prebake.rb,
lib/prebake/glibc.rb,
lib/prebake/hooks.rb,
lib/prebake/logger.rb,
lib/prebake/platform.rb,
lib/prebake/cache_key.rb,
lib/prebake/extractor.rb,
lib/prebake/backends/s3.rb,
lib/prebake/backends/base.rb,
lib/prebake/backends/http.rb,
lib/prebake/elf_inspector.rb,
lib/prebake/async_publisher.rb,
lib/prebake/backends/gemstash.rb,
lib/prebake/ext_builder_patch.rb,
lib/prebake/extension_validator.rb,
lib/prebake/backends/http_client.rb,
lib/prebake/platform_gem_builder.rb

Defined Under Namespace

Modules: AsyncPublisher, Backends, CacheKey, ElfInspector, ExtBuilderPatch, ExtensionValidator, Extractor, Glibc, Hooks, Logger, Platform Classes: Error, PlatformGemBuilder

Constant Summary collapse

RUBY_ABI_VERSION =

major.minor only - ABI is stable across patch versions

"#{RbConfig::CONFIG['MAJOR']}.#{RbConfig::CONFIG['MINOR']}".freeze
DEFAULT_HTTP_URL =
"https://gems.prebake.in"

Class Method Summary collapse

Class Method Details

.backendObject



30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/prebake.rb', line 30

def self.backend
  return @backend if defined?(@backend_loaded)

  @backend_mutex.synchronize do
    return @backend if defined?(@backend_loaded)

    @backend_loaded = true
    @backend = load_backend
  end
rescue Error => e
  Logger.warn "Backend initialization failed: #{e.message}. Plugin disabled for this session."
  @backend = nil
end

.backend=(backend) ⇒ Object



44
45
46
47
# File 'lib/prebake.rb', line 44

def self.backend=(backend)
  @backend_loaded = true
  @backend = backend
end

.backend_typeObject



68
69
70
# File 'lib/prebake.rb', line 68

def self.backend_type
  ENV.fetch("PREBAKE_BACKEND", "http")
end

.enabled?Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/prebake.rb', line 14

def self.enabled?
  ENV.fetch("PREBAKE_ENABLED", "true") != "false"
end

.max_glibcObject



26
27
28
# File 'lib/prebake.rb', line 26

def self.max_glibc
  ENV.fetch("PREBAKE_MAX_GLIBC", nil)
end

.push_enabled?Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/prebake.rb', line 18

def self.push_enabled?
  enabled? && ENV.fetch("PREBAKE_PUSH_ENABLED", "false") == "true"
end

.reset!Object



49
50
51
52
# File 'lib/prebake.rb', line 49

def self.reset!
  remove_instance_variable(:@backend_loaded) if defined?(@backend_loaded)
  remove_instance_variable(:@backend) if defined?(@backend)
end

.setup!Object



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/prebake.rb', line 54

def self.setup!
  return unless enabled?

  require_relative "prebake/ext_builder_patch"
  Gem::Ext::Builder.prepend(ExtBuilderPatch)

  require_relative "prebake/hooks"
  Hooks.register!

  Logger.info "Plugin active (backend: #{backend_type})"
rescue StandardError => e
  Logger.warn "Failed to initialize: #{e.message}"
end

.skip_portability_check?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/prebake.rb', line 22

def self.skip_portability_check?
  ENV.fetch("PREBAKE_SKIP_PORTABILITY_CHECK", "false") == "true"
end