rubysketch 0.10.0 → 0.11.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c4f8d3591f90ee825cf8f8c1d6379c7841d7a03e90c211fdb5be0ba378514e74
4
- data.tar.gz: c82032ec68d87488fcf2036177ebd6aea6168e91c3d6e6de7508af17a0c9daf9
3
+ metadata.gz: 96ad467c03e2c1e7ccfce5d79414f57fb01af7f1353b91b7e5af361a4d16744e
4
+ data.tar.gz: 6318d1aa2fa9415f3fb9999544029603a965a81d1d7f79bf2848d2b5f444908b
5
5
  SHA512:
6
- metadata.gz: 9c3e94f02d383ff622f082058e8146dbf1b913e26b902f94c7a4dc6d46b95d3ab743a5b638cc48d50d13237689650d7e4db3a3312466bad7044ed76cd17af99a
7
- data.tar.gz: ae869f7c81595a77724f02410b65eb5f638ccfaa77184572b5ad13ca990ea9a33fd256f240af578a1b06c4846fc72faa1e320e1b58df959090b8a98bb34d9958
6
+ metadata.gz: dbd99157cfcd5d60419bbd78866ad8ab1b38e62880258893234f30b4daec3603c8b19e860749de9bacb3d128b76ca6ff13da24114cbc54e4c13b5131c0c2d3a9
7
+ data.tar.gz: 160e86d51c102494256145980059441ec4c4f161760758051865e3117ba2df4ced8ebd7e1bd13b058b123a41edaf5d680830490a9990afaccd647c37222e7349
@@ -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,12 @@
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
 
7
9
  jobs:
8
10
  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
11
+ uses: xord/xot/.github/workflows/tag.yml@master
12
+ secrets: inherit
@@ -7,40 +7,4 @@ on:
7
7
 
8
8
  jobs:
9
9
  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
10
+ uses: xord/xot/.github/workflows/test.yml@master
data/ChangeLog.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # rubysketch ChangeLog
2
2
 
3
3
 
4
+ ## [v0.11.0] - 2026-11-04
5
+
6
+ - [BREAKING] Rename Context#controllerIndex to #controllerNumber
7
+ - [BREAKING] Raise the deployment targets to macOS 11.0 and iOS 14.0
8
+ - [BREAKING] loadPixels and updatePixels exchange straight alpha, not premultiplied (from processing)
9
+ - [BREAKING] A shader from createShader sees premultiplied samples from texMap and must emit premultiplied color (from processing)
10
+ - [BREAKING] Report wheel deltas in pixels, in the same direction, on every platform (from reflex)
11
+ - Package a macOS app without CocoaPods
12
+
13
+ - Fix a canceled press, as by a menu popping up, becoming a click
14
+
15
+
4
16
  ## [v0.10.0] - 2026-08-04
5
17
 
6
18
  - [BREAKING] Remove the context: parameter from Sprite.new and SpriteWorld#createSprite
data/Gemfile.lock CHANGED
@@ -1,17 +1,15 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- power_assert (3.0.1)
5
- rake (13.3.1)
4
+ power_assert (3.1.0)
5
+ rake (13.4.2)
6
6
  rexml (3.4.4)
7
- test-unit (3.7.7)
7
+ test-unit (3.7.8)
8
8
  power_assert
9
- yard (0.9.39)
9
+ yard (0.9.45)
10
10
 
11
11
  PLATFORMS
12
- arm64-darwin-21
13
- arm64-darwin-23
14
- arm64-darwin-24
12
+ ruby
15
13
 
16
14
  DEPENDENCIES
17
15
  rake
@@ -19,5 +17,13 @@ DEPENDENCIES
19
17
  test-unit
20
18
  yard
21
19
 
20
+ CHECKSUMS
21
+ bundler (4.0.20) sha256=7978a8ac648767f5e635bc522445b79e80a52b907a39a36c2d8085ed6bc762ae
22
+ power_assert (3.1.0) sha256=fefe98ed5d3140628138f3f9f9194d6ece01f1320e69700d3c928adca7518251
23
+ rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
24
+ rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142
25
+ test-unit (3.7.8) sha256=689d1ca53f4d46f678b4e5d68d8e4294f87fc5e8b9238cc4de7c5727e8d65943
26
+ yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
27
+
22
28
  BUNDLED WITH
23
- 2.4.19
29
+ 4.0.20
data/RubySketch.podspec CHANGED
@@ -11,8 +11,8 @@ Pod::Spec.new do |s|
11
11
  s.author = {"xordog" => "xordog@gmail.com"}
