reflex-packager 0.2.0 → 0.3.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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/package.yml +310 -0
  3. data/.github/workflows/release-gem.yml +2 -49
  4. data/.github/workflows/tag.yml +11 -28
  5. data/.github/workflows/test.yml +16 -37
  6. data/.gitignore +2 -0
  7. data/ChangeLog.md +28 -0
  8. data/Gemfile.lock +26 -0
  9. data/README.md +232 -27
  10. data/Rakefile +21 -0
  11. data/VERSION +1 -1
  12. data/bin/reflex +2 -32
  13. data/examples/hello/icon.png +0 -0
  14. data/examples/hello/main.rb +18 -0
  15. data/examples/hello/reflex.yml +3 -0
  16. data/lib/reflex/packager/app_store_connect.rb +162 -0
  17. data/lib/reflex/packager/cli.rb +42 -9
  18. data/lib/reflex/packager/config.rb +233 -36
  19. data/lib/reflex/packager/data_compiler.rb +59 -0
  20. data/lib/reflex/packager/data_file.rb +183 -0
  21. data/lib/reflex/packager/data_loader.rb +127 -0
  22. data/lib/reflex/packager/gems.rb +282 -0
  23. data/lib/reflex/packager/library.rb +120 -0
  24. data/lib/reflex/packager/macos.rb +592 -94
  25. data/lib/reflex/packager/platform.rb +289 -10
  26. data/lib/reflex/packager/profile.rb +38 -26
  27. data/lib/reflex/packager/profiles/reflex.rb +43 -0
  28. data/lib/reflex/packager/rake.rb +115 -0
  29. data/lib/reflex/packager/stores/app_store.rb +60 -0
  30. data/lib/reflex/packager/stores/itchio.rb +53 -0
  31. data/lib/reflex/packager/templates/macos/AppStore.entitlements.erb +8 -0
  32. data/lib/reflex/packager/templates/macos/AppStoreExportOptions.plist.erb +14 -0
  33. data/lib/reflex/packager/templates/macos/ExportOptions.plist.erb +20 -0
  34. data/lib/reflex/packager/templates/macos/InfoPlist.strings.erb +5 -0
  35. data/lib/reflex/packager/templates/macos/boot.rb.erb +29 -0
  36. data/lib/reflex/packager/templates/macos/compile.rb.erb +7 -0
  37. data/lib/reflex/packager/templates/macos/main.mm.erb +10 -7
  38. data/lib/reflex/packager/templates/macos/project.yml.erb +60 -3
  39. data/lib/reflex/packager/templates/windows/app.manifest.erb +25 -0
  40. data/lib/reflex/packager/templates/windows/app.rc.erb +38 -0
  41. data/lib/reflex/packager/templates/windows/boot.rb.erb +32 -0
  42. data/lib/reflex/packager/templates/windows/main.cpp.erb +47 -0
  43. data/lib/reflex/packager/templates/windows/runtime.manifest.erb +7 -0
  44. data/lib/reflex/packager/windows.rb +370 -0
  45. data/lib/reflex/packager.rb +18 -1
  46. data/reflex-packager.gemspec +8 -7
  47. data/test/helper.rb +50 -5
  48. data/test/test_packager_app_store_connect.rb +108 -0
  49. data/test/test_packager_cli.rb +38 -3
  50. data/test/test_packager_config.rb +166 -27
  51. data/test/test_packager_data_file.rb +96 -0
  52. data/test/test_packager_data_loader.rb +114 -0
  53. data/test/test_packager_library.rb +81 -0
  54. data/test/test_packager_macos.rb +714 -86
  55. data/test/test_packager_platform.rb +16 -0
  56. data/test/test_packager_rake.rb +165 -0
  57. data/test/test_packager_stores_app_store.rb +66 -0
  58. data/test/test_packager_stores_itchio.rb +38 -0
  59. data/test/test_packager_windows.rb +685 -0
  60. metadata +72 -15
  61. data/.github/workflows/utils.rb +0 -127
  62. data/lib/reflex/packager/templates/macos/Podfile.erb +0 -30
