jets_gem_layer 0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 796fe39c52a3459efb7585c20543607952c5760fbde14cd348172e50d1521fe3
4
- data.tar.gz: e9895777617ab674521b57a5d1f43477d9f05aeb3c276fc723b1595b4e8b0fbb
3
+ metadata.gz: 2ffa9ee29edcc0f6fbf65c9ed6d08d78dc4f2dc643e07e4a048de79755dd99f2
4
+ data.tar.gz: 6840363fc62be04e9bb9eef361bcc9b0e5449f2d9e549028d6844539ea4b2da1
5
5
  SHA512:
6
- metadata.gz: 82457f5266038a4b08424fe518a89aa67f71f15541d6db06435d1e6ae14bc202027fe95044ed70c4d4dc6e6c072c055298464baf8e8257f0eaa23a5c7999fd7c
7
- data.tar.gz: 308673cfb04e7ed74bea54fa2dcc4ebbc2773adb5ea2be3dac64b2182d98a3a7a7b9bda9dd74f543a8cb136bac9d8d201a340834f85c273b7e211f48173f8fe3
6
+ metadata.gz: 0250221f208eebf1890cf773cda696448e4f2b2bc31101bc8ab35dd47a2111a0fb8057e9f123e2dbdaed59acfb468c82c0a2f10aa654e2a4dd01f66097c7f37f
7
+ data.tar.gz: 03bd04e7b73924eeb858bc26822482887303b8402b85033768c37995777428d8bf498c5fd5110626a66016cf30c05c3d344e3f1e1c248a3e9b1338a1bffe7b81
data/.gitignore CHANGED
@@ -6,10 +6,10 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
-
9
+ *.gem
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  .rakeTasks
13
13
 
14
14
  /.idea/
15
- tags
15
+ tags
data/README.md CHANGED
@@ -14,7 +14,7 @@ is correctly set for your project.
14
14
 
15
15
  ## Installation
16
16
 
17
- 1. Jets Pro would typically be disabled when using this gem so as to not generate multiple Lambda Layers.
17
+ 1. Jets Pro would typically be disabled when using this gem so as to not generate duplicative Lambda Layers.
18
18
 
19
19
  ```ruby
20
20
  # config/application.rb
@@ -55,10 +55,12 @@ JetsGemLayer.load_tasks
55
55
  3. After running `bundle install`, run `rake -T` and you should see this Gem's tasks available for use.
56
56
  ```
57
57
  ➜ rake -T