12
12
  s.homepage = "https://github.com/xord/rubysketch"
13
13
 
14
- s.osx.deployment_target = "10.10"
15
- s.ios.deployment_target = "12.0"
14
+ s.osx.deployment_target = "11.0"
15
+ s.ios.deployment_target = "14.0"
16
16
 
17
17
  root = "${PODS_ROOT}/#{s.name}"
18
18
  exts = File.read(File.expand_path 'Rakefile', __dir__)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.10.0
1
+ 0.11.0
data/bin/rubysketch CHANGED
@@ -5,11 +5,7 @@ require 'reflex/packager'
5
5
 
6
6
 
7
7
  profile = Reflex::Packager::Profile.new(
8
- pod: 'RubySketch',
9
- git: 'https://github.com/xord/rubysketch',
10
- version: RubySketch::Extension.version,
11
- libraries: %w[Xot Rucy Beeps Rays Reflex Processing RubySketch],
12
- extensions: %w[beeps_ext rays_ext reflex_ext],
8
+ extension: RubySketch::Extension,
13
9
  config_files: %w[rubysketch.yml rubysketch.yaml],
14
10
  templates: {'main.rb': <<~MAIN, 'rubysketch.yml': <<~CONFIG})
15
11
  require 'rubysketch'
@@ -14,15 +14,15 @@ module RubySketch
14
14
  # @private
15
15
  def initialize(window)
16
16
  super
17
- @window__ = window
18
- @timers__ = {}
19
- @firingTimers__ = {}
20
- @nextTimerID__ = 0
21
- @noteNumber__ = 69
22
- @noteFrequency__ = 440
23
- @noteVelocity__ = 1
24
- @controllerIndex__ = 0
25
- @controllerValue__ = 0
17
+ @window__ = window
18
+ @timers__ = {}
19
+ @firingTimers__ = {}
20
+ @nextTimerID__ = 0
21
+ @noteNumber__ = 69
22
+ @noteFrequency__ = 440
23
+ @noteVelocity__ = 1
24
+ @controllerNumber__ = 0
25
+ @controllerValue__ = 0
26
26
 
27
27
  @world__ = createWorld
28
28
 
@@ -33,14 +33,14 @@ module RubySketch
33
33
  }
34
34
 
35
35
  updateControllerStates = -> event {
36
- @controllerIndex__ = event.controller
37
- @controllerValue__ = event.value
36
+ @controllerNumber__ = event.controller
37
+ @controllerValue__ = event.value
38
38
  }
39
39
 
40
40
  @window__.update_window = proc do
41
41
  fireTimers__
42
42
  Beeps.process_streams!
43
- Reflex.process_events!
43
+ Reflex.process_events!# TODO: delete this
44
44
  end
45
45
 
46
46
  @window__.note_on = proc do |e|
@@ -364,12 +364,12 @@ module RubySketch
364
364
  @noteVelocity__
365
365
  end
366
366
 
367
- # Returns the last controller index that was changed.
367
+ # Returns the last controller number that was changed.
368
368
  #
369
- # @return [Numeric] last controller index
369
+ # @return [Numeric] last controller number
370
370
  #
371
- def controllerIndex()
372
- @controllerIndex__
371
+ def controllerNumber()
372
+ @controllerNumber__
373
373
  end
374
374
 
375
375
  # Returns the last controller value that was changed.
@@ -1778,12 +1778,20 @@ module RubySketch
1778
1778
  end
1779
1779
 
1780
1780
  def on_pointer_up(e)
1781
+ pointerEnded e, true
1782
+ end
1783
+
1784
+ def on_pointer_cancel(e)
1785
+ pointerEnded e, false
1786
+ end
1787
+
1788
+ private def pointerEnded(e, click)
1781
1789
  updatePointerStates e
1782
1790
  updatePointersPressedAndReleased e, false
1783
1791
 
1784
1792
  if e.any? {|p| p.id == @pointer.id}
1785
1793
  callBlock @mouseReleased
1786
- callBlock @mouseClicked if mouseClicked?
1794
+ callBlock @mouseClicked if click && mouseClicked?
1787
1795
  end
1788
1796
  callBlock @touchEnded
1789
1797
 
@@ -1799,10 +1807,6 @@ module RubySketch
1799
1807
  callBlock @touchMoved
1800
1808
  end
1801
1809
 
1802
- def on_pointer_cancel(e)
1803
- on_pointer_up e
1804
- end
1805
-
1806
1810
  def on_pointer_enter(e)
1807
1811
  updatePointerStates e
1808
1812
  @pointerOver = true
