tebako 0.7.2.rc2 → 0.7.2.rc4

Sign up to get free protection for your applications and to get access to all the features.
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