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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10cd5f3004ed2ad53e97c3192fdd570c278a55fffec18e95362a9ba103d73157
4
- data.tar.gz: 5a944112ad9c122f14273acc46f871c866499f81ee9bbac9fc77a08cc23ab2c2
3
+ metadata.gz: cb521f5b845fcc538ca8a2f71233eea1b89dbf57b7cfd0f983e6efb0d936785a
4
+ data.tar.gz: 5d3d2678a1008978d36bb1667ae0cd49d06cafdf9f690ea8f8f6ea6d4560c0c5
5
5
  SHA512:
6
- metadata.gz: 40515957ed04d11936455f04f6256c37bca7f92d999d72b2e7d39d7e60c3bc5aff26d90be6ce5e5693c33274a1dc28bbcded01ea2684ee957dcbe258e1bac0d4
7
- data.tar.gz: 45ed0fa02849953d1efee9e9d4f4da15fc1d270b753dcff949d6ebc89d6c84c4621b62d3f535df034627d7fedf8d31f23c2aeb960ed6d60461a3a4da8aa79430
6
+ metadata.gz: 745755edd9e378024f4dea7d1334da0848fd05ca7447133960368a91b24a08cb21d30526b3f0092df74e7e316687895a6971cf2ef20cab66d8af4eab4ca11213
7
+ data.tar.gz: 8b0d64a01d1b389ce28e1d11aa5e0cda42de43e4330aa0fbd4c34df517e4a84141287b9eb05f8486fd845c842cbd56012cd552c4af4bb2d63377d0f685744928
@@ -0,0 +1,310 @@
1
+ name: Package
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ platforms:
7
+ description: 'the platforms to package the app for, of macos and windows'
8
+ type: string
9
+ default: macos windows
10
+ ruby-version:
11
+ type: string
12
+ all-ref:
13
+ description: 'branch, tag or commit of xord/all for an app to take'
14
+ type: string
15
+ libraries:
16
+ description: 'the libraries of xord/all for all-ref, by the order to build'
17
+ type: string
18
+ default: xot rucy beeps rays reflex reflex-packager
19
+ retention-days:
20
+ description: 'days to keep the zip, and the pkg for the Mac App Store, of a run not of a tag, 0 to upload none'
21
+ type: number
22
+ default: 0
23
+ macos-appstore:
24
+ description: 'package the app for the Mac App Store too, with the notarized one, and upload it to App Store Connect on a tag'
25
+ type: boolean
26
+ default: false
27
+ itchio:
28
+ description: 'upload the app to itch.io on a tag, with BUTLER_API_KEY, to upload.itchio.project of the config'
29
+ type: boolean
30
+ default: true
31
+ secrets:
32
+ # to sign the app with Developer ID and to notarize it, none for neither
33
+ APPLE_TEAM_ID:
34
+ required: false
35
+ APPLE_CODESIGN_P12: # the .p12 file of Developer ID in base64
36
+ required: false
37
+ APPLE_CODESIGN_P12_PASSWORD:
38
+ required: false
39
+ APPLE_API_ISSUER_ID:
40
+ required: false
41
+ APPLE_API_KEY_ID:
42
+ required: false
43
+ APPLE_API_KEY_P8: # the .p8 file of App Store Connect as it is
44
+ required: false
45
+ # to upload the app to itch.io on a release, upload.itchio.project of the config
46
+ BUTLER_API_KEY:
47
+ required: false
48
+
49
+ permissions:
50
+ contents: write
51
+
52
+ env:
53
+ APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
54
+ APPLE_API_ISSUER_ID: ${{ secrets.APPLE_API_ISSUER_ID }}
55
+ APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
56
+
57
+ jobs:
58
+ prepare:
59
+ runs-on: ubuntu-latest
60
+
61
+ outputs:
62
+ apple-team: ${{ steps.apple-team.outputs.team }}
63
+ notarize: ${{ steps.apple-team.outputs.notarize }}
64
+ # for all the jobs to take the same commit, even if all-ref moves on
65
+ monorepo-commit: ${{ steps.monorepo-commit.outputs.commit }}
66
+
67
+ steps:
68
+ - name: apple team?
69
+ id: apple-team
70
+ # with the team, the app is signed with Developer ID and notarized,
71
+ # or else signed as the config tells
72
+ env:
73
+ TEAM: ${{ env.APPLE_TEAM_ID != '' }}
74
+ APPSTORE: ${{ contains(inputs.platforms, 'macos') && inputs.macos-appstore }}
75
+ run: |
76
+ if [ "$APPSTORE" = true ] && [ "$TEAM" != true ]; then
77
+ echo '::error::the input macos-appstore needs APPLE_TEAM_ID in the secrets'
78
+ exit 1
79
+ fi
80
+ echo "team=$TEAM" >> "$GITHUB_OUTPUT"
81
+ echo "notarize=$TEAM" >> "$GITHUB_OUTPUT"
82
+
83
+ - name: monorepo commit
84
+ id: monorepo-commit
85
+ if: inputs.all-ref
86
+ env:
87
+ REF: ${{ inputs.all-ref }}
88
+ run: |
89
+ commit=$(git ls-remote https://github.com/xord/all.git "$REF" | tail -1 | cut -f1)
90
+ echo "commit=${commit:-$REF}" >> "$GITHUB_OUTPUT"
91
+
92
+ macos-package:
93
+ needs: prepare
94
+ if: contains(inputs.platforms, 'macos')
95
+ runs-on: macos-latest
96
+
97
+ outputs:
98
+ submission-id: ${{ steps.submit.outputs.id }}
99
+
100
+ steps:
101
+ - &checkout
102
+ name: checkout
103
+ uses: actions/checkout@v4
104
+
105
+ - &setup-ruby
106
+ name: setup ruby
107
+ uses: ruby/setup-ruby@v1
108
+ with:
109
+ ruby-version: ${{ inputs.ruby-version ||
110
+ (hashFiles('.ruby-version') != '' && 'default') ||
111
+ '4.0.7' }}
112
+
113
+ - name: setup xcodegen
114
+ run: brew install xcodegen
115
+
116
+ - &setup-monorepo
117
+ name: setup monorepo
118
+ if: inputs.all-ref
119
+ uses: xord/xot/.github/actions/setup-monorepo@master
120
+ with:
121
+ ref: ${{ needs.prepare.outputs.monorepo-commit }}
122
+ libraries: ${{ inputs.libraries }}
123
+
124
+ - &setup-gems
125
+ name: setup gems
126
+ env:
127
+ # not for all-ref, as the Gemfile takes the gems of the monorepo then
128
+ BUNDLE_FROZEN: ${{ hashFiles('Gemfile.lock') != '' && !inputs.all-ref }}
129
+ run: bundle install
130
+
131
+ - &package
132
+ name: package
133
+ if: needs.prepare.outputs.apple-team != 'true' || github.job != 'macos-package'
134
+ run: bundle exec rake package
135
+
136
+ - &archive
137
+ name: archive
138
+ id: archive
139
+ if: needs.prepare.outputs.apple-team != 'true' || github.job != 'macos-package'
140
+ run: |
141
+ bundle exec rake archive
142
+ zip=$(ls dist/*/*.zip)
143
+ echo "name=$(basename "$zip" .zip)" >> "$GITHUB_OUTPUT"
144
+ echo "path=$zip" >> "$GITHUB_OUTPUT"
145
+
146
+ - &upload
147
+ name: upload
148
+ if: (needs.prepare.outputs.apple-team != 'true' || github.job != 'macos-package') &&
149
+ github.ref_type != 'tag' && inputs.retention-days > 0
150
+ uses: actions/upload-artifact@v4
151
+ with:
152
+ name: ${{ steps.archive.outputs.name }}
153
+ path: ${{ steps.archive.outputs.path }}
154
+ retention-days: ${{ inputs.retention-days }}
155
+
156
+ - &release
157
+ name: release
158
+ if: (needs.prepare.outputs.apple-team != 'true' || github.job != 'macos-package') &&
159
+ github.ref_type == 'tag'
160
+ env:
161
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
162
+ run: bundle exec rake release
163
+
164
+ - &upload-itchio
165
+ name: upload to itch.io
166
+ if: (needs.prepare.outputs.apple-team != 'true' || github.job != 'macos-package') &&
167
+ github.ref_type == 'tag' && inputs.itchio
168
+ env:
169
+ BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }}
170
+ run: |
171
+ [ -n "$BUTLER_API_KEY" ] || exit 0 # not to upload with no key
172
+ os=$([ "$RUNNER_OS" = Windows ] && echo windows || echo darwin)
173
+ arch=$(uname -m | sed 's/x86_64/amd64/')
174
+ dir=$(cd "$RUNNER_TEMP" && pwd)/butler # as /d/a/_temp on Windows, for PATH
175
+ curl -sSfL -o "$dir.zip" \
176
+ "https://broth.itch.zone/butler/$os-$arch/LATEST/archive/default"
177
+ unzip -q "$dir.zip" -d "$dir"
178
+ PATH="$dir:$PATH" bundle exec rake upload:itchio
179
+
180
+ - name: submit for notarization
181
+ id: submit
182
+ if: needs.prepare.outputs.notarize == 'true'
183
+ env:
184
+ APPLE_CODESIGN_P12: ${{ secrets.APPLE_CODESIGN_P12 }}
185
+ APPLE_CODESIGN_P12_PASSWORD: ${{ secrets.APPLE_CODESIGN_P12_PASSWORD }}
186
+ APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }}
187
+ APPSTORE: ${{ inputs.macos-appstore && '--appstore' || '' }}
188
+ shell: bash # with pipefail, not to let tee hide the failure
189
+ run: |
190
+ bundle exec reflex package --pack --notarize-submit $APPSTORE . |
191
+ tee "$RUNNER_TEMP/submit.log"
192
+ echo "id=$(sed -n 's/^Submitted for the notarization: //p' "$RUNNER_TEMP/submit.log")" \
193
+ >> "$GITHUB_OUTPUT"
194
+ [ -z "$APPSTORE" ] || echo "pkg=$(basename dist/appstore/*.pkg .pkg)" >> "$GITHUB_OUTPUT"
195
+
196
+ - name: upload pkg
197
+ if: inputs.macos-appstore && github.ref_type != 'tag' && inputs.retention-days > 0
198
+ uses: actions/upload-artifact@v4
199
+ with:
200
+ name: ${{ steps.submit.outputs.pkg }}
201
+ path: dist/appstore/*.pkg
202
+ retention-days: ${{ inputs.retention-days }}
203
+
204
+ - name: tar xcarchive for notarization
205
+ if: needs.prepare.outputs.notarize == 'true'
206
+ # by tar, as an artifact keeps no permission of the files nor symlink
207
+ run: cd .build/macos && tar cf "$RUNNER_TEMP/xcarchive.tar" generic/*.xcarchive
208
+
209
+ - name: upload xcarchive for notarization
210
+ if: needs.prepare.outputs.notarize == 'true'
211
+ uses: actions/upload-artifact@v4
212
+ with:
213
+ name: xcarchive
214
+ path: ${{ runner.temp }}/xcarchive.tar
215
+ retention-days: 1
216
+
217
+ - name: release pkg
218
+ if: inputs.macos-appstore && github.ref_type == 'tag'
219
+ env:
220
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
221
+ run: bundle exec rake release
222
+
223
+ - name: upload to App Store Connect
224
+ if: inputs.macos-appstore && github.ref_type == 'tag'
225
+ env:
226
+ APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }}
227
+ run: bundle exec rake upload:appstore
228
+
229
+ macos-wait:
230
+ needs: [prepare, macos-package]
231
+ if: needs.prepare.outputs.notarize == 'true'
232
+ runs-on: ubuntu-latest # cheaper than macos
233
+
234
+ steps:
235
+ - *checkout
236
+
237
+ - name: setup packages
238
+ # the ones of install_packages of beeps, rays and reflex, to build them
239
+ run: |
240
+ sudo apt-get update
241
+ sudo apt-get install -y -qq libopenal-dev libglew-dev libsdl2-dev libsdl2-ttf-dev
242
+
243
+ - *setup-ruby
244
+ - *setup-monorepo
245
+ - *setup-gems
246
+
247
+ - name: wait
248
+ env:
249
+ APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }}
250
+ ID: ${{ needs.macos-package.outputs.submission-id }}
251
+ run: bundle exec reflex package --notarize-wait "$ID"
252
+
253
+ macos-export:
254
+ needs: [prepare, macos-package, macos-wait]
255
+ runs-on: macos-latest
256
+
257
+ steps:
258
+ - *checkout
259
+ - *setup-ruby
260
+ - *setup-monorepo
261
+ - *setup-gems
262
+
263
+ - name: download xcarchive
264
+ uses: actions/download-artifact@v4
265
+ with:
266
+ name: xcarchive
267
+ path: ${{ runner.temp }}
268
+
269
+ - name: untar xcarchive
270
+ run: mkdir -p .build/macos && tar xf "$RUNNER_TEMP/xcarchive.tar" -C .build/macos
271
+
272
+ - name: export
273
+ env:
274
+ APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }}
275
+ run: bundle exec reflex package --notarize-export .
276
+
277
+ - *archive
278
+ - *upload
279
+ - *release
280
+ - *upload-itchio
281
+
282
+ windows-package:
283
+ needs: prepare
284
+ if: contains(inputs.platforms, 'windows')
285
+ runs-on: windows-latest
286
+
287
+ defaults:
288
+ run:
289
+ shell: bash # as the steps shared with the jobs on macos are written
290
+
291
+ steps:
292
+ - *checkout
293
+ - *setup-ruby
294
+
295
+ - name: setup packages
296
+ run: |
297
+ pacman -S --noconfirm --needed \
298
+ "$MINGW_PACKAGE_PREFIX-glew" "$MINGW_PACKAGE_PREFIX-openal"
299
+
300
+ - *setup-monorepo
301
+ - *setup-gems
302
+
303
+ - name: setup mesa
304
+ run: bundle exec ruby -rxot/rake -e 'setup_mesa'
305
+
306
+ - *package
307
+ - *archive
308
+ - *upload
309
+ - *release
310
+ - *upload-itchio
@@ -9,52 +9,5 @@ permissions:
9
9
 
10
10
  jobs:
11
11
  release:
12
- runs-on: macos-latest
13
-
14
- steps:
15
- - name: ruby 3.2
16
- uses: ruby/setup-ruby@v1
17
- with:
18
- ruby-version: 3.2
19
-
20
- - name: checkout
21
- uses: actions/checkout@v4
22
-
23
- - name: setup gems
24
- run: bundle install
25
-
26
- - name: setup dependencies
27
- run: "ruby -I.github/workflows -rutils -e 'setup_dependencies'"
28
-
29
- - name: packages
30
- run: bundle exec rake packages
31
-
32
- - name: setup zig
33
- if: github.event.repository.name == 'reflex-terminal'
34
- uses: mlugg/setup-zig@v2
35
- with:
36
- version: 0.16.0
37
-
38
- - name: test
39
- run: bundle exec rake test
40
-
41
- - name: create gem
42
- id: gem
43
- run: |
44
- bundle exec rake gem
45
- echo path=$(ruby -e 'print Dir.glob("*.gem").first') >> $GITHUB_OUTPUT
46
-
47
- - name: create github release
48
- env:
49
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
50
- run: ruby -I.github/workflows -rutils -e 'release(*ARGV)' ./${{ steps.gem.outputs.path }}
51
-
52
- - name: upload to rubygems
53
- env:
54
- GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_AUTH_TOKEN }}
55
- run: |
56
- mkdir -p $HOME/.gem
57
- touch $HOME/.gem/credentials
58
- chmod 0600 $HOME/.gem/credentials
59
- printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
60
- bundle exec rake upload
12
+ uses: xord/xot/.github/workflows/release-gem.yml@master
13
+ secrets: inherit
@@ -1,35 +1,18 @@
1
1
  name: Tag
2
2
 
3
3
  on:
4
- push:
4
+ workflow_run:
5
+ workflows: [Test]
6
+ types: [completed]
5
7
  branches: [master]
6
8
 
9
+ workflow_call:
10
+ secrets:
11
+ PAT:
12
+ required: true
13
+
7
14
  jobs:
8
15
  tag:
9
- runs-on: ubuntu-latest
10
-
11
- steps:
12
- - name: ruby 3.2
13
- uses: ruby/setup-ruby@v1
14
- with:
15
- ruby-version: 3.2
16
-
17
- - name: checkout
18
- uses: actions/checkout@v4
19
- with:
20
- fetch-depth: 0
21
- token: ${{ secrets.PAT }}
22
-
23
- - name: setup dependencies
24
- run: "ruby -I.github/workflows -rutils -e 'setup_dependencies only: :xot'"
25
-
26
- - name: setup user name and email
27
- run: |
28
- git config --global user.email "xordog@gmail.com"
29
- git config --global user.name "xord"
30
-
31
- - name: tag versions
32
- run: "ruby -I.github/workflows -rutils -e 'tag_versions'"
33
-
34
- - name: push tags
35
- run: git push origin --tags
16
+ uses: xord/xot/.github/workflows/tag.yml@master
17
+ secrets:
18
+ PAT: ${{ secrets.PAT }}
@@ -5,42 +5,21 @@ on:
5
5
  branches: [master]
6
6
  pull_request:
7
7
 
8
+ workflow_call:
9
+ inputs:
10
+ ruby-version:
11
+ type: string
12
+ all-ref:
13
+ description: 'branch, tag or commit of xord/all for an app to take'
14
+ type: string
15
+ libraries:
16
+ description: 'the libraries of xord/all for all-ref, by the order to build'
17
+ type: string
18
+
8
19
  jobs:
9
20
  test:
10
- runs-on: macos-latest
11
-
12
- steps:
13
- - name: ruby 3.2
14
- uses: ruby/setup-ruby@v1
15
- with:
16
- ruby-version: 3.2
17
-
18
- - name: checkout
19
- uses: actions/checkout@v4
20
-
21
- - name: setup gems
22
- run: bundle install
23
-
24
- - name: setup dependencies
25
- run: "ruby -I.github/workflows -rutils -e 'setup_dependencies'"
26
-
27
- - name: packages
28
- run: bundle exec rake verbose packages
29
-
30
- - name: setup zig
31
- if: github.event.repository.name == 'reflex-terminal'
32
- uses: mlugg/setup-zig@v2
33
- with:
34
- version: 0.16.0
35
-
36
- - name: vendor
37
- run: bundle exec rake vendor
38
-
39
- - name: lib
40
- run: bundle exec rake verbose lib
41
-
42
- - name: ext
43
- run: bundle exec rake verbose ext
44
-
45
- - name: test
46
- run: bundle exec rake verbose test
21
+ uses: xord/xot/.github/workflows/test.yml@master
22
+ with:
23
+ ruby-version: ${{ inputs.ruby-version }}
24
+ all-ref: ${{ inputs.all-ref }}
25
+ libraries: ${{ inputs.libraries || 'xot rucy beeps rays reflex reflex-packager' }}
data/.gitignore CHANGED
@@ -4,3 +4,5 @@
4
4
  .yardoc
5
5
  .DS_Store
6
6
  doc
7
+ examples/*/.build
8
+ examples/*/dist
data/ChangeLog.md CHANGED
@@ -1,6 +1,34 @@
1
1
  # reflex-packager ChangeLog
2
2
 
3
3
 
4
+ ## [v0.3.0] - 2026-11-04
5
+
6
+ - [BREAKING] Build a macOS app without CocoaPods, from the sources in the installed gems
7
+ - [BREAKING] Put the files of a build in .build/, and the packages in dist/ by their variant, as dist/generic/ and dist/adhoc/
8
+ - [BREAKING] Name the .app by the name of the app with spaces
9
+ - [BREAKING] Refuse a version that YAML reads as a number, as 1.10 without quotes
10
+ - [BREAKING] Refuse a version of more than three numbers on macOS
11
+ - Package an app for Windows by --platform windows
12
+ - Package for the platform the packager runs on, and a universal macOS app, by default
13
+ - Compile the scripts of an app into a data file by --pack
14
+ - Sign and notarize a macOS app, by --notarize and --notarize-wait
15
+ - Package an app for the Mac App Store by --appstore, and upload it to App Store Connect by rake upload:appstore
16
+ - Upload an app to itch.io by rake upload:itchio
17
+ - Add the workflow to test, package and release an app, for the apps to call
18
+ - Add copyright and localizations to the config
19
+ - Add excludes: to the config, to leave files out of the app
20
+ - Read the version of an app from its VERSION file
21
+ - Set CFBundleVersion from the version, not 1
22
+ - Name the zip by the platform and the architecture, as macos-universal or windows-x64
23
+ - Show the error an app dies of with Reflex.alert, with the paths in the package
24
+ - Quiet the build of a macOS app unless verbose
25
+ - Embed CRuby 4.0.701 with Ruby 4.0.7
26
+ - Add a hello example to try packaging with
27
+
28
+ - Fix an app in a folder of a non-ASCII name exiting with no output on macOS
29
+ - Fix a directory of the app being copied again into its copy
30
+
31
+
4
32
  ## [v0.2.0] - 2026-08-04
5
33
 
6
34
  - [BREAKING] Replace Profile#template with a templates Hash
data/Gemfile.lock ADDED
@@ -0,0 +1,26 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ power_assert (3.1.0)
5
+ rake (13.4.2)
6
+ test-unit (3.7.8)
7
+ power_assert
8
+ yard (0.9.45)
9
+
10
+ PLATFORMS
11
+ ruby
12
+
13
+ DEPENDENCIES
14
+ rake
15
+ test-unit
16
+ yard
17
+
18
+ CHECKSUMS
19
+ bundler (4.0.20) sha256=7978a8ac648767f5e635bc522445b79e80a52b907a39a36c2d8085ed6bc762ae
20
+ power_assert (3.1.0) sha256=fefe98ed5d3140628138f3f9f9194d6ece01f1320e69700d3c928adca7518251
21
+ rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
22
+ test-unit (3.7.8) sha256=689d1ca53f4d46f678b4e5d68d8e4294f87fc5e8b9238cc4de7c5727e8d65943
23
+ yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
24
+
25
+ BUNDLED WITH
26
+ 4.0.20