metadata CHANGED
@@ -1,72 +1,86 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reflex-packager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-08-04 00:00:00.000000000 Z
11
+ date: 2026-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fiddle
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: xot
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: 0.4.0
33
+ version: 0.5.0
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: 0.4.0
40
+ version: 0.5.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rucy
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: 0.4.0
47
+ version: 0.5.0
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: 0.4.0
54
+ version: 0.5.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rays
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: 0.4.0
61
+ version: 0.5.0
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: 0.4.0
68
+ version: 0.5.0
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: reflexion
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: 0.6.0
75
+ version: 0.7.0
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: 0.6.0
69
- description: CLI tool to package Reflex applications as native macOS application bundles.
82
+ version: 0.7.0
83
+ description: CLI tool to package Reflex applications as native macOS and Windows applications.
70
84
  email: xordog@gmail.com
71
85
  executables:
72
86
  - reflex
@@ -74,34 +88,68 @@ extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
76
90
  - ".github/PULL_REQUEST_TEMPLATE.md"
91
+ - ".github/workflows/package.yml"
77
92
  - ".github/workflows/release-gem.yml"
78
93
  - ".github/workflows/tag.yml"
79
94
  - ".github/workflows/test.yml"
80
- - ".github/workflows/utils.rb"
81
95
  - ".gitignore"
82
96
  - CONTRIBUTING.md
83
97
  - ChangeLog.md
84
98
  - Gemfile
99
+ - Gemfile.lock
85
100
  - LICENSE
86
101
  - README.md
87
102
  - Rakefile
88
103
  - VERSION
89
104
  - bin/reflex
105
+ - examples/hello/icon.png
106
+ - examples/hello/main.rb
107
+ - examples/hello/reflex.yml
90
108
  - lib/reflex/packager.rb
109
+ - lib/reflex/packager/app_store_connect.rb
91
110
  - lib/reflex/packager/cli.rb
92
111
  - lib/reflex/packager/config.rb
112
+ - lib/reflex/packager/data_compiler.rb
113
+ - lib/reflex/packager/data_file.rb
114
+ - lib/reflex/packager/data_loader.rb
93
115
  - lib/reflex/packager/extension.rb
116
+ - lib/reflex/packager/gems.rb
117
+ - lib/reflex/packager/library.rb
94
118
  - lib/reflex/packager/macos.rb
95
119
  - lib/reflex/packager/platform.rb
96
120
  - lib/reflex/packager/profile.rb
97
- - lib/reflex/packager/templates/macos/Podfile.erb
121
+ - lib/reflex/packager/profiles/reflex.rb
122
+ - lib/reflex/packager/rake.rb
123
+ - lib/reflex/packager/stores/app_store.rb
124
+ - lib/reflex/packager/stores/itchio.rb
125
+ - lib/reflex/packager/templates/macos/AppStore.entitlements.erb
126
+ - lib/reflex/packager/templates/macos/AppStoreExportOptions.plist.erb
127
+ - lib/reflex/packager/templates/macos/ExportOptions.plist.erb
128
+ - lib/reflex/packager/templates/macos/InfoPlist.strings.erb
129
+ - lib/reflex/packager/templates/macos/boot.rb.erb
130
+ - lib/reflex/packager/templates/macos/compile.rb.erb
98
131
  - lib/reflex/packager/templates/macos/main.mm.erb
99
132
  - lib/reflex/packager/templates/macos/project.yml.erb
133
+ - lib/reflex/packager/templates/windows/app.manifest.erb
134
+ - lib/reflex/packager/templates/windows/app.rc.erb
135
+ - lib/reflex/packager/templates/windows/boot.rb.erb
136
+ - lib/reflex/packager/templates/windows/main.cpp.erb
137
+ - lib/reflex/packager/templates/windows/runtime.manifest.erb
138
+ - lib/reflex/packager/windows.rb
100
139
  - reflex-packager.gemspec
101
140
  - test/helper.rb
141
+ - test/test_packager_app_store_connect.rb
102
142
  - test/test_packager_cli.rb
103
143
  - test/test_packager_config.rb
