beni 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +54 -0
  3. data/README.md +141 -14
  4. data/lib/beni/build_config.rb +45 -0
  5. data/lib/beni/builder.rb +141 -0
  6. data/lib/beni/configuration.rb +12 -0
  7. data/lib/beni/dsl/context.rb +108 -0
  8. data/lib/beni/dsl/definition_context.rb +49 -0
  9. data/lib/beni/dsl/target_context.rb +35 -0
  10. data/lib/beni/dsl.rb +25 -0
  11. data/lib/beni/selected_toolchain.rb +11 -0
  12. data/lib/beni/target.rb +9 -0
  13. data/lib/beni/tasks.rb +159 -0
  14. data/lib/beni/toolchain_definition.rb +9 -0
  15. data/lib/beni/vendor/checksum.rb +68 -0
  16. data/lib/beni/vendor/downloader.rb +78 -0
  17. data/lib/beni/vendor/tarball.rb +72 -0
  18. data/lib/beni/vendor/toolchain.rb +107 -0
  19. data/lib/beni/vendor/toolchains/wasi.rake +30 -0
  20. data/lib/beni/vendor.rb +139 -0
  21. data/lib/beni/version.rb +1 -1
  22. data/lib/beni.rb +9 -1
  23. data/sig/beni/build_config.rbs +9 -0
  24. data/sig/beni/builder.rbs +39 -0
  25. data/sig/beni/configuration.rbs +10 -0
  26. data/sig/beni/dsl/context.rbs +39 -0
  27. data/sig/beni/dsl/definition_context.rbs +19 -0
  28. data/sig/beni/dsl/target_context.rbs +15 -0
  29. data/sig/beni/dsl.rbs +5 -0
  30. data/sig/beni/selected_toolchain.rbs +9 -0
  31. data/sig/beni/target.rbs +8 -0
  32. data/sig/beni/tasks.rbs +36 -0
  33. data/sig/beni/toolchain_definition.rbs +9 -0
  34. data/sig/beni/vendor/checksum.rbs +22 -0
  35. data/sig/beni/vendor/downloader.rbs +26 -0
  36. data/sig/beni/vendor/tarball.rbs +24 -0
  37. data/sig/beni/vendor/toolchain.rbs +33 -0
  38. data/sig/beni/vendor.rbs +20 -0
  39. data/sig/beni.rbs +3 -1
  40. data/sig/patches/open-uri.rbs +10 -0
  41. metadata +59 -9
  42. data/Rakefile +0 -12
data/lib/beni.rb CHANGED
@@ -4,5 +4,13 @@ require_relative "beni/version"
4
4
 
5
5
  module Beni
6
6
  class Error < StandardError; end
7
- # Your code goes here...
8
7
  end
