stack-service-base 0.0.24 → 0.0.25

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: eb09aa868df30debf8076166baa7348b6782d50baac76cd39fc844099885fff8
4
- data.tar.gz: 15e2f239fb0e6e9db9c64ce4ef48e8a2324057713e662278e0212c723064b8f7
3
+ metadata.gz: 052ea64035dc60ae423a1ce27ad94eebeb113c4772faffb0b7f31fa90977e042
4
+ data.tar.gz: 8443baf28c3a7afa855dd3729a46dab42ec947158dcdcb9a9e83d76e046435b4
5
5
  SHA512:
6
- metadata.gz: 4a5cbfe9bad38ee68fb0a1f4713d0d8b0c92242fded408f94949b0982001476f4862291e5b4494a4978d5d422785dcea781a9364409e5977498f207912e8245f
7
- data.tar.gz: 8adf9500ce61fdd4d856f7ae48193d3d55776cbb8bcce98d8ac67b5fc51e16e4302bcf5e67a233545d0ec1a9c8e374cbfda215d89a20c4e4b22db773398721d7
6
+ metadata.gz: 609644e6279c9439d35997ae2c1bd22e269d7fd8f9f3f7d2e0de5c352d44af32afb072aab19c063910e638b2edd6d4de0b4ebca4459d58bc4a4f961a02987ab4
7
+ data.tar.gz: 86975ed715be0dc09253e03900833733876ddea50a62ee0003837d18653ef7f2074e37de6ca11dcea26390e4390638dedbceff450598cf975f07b80bea1ea065
data/bin/ssbase ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ lib = File.expand_path('../lib', __dir__)
3
+ $LOAD_PATH << lib
4
+ #$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'stack-service-base/command_line'
7
+ require 'stack-service-base/command_init'
8
+ include SSBase
9
+
10
+ SSBase::CommandLine.run ARGV
@@ -0,0 +1,51 @@
1
+ require_relative 'command_line'
2
+ require 'fileutils'
3
+
4
+ SSBase::CommandLine::COMMANDS[:init] = Class.new do
5
+ def options(parser)
6
+ parser.on('', '--gitlab-c', 'Gitlab C CI/CD')
7
+ parser.on('', '--gitlab', 'Gitlab CI/CD')
8
+ parser.on('', '--github', 'GitHub CI/CD')
9
+ end
10
+
11
+ def run(obj, params, args, _extra)
12
+ if params.empty? || args.empty?
13
+ puts 'Usage: ssbase init [option] <service name>'
14
+ puts 'option: --gitlab-c, --gitlab, --github'
15
+ return
16
+ end
17
+
18
+
19
+ copy_folder :home
20
+
21
+ copy_folder 'gitlab-c' if params[:gitlab_c]
22
+ copy_folder 'gitlab' if params[:gitlab]
23
+ copy_folder 'github' if params[:github]
24
+
25
+ update_service_name args.shift
26
+ end
27
+
28
+ def copy_folder( f_name)
29
+ $stdout.puts "Copy template: #{f_name}"
30
+ # system "cp -rv --update=none #{__dir__}/project_template/#{f_name}/. ."
31
+ system "rsync -av --ignore-existing --info=NAME,progress0,stats0 #{__dir__}/project_template/#{f_name}/ ./ | grep -v '^sending incremental file list$' | grep -v '/$' "
32
+ end
33
+
34
+ def update_service_name(s_name)
35
+ $stdout.puts "Update service name: #{s_name}"
36
+ Dir.glob('**/*').each do |file|
37
+ next unless File.file? file
38
+ content = File.read(file)
39
+ include = content.include?('${service_name}') ? '(found)' : nil
40
+ next unless include
41
+ $stdout.puts "update file: #{file} #{include}"
42
+ content.gsub!(/\$\{service_name\}/, s_name)
43
+ File.write(file, content)
44
+ end
45
+ end
46
+
47
+ def help = ['Create basic service file structure',
48
+ '[... to_compose <deploy name>] ']
49
+ end.new
50
+
51
+
@@ -0,0 +1,76 @@
1
+ require_relative '../version'
2
+ require 'open3'
3
+ require 'optionparser'
4
+
5
+ def exec_i(cmd, input_string = nil, &block)
6
+ puts "exec_i(inputs.size #{input_string&.size}): #{cmd}"
7
+ Open3.popen3(cmd) do |i, o, e, wait_thr|
8
+ std_out, std_err = '', ''
9
+ i.puts input_string unless input_string.nil?
10
+ i.close
11
+ while line = o.gets; puts "o: #{line}"; std_out += "#{line}\n" end
12
+ while line = e.gets; puts "o: #{line}"; std_err += "#{line}\n" end
13
+ return_value = wait_thr.value
14
+ puts "Error level was: #{return_value.exitstatus}" unless return_value.success?
15
+
16
+ if block_given?
17
+ block.call return_value, std_out, std_err
18
+ else
19
+ exit return_value.exitstatus unless return_value.success?
20
+ end
21
+ end
22
+ end
23
+
24
+ def exec_o_lines(cmd,&)
25
+ IO.popen(cmd, 'r') do |f|
26
+ f.each_line do |line|
27
+ yield line
28
+ end
29
+ end
30
+ end
31
+
32
+ module SSBase
33
+ module CommandLine
34
+ COMMANDS = {}
35
+
36
+ class << self
37
+ def run(args)
38
+ params = {}
39
+
40
+ a, extra = ARGV.join(' ').split( / -- /)
41
+ ARGV.replace a.split if a
42
+ ARGV << '-h' if ARGV.empty?
43
+
44
+ OptionParser.new do |o|
45
+ o.version = "#{StackServiceBase::Base::VERSION}"
46
+
47
+ usage = [
48
+ 'ssbase [options] COMMAND',
49
+ ]
50
+ o.banner = "Version: #{o.version}\nUsage:\n\t#{usage.join "\n\t"}"
51
+ o.separator ''
52
+ o.separator 'Commands:'
53
+ COMMANDS.each { |name, cmd| o.separator "#{' ' * 5}#{name} - #{[cmd.help].flatten.join "\n#{' ' * (5+4 + name.size)}" }" }
54
+
55
+ o.separator ''
56
+ o.separator 'Options:'
57
+
58
+ COMMANDS.values.select{_1.options(o) if _1.respond_to? :options }
59
+
60
+ o.on('-h', '--help') { puts o; exit }
61
+ o.parse! args, into: params
62
+
63
+ params.transform_keys!{_1.to_s.gsub('-','_').to_sym}
64
+
65
+ command = args.shift || ''
66
+ raise "Unknown command: #{command}" unless COMMANDS.key?(command.to_sym)
67
+
68
+ COMMANDS[command.to_sym].run [], params, args, extra
69
+ rescue => e
70
+ puts e.message
71
+ ENV['DEBUG'] ? raise : exit(1)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,14 @@
1
+ FROM ruby:3.3.0-alpine3.19 AS base
2
+ RUN apk add bash docker-cli-buildx git
3
+ RUN gem install build-labels:0.0.56 dry-stack:0.1.16
4
+
5
+ FROM base AS runner
6
+ WORKDIR /build
7
+ COPY . .
8
+
9
+ CMD ["bash", "-c", "-x", "\
10
+ env && cd /build/docker && \
11
+ build-labels -n -c docker-compose.yml gitlab set_version to_dockerfiles to_compose | tee bake.yml && \
12
+ export OTEL_RESOURCE_ATTRIBUTES=service.name=docker-builder,pipeline.id=${CI_PIPELINE_ID},project.name=${CI_PROJECT_NAME} && \
13
+ grep \"services: {}\" bake.yml || REGISTRY_HOST=$CI_REGISTRY_HOST docker buildx bake -f bake.yml $([ -z \"$CI_SKIP_PUSH\" ] && echo \"--push\") \
14
+ "]
@@ -0,0 +1,9 @@
1
+ CI_PROJECT_NAME=service_name
2
+ CI_PIPELINE_ID=local
3
+ CI_REGISTRY_HOST=localhost
4
+
5
+ docker run --rm --env-file <(env | grep ^CI_) \
6
+ -v /var/run/docker.sock:/var/run/docker.sock \
7
+ -v /root/.docker:/root/.docker \
8
+ $(docker build -q -t build/${CI_PROJECT_NAME} -f Dockerfile.build ..) 2>&1
9
+
@@ -0,0 +1,10 @@
1
+ services:
2
+ ${service_name}:
3
+ image: ${REGISTRY_HOST}/${service_name}
4
+ build:
5
+ context: ../src
6
+ additional_contexts:
7
+ docker: ../docker
8
+ dockerfile: ../docker/Dockerfile
9
+ ports:
10
+ - "8000:8000"
@@ -0,0 +1,40 @@
1
+ FROM ruby:3.4.4-slim-bookworm AS base
2
+
3
+ RUN apt update && apt --fix-missing install -y build-essential pkg-config libpq-dev curl cmake libssl-dev \
4
+ && rm -rf /var/lib/apt/lists/*
5
+
6
+ RUN echo 'gem: --no-document' >> ~/.gemrc
7
+
8
+ WORKDIR /app
9
+
10
+ COPY Gemfile* /app/
11
+
12
+ RUN bundle install --jobs $(nproc) --retry=3 && \
13
+ bundle clean --force && rm -rf /usr/local/bundle/cache/*
14
+
15
+ COPY . /app
16
+
17
+ ENV RACK_ENV=production NODE_ENV=production
18
+ RUN rake -T | grep 'rake build' && rake build || echo 'no build task'
19
+
20
+ RUN bundle exec rspec
21
+
22
+ FROM ruby:3.4.4-slim-bookworm AS deploy
23
+ RUN apt update && apt install --fix-missing -y bash curl libssl-dev bash curl wget libpq-dev \
24
+ && rm -rf /var/lib/apt/lists/*
25
+
26
+ COPY --from=base /usr/local/bundle /usr/local/bundle
27
+
28
+ COPY . /app
29
+
30
+ ENV RUBY_YJIT_ENABLE=1 \
31
+ SERVER_ENV=production \
32
+ RACK_ENV=production \
33
+ PORT=7000
34
+
35
+ WORKDIR /app
36
+
37
+ # --start_period=5s (Unknown flag: start_period)
38
+ HEALTHCHECK --interval=15s --timeout=2s --retries=3 CMD curl --fail http://127.0.0.1:$PORT/healthcheck || exit 1
39
+ CMD bundle exec rackup -o 0.0.0.0 -p $PORT -s falcon
40
+ # docker-compose build --progress plain
@@ -0,0 +1,25 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'sinatra'
4
+ gem 'async'
5
+ gem 'sequel'
6
+ gem 'pg'
7
+
8
+ gem 'rack', '~> 3.1.13'
9
+ gem 'rackup', '~> 2.2.1'
10
+ gem 'falcon'
11
+
12
+ gem 'stack-service-base'
13
+
14
+ group :test do
15
+ gem 'sqlite3'
16
+ gem 'rspec'
17
+ gem 'rack-test'
18
+ gem 'rspec-benchmark'
19
+ gem 'rspec_junit_formatter'
20
+ gem 'async-rspec'
21
+
22
+ gem 'simplecov'
23
+ # gem 'simplecov-cobertura'
24
+ gem 'yard'
25
+ end
@@ -0,0 +1,416 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ async (2.26.0)
5
+ console (~> 1.29)
6
+ fiber-annotation
7
+ io-event (~> 1.12)
8
+ metrics (~> 0.12)
9
+ traces (~> 0.15)
10
+ async-container (0.24.0)
11
+ async (~> 2.22)
12
+ async-container-supervisor (0.5.2)
13
+ async-container (~> 0.22)
14
+ async-service
15
+ io-endpoint
16
+ io-stream
17
+ memory-leak (~> 0.5)
18
+ async-http (0.89.0)
19
+ async (>= 2.10.2)
20
+ async-pool (~> 0.9)
21
+ io-endpoint (~> 0.14)
22
+ io-stream (~> 0.6)
23
+ metrics (~> 0.12)
24
+ protocol-http (~> 0.49)
25
+ protocol-http1 (~> 0.30)
26
+ protocol-http2 (~> 0.22)
27
+ traces (~> 0.10)
28
+ async-http-cache (0.4.5)
29
+ async-http (~> 0.56)
30
+ async-pool (0.11.0)
31
+ async (>= 2.0)
32
+ async-rspec (1.17.1)
33
+ rspec (~> 3.0)
34
+ rspec-files (~> 1.0)
35
+ rspec-memory (~> 1.0)
36
+ async-service (0.13.0)
37
+ async
38
+ async-container (~> 0.16)
39
+ base64 (0.3.0)
40
+ benchmark-malloc (0.2.0)
41
+ benchmark-perf (0.6.0)
42
+ benchmark-trend (0.4.0)
43
+ bigdecimal (3.2.2)
44
+ concurrent-ruby (1.3.5)
45
+ console (1.32.0)
46
+ fiber-annotation
47
+ fiber-local (~> 1.1)
48
+ json
49
+ diff-lcs (1.6.2)
50
+ docile (1.4.1)
51
+ falcon (0.52.0)
52
+ async
53
+ async-container (~> 0.20)
54
+ async-container-supervisor (~> 0.5.0)
55
+ async-http (~> 0.75)
56
+ async-http-cache (~> 0.4)
57
+ async-service (~> 0.10)
58
+ bundler
59
+ localhost (~> 1.1)
60
+ openssl (~> 3.0)
61
+ protocol-http (~> 0.31)
62
+ protocol-rack (~> 0.7)
63
+ samovar (~> 2.3)
64
+ fiber-annotation (0.2.0)
65
+ fiber-local (1.1.0)
66
+ fiber-storage
67
+ fiber-storage (1.0.1)
68
+ google-protobuf (4.31.1-x86_64-linux-gnu)
69
+ bigdecimal
70
+ rake (>= 13)
71
+ googleapis-common-protos-types (1.20.0)
72
+ google-protobuf (>= 3.18, < 5.a)
73
+ io-endpoint (0.15.2)
74
+ io-event (1.12.0)
75
+ io-stream (0.10.0)
76
+ json (2.13.0)
77
+ localhost (1.5.0)
78
+ logger (1.7.0)
79
+ mapping (1.1.3)
80
+ memory-leak (0.5.2)
81
+ metrics (0.12.2)
82
+ mustermann (3.0.3)
83
+ ruby2_keywords (~> 0.0.1)
84
+ nats-pure (2.5.0)
85
+ base64
86
+ concurrent-ruby (~> 1.0)
87
+ json
88
+ securerandom
89
+ uri
90
+ openssl (3.3.0)
91
+ opentelemetry-api (1.5.0)
92
+ opentelemetry-common (0.22.0)
93
+ opentelemetry-api (~> 1.0)
94
+ opentelemetry-exporter-otlp (0.30.0)
95
+ google-protobuf (>= 3.18)
96
+ googleapis-common-protos-types (~> 1.3)
97
+ opentelemetry-api (~> 1.1)
98
+ opentelemetry-common (~> 0.20)
99
+ opentelemetry-sdk (~> 1.2)
100
+ opentelemetry-semantic_conventions
101
+ opentelemetry-helpers-mysql (0.2.0)
102
+ opentelemetry-api (~> 1.0)
103
+ opentelemetry-common (~> 0.21)
104
+ opentelemetry-helpers-sql (0.1.1)
105
+ opentelemetry-api (~> 1.0)
106
+ opentelemetry-helpers-sql-obfuscation (0.3.0)
107
+ opentelemetry-common (~> 0.21)
108
+ opentelemetry-instrumentation-action_mailer (0.4.0)
109
+ opentelemetry-api (~> 1.0)
110
+ opentelemetry-instrumentation-active_support (~> 0.7)
111
+ opentelemetry-instrumentation-base (~> 0.23.0)
112
+ opentelemetry-instrumentation-action_pack (0.12.3)
113
+ opentelemetry-api (~> 1.0)
114
+ opentelemetry-instrumentation-base (~> 0.23.0)
115
+ opentelemetry-instrumentation-rack (~> 0.21)
116
+ opentelemetry-instrumentation-action_view (0.9.0)
117
+ opentelemetry-api (~> 1.0)
118
+ opentelemetry-instrumentation-active_support (~> 0.7)
119
+ opentelemetry-instrumentation-base (~> 0.23.0)
120
+ opentelemetry-instrumentation-active_job (0.8.0)
121
+ opentelemetry-api (~> 1.0)
122
+ opentelemetry-instrumentation-base (~> 0.23.0)
123
+ opentelemetry-instrumentation-active_model_serializers (0.22.0)
124
+ opentelemetry-api (~> 1.0)
125
+ opentelemetry-instrumentation-active_support (>= 0.7.0)
126
+ opentelemetry-instrumentation-base (~> 0.23.0)
127
+ opentelemetry-instrumentation-active_record (0.9.0)
128
+ opentelemetry-api (~> 1.0)
129
+ opentelemetry-instrumentation-base (~> 0.23.0)
130
+ opentelemetry-instrumentation-active_storage (0.1.1)
131
+ opentelemetry-api (~> 1.0)
132
+ opentelemetry-instrumentation-active_support (~> 0.7)
133
+ opentelemetry-instrumentation-base (~> 0.23.0)
134
+ opentelemetry-instrumentation-active_support (0.8.0)
135
+ opentelemetry-api (~> 1.0)
136
+ opentelemetry-instrumentation-base (~> 0.23.0)
137
+ opentelemetry-instrumentation-all (0.78.0)
138
+ opentelemetry-instrumentation-active_model_serializers (~> 0.22.0)
139
+ opentelemetry-instrumentation-aws_lambda (~> 0.3.0)
140
+ opentelemetry-instrumentation-aws_sdk (~> 0.8.0)
141
+ opentelemetry-instrumentation-bunny (~> 0.22.0)
142
+ opentelemetry-instrumentation-concurrent_ruby (~> 0.22.0)
143
+ opentelemetry-instrumentation-dalli (~> 0.27.0)
144
+ opentelemetry-instrumentation-delayed_job (~> 0.23.0)
145
+ opentelemetry-instrumentation-ethon (~> 0.22.0)
146
+ opentelemetry-instrumentation-excon (~> 0.23.0)
147
+ opentelemetry-instrumentation-faraday (~> 0.27.0)
148
+ opentelemetry-instrumentation-grape (~> 0.3.0)
149
+ opentelemetry-instrumentation-graphql (~> 0.29.0)
150
+ opentelemetry-instrumentation-grpc (~> 0.2.0)
151
+ opentelemetry-instrumentation-gruf (~> 0.3.0)
152
+ opentelemetry-instrumentation-http (~> 0.25.0)
153
+ opentelemetry-instrumentation-http_client (~> 0.23.0)
154
+ opentelemetry-instrumentation-koala (~> 0.21.0)
155
+ opentelemetry-instrumentation-lmdb (~> 0.23.0)
156
+ opentelemetry-instrumentation-mongo (~> 0.23.0)
157
+ opentelemetry-instrumentation-mysql2 (~> 0.29.0)
158
+ opentelemetry-instrumentation-net_http (~> 0.23.0)
159
+ opentelemetry-instrumentation-pg (~> 0.30.0)
160
+ opentelemetry-instrumentation-que (~> 0.9.0)
161
+ opentelemetry-instrumentation-racecar (~> 0.4.0)
162
+ opentelemetry-instrumentation-rack (~> 0.26.0)
163
+ opentelemetry-instrumentation-rails (~> 0.36.0)
164
+ opentelemetry-instrumentation-rake (~> 0.3.1)
165
+ opentelemetry-instrumentation-rdkafka (~> 0.7.0)
166
+ opentelemetry-instrumentation-redis (~> 0.26.1)
167
+ opentelemetry-instrumentation-resque (~> 0.6.0)
168
+ opentelemetry-instrumentation-restclient (~> 0.23.0)
169
+ opentelemetry-instrumentation-ruby_kafka (~> 0.22.0)
170
+ opentelemetry-instrumentation-sidekiq (~> 0.26.0)
171
+ opentelemetry-instrumentation-sinatra (~> 0.25.0)
172
+ opentelemetry-instrumentation-trilogy (~> 0.61.0)
173
+ opentelemetry-instrumentation-aws_lambda (0.3.0)
174
+ opentelemetry-api (~> 1.0)
175
+ opentelemetry-instrumentation-base (~> 0.23.0)
176
+ opentelemetry-instrumentation-aws_sdk (0.8.1)
177
+ opentelemetry-api (~> 1.0)
178
+ opentelemetry-instrumentation-base (~> 0.23.0)
179
+ opentelemetry-instrumentation-base (0.23.0)
180
+ opentelemetry-api (~> 1.0)
181
+ opentelemetry-common (~> 0.21)
182
+ opentelemetry-registry (~> 0.1)
183
+ opentelemetry-instrumentation-bunny (0.22.0)
184
+ opentelemetry-api (~> 1.0)
185
+ opentelemetry-instrumentation-base (~> 0.23.0)
186
+ opentelemetry-instrumentation-concurrent_ruby (0.22.0)
187
+ opentelemetry-api (~> 1.0)
188
+ opentelemetry-instrumentation-base (~> 0.23.0)
189
+ opentelemetry-instrumentation-dalli (0.27.3)
190
+ opentelemetry-api (~> 1.0)
191
+ opentelemetry-instrumentation-base (~> 0.23.0)
192
+ opentelemetry-instrumentation-delayed_job (0.23.0)
193
+ opentelemetry-api (~> 1.0)
194
+ opentelemetry-instrumentation-base (~> 0.23.0)
195
+ opentelemetry-instrumentation-ethon (0.22.0)
196
+ opentelemetry-api (~> 1.0)
197
+ opentelemetry-instrumentation-base (~> 0.23.0)
198
+ opentelemetry-instrumentation-excon (0.23.0)
199
+ opentelemetry-api (~> 1.0)
200
+ opentelemetry-instrumentation-base (~> 0.23.0)
201
+ opentelemetry-instrumentation-faraday (0.27.0)
202
+ opentelemetry-api (~> 1.0)
203
+ opentelemetry-instrumentation-base (~> 0.23.0)
204
+ opentelemetry-instrumentation-grape (0.3.0)
205
+ opentelemetry-api (~> 1.0)
206
+ opentelemetry-instrumentation-base (~> 0.23.0)
207
+ opentelemetry-instrumentation-rack (~> 0.21)
208
+ opentelemetry-instrumentation-graphql (0.29.0)
209
+ opentelemetry-api (~> 1.0)
210
+ opentelemetry-instrumentation-base (~> 0.23.0)
211
+ opentelemetry-instrumentation-grpc (0.2.1)
212
+ opentelemetry-api (~> 1.0)
213
+ opentelemetry-instrumentation-base (~> 0.23.0)
214
+ opentelemetry-instrumentation-gruf (0.3.0)
215
+ opentelemetry-api (>= 1.0.0)
216
+ opentelemetry-instrumentation-base (~> 0.23.0)
217
+ opentelemetry-instrumentation-http (0.25.1)
218
+ opentelemetry-api (~> 1.0)
219
+ opentelemetry-instrumentation-base (~> 0.23.0)
220
+ opentelemetry-instrumentation-http_client (0.23.0)
221
+ opentelemetry-api (~> 1.0)
222
+ opentelemetry-instrumentation-base (~> 0.23.0)
223
+ opentelemetry-instrumentation-koala (0.21.0)
224
+ opentelemetry-api (~> 1.0)
225
+ opentelemetry-instrumentation-base (~> 0.23.0)
226
+ opentelemetry-instrumentation-lmdb (0.23.0)
227
+ opentelemetry-api (~> 1.0)
228
+ opentelemetry-instrumentation-base (~> 0.23.0)
229
+ opentelemetry-instrumentation-mongo (0.23.0)
230
+ opentelemetry-api (~> 1.0)
231
+ opentelemetry-instrumentation-base (~> 0.23.0)
232
+ opentelemetry-instrumentation-mysql2 (0.29.1)
233
+ opentelemetry-api (~> 1.0)
234
+ opentelemetry-helpers-mysql
235
+ opentelemetry-helpers-sql
236
+ opentelemetry-helpers-sql-obfuscation
237
+ opentelemetry-instrumentation-base (~> 0.23.0)
238
+ opentelemetry-instrumentation-net_http (0.23.0)
239
+ opentelemetry-api (~> 1.0)
240
+ opentelemetry-instrumentation-base (~> 0.23.0)
241
+ opentelemetry-instrumentation-pg (0.30.1)
242
+ opentelemetry-api (~> 1.0)
243
+ opentelemetry-helpers-sql
244
+ opentelemetry-helpers-sql-obfuscation
245
+ opentelemetry-instrumentation-base (~> 0.23.0)
246
+ opentelemetry-instrumentation-que (0.9.0)
247
+ opentelemetry-api (~> 1.0)
248
+ opentelemetry-instrumentation-base (~> 0.23.0)
249
+ opentelemetry-instrumentation-racecar (0.4.0)
250
+ opentelemetry-api (~> 1.0)
251
+ opentelemetry-instrumentation-base (~> 0.23.0)
252
+ opentelemetry-instrumentation-rack (0.26.0)
253
+ opentelemetry-api (~> 1.0)
254
+ opentelemetry-instrumentation-base (~> 0.23.0)
255
+ opentelemetry-instrumentation-rails (0.36.0)
256
+ opentelemetry-api (~> 1.0)
257
+ opentelemetry-instrumentation-action_mailer (~> 0.4.0)
258
+ opentelemetry-instrumentation-action_pack (~> 0.12.0)
259
+ opentelemetry-instrumentation-action_view (~> 0.9.0)
260
+ opentelemetry-instrumentation-active_job (~> 0.8.0)
261
+ opentelemetry-instrumentation-active_record (~> 0.9.0)
262
+ opentelemetry-instrumentation-active_storage (~> 0.1.0)
263
+ opentelemetry-instrumentation-active_support (~> 0.8.0)
264
+ opentelemetry-instrumentation-base (~> 0.23.0)
265
+ opentelemetry-instrumentation-concurrent_ruby (~> 0.22.0)
266
+ opentelemetry-instrumentation-rake (0.3.1)
267
+ opentelemetry-api (~> 1.0)
268
+ opentelemetry-instrumentation-base (~> 0.23.0)
269
+ opentelemetry-instrumentation-rdkafka (0.7.0)
270
+ opentelemetry-api (~> 1.0)
271
+ opentelemetry-instrumentation-base (~> 0.23.0)
272
+ opentelemetry-instrumentation-redis (0.26.1)
273
+ opentelemetry-api (~> 1.0)
274
+ opentelemetry-instrumentation-base (~> 0.23.0)
275
+ opentelemetry-instrumentation-resque (0.6.0)
276
+ opentelemetry-api (~> 1.0)
277
+ opentelemetry-instrumentation-base (~> 0.23.0)
278
+ opentelemetry-instrumentation-restclient (0.23.0)
279
+ opentelemetry-api (~> 1.0)
280
+ opentelemetry-instrumentation-base (~> 0.23.0)
281
+ opentelemetry-instrumentation-ruby_kafka (0.22.0)
282
+ opentelemetry-api (~> 1.0)
283
+ opentelemetry-instrumentation-base (~> 0.23.0)
284
+ opentelemetry-instrumentation-sidekiq (0.26.1)
285
+ opentelemetry-api (~> 1.0)
286
+ opentelemetry-instrumentation-base (~> 0.23.0)
287
+ opentelemetry-instrumentation-sinatra (0.25.0)
288
+ opentelemetry-api (~> 1.0)
289
+ opentelemetry-instrumentation-base (~> 0.23.0)
290
+ opentelemetry-instrumentation-rack (~> 0.21)
291
+ opentelemetry-instrumentation-trilogy (0.61.1)
292
+ opentelemetry-api (~> 1.0)
293
+ opentelemetry-helpers-mysql
294
+ opentelemetry-helpers-sql
295
+ opentelemetry-helpers-sql-obfuscation
296
+ opentelemetry-instrumentation-base (~> 0.23.0)
297
+ opentelemetry-semantic_conventions (>= 1.8.0)
298
+ opentelemetry-registry (0.4.0)
299
+ opentelemetry-api (~> 1.1)
300
+ opentelemetry-sdk (1.8.0)
301
+ opentelemetry-api (~> 1.1)
302
+ opentelemetry-common (~> 0.20)
303
+ opentelemetry-registry (~> 0.2)
304
+ opentelemetry-semantic_conventions
305
+ opentelemetry-semantic_conventions (1.11.0)
306
+ opentelemetry-api (~> 1.0)
307
+ pg (1.5.9)
308
+ prometheus-client (4.2.5)
309
+ base64
310
+ protocol-hpack (1.5.1)
311
+ protocol-http (0.51.0)
312
+ protocol-http1 (0.34.1)
313
+ protocol-http (~> 0.22)
314
+ protocol-http2 (0.22.1)
315
+ protocol-hpack (~> 1.4)
316
+ protocol-http (~> 0.47)
317
+ protocol-rack (0.15.0)
318
+ io-stream (>= 0.10)
319
+ protocol-http (~> 0.43)
320
+ rack (>= 1.0)
321
+ rack (3.1.16)
322
+ rack-protection (4.1.1)
323
+ base64 (>= 0.1.0)
324
+ logger (>= 1.6.0)
325
+ rack (>= 3.0.0, < 4)
326
+ rack-session (2.1.1)
327
+ base64 (>= 0.1.0)
328
+ rack (>= 3.0.0)
329
+ rack-test (2.2.0)
330
+ rack (>= 1.3)
331
+ rackup (2.2.1)
332
+ rack (>= 3)
333
+ rake (13.3.0)
334
+ rspec (3.13.1)
335
+ rspec-core (~> 3.13.0)
336
+ rspec-expectations (~> 3.13.0)
337
+ rspec-mocks (~> 3.13.0)
338
+ rspec-benchmark (0.6.0)
339
+ benchmark-malloc (~> 0.2)
340
+ benchmark-perf (~> 0.6)
341
+ benchmark-trend (~> 0.4)
342
+ rspec (>= 3.0)
343
+ rspec-core (3.13.5)
344
+ rspec-support (~> 3.13.0)
345
+ rspec-expectations (3.13.5)
346
+ diff-lcs (>= 1.2.0, < 2.0)
347
+ rspec-support (~> 3.13.0)
348
+ rspec-files (1.1.3)
349
+ rspec (~> 3.0)
350
+ rspec-memory (1.0.4)
351
+ rspec (~> 3.0)
352
+ rspec-mocks (3.13.5)
353
+ diff-lcs (>= 1.2.0, < 2.0)
354
+ rspec-support (~> 3.13.0)
355
+ rspec-support (3.13.4)
356
+ rspec_junit_formatter (0.6.0)
357
+ rspec-core (>= 2, < 4, != 2.12.0)
358
+ ruby2_keywords (0.0.5)
359
+ samovar (2.3.0)
360
+ console (~> 1.0)
361
+ mapping (~> 1.0)
362
+ securerandom (0.4.1)
363
+ sequel (5.94.0)
364
+ bigdecimal
365
+ simplecov (0.22.0)
366
+ docile (~> 1.1)
367
+ simplecov-html (~> 0.11)
368
+ simplecov_json_formatter (~> 0.1)
369
+ simplecov-html (0.13.2)
370
+ simplecov_json_formatter (0.1.4)
371
+ sinatra (4.1.1)
372
+ logger (>= 1.6.0)
373
+ mustermann (~> 3.0)
374
+ rack (>= 3.0.0, < 4)
375
+ rack-protection (= 4.1.1)
376
+ rack-session (>= 2.0.0, < 3)
377
+ tilt (~> 2.0)
378
+ sqlite3 (2.7.2-x86_64-linux-gnu)
379
+ stack-service-base (0.0.24)
380
+ async
381
+ nats-pure
382
+ opentelemetry-exporter-otlp
383
+ opentelemetry-instrumentation-all
384
+ opentelemetry-sdk
385
+ prometheus-client
386
+ rack
387
+ websocket
388
+ tilt (2.6.1)
389
+ traces (0.15.2)
390
+ uri (1.0.3)
391
+ websocket (1.2.11)
392
+ yard (0.9.37)
393
+
394
+ PLATFORMS
395
+ x86_64-linux
396
+
397
+ DEPENDENCIES
398
+ async
399
+ async-rspec
400
+ falcon
401
+ pg
402
+ rack (~> 3.1.13)
403
+ rack-test
404
+ rackup (~> 2.2.1)
405
+ rspec
406
+ rspec-benchmark
407
+ rspec_junit_formatter
408
+ sequel
409
+ simplecov
410
+ sinatra
411
+ sqlite3
412
+ stack-service-base
413
+ yard
414
+
415
+ BUNDLED WITH
416
+ 2.6.7
@@ -0,0 +1,14 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new(:spec)
4
+
5
+ task default: :rspec
6
+
7
+ desc "Run all tests"
8
+ task :test => :spec
9
+
10
+ desc "Run tests with coverage"
11
+ task :coverage do
12
+ ENV['COVERAGE'] = 'true'
13
+ Rake::Task[:spec].invoke
14
+ end
@@ -0,0 +1,36 @@
1
+ require 'sequel'
2
+ require 'sinatra'
3
+ require 'stack-service-base'
4
+
5
+ StackServiceBase.rack_setup self
6
+
7
+ DB = Sequel.connect ENV.fetch('DB_URL')
8
+
9
+ # require Models ...
10
+ # require_relative 'models/...'
11
+
12
+ get '/api/foo' do
13
+ content_type :json
14
+ {status: 'Ok'}.to_json
15
+ end
16
+
17
+ post '/api/create' do
18
+ _form_data = JSON request.body.read, symbolize_names: true
19
+
20
+ # Model.create _form_data
21
+
22
+ content_type :json
23
+ {message: 'Created successfully'}.to_json
24
+ end
25
+
26
+
27
+ helpers do
28
+ def download(url)
29
+ response = HTTParty.get(url)
30
+ response.body
31
+
32
+ halt 400, { message: 'Invalid input data', errors: errors }.to_json unless errors.empty?
33
+ end
34
+ end
35
+
36
+ run Sinatra::Application
@@ -0,0 +1,9 @@
1
+ RSpec.describe 'Integration Tests' do
2
+
3
+ describe 'Service basics' do
4
+ it 'respond to Healthcheck' do
5
+ get '/healthcheck'
6
+ expect(last_response.status).to eq(200)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+ $VERBOSE = nil
3
+
4
+ require 'rspec-benchmark'
5
+ require 'rack/test'
6
+ require 'async/rspec'
7
+ require 'rack/builder'
8
+
9
+ require 'simplecov'
10
+ SimpleCov.start
11
+
12
+ ENV['DB_URL'] = 'sqlite::memory:'
13
+ $app = Rack::Builder.parse_file('config.ru')
14
+
15
+ module Rack::Test::JHelpers
16
+ def app = $app
17
+ end
18
+
19
+ RSpec.configure do |config|
20
+ config.include Rack::Test::Methods
21
+ config.include Rack::Test::JHelpers
22
+ config.include RSpec::Benchmark::Matchers
23
+ config.include_context Async::RSpec::Reactor
24
+
25
+ config.before(:each) do
26
+ header 'Host', 'localhost'
27
+ end
28
+ end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module StackServiceBase
2
2
  class Base
3
- VERSION = '0.0.24'
3
+ VERSION = '0.0.25'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stack-service-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.24
4
+ version: 0.0.25
5
5
  platform: ruby
6
6
  authors:
7
- - ''
7
+ - Artyom B
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-07-11 00:00:00.000000000 Z
11
+ date: 2025-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -208,16 +208,30 @@ dependencies:
208
208
  version: 0.5.1
209
209
  description:
210
210
  email:
211
- executables: []
211
+ executables:
212
+ - ssbase
212
213
  extensions: []
213
214
  extra_rdoc_files: []
214
215
  files:
216
+ - bin/ssbase
215
217
  - lib/stack-service-base.rb
218
+ - lib/stack-service-base/command_init.rb
219
+ - lib/stack-service-base/command_line.rb
216
220
  - lib/stack-service-base/database.rb
217
221
  - lib/stack-service-base/fiber_pool.rb
218
222
  - lib/stack-service-base/logging.rb
219
223
  - lib/stack-service-base/nats_service.rb
220
224
  - lib/stack-service-base/open_telemetry.rb
225
+ - lib/stack-service-base/project_template/gitlab-c/docker/Dockerfile.build
226
+ - lib/stack-service-base/project_template/gitlab-c/docker/local_build.sh
227
+ - lib/stack-service-base/project_template/home/docker/docker-compose.yml
228
+ - lib/stack-service-base/project_template/home/docker/ruby/Dockerfile
229
+ - lib/stack-service-base/project_template/home/src/Gemfile
230
+ - lib/stack-service-base/project_template/home/src/Gemfile.lock
231
+ - lib/stack-service-base/project_template/home/src/Rakefile
232
+ - lib/stack-service-base/project_template/home/src/config.ru
233
+ - lib/stack-service-base/project_template/home/src/specs/integration_spec.rb
234
+ - lib/stack-service-base/project_template/home/src/specs/spec_helper.rb
221
235
  - lib/stack-service-base/prometheus.rb
222
236
  - lib/stack-service-base/prometheus_parser.rb
223
237
  - lib/stack-service-base/rack_helpers.rb