144
+ - test/test_packager_data_file.rb
145
+ - test/test_packager_data_loader.rb
146
+ - test/test_packager_library.rb
104
147
  - test/test_packager_macos.rb
148
+ - test/test_packager_platform.rb
149
+ - test/test_packager_rake.rb
150
+ - test/test_packager_stores_app_store.rb
151
+ - test/test_packager_stores_itchio.rb
152
+ - test/test_packager_windows.rb
105
153
  homepage: https://github.com/xord/reflex-packager
106
154
  licenses:
107
155
  - MIT
@@ -121,12 +169,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
169
  - !ruby/object:Gem::Version
122
170
  version: '0'
123
171
  requirements: []
124
- rubygems_version: 3.4.19
172
+ rubygems_version: 3.5.22
125
173
  signing_key:
126
174
  specification_version: 4
127
- summary: Package Reflex applications as native app bundles.
175
+ summary: Package Reflex applications as native apps.
128
176
  test_files:
129
177
  - test/helper.rb
178
+ - test/test_packager_app_store_connect.rb
130
179
  - test/test_packager_cli.rb
131
180
  - test/test_packager_config.rb
181
+ - test/test_packager_data_file.rb
182
+ - test/test_packager_data_loader.rb
183
+ - test/test_packager_library.rb
132
184
  - test/test_packager_macos.rb
