jets_gem_layer 0.1 → 1.0.0

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: 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