s3arch 0.1.2 → 0.1.4

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: b51661d90b5b65c15611e53f316b542cb6032dc34007adae6f8ee735baf6f0a3
4
- data.tar.gz: cacd1cc9bcab08dcb1bae6dc9e0f757bc7a014a1dc92d907a1e90e7d1e99eab3
3
+ metadata.gz: 1e94c87e16c5a1c133e8b155aa86f7993fda2e29c1f25b1039d4344eb28c5e8f
4
+ data.tar.gz: fa25590c4becae78ca1a79c6a76bc5e884819c472bafcca5e996a2439d70112a
5
5
  SHA512:
6
- metadata.gz: c4bafc88643be123cfaf047d245679feae7881a3e2b75b0c8c90c445dc8be01a51be7aabb96d19a0760b47dee9f92f851c5c35f1547e806c9bb0b21a749a4009
7
- data.tar.gz: 7b137e16651e582d3b1a4582949133c91b992ea96b98659b11d415410b9bbf20edc5653b0614455c51b6b2f5a019292232fabb0732924e292130d6bfc59aeb8a
6
+ metadata.gz: eb5464878dad0a59d3dfc2b0f23737eb99a88fa1c15889557a3c9d41eef9686b6614d3e647ad463143bbe6f3a388b7516d67515ec7b90044b2332d634b49e6a7
7
+ data.tar.gz: d504be859a8a49b19be69c5fd354e9823b48bf67ce6bee7753b69e3ef6f88763323e6582ba7ed7ae227a0c6b8f20ec09903efcbac294cf7227e21fd7638030bc
data/README.md CHANGED
@@ -145,16 +145,16 @@ S3arch requires the `sqlite3` native extension at runtime. A Rake task is includ
145
145
 
146
146
  ```bash
147
147
  # Build the layer zip (outputs to pkg/sqlite-layer.zip)
148
- rake lambda:build_layer
148
+ rake s3arch:layer:build
149
149
 
150
150
  # Build and publish in one step
151
- rake lambda:publish_layer PROFILE=devzilla
151
+ rake s3arch:layer:publish PROFILE=devzilla
152
152
 
153
153
  # Customize the build
154
- rake lambda:build_layer RUBY_VERSION=3.4 ARCHITECTURE=x86_64
154
+ rake s3arch:layer:build RUBY_VERSION=3.4 ARCHITECTURE=x86_64
155
155
 
156
156
  # Publish to a specific region/account
157
- rake lambda:publish_layer PROFILE=production REGION=us-west-2 LAYER_NAME=stowzilla-sqlite3-ruby
157
+ rake s3arch:layer:publish PROFILE=production REGION=us-west-2 LAYER_NAME=stowzilla-sqlite3-ruby
158
158
  ```
159
159
 
160
160
  | Environment Variable | Default | Description |
@@ -169,6 +169,21 @@ rake lambda:publish_layer PROFILE=production REGION=us-west-2 LAYER_NAME=stowzil
169
169
 
170
170
  Requires Docker to be running (uses the official AWS SAM build images).
171
171
 
172
+ ## Rake Tasks
173
+
174
+ ```bash
175
+ rake s3arch:layer:build # Build the Lambda layer zip
176
+ rake s3arch:layer:publish # Build and publish to AWS
177
+ rake s3arch:rebuild # Rebuild index for an owner (OWNER_ID=xxx)
178
+ rake s3arch:info # Show config and version info
179
+ ```
180
+
181
+ To make these tasks available in your app, add to your Rakefile:
182
+
183
+ ```ruby
184
+ require 's3arch/tasks'
185
+ ```
186
+
172
187
  ## Requirements
173
188
 
174
189
  - Ruby >= 3.2
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module S3arch
4
- VERSION = '0.1.2'
4
+ VERSION = '0.1.4'
5
5
  end