185
+ - test/test_packager_platform.rb
186
+ - test/test_packager_rake.rb
187
+ - test/test_packager_stores_app_store.rb
188
+ - test/test_packager_stores_itchio.rb
189
+ - test/test_packager_windows.rb
@@ -1,127 +0,0 @@
1
- require 'shellwords'
2
-
3
- ALL_REPO = 'xord/all'
4
- ALL_DIR = '../all'
5
- ALL_FETCH_DEPTH = 100
6
-
7
- RENAMES = {reflex: 'reflexion'}
8
-
9
- def sh(cmd)
10
- puts cmd
11
- system cmd
12
- end
13
-
14
- def setup_dependencies(only: nil)
15
- gemspec_path = `git ls-files`.lines(chomp: true).find {|l| l =~ /\.gemspec$/}
16
- return unless gemspec_path
17
-
18
- gemspec = File.read gemspec_path
19
- name = File.basename gemspec_path, '.gemspec'
20
-
21
- exts = File.readlines('Rakefile')
22
- .map {|l| l[%r|^\s*require\W+([\w\-\_]+)/extension\W+$|, 1]}
23
- .compact
24
- .reject {|ext| ext == name}
25
- exts = exts & [only].flatten.map(&:to_s) if only
26
- return if exts.empty?
27
-
28
- unless setup_dependencies_via_monorepo(exts)
29
- setup_dependencies_via_each_repo_by_version(gemspec, exts)
30
- end
31
-
32
- exts.each {|ext| sh %( cd ../#{ext} && rake ext )}
33
- end
34
-
35
- def setup_dependencies_via_monorepo(exts)
36
- return false unless checkout_monorepo
37
- exts.each {|ext| sh %( ln -snf all/#{ext} ../#{ext} )}
38
- true
39
- end
40
-
41
- def checkout_monorepo()
42
- uuid = `git log -1 --format=%B`[/^\[\[([0-9a-fA-F-]+)\]\]$/, 1]
43
- return false unless uuid
44
-
45
- commit = setup_monorepo uuid
46
- return false unless commit
47
-
48
- Dir.chdir(ALL_DIR) {sh %( git checkout -q #{commit} )}
49
- true
50
- end
51
-
52
- def setup_monorepo(uuid)
53
- unless File.directory? ALL_DIR
54
- url = "https://github.com/#{ALL_REPO}.git"
55
- sh %( git clone --no-tags --depth #{ALL_FETCH_DEPTH} #{url} #{ALL_DIR} )
56
- end
57
- loop do
58
- commit = find_monorepo_commit uuid
59
- return commit if commit
60
-
61
- deepened = Dir.chdir ALL_DIR do
62
- before = `git rev-list --count HEAD`.to_i
63
- sh %( git fetch --deepen #{ALL_FETCH_DEPTH} )
64
- `git rev-list --count HEAD`.to_i > before
65
- end
66
- return nil unless deepened
67
- end
68
- end
69
-
70
- def find_monorepo_commit(uuid)
71
- Dir.chdir ALL_DIR do
72
- out = `git log origin/HEAD -F --grep="[[#{uuid}]]" --format=%H -1`.strip
73
- out.empty? ? nil : out
74
- end
75
- end
76
-
77
- def setup_dependencies_via_each_repo_by_version(gemspec, exts)
78
- exts.each do |ext|
79
- gem = RENAMES[ext.to_sym].then {|s| s || ext}
80
- ver = gemspec[/add_dependency.*['"]#{gem}['"].*['"]\s*~>\s*([\d\.]+)\s*['"]/, 1]
81
- opts = '-c advice.detachedHead=false --depth 1'
82
- clone = "git clone #{opts} https://github.com/xord/#{ext}.git ../#{ext}"
83
-
84
- # 'rake subtree:push' pushes all subrepos, so cloning by new tag
85
- # often fails before tagging each new tag
86
- sh %( #{clone} --branch v#{ver} || #{clone} )
87
- end
88
- end
89
-
90
- def tag_versions()
91
- changes = changelogs
92
- tags = `git tag`.lines chomp: true
93
- vers = `git log --oneline ./VERSION`
94
- .lines(chomp: true)
95
- .map {|line| line.split.first[/^\w+$/]}
96
- .map {|sha| [`git cat-file -p #{sha}:./VERSION 2>/dev/null`[/[\d\.]+/], sha]}
97
- .select {|ver, sha| ver && sha}
98
- .reverse
99
- .to_h
100
-
101
- vers.to_a.reverse.each do |ver, sha|
102
- tag = "v#{ver}"
103
- break if tags.include?(tag)
104
- sh %( git tag -a -m \"#{changes[tag]&.gsub '"', '\\"'}\" #{tag} #{sha} )
105
- end
106
- end
107
-
108
- def release(*paths)
109
- tag = ENV['GITHUB_REF']&.sub(%r|^refs/tags/|, '') || raise('GITHUB_REF tag not set')
110
- notes = (changelogs[tag] || '').shellescape
111
- paths = paths.flatten.join ' '
112
-
113
- sh(%( gh release create #{tag} #{paths} --notes #{notes} )) ||
114
- sh(%( gh release upload #{tag} #{paths} --clobber )) ||
115
- raise('failed to upload to releases')
116
- end
117
-
118
- def changelogs()
119
- File.read('ChangeLog.md')
120
- .split(/^\s*##\s*\[\s*(v[\d\.]+)\s*\].*$/)
121
- .slice(1..)
122
- .each_slice(2)
123
- .to_h
124
- .transform_values(&:strip!)
125
- rescue Errno::ENOENT
126
- raise 'failed to get changelogs'
127
- end
@@ -1,30 +0,0 @@
1
- # -*- mode: ruby -*-
2
-
3
- platform :macos, '<%= config.macos.deployment_target %>'
4
-
5
- target '<%= target %>' do
6
- <%- pod_refs.each do |name, ref| -%>
7
- <%= pod_line name, ref %>
8
- <%- end -%>
9
- end
10
-
11
- post_install do |installer|
12
- installer.pods_project.targets.each do |target|
13
- target.build_configurations.each do |c|
14
- c.build_settings['ARCHS'] = '<%= config.macos.archs.join ' ' %>'
15
- c.build_settings['VALID_ARCHS'] = '<%= config.macos.archs.join ' ' %>'
16
- end
17
- end
18
- <%- unless dev_pod_paths.empty? -%>
19
-
20
- # development pods are not placed under PODS_ROOT, so resolve
21
- # '${PODS_ROOT}/<name>' to each local directory in the xcconfigs
22
- Dir.glob('Pods/Target Support Files/**/*.xcconfig').each do |path|
23
- s = File.read path
24
- <%- dev_pod_paths.each do |name, dir| -%>
25
- s.gsub! '${PODS_ROOT}/<%= name %>', '<%= dir %>'
26
- <%- end -%>
27
- File.write path, s
28
- end
29
- <%- end -%>
30
- end