8
+
9
+ require_relative "beni/vendor"
10
+ require_relative "beni/builder"
11
+ require_relative "beni/build_config"
12
+ require_relative "beni/target"
13
+ require_relative "beni/toolchain_definition"
14
+ require_relative "beni/selected_toolchain"
15
+ require_relative "beni/configuration"
16
+ require_relative "beni/dsl"
@@ -0,0 +1,9 @@
1
+ module Beni
2
+ module BuildConfig
3
+ def self?.generate: (String dest, mruby_dir: String, version: String) -> String
4
+
5
+ def self?.staged_default_config: (String mruby_dir, String version) -> String
6
+
7
+ def self?.staged_version: (String mruby_dir) -> String?
8
+ end
9
+ end
@@ -0,0 +1,39 @@
1
+ module Beni
2
+ class Builder
3
+ DEFAULT_TARGETS: Array[String]
4
+
5
+ attr_reader vendor_dir: String
6
+ attr_reader build_config: String?
7
+ attr_reader targets: Array[String]
8
+
9
+ def initialize: (vendor_dir: String, ?build_config: String?, ?targets: Array[String]) -> void
10
+
11
+ def mruby_dir: () -> String
12
+
13
+ def libmruby_path: (String target) -> String
14
+
15
+ def libmruby_paths: () -> Array[String]
16
+
17
+ def built?: () -> bool
18
+
19
+ def ensure_built: () -> void
20
+
21
+ def build: () -> void
22
+
23
+ def clean: () -> void
24
+
25
+ private
26
+
27
+ def artifact_paths: () -> Array[String]
28
+
29
+ def run_mruby_rake: (Hash[String, String] env, Array[String] cmd) -> void
30
+
31
+ def env: () -> Hash[String, String]
32
+
33
+ def check_build_config!: () -> void
34
+
35
+ def flags_mak_paths: () -> Array[String]
36
+
37
+ def verify_artifacts!: () -> void
38
+ end
39
+ end
@@ -0,0 +1,10 @@
1
+ module Beni
2
+ class Configuration
3
+ attr_reader vendor_dir: String
4
+ attr_reader build_config: String?
5
+ attr_reader targets: Array[String]
6
+ attr_reader toolchains: Array[SelectedToolchain]
7
+
8
+ def initialize: (vendor_dir: String, build_config: String?, targets: Array[String], toolchains: Array[SelectedToolchain]) -> void
9
+ end
10
+ end
@@ -0,0 +1,39 @@
1
+ module Beni
2
+ module DSL
3
+ class Context
4
+ @settings: Hash[Symbol, String]
5
+ @targets: Hash[String, Target]
6
+ @definitions: Hash[String, ToolchainDefinition]
7
+
8
+ def initialize: () -> void
9
+
10
+ def version: (String value) -> void
11
+
12
+ def build_config: (String path) -> void
13
+
14
+ def vendor_dir: (String path) -> void
15
+
16
+ def target: (Symbol | String name) ?{ () [self: TargetContext] -> void } -> void
17
+
18
+ def toolchain: (String name) ?{ () [self: DefinitionContext] -> void } -> void
19
+
20
+ def configuration: () -> Configuration
21
+
22
+ private
23
+
24
+ def declare_scalar: (Symbol key, String value) -> void
25
+
26
+ def resolved_vendor_dir: () -> String
27
+
28
+ def resolved_build_config: () -> String?
29
+
30
+ def resolved_targets: () -> Array[String]
31
+
32
+ def selected_names: () -> Array[String]
33
+
34
+ def selected_toolchain: (String name) -> SelectedToolchain
35
+
36
+ def mruby_version: () -> String
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,19 @@
1
+ module Beni
2
+ module DSL
3
+ class DefinitionContext
4
+ @name: String
5
+ @version: String?
6
+ @sha256: String?
7
+
8
+ def self.collect: (String name) { () [self: DefinitionContext] -> void } -> ToolchainDefinition
9
+
10
+ def initialize: (String name) -> void
11
+
12
+ def version: (String value) -> void
13
+
14
+ def sha256: (String value) -> void
15
+
16
+ def to_definition: () -> ToolchainDefinition
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ module Beni
2
+ module DSL
3
+ class TargetContext
4
+ @references: Array[String]
5
+
6
+ def self.collect: () { () [self: TargetContext] -> void } -> Array[String]
7
+
8
+ attr_reader references: Array[String]
9
+
10
+ def initialize: () -> void
11
+
12
+ def toolchain: (String name) ?{ () -> void } -> void
13
+ end
14
+ end
15
+ end
data/sig/beni/dsl.rbs ADDED
@@ -0,0 +1,5 @@
1
+ module Beni
2
+ module DSL
3
+ def self?.assert_known_toolchain!: (String name) -> void
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ module Beni
2
+ class SelectedToolchain
3
+ attr_reader name: String
4
+ attr_reader version: String
5
+ attr_reader sha256: String?
6
+
7
+ def initialize: (name: String, version: String, sha256: String?) -> void
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ module Beni
2
+ class Target
3
+ attr_reader name: String
4
+ attr_reader references: Array[String]
5
+
6
+ def initialize: (name: String, references: Array[String]) -> void
7
+ end
8
+ end
@@ -0,0 +1,36 @@
1
+ module Beni
2
+ class Tasks < Rake::TaskLib
3
+ @builder: Builder?
4
+ @vendor_toolchains: Array[Vendor::Toolchain]?
5
+
6
+ attr_reader configuration: Configuration
7
+
8
+ def initialize: () ?{ () [self: DSL::Context] -> void } -> void
9
+
10
+ private
11
+
12
+ def builder: () -> Builder
13
+
14
+ def vendor_toolchains: () -> Array[Vendor::Toolchain]
15
+
16
+ def define: () -> void
17
+
18
+ def define_vendor_namespace: () -> void
19
+
20
+ def define_vendor_setup_task: () -> void
21
+
22
+ def wasi_sdk_selected?: () -> bool
23
+
24
+ def define_vendor_clean_tasks: () -> void
25
+
26
+ def define_toolchain_tasks: (Vendor::Toolchain toolchain) -> void
27
+
28
+ def define_build_task: () -> void
29
+
30
+ def define_clean_task: () -> void
31
+
32
+ def define_config_task: () -> void
33
+
34
+ def mruby_version: () -> String
35
+ end
36
+ end
@@ -0,0 +1,9 @@
1
+ module Beni
2
+ class ToolchainDefinition
3
+ attr_reader name: String
4
+ attr_reader version: String
5
+ attr_reader sha256: String
6
+
7
+ def initialize: (name: String, version: String, sha256: String) -> void
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ module Beni
2
+ module Vendor
3
+ class Checksum
4
+ @path: String
5
+ @expected_sha: String?
6
+
7
+ def initialize: (String path, String? expected_sha) -> void
8
+
9
+ def verify_or_pin: () -> String
10
+
11
+ private
12
+
13
+ def expected?: () -> bool
14
+
15
+ def sha256: () -> String
16
+
17
+ def verify_against_expected: (String actual, String sidecar) -> void
18
+
19
+ def verify_or_pin_sidecar: (String actual, String sidecar) -> void
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ module Beni
2
+ module Vendor
3
+ class Downloader
4
+ MAX_RETRIES: Integer
5
+
6
+ TRANSIENT_ERRORS: Array[singleton(StandardError)]
7
+
8
+ @url: String
9
+ @dest: String
10
+
11
+ def initialize: (String url, String dest) -> void
12
+
13
+ def download: () -> void
14
+
15
+ private
16
+
17
+ def fetch: (String tmp) -> void
18
+
19
+ def with_retry: [T] () { () -> T } -> T
20
+
21
+ def permanent?: (StandardError error) -> bool
22
+
23
+ def warn_and_sleep: (StandardError error, Integer attempt) -> void
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ module Beni
2
+ module Vendor
3
+ class Tarball
4
+ VERSION_MARKER: String
5
+
6
+ @tarball: String
7
+ @top_level_dir: String
8
+ @final_dir: String
9
+ @version: String
10
+
11
+ def initialize: (tarball: String, top_level_dir: String, final_dir: String, version: String) -> void
12
+
13
+ def prepare: () -> void
14
+
15
+ private
16
+
17
+ def installed_version: () -> String?
18
+
19
+ def extract_to_staging: (String staging) -> void
20
+
21
+ def promote: (String staging) -> void
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,33 @@
1
+ module Beni
2
+ module Vendor
3
+ class Toolchain
4
+ attr_reader name: String
5
+ attr_reader version_label: String
6
+ attr_reader base_url: String
7
+ attr_reader tarball_name: String
8
+ attr_reader top_level_dir: String
9
+ attr_reader vendor_dir: String
10
+ attr_reader expected_sha256: String?
11
+
12
+ def initialize: (name: String, version_label: String, base_url: String, tarball_name: String, top_level_dir: String, vendor_dir: String, expected_sha256: String?) -> void
13
+
14
+ def task_name: () -> Symbol
15
+
16
+ def url: () -> String
17
+
18
+ def final_dir: () -> String
19
+
20
+ def tarball_path: () -> String
21
+
22
+ def fetch: () -> String
23
+
24
+ def verify: () -> String
25
+
26
+ def install: () -> void
27
+
28
+ private
29
+
30
+ def downloader: () -> Downloader
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,20 @@
1
+ module Beni
2
+ module Vendor
3
+ type built_in_pair = { version: String, sha256: String | Hash[String, String] }
4
+
5
+ BUILT_IN_PAIRS: Hash[String, built_in_pair]
6
+ DEPENDENCIES: Hash[String, Array[String]]
7
+ WASI_SDK_PLATFORM: String
8
+ TOOLCHAIN_FACTORIES: Hash[String, Symbol]
9
+
10
+ def self?.wasi_sdk: (vendor_dir: String, ?version: String?, ?sha256: String?) -> Toolchain
11
+
12
+ def self?.mruby: (vendor_dir: String, ?version: String?, ?sha256: String?) -> Toolchain
13
+
14
+ def self?.base_url_for: (String default) -> String
15
+
16
+ def self?.built_in_sha256: (String name, String version) -> String?
17
+
18
+ def self?.stage_wasi_toolchain_file: (vendor_dir: String) -> String
19
+ end
20
+ end
data/sig/beni.rbs CHANGED
@@ -1,4 +1,6 @@
1
1
  module Beni
