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.
- checksums.yaml +4 -4
- data/.github/workflows/package.yml +310 -0
- data/.github/workflows/release-gem.yml +2 -49
- data/.github/workflows/tag.yml +11 -28
- data/.github/workflows/test.yml +16 -37
- data/.gitignore +2 -0
- data/ChangeLog.md +28 -0
- data/Gemfile.lock +26 -0
- data/README.md +232 -27
- data/Rakefile +21 -0
- data/VERSION +1 -1
- data/bin/reflex +2 -32
- data/examples/hello/icon.png +0 -0
- data/examples/hello/main.rb +18 -0
- data/examples/hello/reflex.yml +3 -0
- data/lib/reflex/packager/app_store_connect.rb +162 -0
- data/lib/reflex/packager/cli.rb +42 -9
- data/lib/reflex/packager/config.rb +233 -36
- data/lib/reflex/packager/data_compiler.rb +59 -0
- data/lib/reflex/packager/data_file.rb +183 -0
- data/lib/reflex/packager/data_loader.rb +127 -0
- data/lib/reflex/packager/gems.rb +282 -0
- data/lib/reflex/packager/library.rb +120 -0
- data/lib/reflex/packager/macos.rb +592 -94
- data/lib/reflex/packager/platform.rb +289 -10
- data/lib/reflex/packager/profile.rb +38 -26
- data/lib/reflex/packager/profiles/reflex.rb +43 -0
- data/lib/reflex/packager/rake.rb +115 -0
- data/lib/reflex/packager/stores/app_store.rb +60 -0
- data/lib/reflex/packager/stores/itchio.rb +53 -0
- data/lib/reflex/packager/templates/macos/AppStore.entitlements.erb +8 -0
- data/lib/reflex/packager/templates/macos/AppStoreExportOptions.plist.erb +14 -0
- data/lib/reflex/packager/templates/macos/ExportOptions.plist.erb +20 -0
- data/lib/reflex/packager/templates/macos/InfoPlist.strings.erb +5 -0
- data/lib/reflex/packager/templates/macos/boot.rb.erb +29 -0
- data/lib/reflex/packager/templates/macos/compile.rb.erb +7 -0
- data/lib/reflex/packager/templates/macos/main.mm.erb +10 -7
- data/lib/reflex/packager/templates/macos/project.yml.erb +60 -3
- data/lib/reflex/packager/templates/windows/app.manifest.erb +25 -0
- data/lib/reflex/packager/templates/windows/app.rc.erb +38 -0
- data/lib/reflex/packager/templates/windows/boot.rb.erb +32 -0
- data/lib/reflex/packager/templates/windows/main.cpp.erb +47 -0
- data/lib/reflex/packager/templates/windows/runtime.manifest.erb +7 -0
- data/lib/reflex/packager/windows.rb +370 -0
- data/lib/reflex/packager.rb +18 -1
- data/reflex-packager.gemspec +8 -7
- data/test/helper.rb +50 -5
- data/test/test_packager_app_store_connect.rb +108 -0
- data/test/test_packager_cli.rb +38 -3
- data/test/test_packager_config.rb +166 -27
- data/test/test_packager_data_file.rb +96 -0
- data/test/test_packager_data_loader.rb +114 -0
- data/test/test_packager_library.rb +81 -0
- data/test/test_packager_macos.rb +714 -86
- data/test/test_packager_platform.rb +16 -0
- data/test/test_packager_rake.rb +165 -0
- data/test/test_packager_stores_app_store.rb +66 -0
- data/test/test_packager_stores_itchio.rb +38 -0
- data/test/test_packager_windows.rb +685 -0
- metadata +72 -15
- data/.github/workflows/utils.rb +0 -127
- 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.
|
|
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-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
69
|
-
description: CLI tool to package Reflex applications as native macOS
|
|
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/
|
|
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.
|
|
172
|
+
rubygems_version: 3.5.22
|
|
125
173
|
signing_key:
|
|
126
174
|
specification_version: 4
|
|
127
|
-
summary: Package Reflex applications as native
|
|
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
|
data/.github/workflows/utils.rb
DELETED
|
@@ -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
|