@@ -0,0 +1,179 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../s3arch/version'
4
+
5
+ module S3archLayerBuilder
6
+ module_function
7
+
8
+ def build_layer(ruby_version:, architecture:, output_file:, s3arch_version:)
9
+ require 'tmpdir'
10
+ require 'fileutils'
11
+
12
+ FileUtils.mkdir_p(File.dirname(output_file))
13
+
14
+ puts "🔨 Building Lambda layer (Ruby #{ruby_version} / #{architecture}, s3arch #{s3arch_version})..."
15
+
16
+ tmpdir = Dir.mktmpdir('s3arch-layer')
17
+ begin
18
+ write_gemfile(tmpdir, s3arch_version)
19
+ run_docker_build(tmpdir, ruby_version, architecture)
20
+ strip_layer("#{tmpdir}/layer")
21
+ verify_layer("#{tmpdir}/layer")
22
+ create_zip("#{tmpdir}/layer", output_file)
23
+ ensure
24
+ system('sudo', 'rm', '-rf', tmpdir) || FileUtils.rm_rf(tmpdir)
25
+ end
26
+ end
27
+
28
+ def write_gemfile(tmpdir, s3arch_version)
29
+ File.write("#{tmpdir}/Gemfile", <<~GEMFILE)
30
+ source 'https://rubygems.org'
31
+ gem 's3arch', '#{s3arch_version}'
32
+ GEMFILE
33
+ end
34
+
35
+ def run_docker_build(tmpdir, ruby_version, architecture)
36
+ docker_image = "public.ecr.aws/sam/build-ruby#{ruby_version}:latest-#{architecture}"
37
+ platform = architecture == 'x86_64' ? 'linux/amd64' : 'linux/arm64'
38
+
39
+ build_script = docker_build_script(ruby_version)
40
+
41
+ docker_cmd = [
42
+ 'docker', 'run', '--rm',
43
+ '--platform', platform,
44
+ '-v', "#{tmpdir}:/build",
45
+ '-w', '/build',
46
+ docker_image,
47
+ '/bin/bash', '-c', build_script
48
+ ]
49
+
50
+ puts "🐳 Building in Docker (#{docker_image})..."
51
+ abort '❌ Docker build failed' unless system(*docker_cmd)
52
+ end
53
+
54
+ def docker_build_script(ruby_version)
55
+ <<~BASH
56
+ yum install -y sqlite-devel 2>/dev/null || dnf install -y sqlite-devel 2>/dev/null
57
+ bundle config set --local path /build/layer/ruby/gems/#{ruby_version}.0
58
+ bundle config set --local without "development test"
59
+ bundle config set --local deployment false
60
+ bundle install
61
+ NESTED="/build/layer/ruby/gems/#{ruby_version}.0/ruby/#{ruby_version}.0"
62
+ if [ -d "$NESTED" ]; then
63
+ mkdir -p /build/layer-final/ruby/gems/#{ruby_version}.0
64
+ cp -a "$NESTED"/* /build/layer-final/ruby/gems/#{ruby_version}.0/
65
+ rm -rf /build/layer
66
+ mv /build/layer-final /build/layer
67
+ fi
68
+ BASH
69
+ end
70
+
71
+ def strip_layer(layer_dir)
72
+ puts '🧹 Stripping layer...'
73
+
74
+ Dir.glob("#{layer_dir}/ruby/gems/*/gems/*/").each do |gem_dir|
75
+ %w[spec test tests doc docs examples benchmarks].each do |fat_dir|
76
+ FileUtils.rm_rf("#{gem_dir}#{fat_dir}")
77
+ end
78
+ end
79
+
80
+ junk_patterns = %w[
81
+ *.md *.rdoc *.txt *.c *.h *.o Makefile *.log
82
+ CHANGELOG* HISTORY* LICENSE* README* .gitignore Rakefile
83
+ ]
84
+ junk_patterns.each do |pattern|
85
+ Dir.glob("#{layer_dir}/**/#{pattern}").each { |f| FileUtils.rm_f(f) }
86
+ end
87
+
88
+ Dir.glob("#{layer_dir}/**/*.so").each do |so|
89
+ system('strip', '--strip-debug', so, err: File::NULL)
90
+ end
91
+ end
92
+
93
+ def verify_layer(layer_dir)
94
+ sqlite_so = Dir.glob("#{layer_dir}/**/sqlite3_native.so") +
95
+ Dir.glob("#{layer_dir}/**/sqlite3.so")
96
+ abort '❌ sqlite3 native extension NOT found in layer' if sqlite_so.empty?
97
+ puts '✅ sqlite3 native extension included'
98
+
99
+ s3arch_lib = Dir.glob("#{layer_dir}/**/gems/s3arch-*/lib/s3arch.rb")
100
+ abort '❌ s3arch gem NOT found in layer' if s3arch_lib.empty?
101
+ puts '✅ s3arch gem included'
102
+ end
103
+
104
+ def create_zip(layer_dir, output_file)
105
+ FileUtils.rm_f(output_file)
106
+ abort '❌ Failed to create zip' unless system('zip', '-qr', output_file, 'ruby/', chdir: layer_dir)
107
+
108
+ size = `du -h #{output_file}`.split("\t").first
109
+ puts "✅ Layer built: #{output_file} (#{size})"
110
+ end
111
+ end
112
+
113
+ namespace :s3arch do
114
+ namespace :layer do
115
+ desc 'Build the Lambda layer zip (defaults: RUBY_VERSION=3.4, ARCHITECTURE=x86_64)'
116
+ task :build do
117
+ ruby_version = ENV.fetch('RUBY_VERSION', '3.4')
118
+ architecture = ENV.fetch('ARCHITECTURE', 'x86_64')
119
+ output_file = File.expand_path(ENV.fetch('OUTPUT', 'pkg/sqlite-layer.zip'))
120
+ s3arch_version = ENV.fetch('S3ARCH_VERSION', "~> #{S3arch::VERSION.sub(/\.\d+$/, '.0')}")
121
+
122
+ S3archLayerBuilder.build_layer(
123
+ ruby_version: ruby_version,
124
+ architecture: architecture,
125
+ output_file: output_file,
126
+ s3arch_version: s3arch_version
127
+ )
128
+ end
129
+
130
+ desc 'Build and publish the Lambda layer (set AWS_PROFILE, LAYER_NAME=stowzilla-sqlite3-ruby)'
131
+ task publish: :build do
132
+ layer_name = ENV.fetch('LAYER_NAME', 'stowzilla-sqlite3-ruby')
133
+ ruby_version = ENV.fetch('RUBY_VERSION', '3.4')
134
+ architecture = ENV.fetch('ARCHITECTURE', 'x86_64')
135
+ output_file = File.expand_path(ENV.fetch('OUTPUT', 'pkg/sqlite-layer.zip'))
136
+
137
+ abort "❌ Layer zip not found at #{output_file}" unless File.exist?(output_file)
138
+
139
+ cmd = %w[aws lambda publish-layer-version]
140
+ cmd += ['--layer-name', layer_name]
141
+ cmd += ['--zip-file', "fileb://#{output_file}"]
142
+ cmd += ['--compatible-runtimes', "ruby#{ruby_version}"]
143
+ cmd += ['--compatible-architectures', architecture]
144
+
145
+ puts "📤 Publishing layer '#{layer_name}'..."
146
+ puts " #{cmd.join(' ')}"
147
+
148
+ abort '❌ Failed to publish layer' unless system(*cmd)
149
+
150
+ puts '✅ Layer published successfully'
151
+ end
152
+ end
153
+
154
+ desc 'Rebuild the search index for a given owner: rake s3arch:rebuild[owner-123]'
155
+ task :rebuild, [:owner_id] do |_t, args|
156
+ require 's3arch'
157
+
158
+ owner_id = args.owner_id || ENV.fetch('OWNER_ID', nil)
159
+ abort '❌ Usage: rake s3arch:rebuild[OWNER_ID]' unless owner_id
160
+
161
+ S3arch.configure(&:from_env!)
162
+
163
+ puts "🔄 Rebuilding index for #{owner_id}..."
164
+ S3arch::Indexer.new.rebuild(owner_id)
165
+ puts '✅ Done'
166
+ end
167
+
168
+ desc 'Show current s3arch configuration and version info'
169
+ task :info do
170
+ require 's3arch'
171
+
172
+ puts "s3arch #{S3arch::VERSION}"
173
+ puts ''
174
+ puts 'Environment:'
175
+ %w[S3ARCH_SOURCE_TABLE S3ARCH_SOURCE_INDEX S3ARCH_INDEX_BUCKET S3ARCH_VERSION_TABLE].each do |var|
176
+ puts " #{var}=#{ENV.fetch(var, '(not set)')}"
177
+ end
178
+ end
179
+ end
metadata CHANGED
@@ -1,39 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3arch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Dalton
8
8
  bindir: bin
