tebako 0.7.2.rc2 → 0.7.2.rc4

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: 12c6393e228f7a9b35f5e4e134145d61d050e043b3f71fd6b7470bc6ae9fe84c
4
- data.tar.gz: 950729b6f6eeed71c400f114fc45a0820919cbd8ddf22c8682e4d5cc77ed38b5
3
+ metadata.gz: 4bfa5dde3a184cd2689178ae837ee3a5eff510cecb0ed1385617d4d3f170c707
4
+ data.tar.gz: b67d902a82ff37050ff7c273b770e96b8be23c83c9056a4e5bc88c4936d2bbb8
5
5
  SHA512:
6
- metadata.gz: 547a0f3dca568dc52dd40cd0fbca7e09d96ab51de383edfb70e7e1bb16fde23c81135250ba7cdd4bf9c7fe7658e1241e753ef62dea0c96181496fbcf7da06ea3
7
- data.tar.gz: 9653a599391afb40aed074d456b3d04e779091501223f1d6e41aa4c85ad1071838e6a90a7f4b1c2eb834061e5b9f8d875346c8438c904ac221a05d3a22d0571a
6
+ metadata.gz: ce1166b1042a38f95db4f8190e5d2de55c7a62d40d3d4db990527c27199d23ffc5590af7ae094e0f8cafdfc5b0c2e9c7e3140fd6f8ad5d56dcfc8627b845a552
7
+ data.tar.gz: 398b4088288778241c404de5d68b1703d2ee42647060833b5c8c7b0b16f22223c92fe1abc7b6982b7124d57a95b732ee98a48e7ea9d913858c5ec0a396faffec
data/CMakeLists.txt CHANGED
@@ -116,9 +116,7 @@ set(IS_MUSL OFF)
116
116
  set(IS_MSYS OFF)
117
117
  set(IS_DARWIN OFF)
118
118
  set(RB_W32 OFF)
119
- set(FORCE_RUBY_PLATFORM "false")
120
- set(NOKOGIRI_OPTION "--no-use-system-libraries")
121
- set(RUBY_WITHOUT_EXT "dbm,win32,win32ole")
119
+ set(RUBY_WITHOUT_EXT "dbm,win32,win32ole,'-test-'")
122
120
  set(RUBY_NAME "ruby")
123
121
  set(RUBY_SUFFIX "")
124
122
  set(EXE_SUFFIX "")
@@ -129,14 +127,11 @@ set(DWARFS_PRELOAD OFF)
129
127
 
130
128
  if("${OSTYPE_TXT}" MATCHES "^linux-musl.*")
131
129
  set(IS_MUSL ON)
132
- set(FORCE_RUBY_PLATFORM "true")
133
130
  elseif("${OSTYPE_TXT}" MATCHES "^msys*")
134
131
  set(IS_MSYS ON)
135
- set(FORCE_RUBY_PLATFORM "true")
136
- set(NOKOGIRI_OPTION "--use-system-libraries")
137
132
  # set(DWARFS_PRELOAD ON)
138
133
  set(RB_W32 ON)
139
- set(RUBY_WITHOUT_EXT "dbm,syslog,pty,gdbm,readline")
134
+ set(RUBY_WITHOUT_EXT "dbm,syslog,pty,gdbm,readline,'-test-'")
140
135
  #set(RUBY_SUFFIX "w")
141
136
  set(EXE_SUFFIX ".exe")
142
137
  set(CMD_SUFFIX ".cmd")
@@ -216,7 +211,7 @@ if(DWARFS_PRELOAD)
216
211
  list(GET LIBDWARFS_WR_VER_COMPONENTS 2 LIBDWARFS_WR_VER_PATCH)
217
212
  set (LIBDWARFS_WR_VER_M ${LIBDWARFS_WR_VER_MAJOR}.${LIBDWARFS_WR_VER_MINOR}.${LIBDWARFS_WR_VER_PATCH})
218
213
  else(DWARFS_PRELOAD)
219
- def_ext_prj_g(DWARFS_WR "v0.5.2")
214
+ def_ext_prj_g(DWARFS_WR "v0.5.3")
220
215
  endif(DWARFS_PRELOAD)
221
216
 
222
217
  set(LIBYAML_RUBY_OPTION "")
@@ -274,7 +269,6 @@ message(STATUS "Building for Win32 Ruby (RB_W32): ${RB_W32}")
274
269
  # ...................................................................
275
270
  # Other options
276
271
 
277
- message(STATUS "Force Ruby platform for Gems: ${FORCE_RUBY_PLATFORM}")
278
272
  message(STATUS "Not building Ruby extensions: ${RUBY_WITHOUT_EXT}")
279
273
 
280
274
  # ...................................................................
@@ -370,7 +364,6 @@ message(STATUS "Ruby build ${C_FLAGS_DEST}='${RUBY_C_FLAGS}'")
370
364
  message(STATUS "Ruby build LDFLAGS='${RUBY_L_FLAGS}'")
371
365
  message(STATUS "openssl Ruby option='${OPENSSL_RUBY_OPTION}'")
372
366
  message(STATUS "libyaml Ruby option='${LIBYAML_RUBY_OPTION}'")
373
- message(STATUS "nokogiri build option='${NOKOGIRI_OPTION}'")
374
367
 