2
2
  VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
3
+
4
+ class Error < StandardError
5
+ end
4
6
  end
@@ -0,0 +1,10 @@
1
+ # Patch: rbs' open-uri stdlib signatures only cover the module function
2
+ # +URI.open+; the instance form +URI::Generic#open+ (mixed in via
3
+ # +OpenURI::OpenRead+ for http/https/ftp URIs at runtime) is missing.
4
+ # Declared here so +Beni::Vendor::Downloader#download+ type-checks.
5
+ module URI
6
+ class Generic
7
+ def open: (?String mode) -> (StringIO & OpenURI::Meta)
8
+ | [T] (?String mode) { (StringIO | Tempfile) -> T } -> T
9
+ end
10
+ end
metadata CHANGED
@@ -1,35 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beni
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aotokitsuruya
8
8
  bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies: []
12
- description: 'Reserved: mruby dependency manager that vendors mruby source and builds
13
- libmruby.a, under active development. The build chain is being extracted from the
14
- kobako project.'
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rake
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '13.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '13.0'
26
+ description: Vendors a pinned mruby and builds libmruby.a through a Rake task library,
27
+ with generated build configs for customization. Aims to grow into a full mruby dependency
28
+ manager.
15
29
  email:
16
30
  - contact@aotoki.me
