Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix CI #805

Merged
merged 6 commits into from
Dec 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/maze-runner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ jobs:
include:
- ruby-version: '2.0'
que-version: '0.14'
- ruby-version: '3.2'
- ruby-version: '2.5'
que-version: '0.14'
- ruby-version: '2.5'
que-version: '1'
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/run-maze-runner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ jobs:
with:
ruby-version: 2.7
bundler-cache: true
cache-version: ${{ inputs.ruby-version }}-${{ inputs.rack-version }}-${{ inputs.que-version }}-${{ inputs.rails-version }}-${{ inputs.sidekiq-version }}

- run: bundle exec maze-runner ${{ inputs.features }} --no-source
env:
Expand Down
1 change: 0 additions & 1 deletion features/fixtures/que/app/Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ que_version = ENV.fetch("QUE_VERSION")
gem "que", "~> #{que_version}"

gem "pg", RUBY_VERSION < "2.2.0" ? "0.21.0" : "> 0.21.0"
gem "activerecord", RUBY_VERSION < "2.2.0" ? "4.2.11" : "> 4.2.11"

# Install a compatible Minitest version on Ruby <2.3
gem 'minitest', '5.11.3' if RUBY_VERSION < '2.3.0'
78 changes: 1 addition & 77 deletions features/fixtures/que/app/app.rb
Original file line number Diff line number Diff line change
@@ -1,79 +1,3 @@
require 'pg'
require 'que'
require 'socket'
require 'bugsnag'
require 'active_record'
require_relative "setup-que"

QUE_VERSION = ENV.fetch("QUE_VERSION")

Bugsnag.configure do |config|
puts "Configuring `api_key` to #{ENV['BUGSNAG_API_KEY']}"
config.api_key = ENV['BUGSNAG_API_KEY']
puts "Configuring `endpoint` to #{ENV['BUGSNAG_ENDPOINT']}"
config.endpoint = ENV['BUGSNAG_ENDPOINT']
end

postgres_ready = false
attempts = 0
MAX_ATTEMPTS = 10

until postgres_ready || attempts >= MAX_ATTEMPTS
begin
Timeout::timeout(5) { TCPSocket.new('postgres', 5432).close }

postgres_ready = true
rescue Exception
attempts += 1
sleep 1
end
end

raise 'postgres was not ready in time!' unless postgres_ready

ActiveRecord::Base.establish_connection(
adapter: 'postgresql',
database: 'postgres',
username: 'postgres',
password: 'test_password',
host: 'postgres'
)

Que.connection = ActiveRecord
Que.migrate!(version: Que::Migrations::CURRENT_VERSION)

# Workaround a bug in que/pg
# see https://github.com/que-rb/que/issues/247
if QUE_VERSION == '0.14'
Que::Adapters::Base::CAST_PROCS[1184] = lambda do |value|
case value
when Time then value
when String then Time.parse(value)
else raise "Unexpected time class: #{value.class} (#{value.inspect})"
end
end
end

class UnhandledJob < Que::Job
def run
raise RuntimeError.new("Unhandled error")
end

def handle_error(error)
destroy
end
end

class HandledJob < Que::Job
def run
raise RuntimeError.new("Handled error")
rescue => exception
Bugsnag.notify(exception)
end
end

case ARGV[0]
when "unhandled"
UnhandledJob.enqueue
when "handled"
HandledJob.enqueue
end
22 changes: 22 additions & 0 deletions features/fixtures/que/app/enqueue-job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
require_relative "setup-que"

query = <<-SQL
SELECT EXISTS (
SELECT FROM pg_tables WHERE tablename = 'que_jobs'
) AS que_jobs_exists
SQL

Timeout::timeout(10) do
loop do
break if $connection.exec(query)[0]["que_jobs_exists"] == "t"

sleep 0.1
end
end

case ARGV[0]
when "unhandled"
UnhandledJob.enqueue
when "handled"
HandledJob.enqueue
end
71 changes: 71 additions & 0 deletions features/fixtures/que/app/setup-que.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
require 'pg'
require 'que'
require 'socket'
require 'bugsnag'

QUE_VERSION = ENV.fetch("QUE_VERSION")

Bugsnag.configure do |config|
puts "Configuring `api_key` to #{ENV['BUGSNAG_API_KEY']}"
config.api_key = ENV['BUGSNAG_API_KEY']
puts "Configuring `endpoint` to #{ENV['BUGSNAG_ENDPOINT']}"
config.endpoint = ENV['BUGSNAG_ENDPOINT']
end

postgres_ready = false
attempts = 0
MAX_ATTEMPTS = 10

until postgres_ready || attempts >= MAX_ATTEMPTS
begin
Timeout::timeout(5) { TCPSocket.new('postgres', 5432).close }

postgres_ready = true
rescue Exception
attempts += 1
sleep 1
end
end

raise 'postgres was not ready in time!' unless postgres_ready

$connection = PG::Connection.open(
host: 'postgres',
user: 'postgres',
password: 'test_password',
dbname: 'postgres'
)

if QUE_VERSION == '0.14'
Que.connection = $connection

# Workaround a bug in que/pg
# see https://github.com/que-rb/que/issues/247
Que::Adapters::Base::CAST_PROCS[1184] = lambda do |value|
case value
when Time then value
when String then Time.parse(value)
else raise "Unexpected time class: #{value.class} (#{value.inspect})"
end
end
else
Que.connection_proc = ->(&block) { block.call($connection) }
end

class UnhandledJob < Que::Job
def run
raise RuntimeError.new("Unhandled error")
end

def handle_error(error)
destroy
end
end

class HandledJob < Que::Job
def run
raise RuntimeError.new("Handled error")
rescue => exception
Bugsnag.notify(exception)
end
end
3 changes: 3 additions & 0 deletions features/fixtures/rails3/app/Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,6 @@ gem "warden"

# Install a compatible Loofah version on Ruby <2.5
gem 'loofah', '2.20.0' if RUBY_VERSION < '2.5'

# Install a compatible Thor version on Ruby <2.6
gem 'thor', '<1.3.0' if RUBY_VERSION < '2.6'
4 changes: 2 additions & 2 deletions features/que.feature
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Feature: Errors are delivered to Bugsnag from Que

Scenario: Que will deliver unhandled errors
Given I start the service "que"
When I execute the command "bundle exec ruby app.rb unhandled" in the service "que"
When I execute the command "bundle exec ruby enqueue-job.rb unhandled" in the service "que"
And I wait to receive an error
Then the error is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier" notifier
And the event "unhandled" is true
Expand All @@ -15,7 +15,7 @@ Scenario: Que will deliver unhandled errors

Scenario: Que will deliver handled errors
Given I start the service "que"
When I execute the command "bundle exec ruby app.rb handled" in the service "que"
When I execute the command "bundle exec ruby enqueue-job.rb handled" in the service "que"
And I wait to receive an error
Then the error is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier" notifier
And the event "unhandled" is false
Expand Down
Loading