deployangel 0.1.39 → 0.1.40

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: d930ff0701b6c48f6793339eaff985418ae4a6b0332689e7c87d85047f80a082
4
- data.tar.gz: a1848b93327d98249e6bd98acf595047b62b926604c9940ed92f17334db3b093
3
+ metadata.gz: 4e8adef48eb597e4b49551c9935dd0308a465ab3ad302de263ed47035293e15a
4
+ data.tar.gz: 98928fa20dfe57fc11b8f99b56ec2f9c33010c023de4a78f0fdffb59cdd29e65
5
5
  SHA512:
6
- metadata.gz: '00943ef2bac8f6acb697ec20243c211b96779b4eb33dc8c4da1aff53cd789b14ca569320fa06d960de7811a0dd15e4aacab06e6656f4ffe1240a8b63cf1467eb'
7
- data.tar.gz: 9e8ede3e14497f6afaf02b08f0438876397ee73b95f7ba79bbff8d43dc84ad69e018e0bffb903ce722458b1a5df48c2eb372580c034699a00315f09335a92235
6
+ metadata.gz: 37dd0621d760a588e12ea465902aefe678f6e9c171a15721d7ded7071af03e2e80996a8239e1f7fae4e7ca2583d647b73d403a3ef501d0dc4906499fae735c9c
7
+ data.tar.gz: d581a5108ccc9bdb4e2c13747ce556c4857a14275939aa0756d05e518da03933b76189aea11269d87fe78c6b9e7faa879c8bc0cd7f989175eeee7b1350e42ff3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.40 (2026-11-04)
4
+
5
+ - Rails apps get two checkpoints with nothing to add: `rails.mail.delivered`,
6
+ counted from Action Mailer's deliveries, and `rails.storage.stored`, from
7
+ Active Storage's uploads. A release after which mail or uploads quietly
8
+ stop fails for it, the way a checkpoint the app records would. Counts
9
+ only: never a recipient, a filename, or a key. Off with
10
+ `config.derived_checkpoints = false` or
11
+ `DEPLOYANGEL_DERIVED_CHECKPOINTS=false`.
12
+
3
13
  ## 0.1.39 (2026-11-04)
4
14
 
5
15
  - `deployangel doctor` warns when the project's AGENTS.md or CLAUDE.md has
@@ -12,7 +12,7 @@ module DeployAngel
12
12
  attr_accessor :token, :endpoint, :enabled, :environments, :release_version, :revision,
13
13
  :flush_interval, :open_timeout, :read_timeout, :max_queued_payloads, :max_routes, :logger,
14
14
  :file_digests, :critical_flows, :ignored_routes, :sidekiq_cron_schedule_file, :exception_messages,
15
- :recurring_jobs
15
+ :recurring_jobs, :derived_checkpoints
16
16
 
17
17
  def initialize(env = ENV)
18
18
  @token = env["DEPLOYANGEL_TOKEN"]
@@ -43,6 +43,9 @@ module DeployAngel
43
43
  # cron line or Fugit's words ("every day at 4am"), optionally ending
44
44
  # in a time zone.
45
45
  @recurring_jobs = {}
46
+ # Checkpoints counted from Rails' own notifications, with nothing to
47
+ # add: mail delivered and files stored (DeployAngel::Rails::Checkpoints).
48
+ @derived_checkpoints = parse_boolean(env["DEPLOYANGEL_DERIVED_CHECKPOINTS"]) != false
46
49
  end
47
50
 
48
51
  # Reports only with a token, and by default in every environment but
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DeployAngel
4
+ module Rails
5
+ # Checkpoints the app gets without adding a line (spec §17, Silent
6
+ # failures): mail delivered and files stored, counted from Rails' own
7
+ # notifications. Work that quietly stops is what verdicts miss most, and
8
+ # these two are where it most often stops. Counts only, never a
9
+ # recipient, a filename, or a key. Off with config.derived_checkpoints =
10
+ # false, or DEPLOYANGEL_DERIVED_CHECKPOINTS=false.
11
+ module Checkpoints
12
+ MAIL_DELIVERED = "rails.mail.delivered"
13
+ FILE_STORED = "rails.storage.stored"
14
+
15
+ def self.install
16
+ return if @installed
17
+
18
+ @installed = true
19
+ ::ActiveSupport::Notifications.subscribe("deliver.action_mailer") { DeployAngel.checkpoint(MAIL_DELIVERED) }
20
+ ::ActiveSupport::Notifications.subscribe("service_upload.active_storage") { DeployAngel.checkpoint(FILE_STORED) }
21
+ end
22
+ end
23
+ end
24
+ end
@@ -9,6 +9,10 @@ module DeployAngel
9
9
  app.config.middleware.insert(0, DeployAngel::Rails::Http)
10
10
  end
11
11
 
12
+ initializer "deployangel.checkpoints" do
13
+ DeployAngel::Rails::Checkpoints.install if DeployAngel.configuration.derived_checkpoints
14
+ end
15
+
12
16
  initializer "deployangel.jobs" do
13
17
  ActiveSupport.on_load(:active_job) { DeployAngel::Rails::ActiveJob.install }
14
18
  DeployAngel::Sidekiq.install
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeployAngel
4
- VERSION = "0.1.39"
4
+ VERSION = "0.1.40"
5
5
  end
data/lib/deployangel.rb CHANGED
@@ -133,6 +133,7 @@ end
133
133
  require_relative "deployangel/rack/http"
134
134
  require_relative "deployangel/rails/http"
135
135
  require_relative "deployangel/rails/active_job"
136
+ require_relative "deployangel/rails/checkpoints"
136
137
  require_relative "deployangel/rails/error_subscriber"
137
138
  require_relative "deployangel/tasks"
138
139
  require_relative "deployangel/metadata"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deployangel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.39
4
+ version: 0.1.40
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Owens
@@ -60,6 +60,7 @@ files:
60
60
  - lib/deployangel/queue_backlog.rb
61
61
  - lib/deployangel/rack/http.rb
62
62
  - lib/deployangel/rails/active_job.rb
63
+ - lib/deployangel/rails/checkpoints.rb
63
64
  - lib/deployangel/rails/error_subscriber.rb
64
65
  - lib/deployangel/rails/http.rb
65
66
  - lib/deployangel/rails/metadata.rb