9
- cert_chain:
10
- - |
11
- -----BEGIN CERTIFICATE-----
12
- MIIEdDCCAtygAwIBAgIBATANBgkqhkiG9w0BAQsFADBAMQ4wDAYDVQQDDAVhZ2Vu
13
- dDEZMBcGCgmSJomT8ixkARkWCXN0b3d6aWxsYTETMBEGCgmSJomT8ixkARkWA2Nv
14
- bTAeFw0yNjA2MDgxOTExNTlaFw0yNzA2MDgxOTExNTlaMEAxDjAMBgNVBAMMBWFn
15
- ZW50MRkwFwYKCZImiZPyLGQBGRYJc3Rvd3ppbGxhMRMwEQYKCZImiZPyLGQBGRYD
16
- Y29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAupBquKI/4WvXOgND
17
- pXyqH2GllZs1wG4TWWdn/DoMg45UoCwD+AWEuGrIdInBCpPN8vEJNJWPoM/RrU+b
18
- xRBZT4uUk00bnZRW2SYh5GJSqBoBR+rWc2DGkXyGfdRU2sQvkB0+is6ChgQ61WMM
19
- 33LE9+loBlVsZ6EVtrc18Uh2OW0mJpe0hN2nmBrxZqqOZigxC4DKRMFHvpRkxSb6
20
- mD4kit1AcwX9NEWJsXxrPaetL/SB/VbXaEZX93XAvp6USaXvCWt4slkDS2mIvqtn
21
- 9DtGC43LFC7SDGbnsG9PVenQgVCi8UWFPUAab0PqZSlmi3Qlbhw8qTGPp5Cbv4vz
22
- qjC2UGPOQigA/7lbbGRhCohMrjOVHMAQwkcgiIqtolUoYlnvPMIy+m3pdvgDv/PH
23
- bsZGvXQ7i0458xsmp1vaKthZocVAR+GboHbuIiYPUnO45ccXUQ00x6365tTe7mZi
24
- NvmUYdAGbQmVvFqyxF7IYA6sF74L2Lstu0knSfss557bAe1HAgMBAAGjeTB3MAkG
25
- A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSnxTL/lNBCeLqpeVIX6AUY
26
- kel4zjAeBgNVHREEFzAVgRNhZ2VudEBzdG93emlsbGEuY29tMB4GA1UdEgQXMBWB
27
- E2FnZW50QHN0b3d6aWxsYS5jb20wDQYJKoZIhvcNAQELBQADggGBACm9Fjit/UCv
28
- FxlKqeiCTIG94cIx+QrWAOJSx9knKydwUec1u04D/DbfZjTn3C2Bj227QgxeUn+6
29
- if3e2v7zAk1896hLmGYzML0+nxQPb0vmtdLR7HETUlSKTVabcv1fbwLyjsuGrBvk
30
- y51vOEzUEZ508a9yepLYqrQu1kOju4d57c9oA5l3H0mMKWz7av9tFj0B+STvuaWk
31
- HRYDWc5HgOEVTyV+w0uFt2Kw4OCb8C42uSvC5RfYYtw78MSP+5Ru+LXJ7XOtmuN0
32
- E6GVmofQ17ig9O3rgfFbMendSInrRmvPIGswvM1yivq9NOllFbdck2OJKPx6FCJF
33
- 7SJIkXQfc9P4B5iASIV1d1FsE0YX+g3jHXPJK/4mGL5bAyBKzpMfQB/mg6vQBzkh
34
- aOKPwcreFj7TznBl89R5tNS9wZQfPVR98zgPyocddWhK18eQNMSBUnv4eeJ8PPbk
35
- DovL+G8ajHDZ9fjH/+GVYHEMuiVdLarXrKJpHC1VfGTTUAp4NSEpUQ==
36
- -----END CERTIFICATE-----
9
+ cert_chain: []
37
10
  date: 1980-01-02 00:00:00.000000000 Z