58
- rake gem_layer:build_and_publish # Build, publish, and clean
59
- rake gem_layer:build # Build the gem layer zip file
60
- rake gem_layer:publish # Publish the built gem laye zip to AWS
61
- rake gem_layer:clean # Clean up the gem's tmp files
58
+ rake gem_layer:build_and_publish # Build, publish, and clean (will be a no-op if already published)
59
+ rake gem_layer:build # Build the gem layer zip file
60
+ rake gem_layer:publish # Publish the built gem laye zip to AWS
61
+ rake gem_layer:clean # Clean up the gem's tmp files
62
+ rake gem_layer:cleanup_published # Deletes all prior versions of the lamda layer from AWS
63
+ rake gem_layer:delete_all_published # Deletes all versions of the lamda layer from AWS
62
64
  ```
63
65
 
64
66
  ## Configuration
@@ -72,9 +74,13 @@ specific to your Gemfile. For example, to build the `mysql2` gem you will need t
72
74
  Dependencies will be installed within the build container and copied into the published Lambda Layer.
73
75
 
74
76
  ## Deployment
75
- Within your project directory (example for development environment):
76
- 1. run `JETS_ENV=development rake gem_layer:build_and_publish`
77
- 2. run `JETS_ENV=development jets deploy`
77
+ Within your project directory (example for development environment) or through your CI/CD platform:
78
+ 1. `JETS_ENV=development JETS_AGREE=no rake gem_layer:build_and_publish`
79
+ * If needed, builds and publishes a new gem layer version based on the current Jets namespace, Gemfile.lock and Gemfile
80
+ 2. `JETS_ENV=development JETS_AGREE=no jets deploy`
81
+ * Deploy your application
82
+ 3. `JETS_ENV=development JETS_AGREE=no rake gem_layer:cleanup_published`
83
+ * After a successful deploy, you may run this to cleanup the old gem layer version(s) no longer in use
78
84
 
79
85
  ## Acknowledgements
80
86
  A big thank you to the authors of [Lambda Layer Cake](https://github.com/loganb/lambda-layer-cake), which served as a reference.
@@ -38,12 +38,18 @@ module JetsGemLayer
38
38
  install_build
39
39
  install_publish
40
40
  install_clean
41
+ install_cleanup_published
42
+ install_delete_all_published
41
43
  end
42
44
  end
43
45
 
44
46
  def install_build_and_publish
45
- desc 'Build and publish a gem layer version'
47
+ desc 'Build and publish a gem layer version, if necessary'
46
48
  task :build_and_publish do
49
+ if published?
50
+ puts "#{layer_name} already published for #{layer_version_description}. Not doing anything!"
51
+ break
52
+ end
47
53
  Rake::Task['gem_layer:build'].invoke
48
54
  Rake::Task['gem_layer:publish'].invoke
49
55
  Rake::Task['gem_layer:clean'].invoke
@@ -51,7 +57,7 @@ module JetsGemLayer
51
57
  end
52
58
 
53
59
  def install_build
54
- desc 'Build the gem layer zip file'
60
+ desc 'Build a gem layer zip file'
55
61
  task :build do
56
62
  Rake::Task['gem_layer:clean'].invoke
57
63
  build_layer
@@ -60,19 +66,33 @@ module JetsGemLayer
60
66
  end
61
67
 
62
68
  def install_publish
63
- desc 'Publish a built layer zip file'
69
+ desc 'Publish the already built layer zip file'
64
70
  task :publish do
65
71
  publish_layer
66
72
  end
67
73
  end
68
74
 
69
75
  def install_clean
70
- desc 'Clean tmp files'
76
+ desc 'Clean jets_gem_layer tmp files'
71
77
  task :clean do
72
78
  FileUtils.rm_r(working_dir) if File.exist?(working_dir)
73
79
  end
74
80
  end
75
81
 
82
+ def install_cleanup_published
83
+ desc 'Delete old layer versions from AWS (for use after deployment)'
84
+ task :cleanup_published do
85
+ cleanup_published
86
+ end
87
+ end
88
+
89
+ def install_delete_all_published
90
+ desc 'Delete all published versions of the gem layer from AWS'
91
+ task :delete_all_published do
92
+ delete_all_published
93
+ end
94
+ end
95
+
76
96
  def build_layer
77
97
  FileUtils.mkdir_p(inputs_dir)
78
98
  FileUtils.cp(INPUT_FILES.existing, inputs_dir)
@@ -84,7 +104,7 @@ module JetsGemLayer
84
104
  begin
85
105
  Dir.chdir(outputs_dir)
86
106
  system(*%W[zip -r #{File.join(working_dir, "#{layer_name}.zip")} lib ruby], out: File::NULL) or raise
87
- puts 'Layer zipped successfully...'
107
+ puts 'Layer zipped successfully!'
88
108
  ensure
89
109
  Dir.chdir(pwd)
90
110
  end
@@ -96,7 +116,7 @@ module JetsGemLayer
96
116
  description: layer_version_description,
97
117
  content: { zip_file: File.read(zip_file_path) }
98
118
  )
99
- puts "#{layer_name} published for #{layer_version_description}..."
119
+ puts "#{layer_name} published for #{layer_version_description}!"
100
120
  end
101
121
 
102
122
  private
@@ -173,7 +193,38 @@ module JetsGemLayer
173
193
  end
174
194
 
175
195
  def published_layer_version
176
- @published_layer_version ||= aws_lambda.list_layer_versions({ layer_name: }).layer_versions&.first
196
+ @published_layer_version ||= aws_lambda.list_layer_versions(layer_name:, max_items: 1).layer_versions.first
197
+ end
198
+
199
+ # paginate through all layer versions to get them all (but it's unlikely there will be more than 1 page)
200
+ def all_layer_versions
201
+ all_versions = []
202
+ marker = nil
203
+ loop do
204
+ page = aws_lambda.list_layer_versions(layer_name:, max_items: 50, marker:)
205
+ all_versions.concat page.layer_versions
206
+ marker = page.next_marker
207
+ break if marker.nil?
208
+ end
209
+ all_versions
210
+ end
211
+
212
+ def cleanup_published
213
+ all_layer_versions.each_with_index do |layer_version, i|
214
+ next if i.zero? # skips the current version
215
+
216
+ aws_lambda.delete_layer_version(layer_name:, version_number: layer_version.version)
217
+ puts "Deleted #{layer_version.layer_version_arn}"
218
+ end
219
+ puts 'Deleted all prior versions!'
220
+ end
221
+
222
+ def delete_all_published
223
+ all_layer_versions.each do |layer_version|
224
+ aws_lambda.delete_layer_version(layer_name:, version_number: layer_version.version)
225
+ puts "Deleted #{layer_version.layer_version_arn}"
226
+ end
227
+ puts 'Deleted all published versions!'
177
228
  end
178
229
  end
179
230
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JetsGemLayer
4
- VERSION = '0.1'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jets_gem_layer
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DocGo Engineering
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-29 00:00:00.000000000 Z
11
+ date: 2023-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jets