375
368
  ExternalProject_Add(${RUBY_PRJ}
376
369
  PREFIX ${DEPS}
@@ -418,125 +411,41 @@ else (${SETUP_MODE})
418
411
  list(LENGTH GEMFILES GFLENGTH)
419
412
  list(LENGTH GEMS GLENGTH)
420
413
 
421
- add_custom_target(clean_filesystem
422
- COMMAND ruby ${EXE}/tebako-packager deploy ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${RUBY_STASH_DIR}
423
- ${DATA_SRC_DIR} ${DATA_PRE_DIR} ${DATA_BIN_DIR}
424
- ${GFLENGTH} ${APP_NAME} ${RUBY_VER}
425
- DEPENDS ${RUBY_PRJ}
426
- )
427
-
428
414
  if(GSLENGTH GREATER 0)
429
415
  if(GSLENGTH GREATER 1)
430
416
  message(FATAL_ERROR "Multiple gemspecs detected in ${FS_ROOT}")
431
417
  else(GSLENGTH GREATER 1)
432
- list(GET GEMSPECS 0 GEMSPEC)
433
- list(LENGTH GEMFILES GFLENGTH)
434
418
  if(GFLENGTH GREATER 0)
435
419
  # Found xxx.gemspec and Gemfile
436
- message("Collecting gem from gemspec ${GEMSPEC} and Gemfile")
437
420
  set(FS_ENTRY_POINT "/bin/${FS_ENTRANCE}")
438
- add_custom_target(source_filesystem
439
- COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
440
- COMMAND ${CMAKE_COMMAND} -E make_directory ${TGD}
441
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
442
- ${TBD}/bundle${BAT_SUFFIX} config set --local build.ffi --disable-system-libffi
443
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
444
- ${TBD}/bundle${BAT_SUFFIX} config set --local build.nokogiri ${NOKOGIRI_OPTION}
445
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
446
- ${TBD}/bundle${BAT_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
447
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
448
- ${TBD}/bundle${BAT_SUFFIX} install
449
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
450
- ${TBD}/bundle${BAT_SUFFIX} exec ${TBD}/gem${CMD_SUFFIX} build ${GEMSPEC}
451
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
452
- ${TBD}/gem${CMD_SUFFIX} install *.gem --verbose --no-document --install-dir ${TGD}
453
- COMMAND test -f ${DATA_SRC_DIR}${FS_ENTRY_POINT} ||
454
- (${CMAKE_COMMAND} -E echo "Entry point ${DATA_SRC_DIR}${FS_ENTRY_POINT} does not exist" &&
455
- ${CMAKE_COMMAND} -E false )
456
- DEPENDS clean_filesystem
457
- )
458
421
  else(GFLENGTH GREATER 0)
459
422
  # Found xxx.gemspec but no Gemfile
460
- message("Collecting gem from gemspec ${GEMSPEC}")
461
423
  set(FS_ENTRY_POINT "/bin/${FS_ENTRANCE}")
462
- message("Target entry point will be at ${FS_MOUNT_POINT}${FS_ENTRY_POINT}")
463
- add_custom_target(source_filesystem
464
- COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
465
- COMMAND ${CMAKE_COMMAND} -E make_directory ${TGD}
466
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
467
- ${TBD}/gem${CMD_SUFFIX} build ${GEMSPEC}
468
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
469
- ${TBD}/gem${CMD_SUFFIX} install *.gem --verbose --no-document --install-dir ${TGD}
470
- COMMAND test -f ${DATA_SRC_DIR}${FS_ENTRY_POINT} ||
471
- (${CMAKE_COMMAND} -E echo "Entry point ${DATA_SRC_DIR}${FS_ENTRY_POINT} does not exist" &&
472
- ${CMAKE_COMMAND} -E false )
473
- DEPENDS clean_filesystem
474
- )
475
424
  endif(GFLENGTH GREATER 0)
476
425
  endif(GSLENGTH GREATER 1)
477
426
  elseif(GFLENGTH GREATER 0)
478
427
  # Found Gemfile but no gemspec
479
- message("Deploying Gemfile")
480
428
  set(FS_ENTRY_POINT "/local/${FS_ENTRANCE}")
481
- message("Target entry point will be at ${FS_MOUNT_POINT}${FS_ENTRY_POINT}")
482
- add_custom_target(source_filesystem
483
- COMMAND test -f ${FS_ROOT}/${FS_ENTRANCE} ||
484
- (${CMAKE_COMMAND} -E echo "Entry point ${FS_ROOT}/${FS_ENTRANCE} does not exist or is not accessible" &&
485
- ${CMAKE_COMMAND} -E false )
486
- COMMAND ${CMAKE_COMMAND} -E make_directory ${TLD}
487
- COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${TLD} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
488
- COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
489
- ${TBD}/bundle${BAT_SUFFIX} config set --local build.ffi --disable-system-libffi
490
- COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
491
- ${TBD}/bundle${BAT_SUFFIX} config set --local build.nokogiri ${NOKOGIRI_OPTION}
492
- COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
493
- ${TBD}/bundle${BAT_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
494
- COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
495
- ${TBD}/bundle${BAT_SUFFIX} install --jobs=${NCORES}
496
- # COMMAND_EXPAND_LISTS
497
- # [TODO] Open question - how to deploy a project to source filesystem
498
- # ruby packer does bundle install --deployment --binstubs
499
- # COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
500
- # ${TBD}/bundle lock
501
- # COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
502
- # ${TBD}/bundle install --deployment --jobs=${NCORES}
503
- DEPENDS clean_filesystem
504
- )
505
429
  elseif(GLENGTH GREATER 0)
506
430
  # xxx.gem, no gemspec, no gemfile
507
- list(GET GEMS 0 GEM)
508
431
  if(GLENGTH GREATER 1)
509
432
  message(FATAL_ERROR "Multiple gems detected in ${FS_ROOT}")
510
433
  else(GLENGTH GREATER 1)
511
- message("Installing Ruby gem from ${GEM}")
512
434
  set(FS_ENTRY_POINT "/bin/${FS_ENTRANCE}")
513
- message("Target entry point will be at ${FS_MOUNT_POINT}${FS_ENTRY_POINT}")
514
- add_custom_target(source_filesystem
515
- COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
516
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
517
- ${TBD}/gem${CMD_SUFFIX} install ${GEM} --verbose --no-document --install-dir ${TGD}
518
- COMMAND test -f ${DATA_SRC_DIR}${FS_ENTRY_POINT} ||
519
- (${CMAKE_COMMAND} -E echo "Entry point ${DATA_SRC_DIR}${FS_ENTRY_POINT} does not exist or is not accessible" &&
520
- ${CMAKE_COMMAND} -E false )
521
- DEPENDS clean_filesystem
522
- )
523
435
  endif(GLENGTH GREATER 1)
524
436
  else()
525
437
  # No gem, no gemspec, no gemfile
526
438
  # Simple ruby script
527
- message("Collecting simple Ruby script from ${FS_ROOT}")
528
439
  set(FS_ENTRY_POINT "/local/${FS_ENTRANCE}")
529
- message("Target entry point will be at ${FS_MOUNT_POINT}${FS_ENTRY_POINT}")
530
- add_custom_target(source_filesystem
531
- COMMAND test -f ${FS_ROOT}/${FS_ENTRANCE} ||
532
- (${CMAKE_COMMAND} -E echo "Entry point ${FS_ROOT}/${FS_ENTRANCE} does not exist or is not accessible" &&
533
- ${CMAKE_COMMAND} -E false )
534
- COMMAND ${CMAKE_COMMAND} -E make_directory ${TLD}
535
- COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${TLD} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
536
- DEPENDS clean_filesystem
537
- )
538
440
  endif()
539
441
 
442
+ add_custom_target(source_filesystem
443
+ COMMAND ruby ${EXE}/tebako-packager deploy ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${RUBY_STASH_DIR}
444
+ ${DATA_SRC_DIR} ${DATA_PRE_DIR} ${DATA_BIN_DIR}
445
+ ${FS_ROOT} ${FS_ENTRANCE} ${FS_MOUNT_POINT} ${APP_NAME} ${RUBY_VER}
446
+ DEPENDS ${RUBY_PRJ}
447
+ )
448
+
540
449
  # ...................................................................
541
450
  # Packaged filesystem
542
451
 
data/README.adoc CHANGED
@@ -150,55 +150,9 @@ There is no workaround for this issue as it lloks like is a limitation of the ma
150
150
 
151
151
  === General
152
152
 
153
- Tebako is distributed as a Ruby gem
154
-
155
- [source,sh]
156
- ----
157
- gem install tebako
158
- ----
159
-
160
- === Quick setup on Ubuntu 20.04 on Docker
161
-
162
- Launch a container on the target platform:
163
-
164
- [source,sh]
165
- ----
166
- # For x86_64
167
- docker run -it --platform linux/x86_64 ubuntu bash
168
-
169
- # For Apple M1
170
- docker run -it --platform linux/aarch64 ubuntu bash
171
- ----
172
-
173
- In the container:
174
-
175
- [source,sh]
176
- ----
177
- export DEBIAN_FRONTEND=noninteractive
178
- export TZ=Etc/UTC
179
-
180
- apt-get update
181
- apt-get install -y software-properties-common
182
- add-apt-repository -y ppa:ubuntu-toolchain-r/test
183
- apt-get install -y gcc-10 g++-10
184
-
185
- apt-get install -y curl git ruby ruby-dev pkg-config bison flex make autoconf
186
- curl https://apt.kitware.com/kitware-archive.sh | bash
187
- apt-get install -y cmake
188
-
189
- apt-get -y install sudo git curl build-essential pkg-config bison flex autoconf \
190
- binutils-dev libevent-dev acl-dev libfmt-dev libjemalloc-dev libiberty-dev \
191
- libdouble-conversion-dev liblz4-dev liblzma-dev libssl-dev libunwind-dev \
192
- libboost-filesystem-dev libboost-program-options-dev libboost-system-dev \
193
- libboost-iostreams-dev libboost-date-time-dev libboost-context-dev \
194
- libboost-regex-dev libboost-thread-dev libbrotli-dev libdwarf-dev libelf-dev \
195
- libgoogle-glog-dev libffi-dev libgdbm-dev libyaml-dev libncurses-dev \
196
- libreadline-dev libutfcpp-dev libncurses-dev libreadline-dev gcc-10 g++-10 \
197
- ruby-dev ruby-bundler
198
-
199
- gem install tebako
200
-
201
- ----
153
+ Tebako is distributed as a Ruby gem.
154
+ Additionally, Docker containers for Ubuntu and Alpine Linux with a preinstalled Tebako packaging environment
155
+ are available at https://github.com/orgs/tamatebako/packages.
202
156
 
203
157
  == Usage
204
158
 
@@ -248,7 +202,8 @@ tebako press \
248
202
  -r|--root=<project-root-folder> \
249
203
  -e|--entry-point=<entry-point> \
250
204
  [-o|--output=<packaged file name>] \
251
- [-l|--log-level=<error|warn|debug|trace>]
205
+ [-l|--log-level=<error|warn|debug|trace>] \
206
+ [-D|--devmode]
252
207
  ----
253
208
 
254
209
  Where:
@@ -268,6 +223,9 @@ point base name`)
268
223
 
269
224
  * `log-level`, the logging level for tebako built-in memory filesystem driver (optional, defaults to `error`)
270
225
 
226
+ * `devmode` flag activates development mode, in which Tebako's cache and packaging consistency checks are relaxed.
227
+ Please note that this mode is not intended for production use and should only be used during development.
228
+
271
229
  [example]
272
230
  ====
273
231
  [source,sh]
@@ -295,7 +253,8 @@ based on ```tebako setup``` output. Building cache based on ```tebako press``` m
295
253
  ----
296
254
  tebako setup \
297
255
  [-p |--prefix=<tebako-root-folder>] \
298
- [-R |--Ruby=<2.7.8|3.0.7|3.1.4|3.1.5|3.1.6|3.2.3|3.2.4>]
256
+ [-R |--Ruby=<2.7.8|3.0.7|3.1.4|3.1.5|3.1.6|3.2.3|3.2.4>] \
257
+ [-D | --devmode]
299
258
  ----
300
259
 
301
260
  Where:
@@ -304,6 +263,9 @@ Where:
304
263
 
305
264
  * `Ruby` parameter defines Ruby version that will be packaged (optional, defaults to 3.1.6)
306
265
 
266
+ * `devmode` flag activates development mode, in which Tebako's cache and packaging consistency checks are relaxed.
267
+ Please note that this mode is not intended for production use and should only be used during development.
268
+
307
269
  ==== Clean
308
270
 
309
271
  This command deletes tebako artifacts created by setup and press commands.
data/common.env CHANGED
@@ -1,5 +1,5 @@
1
1
  BUILD_TYPE=Release
2
2
  DEPS=deps
3
3
  INCBIN_TAG=348e36b
4
- DWARFS_WR_TAG=v0.5.2
4
+ DWARFS_WR_TAG=v0.5.3
5
5
  RUBY_VER=3.1.6
data/exe/tebako-packager CHANGED
@@ -99,18 +99,20 @@ begin
99
99
  # ARGV[4] -- DATA_SRC_DIR
100
100
  # ARGV[5] -- DATA_PRE_DIR
101
101
  # ARGV[6] -- DATA_BIN_DIR
102
- # ARGV[7] -- GFLENGTH
103
- # ARGV[8] -- APP_NAME
104
- # ARGV[9] -- RUBY_VER
105
- unless ARGV.length == 10
102
+ # ARGV[7] -- FS_ROOT
103
+ # ARGV[8] -- FS_ENTRANCE
104
+ # ARGV[9] -- FS_MOUNT_POINT
105
+ # ARGV[10] -- APP_NAME
106
+ # ARGV[11] -- RUBY_VER
107
+ unless ARGV.length == 12
106
108
  raise Tebako::Error,
107
- "tebako-packager deploy command expects 10 arguments, #{ARGV.length} has been provided."
109
+ "tebako-packager deploy command expects 12 arguments, #{ARGV.length} has been provided."
108
110
  end
109
111
  Tebako::Packager.init(ARGV[3], ARGV[4], ARGV[5], ARGV[6])
110
- Tebako::Packager.create_implib(ARGV[2], ARGV[4], File.basename(ARGV[8]), ARGV[9]) if ARGV[1] =~ /msys/
112
+ Tebako::Packager.create_implib(ARGV[2], ARGV[4], File.basename(ARGV[10]), ARGV[11]) if ARGV[1] =~ /msys/
111
113
  # Assume that "<TARGET_BIN_DIR (TBD)>" is <DATA_SRC_DIR>/bin"
112
114
  # That shall match CMakeLists.txt settings
113
- Tebako::Packager.deploy(ARGV[4], ARGV[9], ARGV[7])
115
+ Tebako::Packager.deploy(ARGV[1], ARGV[4], ARGV[5], ARGV[11], ARGV[7], ARGV[8], ARGV[9])
114
116
 
115
117
  else
116
118
  raise Tebako::Error, "tebako-packager cannot process #{ARGV[0]} command"
data/lib/tebako/cli.rb CHANGED
@@ -69,7 +69,7 @@ module Tebako
69
69
 
70
70
  desc "hash", "Print build script hash (ci cache key)"
71
71
  def hash
72
- print Digest::SHA256.hexdigest File.read File.join(source, "CMakeLists.txt")
72
+ print Digest::SHA256.hexdigest [File.read(File.join(source, "CMakeLists.txt")), Tebako::VERSION].join
73
73
  end
74
74
 
75
75
  desc "press", "Press tebako image"
@@ -84,7 +84,7 @@ module Tebako
84
84
  enum: Tebako::CliRubies::RUBY_VERSIONS.keys,
85
85
  desc: "Tebako package Ruby version, #{Tebako::CliRubies::DEFAULT_RUBY_VERSION} by default"
86
86
  def press
87
- (clean_output unless version_match?) unless options[:devmode]
87
+ version_cache_check unless options[:devmode]
88
88
 
89
89
  puts press_announce
90
90
  do_press
@@ -99,7 +99,7 @@ module Tebako
99
99
  enum: Tebako::CliRubies::RUBY_VERSIONS.keys,
100
100
  desc: "Tebako package Ruby version, #{Tebako::CliRubies::DEFAULT_RUBY_VERSION} by default."
101
101
  def setup
102
- (clean_output unless version_match?) unless options[:devmode]
102
+ version_cache_check unless options[:devmode]
103
103
 
104
104
  puts "Setting up tebako packaging environment"
105
105
  do_setup
@@ -204,20 +204,42 @@ module Tebako
204
204
  @version_key ||= "#{Tebako::VERSION} at #{source}"
205
205
  end
206
206
 
207
- def version_match? # rubocop:disable Metrics/MethodLength
208
- begin
209
- version_file_path = File.join(prefix, E_VERSION_FILE)
210
- file_version = File.open(version_file_path, &:readline).strip
211
- rs = file_version == version_key
212
- unless rs
213
- puts "CMake cache was created by a gem version #{file_version} " \
214
- "and cannot be used for gem version #{version_key}"
215
- end
216
- rescue StandardError
217
- # In case of any error (e.g., file not readable), return false
218
- rs = false
207
+ def version_cache
208
+ version_file_path = File.join(prefix, E_VERSION_FILE)
209
+ file_version = File.open(version_file_path, &:readline).strip
210
+
211
+ file_version.match(/(?<version>.+) at (?<source>.+)/)
212
+ end
213
+
214
+ def version_cache_check
215
+ match_data = version_cache
216
+
217
+ return version_unknown unless match_data
218
+
219
+ if match_data[:version] != Tebako::VERSION
220
+ version_mismatch(match_data[:version])
221
+ elsif match_data[:source] != source
222
+ version_source_mismatch(match_data[:source])
219
223
  end
220
- rs
224
+ rescue StandardError
225
+ version_unknown
226
+ end
227
+
228
+ def version_mismatch(cached_version)
229
+ puts "Tebako cache was created by a gem version #{cached_version} " \
230
+ "and cannot be used for gem version #{Tebako::VERSION}"
231
+ clean_cache
232
+ end
233
+
234
+ def version_source_mismatch(cached_source)
235
+ puts "CMake cache was created for a different source directory '#{cached_source}' " \
236
+ "and cannot be used for '#{source}'"
237
+ clean_output
238
+ end
239
+
240
+ def version_unknown
241
+ puts "CMake cache version was not recognized, cleaning up"
242
+ clean_cache
221
243
  end
222
244
  end
223
245
  end
@@ -0,0 +1,281 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2024 [Ribose Inc](https://www.ribose.com).
4
+ # All rights reserved.
5
+ # This file is a part of tebako
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions
9
+ # are met:
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ # 2. Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in the
14
+ # documentation and/or other materials provided with the distribution.
15
+ #
16
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
+ # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
20
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
+ # POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ require "fileutils"
29
+ require "find"
30
+
31
+ require_relative "error"
32
+
33
+ # Tebako - an executable packager
34
+ module Tebako
35
+ # Magic version numbers used to ensure compatibility for Ruby 2.7.x, 3.0.x
36
+ # These are the minimal versions required to provide linux-gnu / linux-musl differentiation by bundler
37
+ # Ruby 3.1+ default rubygems versions work correctly out of the box
38
+ BUNDLER_VERSION = "2.4.22"
39
+ RUBYGEMS_VERSION = "3.4.22"
40
+
41
+ # Tebako packaging support (deployer)
42
+ class DeployHelper # rubocop:disable Metrics/ClassLength
43
+ def initialize(fs_root, fs_entrance, fs_mount_point, target_dir, pre_dir)
44
+ @fs_root = fs_root
45
+ @fs_entrance = fs_entrance
46
+ @fs_mount_point = fs_mount_point
47
+ @target_dir = target_dir
48
+ @pre_dir = pre_dir
49
+ @verbose = ENV["VERBOSE"] == "yes" || ENV["VERBOSE"] == "true"
50
+ end
51
+
52
+ attr_reader :bundler_command, :gem_command, :gem_home
53
+
54
+ def config(os_type, ruby_ver)
55
+ @ruby_ver = ruby_ver
56
+ @os_type = os_type
57
+
58
+ @tbd = File.join(@target_dir, "bin")
59
+ @tgd = @gem_home = File.join(@target_dir, "lib", "ruby", "gems", ruby_api_version)
60
+ @tld = File.join(@target_dir, "local")
61
+
62
+ lookup_files
63
+ configure_scenario
64
+ configure_commands
65
+ end
66
+
67
+ def deploy
68
+ install_gem("tebako-runtime")
69
+ install_gem("bundler", Tebako::BUNDLER_VERSION) if needs_bundler?
70
+
71
+ deploy_solution
72
+ end
73
+
74
+ def deploy_env
75
+ { "GEM_HOME" => gem_home,
76
+ "GEM_PATH" => gem_home,
77
+ "TEBAKO_PASS_THROUGH" => "1" }
78
+ end
79
+
80
+ def install_gem(name, ver = nil)
81
+ puts " ... installing #{name} gem#{" version #{ver}" if ver}"
82
+
83
+ params = [@gem_command, "install", name.to_s]
84
+ params.push("-v", ver.to_s) if ver
85
+ ["--no-document", "--install-dir", @tgd].each do |param|
86
+ params.push(param)
87
+ end
88
+ run_with_capture_v(params)
89
+ end
90
+
91
+ def ruby_api_version
92
+ @ruby_api_version ||= "#{@ruby_ver.split(".")[0..1].join(".")}.0"
93
+ end
94
+
95
+ def needs_bundler?
96
+ @gf_length.positive?
97
+ end
98
+
99
+ def update_rubygems
100
+ puts " ... updating rubygems to #{Tebako::RUBYGEMS_VERSION}"
101
+ run_with_capture_v([@gem_command, "update", "--no-doc", "--system", Tebako::RUBYGEMS_VERSION])
102
+ end
103
+
104
+ private
105
+
106
+ def bundle_config
107
+ run_with_capture_v([@bundler_command, "config", "set", "--local", "build.ffi", "--disable-system-libffi"])
108
+ run_with_capture_v([@bundler_command, "config", "set", "--local", "build.nokogiri", @nokogiri_option])
109
+ run_with_capture_v([@bundler_command, "config", "set", "--local", "force_ruby_platform", @force_ruby_platform])
110
+ end
111
+
112
+ def check_entry_point(entry_point_root)
113
+ fs_entry_point = File.join(entry_point_root, @fs_entrance)
114
+ puts " ... target entry point will be at #{File.join(@fs_mount_point, fs_entry_point)}"
115
+
116
+ return if File.exist?(File.join(@target_dir, fs_entry_point))
117
+
118
+ raise Tebako::Error.new("Entry point #{fs_entry_point} does not exist or is not accessible", 106)
119
+ end
120
+
121
+ def collect_and_deploy_gem(gemspec)
122
+ puts " ... Collecting gem from gemspec #{gemspec}"
123
+
124
+ copy_files(@pre_dir)
125
+
126
+ Dir.chdir(@pre_dir) do
127
+ run_with_capture_v([@gem_command, "build", gemspec])
128
+ install_all_gems_or_fail
129
+ end
130
+
131
+ check_entry_point("bin")
132
+ end
133
+
134
+ def collect_and_deploy_gem_and_gemfile(gemspec)
135
+ puts " ... collecting gem from gemspec #{gemspec} and Gemfile"
136
+
137
+ copy_files(@pre_dir)
138
+
139
+ Dir.chdir(@pre_dir) do
140
+ bundle_config
141
+ puts " *** It may take a long time for a big project. It takes REALLY long time on Windows ***"
142
+ run_with_capture_v([@bundler_command, "install", "--jobs=#{ncores}"])
143
+ run_with_capture_v([@bundler_command, "exec", @gem_command, "build", gemspec])
144
+ install_all_gems_or_fail
145
+ end
146
+
147
+ check_entry_point("bin")
148
+ end
149
+
150
+ def configure_commands
151
+ @cmd_suffix = @os_type =~ /msys/ ? ".cmd" : ""
152
+ @bat_suffix = @os_type =~ /msys/ ? ".bat" : ""
153
+
154
+ @gem_command = File.join(@tbd, "gem#{@cmd_suffix}")
155
+ @bundler_command = File.join(@tbd, "bundle#{@bat_suffix}")
156
+
157
+ @force_ruby_platform = @os_type =~ /msys|linux-musl/ ? "true" : "false"
158
+ @nokogiri_option = @os_type =~ /msys/ ? "--use-system-libraries" : "--no-use-system-libraries"
159
+ end
160
+
161
+ def configure_scenario
162
+ case @gs_length
163
+ when 0
164
+ configure_scenario_no_gemspec
165
+ when 1
166
+ @scenario = @gf_length.positive? ? :gemspec_and_gemfile : :gemspec
167
+ else
168
+ raise Tebako::Error, "Multiple Ruby gemspecs found in #{@fs_root}"
169
+ end
170
+ end
171
+
172
+ def configure_scenario_no_gemspec
173
+ @scenario = if @gf_length.positive?
174
+ :gemfile
175
+ elsif @g_length.positive?
176
+ :gem
177
+ else
178
+ :simple_script
179
+ end
180
+ end
181
+
182
+ def copy_files(dest)
183
+ FileUtils.mkdir_p(dest)
184
+ if Dir.exist?(@fs_root) && File.readable?(@fs_root)
185
+ begin
186
+ FileUtils.cp_r(File.join(@fs_root, "."), dest)
187
+ rescue StandardError
188
+ raise Tebako::Error.new("#{@fs_root} is not accessible or does not exist.", 107)
189
+ end
190
+ return
191
+ end
192
+ raise Tebako::Error.new("#{@fs_root} is not accessible or is not a directory.", 107)
193
+ end
194
+
195
+ def deploy_gem(gem)
196
+ puts " ... installing Ruby gem from #{gem}"
197
+ copy_files(@pre_dir)
198
+ Dir.chdir(@pre_dir) { install_gem(gem) }
199
+ check_entry_point("bin")
200
+ end
201
+
202
+ def deploy_gemfile
203
+ puts " ... deploying Gemfile"
204
+ copy_files(@tld)
205
+
206
+ Dir.chdir(@tld) do
207
+ bundle_config
208
+ puts " *** It may take a long time for a big project. It takes REALLY long time on Windows ***"
209
+ run_with_capture_v([@bundler_command, "install", "--jobs=#{ncores}"])
210
+ end
211
+
212
+ check_entry_point("local")
213
+ end
214
+
215
+ def deploy_simple_script
216
+ puts " ... collecting simple Ruby script from #{@fs_root}"
217
+ copy_files(@tld)
218
+ check_entry_point("local")
219
+ end
220
+
221
+ def deploy_solution # rubocop:disable Metrics/MethodLength
222
+ case @scenario
223
+ when :simple_script
224
+ deploy_simple_script
225
+ when :gem
226
+ deploy_gem(Dir.glob(File.join(@fs_root, "*.gem")).first)
227
+ when :gemfile
228
+ deploy_gemfile
229
+ when :gemspec
230
+ collect_and_deploy_gem(Dir.glob(File.join(@fs_root, "*.gemspec")).first)
231
+ when :gemspec_and_gemfile
232
+ collect_and_deploy_gem_and_gemfile(Dir.glob(File.join(@fs_root, "*.gemspec")).first)
233
+ end
234
+ end
235
+
236
+ def install_all_gems_or_fail
237
+ gem_files = Dir.glob("*.gem").map { |file| File.expand_path(file) }
238
+ raise Tebako::Error, "No gem files found after build" if gem_files.empty?
239
+
240
+ gem_files.each { |gem_file| install_gem(gem_file) }
241
+ end
242
+
243
+ def lookup_files
244
+ @gs_length = Dir.glob(File.join(@fs_root, "*.gemspec")).length
245
+ @gf_length = Dir.glob(File.join(@fs_root, "Gemfile")).length
246
+ @g_length = Dir.glob(File.join(@fs_root, "*.gem")).length
247
+ end
248
+
249
+ def ncores
250
+ if RUBY_PLATFORM.include?("darwin")
251
+ out, st = Open3.capture2e("sysctl", "-n", "hw.ncpu")
252
+ else
253
+ out, st = Open3.capture2e("nproc", "--all")
254
+ end
255
+
256
+ @ncores ||= if st.exitstatus.zero?
257
+ out.strip.to_i
258
+ else
259
+ 4
260
+ end
261
+ end
262
+
263
+ def run_with_capture(args)
264
+ puts " ... @ #{args.join(" ")}"
265
+ out, st = Open3.capture2e(*args)
266
+ raise Tebako::Error, "Failed to run #{args.join(" ")} (#{st}):\n #{out}" unless st.exitstatus.zero?
267
+
268
+ out
269
+ end
270
+
271
+ def run_with_capture_v(args)
272
+ if @verbose
273
+ args_v = args.dup
274
+ args_v.push("--verbose")
275
+ puts run_with_capture(args_v)
276
+ else
277
+ run_with_capture(args)
278
+ end
279
+ end
280
+ end
281
+ end
data/lib/tebako/error.rb CHANGED
@@ -32,7 +32,9 @@ module Tebako
32
32
  102 => "'tebako setup' build step failed",
33
33
  103 => "'tebako press' configure step failed",
34
34
  104 => "'tebako press' build step failed",
35
- 105 => "Failed to map MSys path to Windows"
35
+ 105 => "Failed to map MSys path to Windows",
36
+ 106 => "Entry point does not exist or is not accessible",
37
+ 107 => "Project root does not exist or is not accessible"
36
38
  }.freeze
37
39
 
38
40
  class << self
@@ -88,9 +88,9 @@ module Tebako
88
88
  SUBST
89
89
  }.freeze
90
90
 
91
- DARWIN_CONFIGURE_PATCH = {
92
- "EXTDLDFLAGS=\"-bundle_loader '\\$(BUILTRUBY)'\"" => ""
93
- }.freeze
91
+ # DARWIN_CONFIGURE_PATCH = {
92
+ # "EXTDLDFLAGS=\"-bundle_loader '\\$(BUILTRUBY)'\"" => ""
93
+ # }.freeze
94
94
 
95
95
  OPENSSL_EXTCONF_RB_SUBST = <<~SUBST
96
96
  # Start of tebako patch
@@ -138,7 +138,10 @@ module Tebako
138
138
 
139
139
  # ....................................................
140
140
  # Fixing (bypassing) configure script bug where a variable is used before initialization
141
- patch_map.store("configure", DARWIN_CONFIGURE_PATCH) if ostype =~ /darwin/
141
+ # On MacOS it generates bod EXTDLDFLAGS WITH -bundle_loader <missing parameter>
142
+ # However, it loooks likes EXTDLDFLAGS are just redundant for final Ruby linkage, so we are
143
+ # just removing it on pass 2 (at least for now)
144
+ # patch_map.store("configure", DARWIN_CONFIGURE_PATCH) if ostype =~ /darwin/
142
145
 
143
146
  # ....................................................
144
147
  # autoload :OpenSSL, "openssl"
@@ -53,7 +53,7 @@ module Tebako
53
53
 
54
54
  TEMPLATE_MAKEFILE_IN_BASE_PATCH_PRE_3_1 =
55
55
  "# -- Start of tebako patch --\n" \
56
- "\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
56
+ "\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) " \
57
57
  "$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
58
58
  "# -- End of tebako patch --"
59
59
 
@@ -63,13 +63,13 @@ module Tebako
63
63
 
64
64
  TEMPLATE_MAKEFILE_IN_BASE_PATCH =
65
65
  "# -- Start of tebako patch --\n" \
66
- "\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
66
+ "\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(MAINOBJ) " \
67
67
  "$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
68
68
  "# -- End of tebako patch --"
69
69
 
70
70
  TEMPLATE_MAKEFILE_IN_BASE_PATCH_MSYS =
71
71
  "# -- Start of tebako patch --\n" \
72
- "\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(RUBY_EXP) $(MAINOBJ) " \
72
+ "\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(RUBY_EXP) $(MAINOBJ) " \
73
73
  "$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
74
74
  "# -- End of tebako patch --"
75
75
 
@@ -26,8 +26,11 @@
26
26
  # POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
28
  require "fileutils"
29
+ require "find"
30
+ require "pathname"
29
31
 
30
32
  require_relative "error"
33
+ require_relative "deploy_helper"
31
34
  require_relative "packager/pass1"
32
35
  require_relative "packager/pass1a"
33
36
  require_relative "packager/pass2"
@@ -59,12 +62,6 @@ module Tebako
59
62
  thread_pthread.c
60
63
  ].freeze
61
64
 
62
- # Magic version numbers used to ensure compatibility for Ruby 2.7.x, 3.0.x
63
- # These are the minimal versions required to provide linux-gnu / linux-musl differentiation by bundler
64
- # Ruby 3.1+ default rubygems versions work correctly out of the box
65
- BUNDLER_VERSION = "2.4.22"
66
- RUBYGEMS_VERSION = "3.4.22"
67
-
68
65
  class << self
69
66
  # Create implib
70
67
  def create_implib(src_dir, package_src_dir, app_name, ruby_ver)
@@ -77,18 +74,18 @@ module Tebako
77
74
  end
78
75
 
79
76
  # Deploy
80
- def deploy(target_dir, ruby_ver, gflength)
77
+ def deploy(os_type, target_dir, pre_dir, ruby_ver, fs_root, fs_entrance, fs_mount_point) # rubocop:disable Metrics/ParameterLists
81
78
  puts "-- Running deploy script"
82
79
 
83
- ruby_api_ver = ruby_api_version(ruby_ver)
84
- gem_home = "#{target_dir}/lib/ruby/gems/#{ruby_api_ver}"
85
-
86
- deploy_env = { "GEM_HOME" => gem_home, "GEM_PATH" => gem_home, "TEBAKO_PASS_THROUGH" => "1" }
80
+ deploy_helper = Tebako::DeployHelper.new(fs_root, fs_entrance, fs_mount_point, target_dir, pre_dir)
81
+ deploy_helper.config(os_type, ruby_ver)
87
82
 
88
- PatchHelpers.with_env(deploy_env) do
89
- update_rubygems(target_dir, ruby_api_ver, RUBYGEMS_VERSION) unless PatchHelpers.ruby31?(ruby_ver)
90
- install_gem(target_dir, "tebako-runtime")
91
- install_gem(target_dir, "bundler", BUNDLER_VERSION) if gflength.to_i != 0
83
+ PatchHelpers.with_env(deploy_helper.deploy_env) do
84
+ unless PatchHelpers.ruby31?(ruby_ver)
85
+ deploy_helper.update_rubygems
86
+ patch_after_rubygems_update(target_dir, deploy_helper.ruby_api_version)
87
+ end
88
+ deploy_helper.deploy
92
89
  end
93
90
  end
94
91
 
@@ -174,24 +171,10 @@ module Tebako
174
171
  File.join(src_dir, "lib", "libx64-ucrt-ruby#{ruby_ver[0]}#{ruby_ver[2]}0.a")
175
172
  end
176
173
 
177
- def install_gem(target_dir, name, ver = nil)
178
- puts " ... installing #{name} gem#{" version #{ver}" if ver}"
179
-
180
- params = ["#{target_dir}/bin/gem", "install", name.to_s]
181
- params.push("-v", ver.to_s) if ver
182
-
183
- out, st = Open3.capture2e(*params)
184
- raise Tebako::Error, "Failed to install #{name} (#{st}):\n #{out}" unless st.exitstatus.zero?
185
- end
186
-
187
174
  def do_patch(patch_map, root)
188
175
  patch_map.each { |fname, mapping| PatchHelpers.patch_file("#{root}/#{fname}", mapping) }
189
176
  end
190
177
 
191
- def ruby_api_version(ruby_ver)
192
- "#{ruby_ver.split(".")[0..1].join(".")}.0"
193
- end
194
-
195
178
  def ruby_version(tbd)
196
179
  ruby_version = nil
197
180
  PatchHelpers.with_env(DEPLOY_ENV) do
@@ -206,11 +189,7 @@ module Tebako
206
189
  ruby_version
207
190
  end
208
191
 
209
- def update_rubygems(target_dir, ruby_api_ver, gem_ver)
210
- puts " ... updating rubygems to #{gem_ver}"
211
- out, st = Open3.capture2e("#{target_dir}/bin/gem", "update", "--no-doc", "--system", gem_ver.to_s)
212
- raise Tebako::Error, "Failed to update rubugems to #{gem_ver} (#{st}):\n #{out}" unless st.exitstatus.zero?
213
-
192
+ def patch_after_rubygems_update(target_dir, ruby_api_ver)
214
193
  # Autoload cannot handle statically linked openssl extension
215
194
  # Changing it to require seems to be the simplest solution
216
195
  PatchHelpers.patch_file("#{target_dir}/lib/ruby/site_ruby/#{ruby_api_ver}/rubygems/openssl.rb",
@@ -26,5 +26,5 @@
26
26
  # POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
28
  module Tebako
29
- VERSION = "0.7.2.rc2"
29
+ VERSION = "0.7.2.rc4"
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tebako
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2.rc2
4
+ version: 0.7.2.rc4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-02 00:00:00.000000000 Z
11
+ date: 2024-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -66,6 +66,7 @@ files:
66
66
  - lib/tebako/cli.rb
67
67
  - lib/tebako/cli_helpers.rb
68
68
  - lib/tebako/cli_rubies.rb
69
+ - lib/tebako/deploy_helper.rb
69
70
  - lib/tebako/error.rb
70
71
  - lib/tebako/packager.rb
71
72
  - lib/tebako/packager/pass1.rb