38
11
  dependencies:
39
12
  - !ruby/object:Gem::Dependency
@@ -117,7 +90,6 @@ files:
117
90
  - CHANGELOG.md
118
91
  - LICENSE.txt
119
92
  - README.md
120
- - certs/stowzilla.pem
121
93
  - infrastructure/routes.tf.rb
122
94
  - infrastructure/schema.tf.rb
123
95
  - lambda/controllers/s3arch_controller.rb
@@ -134,7 +106,7 @@ files:
134
106
  - lib/s3arch/tokenizer.rb
135
107
  - lib/s3arch/version.rb
136
108
  - lib/s3arch/web.rb
137
- - lib/tasks/lambda_layer.rake
109
+ - lib/tasks/s3arch.rake
138
110
  homepage: https://github.com/stowzilla/s3arch
139
111
  licenses:
140
112
  - MIT
checksums.yaml.gz.sig DELETED
Binary file
data/certs/stowzilla.pem DELETED
@@ -1,26 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEdDCCAtygAwIBAgIBATANBgkqhkiG9w0BAQsFADBAMQ4wDAYDVQQDDAVhZ2Vu
3
- dDEZMBcGCgmSJomT8ixkARkWCXN0b3d6aWxsYTETMBEGCgmSJomT8ixkARkWA2Nv
4
- bTAeFw0yNjA2MDgxOTExNTlaFw0yNzA2MDgxOTExNTlaMEAxDjAMBgNVBAMMBWFn
5
- ZW50MRkwFwYKCZImiZPyLGQBGRYJc3Rvd3ppbGxhMRMwEQYKCZImiZPyLGQBGRYD
6
- Y29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAupBquKI/4WvXOgND
7
- pXyqH2GllZs1wG4TWWdn/DoMg45UoCwD+AWEuGrIdInBCpPN8vEJNJWPoM/RrU+b
8
- xRBZT4uUk00bnZRW2SYh5GJSqBoBR+rWc2DGkXyGfdRU2sQvkB0+is6ChgQ61WMM
9
- 33LE9+loBlVsZ6EVtrc18Uh2OW0mJpe0hN2nmBrxZqqOZigxC4DKRMFHvpRkxSb6
10
- mD4kit1AcwX9NEWJsXxrPaetL/SB/VbXaEZX93XAvp6USaXvCWt4slkDS2mIvqtn
11
- 9DtGC43LFC7SDGbnsG9PVenQgVCi8UWFPUAab0PqZSlmi3Qlbhw8qTGPp5Cbv4vz
12
- qjC2UGPOQigA/7lbbGRhCohMrjOVHMAQwkcgiIqtolUoYlnvPMIy+m3pdvgDv/PH
13
- bsZGvXQ7i0458xsmp1vaKthZocVAR+GboHbuIiYPUnO45ccXUQ00x6365tTe7mZi
14
- NvmUYdAGbQmVvFqyxF7IYA6sF74L2Lstu0knSfss557bAe1HAgMBAAGjeTB3MAkG
15
- A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSnxTL/lNBCeLqpeVIX6AUY
16
- kel4zjAeBgNVHREEFzAVgRNhZ2VudEBzdG93emlsbGEuY29tMB4GA1UdEgQXMBWB
17
- E2FnZW50QHN0b3d6aWxsYS5jb20wDQYJKoZIhvcNAQELBQADggGBACm9Fjit/UCv
18
- FxlKqeiCTIG94cIx+QrWAOJSx9knKydwUec1u04D/DbfZjTn3C2Bj227QgxeUn+6
19
- if3e2v7zAk1896hLmGYzML0+nxQPb0vmtdLR7HETUlSKTVabcv1fbwLyjsuGrBvk
20
- y51vOEzUEZ508a9yepLYqrQu1kOju4d57c9oA5l3H0mMKWz7av9tFj0B+STvuaWk
21
- HRYDWc5HgOEVTyV+w0uFt2Kw4OCb8C42uSvC5RfYYtw78MSP+5Ru+LXJ7XOtmuN0
22
- E6GVmofQ17ig9O3rgfFbMendSInrRmvPIGswvM1yivq9NOllFbdck2OJKPx6FCJF
23
- 7SJIkXQfc9P4B5iASIV1d1FsE0YX+g3jHXPJK/4mGL5bAyBKzpMfQB/mg6vQBzkh
24
- aOKPwcreFj7TznBl89R5tNS9wZQfPVR98zgPyocddWhK18eQNMSBUnv4eeJ8PPbk
25
- DovL+G8ajHDZ9fjH/+GVYHEMuiVdLarXrKJpHC1VfGTTUAp4NSEpUQ==
26
- -----END CERTIFICATE-----
@@ -1,134 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../s3arch/version'
4
-
5
- namespace :lambda do
6
- desc 'Build the Lambda layer zip (sqlite3 + s3arch) for deployment'
7
- task :build_layer do
8
- require 'tmpdir'
9
- require 'fileutils'
10
-
11
- ruby_version = ENV.fetch('RUBY_VERSION', '3.4')
12
- architecture = ENV.fetch('ARCHITECTURE', 'x86_64')
13
- output_file = File.expand_path(ENV.fetch('OUTPUT', 'pkg/sqlite-layer.zip'))
14
- s3arch_version = ENV.fetch('S3ARCH_VERSION', "~> #{S3arch::VERSION.sub(/\.\d+$/, '.0')}")
15
-
16
- FileUtils.mkdir_p(File.dirname(output_file))
17
-
18
- puts "🔨 Building Lambda layer (Ruby #{ruby_version} / #{architecture}, s3arch #{s3arch_version})..."
19
-
20
- tmpdir = Dir.mktmpdir('s3arch-layer')
21
- begin
22
- # Write a minimal Gemfile for the layer
23
- File.write("#{tmpdir}/Gemfile", <<~GEMFILE)
24
- source 'https://rubygems.org'
25
- gem 'sqlite3', '~> 2.0'
26
- gem 's3arch', '#{s3arch_version}'
27
- GEMFILE
28
-
29
- docker_image = "public.ecr.aws/sam/build-ruby#{ruby_version}:latest-#{architecture}"
30
- platform = architecture == 'x86_64' ? 'linux/amd64' : 'linux/arm64'
31
-
32
- build_script = <<~BASH
33
- yum install -y sqlite-devel 2>/dev/null || dnf install -y sqlite-devel 2>/dev/null
34
- bundle config set --local path /build/layer/ruby/gems/#{ruby_version}.0
35
- bundle config set --local without "development test"
36
- bundle config set --local deployment false
37
- bundle install
38
- # Flatten bundler's nested ruby/X.Y.0 structure into the layer root
39
- NESTED="/build/layer/ruby/gems/#{ruby_version}.0/ruby/#{ruby_version}.0"
40
- if [ -d "$NESTED" ]; then
41
- mkdir -p /build/layer-final/ruby/gems/#{ruby_version}.0
42
- cp -a "$NESTED"/* /build/layer-final/ruby/gems/#{ruby_version}.0/
43
- rm -rf /build/layer
44
- mv /build/layer-final /build/layer
45
- fi
46
- BASH
47
-
48
- docker_cmd = [
49
- 'docker', 'run', '--rm',
50
- '--platform', platform,
51
- '-v', "#{tmpdir}:/build",
52
- '-w', '/build',
53
- docker_image,
54
- '/bin/bash', '-c', build_script
55
- ]
56
-
57
- puts "🐳 Building in Docker (#{docker_image})..."
58
- abort '❌ Docker build failed' unless system(*docker_cmd)
59
-
60
- layer_dir = "#{tmpdir}/layer"
61
-
62
- # Strip unnecessary files to reduce layer size
63
- puts '🧹 Stripping layer...'
64
- Dir.glob("#{layer_dir}/ruby/gems/*/gems/*/").each do |gem_dir|
65
- %w[spec test tests doc docs examples benchmarks].each do |fat_dir|
66
- FileUtils.rm_rf("#{gem_dir}#{fat_dir}")
67
- end
68
- end
69
-
70
- junk_patterns = %w[
71
- *.md *.rdoc *.txt *.c *.h *.o Makefile *.log
72
- CHANGELOG* HISTORY* LICENSE* README* .gitignore Rakefile
73
- ]
74
- junk_patterns.each do |pattern|
75
- Dir.glob("#{layer_dir}/**/#{pattern}").each { |f| FileUtils.rm_f(f) }
76
- end
77
-
78
- # Strip debug symbols from shared objects
79
- Dir.glob("#{layer_dir}/**/*.so").each do |so|
80
- system('strip', '--strip-debug', so, err: File::NULL)
81
- end
82
-
83
- # Verify native extension is present
84
- sqlite_so = Dir.glob("#{layer_dir}/**/sqlite3_native.so") +
85
- Dir.glob("#{layer_dir}/**/sqlite3.so")
86
- abort '❌ sqlite3 native extension NOT found in layer' if sqlite_so.empty?
87
- puts '✅ sqlite3 native extension included'
88
-
89
- # Verify s3arch gem is present
90
- s3arch_lib = Dir.glob("#{layer_dir}/**/gems/s3arch-*/lib/s3arch.rb")
91
- abort '❌ s3arch gem NOT found in layer' if s3arch_lib.empty?
92
- puts '✅ s3arch gem included'
93
-
94
- # Package the zip
95
- FileUtils.rm_f(output_file)
96
- abort '❌ Failed to create zip' unless system('zip', '-qr', output_file, 'ruby/', chdir: layer_dir)
97
-
98
- size = `du -h #{output_file}`.split("\t").first
99
- puts "✅ Layer built: #{output_file} (#{size})"
100
- ensure
101
- # Docker creates files as root; use sudo rm to clean up
102
- system('sudo', 'rm', '-rf', tmpdir) || FileUtils.rm_rf(tmpdir)
103
- end
104
- end
105
-
106
- desc 'Publish the Lambda layer to AWS (set PROFILE and REGION env vars)'
107
- task publish_layer: :build_layer do
108
- profile = ENV.fetch('PROFILE', nil)
109
- region = ENV.fetch('REGION', 'us-east-1')
110
- layer_name = ENV.fetch('LAYER_NAME', 'stowzilla-sqlite3-ruby')
111
- ruby_version = ENV.fetch('RUBY_VERSION', '3.4')
112
- architecture = ENV.fetch('ARCHITECTURE', 'x86_64')
113
- output_file = File.expand_path(ENV.fetch('OUTPUT', 'pkg/sqlite-layer.zip'))
114
-
115
- unless File.exist?(output_file)
116
- abort "❌ Layer zip not found at #{output_file}. Run `rake lambda:build_layer` first."
117
- end
118
-
119
- cmd = %w[aws lambda publish-layer-version]
120
- cmd += ['--layer-name', layer_name]
121
- cmd += ['--zip-file', "fileb://#{output_file}"]
122
- cmd += ['--compatible-runtimes', "ruby#{ruby_version}"]
123
- cmd += ['--compatible-architectures', architecture]
124
- cmd += ['--region', region]
125
- cmd += ['--profile', profile] if profile
126
-
127
- puts "📤 Publishing layer '#{layer_name}' to #{region}..."
128
- puts " #{cmd.join(' ')}"
129
-
130
- abort '❌ Failed to publish layer' unless system(*cmd)
131
-
132
- puts '✅ Layer published successfully'
133
- end
134
- end
data.tar.gz.sig DELETED
@@ -1,2 +0,0 @@
1
- 9Q�{�e[��a$)[���%Zb#s�1$�ؖ�j�p�7"��y ;�X��$y�*�H������яd�L���M�y H2ZZD���`��8*n�@tj3(��g����^a��@gV�{�q� 6t�>����3B�>�v��.FW�g��-ͤ< jgT;�;u�H�&��H�D�$��E���8؜�
2
- �ݻ O�+悹m2���'��z��:��pV���&r�W��� q�`?/�@r�5���r� �p=J��3���֠�Fr��r��&t�T��qG��������A�"��0�&�g�Yo��ˮ��l����*S����Pd��!S�od[�{%������:��&
metadata.gz.sig DELETED
@@ -1,3 +0,0 @@
1
- m��t���'r�'��E�xQ;�p_Ց�HM?�P��4j6�*�y�*v2o"�޴c��j�[4qI�qK�੮t�8J�Te��
2
- l���ý=��G�~��ON��쾵>Ķ��h�I�̌Ν�}�X[���������0�k�� ��_���2}�� u�Zf2m�XX ��˙& ���@u��\�:�5}�.W^2���J�#�
3
- &d���f