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/static_ruby.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/portability_guard.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, PortabilityGuard, StaticRuby 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



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/prebake.rb', line 35

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



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

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

.backend_typeObject



74
75
76
# File 'lib/prebake.rb', line 74

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

.enabled?Boolean

Returns:

  • (Boolean)


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

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

.libruby_available?Boolean

Returns:

  • (Boolean)


33
# File 'lib/prebake.rb', line 33

def self.libruby_available? = StaticRuby.libruby_available?

.max_glibcObject



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

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

.optional_native_extension?(gem_name) ⇒ Boolean

Returns:

  • (Boolean)


32
# File 'lib/prebake.rb', line 32

def self.optional_native_extension?(gem_name) = StaticRuby.optional_native_extension?(gem_name)

.optional_native_extensionsObject



31
# File 'lib/prebake.rb', line 31

def self.optional_native_extensions = StaticRuby.optional_native_extensions

.push_enabled?Boolean

Returns:

  • (Boolean)


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

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

.reset!Object



54
55
56
57
58
# File 'lib/prebake.rb', line 54

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

.setup!Object



60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/prebake.rb', line 60

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)


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

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