17
31
  executables: []
18
32
  extensions: []
19
33
  extra_rdoc_files: []
20
34
  files:
35
+ - CHANGELOG.md
21
36
  - LICENSE
22
37
  - README.md
23
- - Rakefile
24
38
  - lib/beni.rb
39
+ - lib/beni/build_config.rb
40
+ - lib/beni/builder.rb
41
+ - lib/beni/configuration.rb
42
+ - lib/beni/dsl.rb
43
+ - lib/beni/dsl/context.rb
44
+ - lib/beni/dsl/definition_context.rb
45
+ - lib/beni/dsl/target_context.rb
46
+ - lib/beni/selected_toolchain.rb
47
+ - lib/beni/target.rb
48
+ - lib/beni/tasks.rb
49
+ - lib/beni/toolchain_definition.rb
50
+ - lib/beni/vendor.rb
51
+ - lib/beni/vendor/checksum.rb
52
+ - lib/beni/vendor/downloader.rb
53
+ - lib/beni/vendor/tarball.rb
54
+ - lib/beni/vendor/toolchain.rb
55
+ - lib/beni/vendor/toolchains/wasi.rake
25
56
  - lib/beni/version.rb
26
57
  - sig/beni.rbs
58
+ - sig/beni/build_config.rbs
59
+ - sig/beni/builder.rbs
60
+ - sig/beni/configuration.rbs
61
+ - sig/beni/dsl.rbs
62
+ - sig/beni/dsl/context.rbs
63
+ - sig/beni/dsl/definition_context.rbs
64
+ - sig/beni/dsl/target_context.rbs
65
+ - sig/beni/selected_toolchain.rbs
66
+ - sig/beni/target.rbs
67
+ - sig/beni/tasks.rbs
68
+ - sig/beni/toolchain_definition.rbs
69
+ - sig/beni/vendor.rbs
70
+ - sig/beni/vendor/checksum.rbs
71
+ - sig/beni/vendor/downloader.rbs
72
+ - sig/beni/vendor/tarball.rbs
73
+ - sig/beni/vendor/toolchain.rbs
74
+ - sig/patches/open-uri.rbs
27
75
  homepage: https://github.com/elct9620/beni
28
76
  licenses:
29
77
  - Apache-2.0
30
78
  metadata:
31
79
  homepage_uri: https://github.com/elct9620/beni
32
- source_code_uri: https://github.com/elct9620/beni
80
+ source_code_uri: https://github.com/elct9620/beni/tree/main
81
+ changelog_uri: https://github.com/elct9620/beni/blob/main/CHANGELOG.md
82
+ rubygems_mfa_required: 'true'
33
83
  rdoc_options: []
34
84
  require_paths:
35
85
  - lib
@@ -37,7 +87,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
37
87
  requirements:
38
88
  - - ">="
39
89
  - !ruby/object:Gem::Version
40
- version: 3.2.0
90
+ version: 3.3.0
41
91
  required_rubygems_version: !ruby/object:Gem::Requirement
42
92
  requirements:
43
93
  - - ">="
@@ -46,5 +96,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
96
  requirements: []
47
97
  rubygems_version: 3.6.9
48
98
  specification_version: 4
49
- summary: mruby dependency manager
99
+ summary: mruby vendoring and build toolchain
50
100
  test_files: []
data/Rakefile DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- require "minitest/test_task"
5
-
6
- Minitest::TestTask.create
7
-
8
- require "rubocop/rake_task"
9
-
10
- RuboCop::RakeTask.new
11
-
12
- task default: %i[test rubocop]