data/lib/rubysketch.rb CHANGED
@@ -19,8 +19,7 @@ def RubySketch(snake_case: false)
19
19
  return RubySketch unless snake_case
20
20
 
21
21
  $rubysketch_refinements_with_snake_case ||= Module.new do
22
- Processing.alias_snake_case_methods__ Processing
23
- Processing.alias_snake_case_methods__ RubySketch
22
+ Processing.alias_snake_case_methods__ Processing, RubySketch
24
23
 
25
24
  refine Object do
26
25
  Processing.funcs__(RubySketch::Context).each do |func|
data/rubysketch.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
 
12
12
  ext = RubySketch::Extension
13
13
  name = ext.name true
14
- rdocs = glob.call *%w[README]
14
+ rdocs = glob.call(*%w[README])
15
15
 
16
16
  s.name = name
17
17
  s.version = ext.version
@@ -25,13 +25,13 @@ Gem::Specification.new do |s|
25
25
  s.platform = Gem::Platform::RUBY
26
26
  s.required_ruby_version = '>= 3.0.0'
27
27
 
28
- s.add_dependency 'xot', '~> 0.4.0'
29
- s.add_dependency 'rucy', '~> 0.4.0'
30
- s.add_dependency 'beeps', '~> 0.4.0'
31
- s.add_dependency 'rays', '~> 0.4.0'
32
- s.add_dependency 'reflexion', '~> 0.6.0'
33
- s.add_dependency 'reflex-packager', '~> 0.2.0'
34
- s.add_dependency 'processing', '~> 1.4.0'
28
+ s.add_dependency 'xot', '~> 0.5.0'
29
+ s.add_dependency 'rucy', '~> 0.5.0'
30
+ s.add_dependency 'beeps', '~> 0.5.0'
31
+ s.add_dependency 'rays', '~> 0.5.0'
32
+ s.add_dependency 'reflexion', '~> 0.7.0'
33
+ s.add_dependency 'reflex-packager', '~> 0.3.0'
34
+ s.add_dependency 'processing', '~> 1.5.0'
35
35
 
36
36
  s.files = `git ls-files`.split $/
37
37
  s.executables = s.files.grep(%r{^bin/}) {|f| File.basename f}
data/test/helper.rb CHANGED
@@ -13,7 +13,9 @@ include Xot::Test
13
13
  module HasContext
14
14
 
15
15
  def new_context()
16
- RubySketch::Window.new.context
16
+ window = RubySketch::Window.new
17
+ (@windows_for_context__ ||= []).push window
18
+ window.context
17
19
  end
18
20
 
19
21
  def setup()
@@ -24,6 +26,8 @@ module HasContext
24
26
  def teardown()
25
27
  super
26
28
  $processing_context__ = nil
29
+ @windows_for_context__&.each(&:close)
30
+ @windows_for_context__ = nil
27
31
  end
28
32
 
29
33
  def context()
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysketch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.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
13
  - !ruby/object:Gem::Dependency
14
14
  name: xot
@@ -16,98 +16,98 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.4.0
19
+ version: 0.5.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.4.0
26
+ version: 0.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rucy
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.4.0
33
+ version: 0.5.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.4.0
40
+ version: 0.5.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: beeps
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.4.0
47
+ version: 0.5.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.4.0
54
+ version: 0.5.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rays
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.4.0
61
+ version: 0.5.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.4.0
68
+ version: 0.5.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: reflexion
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.6.0
75
+ version: 0.7.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.6.0
82
+ version: 0.7.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: reflex-packager
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.2.0
89
+ version: 0.3.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.2.0
96
+ version: 0.3.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: processing
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.4.0
103
+ version: 1.5.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 1.4.0
110
+ version: 1.5.0
111
111
  description: A game engine based on the Processing API.
112
112
  email: xordog@gmail.com
113
113
  executables:
@@ -119,7 +119,6 @@ files:
119
119
  - ".github/workflows/release-gem.yml"
120
120
  - ".github/workflows/tag.yml"
121
121
  - ".github/workflows/test.yml"
122
- - ".github/workflows/utils.rb"
123
122
  - ".gitignore"
124
123
  - ".yardopts"
125
124
  - CONTRIBUTING.md
@@ -182,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
181
  - !ruby/object:Gem::Version
183
182
  version: '0'
184
183
  requirements: []
185
- rubygems_version: 3.4.19
184
+ rubygems_version: 3.5.22
186
185
  signing_key:
187
186
  specification_version: 4
188
187
  summary: A game engine based on the Processing API.
@@ -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