diff --git a/updater/lib/dependabot/api_client.rb b/updater/lib/dependabot/api_client.rb index bab3252d08f..64c7f3f6f1e 100644 --- a/updater/lib/dependabot/api_client.rb +++ b/updater/lib/dependabot/api_client.rb @@ -22,36 +22,6 @@ def initialize(base_url, job_id, job_token) @job_token = job_token end - # TODO: Remove - # - # We don't seem to use this anymore and always read the job description - # from the file system. - def fetch_job - response = fetch_job_details_from_backend - - # If the job has already been accessed then we can safely return quietly. - # This happens when the backend isn't sure if the updater has enqueued a - # job (because Heroku served a 500, for example) and enqueues a second to - # be on the safe side. - return if response.code == 400 && response.body.include?("been accessed") - - # For other errors from the backend, just raise. - raise ApiError, response.body if response.code >= 400 - - job_data = - response.parse["data"]["attributes"]. - transform_keys { |k| k.tr("-", "_").to_sym }. - slice( - :credentials, :dependencies, :package_manager, :ignore_conditions, - :existing_pull_requests, :source, :lockfile_only, :allowed_updates, - :update_subdependencies, :updating_a_pull_request, - :requirements_update_strategy, :security_advisories, - :vendor_dependencies, :security_updates_only - ) - - Job.new(job_data.merge(id: job_id, token: job_token)) - end - # TODO: Make `base_commit_sha` part of Dependabot::DependencyChange def create_pull_request(dependency_change, base_commit_sha) api_url = "#{base_url}/update_jobs/#{job_id}/create_pull_request" @@ -181,18 +151,6 @@ def http_client client end - def fetch_job_details_from_backend - api_url = "#{base_url}/update_jobs/#{job_id}" - http_client.get(api_url) - rescue HTTP::ConnectionError, OpenSSL::SSL::SSLError - # Retry connection errors (which are almost certainly transitory) - retry_count ||= 0 - retry_count += 1 - raise if retry_count > 3 - - sleep(rand(3.0..10.0)) && retry - end - def create_pull_request_data(dependency_change, base_commit_sha) data = { dependencies: dependency_change.dependencies.map do |dep| diff --git a/updater/lib/dependabot/file_fetcher_command.rb b/updater/lib/dependabot/file_fetcher_command.rb index 3ea3deaba7e..9601db9cb88 100644 --- a/updater/lib/dependabot/file_fetcher_command.rb +++ b/updater/lib/dependabot/file_fetcher_command.rb @@ -47,6 +47,8 @@ def perform_job save_job_details end + private + def save_job_details # TODO: Use the Dependabot::Environment helper for this return unless ENV["UPDATER_ONE_CONTAINER"] @@ -81,20 +83,11 @@ def base64_dependency_files end def job - attrs = - Environment.job_definition["job"]. - transform_keys { |key| key.tr("-", "_") }. - transform_keys(&:to_sym). - slice( - :dependencies, :package_manager, :ignore_conditions, - :existing_pull_requests, :source, :lockfile_only, :allowed_updates, - :update_subdependencies, :updating_a_pull_request, - :requirements_update_strategy, :security_advisories, - :vendor_dependencies, :experiments, :reject_external_code, - :commit_message_options, :security_updates_only - ) - - @job ||= Job.new(attrs.merge(id: job_id)) + @job ||= Job.new_fetch_job( + job_id: job_id, + job_definition: Environment.job_definition, + repo_contents_path: Environment.repo_contents_path + ) end def file_fetcher @@ -105,10 +98,18 @@ def file_fetcher credentials: Environment.job_definition.fetch("credentials", []), options: job.experiments } - args[:repo_contents_path] = Environment.repo_contents_path if job.clone? || job.already_cloned? - @file_fetcher ||= - Dependabot::FileFetchers.for_package_manager(job.package_manager). - new(**args) + # This bypasses the `job.repo_contents_path` presenter to ensure we fetch + # from the file system if the repository contents are mounted even if + # cloning is disabled. + args[:repo_contents_path] = Environment.repo_contents_path if job.clone? || already_cloned? + @file_fetcher ||= Dependabot::FileFetchers.for_package_manager(job.package_manager).new(**args) + end + + def already_cloned? + return false unless Environment.repo_contents_path + + # For testing, the source repo may already be mounted. + @already_cloned ||= File.directory?(File.join(Environment.repo_contents_path, ".git")) end # rubocop:disable Metrics/MethodLength diff --git a/updater/lib/dependabot/job.rb b/updater/lib/dependabot/job.rb index 0978efbc323..f47b7b23be8 100644 --- a/updater/lib/dependabot/job.rb +++ b/updater/lib/dependabot/job.rb @@ -17,11 +17,58 @@ module Dependabot class Job TOP_LEVEL_DEPENDENCY_TYPES = %w(direct production development).freeze - - attr_reader :id, :token, :dependencies, :package_manager, :ignore_conditions, - :existing_pull_requests, :source, :credentials, - :requirements_update_strategy, :security_advisories, - :allowed_updates, :vendor_dependencies, :security_updates_only + PERMITTED_KEYS = %i( + allowed_updates + commit_message_options + dependencies + existing_pull_requests + experiments + ignore_conditions + lockfile_only + package_manager + reject_external_code + repo_contents_path + requirements_update_strategy + security_advisories + security_updates_only + source + update_subdependencies + updating_a_pull_request + vendor_dependencies + ) + + attr_reader :allowed_updates, + :credentials, + :dependencies, + :existing_pull_requests, + :id, + :ignore_conditions, + :package_manager, + :requirements_update_strategy, + :security_advisories, + :security_updates_only, + :source, + :token, + :vendor_dependencies + + def self.new_fetch_job(job_id:, job_definition:, repo_contents_path: nil) + attrs = standardise_keys(job_definition["job"]).slice(*PERMITTED_KEYS) + + new(attrs.merge(id: job_id, repo_contents_path: repo_contents_path)) + end + + def self.new_update_job(job_id:, job_definition:, repo_contents_path: nil) + attrs = standardise_keys(job_definition["job"]).slice(*PERMITTED_KEYS) + # The Updater should NOT have access to credentials. Let's use metadata, which + # can be used by the proxy for matching and applying the real credentials + attrs[:credentials] = job_definition.dig("job", "credentials_metadata") || [] + + new(attrs.merge(id: job_id, repo_contents_path: repo_contents_path)) + end + + def self.standardise_keys(hash) + hash.transform_keys { |key| key.tr("-", "_").to_sym } + end # NOTE: "attributes" are fetched and injected at run time from # dependabot-api using the UpdateJobPrivateSerializer @@ -37,6 +84,7 @@ def initialize(attributes) @lockfile_only = attributes.fetch(:lockfile_only) @package_manager = attributes.fetch(:package_manager) @reject_external_code = attributes.fetch(:reject_external_code, false) + @repo_contents_path = attributes.fetch(:repo_contents_path, nil) @requirements_update_strategy = attributes.fetch(:requirements_update_strategy) @security_advisories = attributes.fetch(:security_advisories) @security_updates_only = attributes.fetch(:security_updates_only) @@ -54,11 +102,13 @@ def clone? Dependabot::Utils.always_clone_for_package_manager?(@package_manager) end - def already_cloned? - return unless Environment.repo_contents_path + # Some Core components test for a non-nil repo_contents_path as an implicit + # signal they should use cloning behaviour, so we present it as nil unless + # cloning is enabled to avoid unexpected behaviour. + def repo_contents_path + return nil unless clone? - # For testing, the source repo may already be mounted. - @already_cloned ||= File.directory?(File.join(Environment.repo_contents_path, ".git")) + @repo_contents_path end def lockfile_only? @@ -140,25 +190,19 @@ def security_fix?(dependency) end def name_normaliser - Dependabot::Dependency. - name_normaliser_for_package_manager(package_manager) + Dependabot::Dependency.name_normaliser_for_package_manager(package_manager) end def experiments return {} unless @experiments - @experiments. - transform_keys { |key| key.tr("-", "_") }. - transform_keys(&:to_sym) + self.class.standardise_keys(@experiments) end def commit_message_options return {} unless @commit_message_options - @commit_message_options. - transform_keys { |key| key.tr("-", "_") }. - transform_keys(&:to_sym). - compact + self.class.standardise_keys(@commit_message_options).compact end private diff --git a/updater/lib/dependabot/service.rb b/updater/lib/dependabot/service.rb index d94e0b32551..ab3a33d9acf 100644 --- a/updater/lib/dependabot/service.rb +++ b/updater/lib/dependabot/service.rb @@ -17,7 +17,7 @@ def initialize(client:) @errors = [] end - def_delegators :client, :fetch_job, :mark_job_as_processed, :update_dependency_list, :record_package_manager_version + def_delegators :client, :mark_job_as_processed, :update_dependency_list, :record_package_manager_version def create_pull_request(dependency_change, base_commit_sha) client.create_pull_request(dependency_change, base_commit_sha) diff --git a/updater/lib/dependabot/update_files_command.rb b/updater/lib/dependabot/update_files_command.rb index fbc81d68f57..018a1008045 100644 --- a/updater/lib/dependabot/update_files_command.rb +++ b/updater/lib/dependabot/update_files_command.rb @@ -9,32 +9,22 @@ class UpdateFilesCommand < BaseCommand def perform_job Dependabot::Updater.new( service: service, - job_id: job_id, job: job, dependency_files: dependency_files, - repo_contents_path: repo_contents_path, base_commit_sha: base_commit_sha ).run service.mark_job_as_processed(base_commit_sha) end + private + def job - attrs = - Environment.job_definition["job"]. - transform_keys { |key| key.tr("-", "_") }. - transform_keys(&:to_sym). - tap { |h| h[:credentials] = h.delete(:credentials_metadata) || [] }. - slice( - :dependencies, :package_manager, :ignore_conditions, - :existing_pull_requests, :source, :lockfile_only, :allowed_updates, - :update_subdependencies, :updating_a_pull_request, :credentials, - :requirements_update_strategy, :security_advisories, - :vendor_dependencies, :experiments, :reject_external_code, - :commit_message_options, :security_updates_only - ) - - @job ||= Job.new(attrs.merge(id: job_id)) + @job ||= Job.new_update_job( + job_id: job_id, + job_definition: Environment.job_definition, + repo_contents_path: Environment.repo_contents_path + ) end def dependency_files diff --git a/updater/lib/dependabot/updater.rb b/updater/lib/dependabot/updater.rb index 2aff4cfe758..72623600a5a 100644 --- a/updater/lib/dependabot/updater.rb +++ b/updater/lib/dependabot/updater.rb @@ -55,15 +55,12 @@ def initialize(message, raven_context:) Octokit::Unauthorized => "octokit_unauthorized" }.freeze - def initialize(service:, job_id:, job:, dependency_files:, - base_commit_sha:, repo_contents_path:) + def initialize(service:, job:, dependency_files:, base_commit_sha:) @service = service - @job_id = job_id @job = job @dependency_files = dependency_files @base_commit_sha = base_commit_sha - @repo_contents_path = repo_contents_path - # TODO: Collect @created_pull_requests and @errors on the Job object + # TODO: Collect @created_pull_requests and @errors on the Job object? @errors = [] @created_pull_requests = [] end @@ -96,8 +93,7 @@ def run private attr_accessor :errors, :created_pull_requests - attr_reader :service, :job_id, :job, :dependency_files, :base_commit_sha, - :repo_contents_path + attr_reader :service, :job, :dependency_files, :base_commit_sha def check_and_create_pr_with_error_handling(dependency) check_and_create_pull_request(dependency) @@ -658,9 +654,9 @@ def dependencies def dependency_file_parser Dependabot::FileParsers.for_package_manager(job.package_manager).new( dependency_files: dependency_files, - repo_contents_path: repo_contents_path, + repo_contents_path: job.repo_contents_path, source: job.source, - credentials: credentials, + credentials: job.credentials, reject_external_code: job.reject_external_code?, options: job.experiments ) @@ -670,8 +666,8 @@ def update_checker_for(dependency, raise_on_ignored:) Dependabot::UpdateCheckers.for_package_manager(job.package_manager).new( dependency: dependency, dependency_files: dependency_files, - repo_contents_path: repo_contents_path, - credentials: credentials, + repo_contents_path: job.repo_contents_path, + credentials: job.credentials, ignored_versions: ignore_conditions_for(dependency), security_advisories: security_advisories_for(dependency), raise_on_ignored: raise_on_ignored, @@ -684,8 +680,8 @@ def file_updater_for(dependencies) Dependabot::FileUpdaters.for_package_manager(job.package_manager).new( dependencies: dependencies, dependency_files: dependency_files, - repo_contents_path: repo_contents_path, - credentials: credentials, + repo_contents_path: job.repo_contents_path, + credentials: job.credentials, options: job.experiments ) end @@ -985,11 +981,7 @@ def update_dependency_list(dependencies) end def error_context(dependency) - { dependency_name: dependency.name, update_job_id: job_id } - end - - def credentials - job.credentials + { dependency_name: dependency.name, update_job_id: job.id } end def record_error(error_details, dependency: nil) @@ -1003,8 +995,13 @@ def record_error(error_details, dependency: nil) end def raven_context(dependency: nil) - context = { tags: {}, extra: { update_job_id: job_id } } - context[:tags][:package_manager] = @job.package_manager if @job + context = { + tags: {}, + extra: { + update_job_id: job.id, + package_manager: job.package_manager + } + } context[:extra][:dependency_name] = dependency.name if dependency context end diff --git a/updater/spec/dependabot/api_client_spec.rb b/updater/spec/dependabot/api_client_spec.rb index 20c0639963a..ab71412534e 100644 --- a/updater/spec/dependabot/api_client_spec.rb +++ b/updater/spec/dependabot/api_client_spec.rb @@ -9,26 +9,6 @@ subject(:client) { Dependabot::ApiClient.new("http://example.com", 1, "token") } let(:headers) { { "Content-Type" => "application/json" } } - describe "fetch_job" do - before do - stub_request(:get, "http://example.com/update_jobs/1"). - to_return(body: fixture("fetch_job.json"), headers: headers) - end - - it "hits the correct endpoint" do - client.fetch_job - - expect(WebMock). - to have_requested(:get, "http://example.com/update_jobs/1"). - with(headers: { "Authorization" => "token" }) - end - - it "returns a job" do - job = client.fetch_job - expect(job).to be_a(Dependabot::Job) - end - end - describe "create_pull_request" do let(:dependency_change) do Dependabot::DependencyChange.new( diff --git a/updater/spec/dependabot/service_spec.rb b/updater/spec/dependabot/service_spec.rb index ec5178101cf..0fba7f9285e 100644 --- a/updater/spec/dependabot/service_spec.rb +++ b/updater/spec/dependabot/service_spec.rb @@ -10,7 +10,6 @@ let(:mock_client) do instance_double(Dependabot::ApiClient, { - fetch_job: nil, create_pull_request: nil, update_pull_request: nil, close_pull_request: nil, @@ -170,12 +169,6 @@ expect(mock_client).to have_received(method).with(*arguments) end end - - it "delegates fetch_job" do - service.fetch_job - - expect(mock_client).to have_received(:fetch_job) - end end describe "#create_pull_request" do diff --git a/updater/spec/dependabot/update_files_command_spec.rb b/updater/spec/dependabot/update_files_command_spec.rb index 5b26c1a7802..552f8cb4476 100644 --- a/updater/spec/dependabot/update_files_command_spec.rb +++ b/updater/spec/dependabot/update_files_command_spec.rb @@ -7,7 +7,9 @@ RSpec.describe Dependabot::UpdateFilesCommand do subject(:job) { described_class.new } - let(:service) { double(Dependabot::Service) } + let(:service) do + instance_double(Dependabot::Service, mark_job_as_processed: nil) + end let(:job_definition) do JSON.parse(fixture("file_fetcher_output/output.json")) end @@ -15,10 +17,9 @@ let(:job_id) { "123123" } before do - allow(job).to receive(:service).and_return(service) - allow(job).to receive(:job_id).and_return(job_id) - allow(service).to receive(:mark_job_as_processed) - + allow(Dependabot::Service).to receive(:new).and_return(service) + allow(Dependabot::Environment).to receive(:job_id).and_return(job_id) + allow(Dependabot::Environment).to receive(:job_token).and_return("mock_token") allow(Dependabot::Environment).to receive(:job_definition).and_return(job_definition) allow(Dependabot::Environment).to receive(:repo_contents_path).and_return(repo_contents_path) end @@ -33,10 +34,8 @@ to receive(:new). with( service: service, - job_id: job_id, - job: anything, + job: an_object_having_attributes(id: job_id, repo_contents_path: nil), dependency_files: anything, - repo_contents_path: nil, base_commit_sha: base_commit_sha ). and_return(dummy_runner) @@ -59,10 +58,8 @@ to receive(:new). with( service: service, - job_id: job_id, - job: anything, + job: an_object_having_attributes(id: job_id, repo_contents_path: repo_contents_path), dependency_files: anything, - repo_contents_path: repo_contents_path, base_commit_sha: base_commit_sha ). and_return(dummy_runner) diff --git a/updater/spec/dependabot/updater_spec.rb b/updater/spec/dependabot/updater_spec.rb index e8518734fc0..973e887615d 100644 --- a/updater/spec/dependabot/updater_spec.rb +++ b/updater/spec/dependabot/updater_spec.rb @@ -28,7 +28,7 @@ stub_update_checker job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:create_pull_request) do |dependency_change, base_commit_sha| @@ -67,7 +67,7 @@ it "updates the update config's dependency list" do job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) dependencies = [ @@ -108,7 +108,7 @@ stub_update_checker job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:create_pull_request).once @@ -120,7 +120,7 @@ stub_update_checker job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Dependabot.logger). @@ -135,7 +135,7 @@ it "does not log empty ignore conditions" do job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Dependabot.logger). @@ -147,7 +147,7 @@ context "when the host is out of disk space" do it "records an 'out_of_disk' error" do job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(job).to receive(:updating_a_pull_request?).and_raise(Errno::ENOSPC) @@ -164,7 +164,7 @@ stub_update_checker job = build_job - service = build_service(job: job) + service = build_service error = Octokit::TooManyRequests.new({ status: 403, response_headers: { "X-RateLimit-Reset" => 42 } @@ -188,7 +188,7 @@ context "when the job has already been processed" do it "no-ops" do job = nil - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(updater).to_not receive(:dependencies) @@ -202,7 +202,7 @@ stub_update_checker(requirements_update_strategy: :bump_versions) job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Dependabot.logger). @@ -225,7 +225,7 @@ } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Dependabot.logger). @@ -250,7 +250,7 @@ ], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:create_pull_request).once @@ -286,7 +286,7 @@ ], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to_not receive(:create_pull_request) @@ -322,7 +322,7 @@ ], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to_not receive(:create_pull_request) @@ -344,7 +344,7 @@ ], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(checker).to receive(:lowest_resolvable_security_fix_version). @@ -407,7 +407,7 @@ ], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(checker).to receive(:lowest_resolvable_security_fix_version). @@ -452,7 +452,7 @@ ], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(checker).to receive(:up_to_date?).and_return(true) @@ -508,7 +508,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -527,7 +527,7 @@ def expect_update_checker_with_ignored_versions(versions) { "dependency-name" => "dummy-pkg-b", "version-requirement" => "~> 1.0.0" } ] job = build_job(ignore_conditions: ignore_conditions) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Dependabot.logger). @@ -550,7 +550,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:up_to_date?).and_raise(Dependabot::AllVersionsIgnored) job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -564,7 +564,7 @@ def expect_update_checker_with_ignored_versions(versions) stub_update_checker job = build_job(requested_dependencies: ["dummy-pkg-b"]) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -596,7 +596,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -628,7 +628,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -660,7 +660,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -682,7 +682,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -712,7 +712,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -727,7 +727,7 @@ def expect_update_checker_with_ignored_versions(versions) stub_update_checker job = build_job(experiments: { "cloning" => true }) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Dependabot::Bundler::FileUpdater).to receive(:new).with( @@ -780,7 +780,7 @@ def expect_update_checker_with_ignored_versions(versions) and_return(checker, checker, peer_checker) job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:create_pull_request).once @@ -832,7 +832,7 @@ def expect_update_checker_with_ignored_versions(versions) and_return(checker, checker, peer_checker) job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(updater).to_not receive(:generate_dependency_files_for) @@ -892,7 +892,7 @@ def expect_update_checker_with_ignored_versions(versions) "version-requirement" => "~> 1.0.0" } ]) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -936,7 +936,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ]) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(checker).to_not receive(:can_update?) @@ -964,7 +964,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ]) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(checker).to receive(:up_to_date?).and_return(false, false) @@ -1001,7 +1001,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(checker).to receive(:up_to_date?).and_return(false) @@ -1048,7 +1048,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(checker).to_not receive(:can_update?) @@ -1086,7 +1086,7 @@ def expect_update_checker_with_ignored_versions(versions) ] ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:create_pull_request).once @@ -1146,7 +1146,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(checker).to receive(:up_to_date?).and_return(false) @@ -1186,7 +1186,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["dummy-pkg-b"], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(updater). @@ -1208,7 +1208,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["dummy-pkg-b"], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:close_pull_request).once @@ -1232,7 +1232,7 @@ def expect_update_checker_with_ignored_versions(versions) ], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:create_pull_request) @@ -1261,7 +1261,7 @@ def expect_update_checker_with_ignored_versions(versions) ], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:close_pull_request).once @@ -1280,7 +1280,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["removed_dependency"], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:close_pull_request).once @@ -1294,7 +1294,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["removed_dependency"], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files). @@ -1315,7 +1315,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["Dummy-pkg-b"], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(updater). @@ -1346,7 +1346,7 @@ def expect_update_checker_with_ignored_versions(versions) ], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:update_pull_request).once @@ -1370,7 +1370,7 @@ def expect_update_checker_with_ignored_versions(versions) ], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:create_pull_request).once @@ -1389,7 +1389,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["dummy-pkg-b"], updating_a_pull_request: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:close_pull_request).once @@ -1407,7 +1407,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["dummy-pkg-b"], updating_a_pull_request: false ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(updater). @@ -1428,7 +1428,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["removed_dependency"], updating_a_pull_request: false ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to_not receive(:close_pull_request) @@ -1445,7 +1445,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["Dummy-pkg-b"], updating_a_pull_request: false ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(updater). @@ -1467,7 +1467,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["dummy-pkg-a"], updating_a_pull_request: false ) - service = build_service(job: job) + service = build_service updater = build_updater( service: service, job: job, @@ -1512,7 +1512,7 @@ def expect_update_checker_with_ignored_versions(versions) security_updates_only: true, updating_a_pull_request: false ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:create_pull_request) @@ -1540,7 +1540,7 @@ def expect_update_checker_with_ignored_versions(versions) ], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).not_to receive(:create_pull_request) @@ -1578,7 +1578,7 @@ def expect_update_checker_with_ignored_versions(versions) ], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to_not receive(:create_pull_request) @@ -1612,7 +1612,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1629,7 +1629,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1653,7 +1653,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1670,7 +1670,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1695,7 +1695,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1712,7 +1712,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1737,7 +1737,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1754,7 +1754,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1779,7 +1779,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1796,7 +1796,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) allow(updater).to receive(:dependency_files).and_raise(error) @@ -1821,7 +1821,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Raven).to_not receive(:capture_exception) @@ -1836,7 +1836,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service). @@ -1859,7 +1859,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Raven).to_not receive(:capture_exception) @@ -1874,7 +1874,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service). @@ -1897,7 +1897,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Raven).to_not receive(:capture_exception) @@ -1912,7 +1912,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to_not receive(:record_update_job_error) @@ -1929,7 +1929,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Raven).to_not receive(:capture_exception) @@ -1944,7 +1944,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service). @@ -1967,7 +1967,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Raven).to_not receive(:capture_exception) @@ -1982,7 +1982,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service). @@ -2005,7 +2005,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Raven).to_not receive(:capture_exception) @@ -2020,7 +2020,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service). @@ -2047,7 +2047,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Raven).to_not receive(:capture_exception) @@ -2062,7 +2062,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service). @@ -2089,7 +2089,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service). @@ -2113,7 +2113,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Raven). @@ -2131,7 +2131,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Raven).to receive(:capture_exception).once @@ -2146,7 +2146,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service). @@ -2167,7 +2167,7 @@ def expect_update_checker_with_ignored_versions(versions) allow(checker).to receive(:can_update?) { values.shift.call } job = build_job - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(service).to receive(:create_pull_request).once @@ -2185,7 +2185,7 @@ def expect_update_checker_with_ignored_versions(versions) "large-hadron-collider" => true } ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Dependabot::Bundler::FileParser).to receive(:new).with( @@ -2227,7 +2227,7 @@ def expect_update_checker_with_ignored_versions(versions) "large-hadron-collider" => true } ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) expect(Dependabot::Bundler::FileUpdater).to receive(:new).with( @@ -2281,7 +2281,7 @@ def expect_update_checker_with_ignored_versions(versions) "large-hadron-collider" => true } ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -2309,7 +2309,7 @@ def expect_update_checker_with_ignored_versions(versions) "large-hadron-collider" => true } ) - service = build_service(job: job) + service = build_service dependency_files = [ Dependabot::DependencyFile.new( name: "Gemfile", @@ -2376,7 +2376,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -2401,7 +2401,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -2426,7 +2426,7 @@ def expect_update_checker_with_ignored_versions(versions) } ] ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -2453,7 +2453,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["dummy-pkg-b"], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -2474,7 +2474,7 @@ def expect_update_checker_with_ignored_versions(versions) requested_dependencies: ["dummy-pkg-b"], security_updates_only: true ) - service = build_service(job: job) + service = build_service updater = build_updater(service: service, job: job) updater.run @@ -2491,11 +2491,9 @@ def expect_update_checker_with_ignored_versions(versions) def build_updater(service: build_service, job: build_job, dependency_files: default_dependency_files) Dependabot::Updater.new( service: service, - job_id: 1, job: job, dependency_files: dependency_files, - base_commit_sha: "sha", - repo_contents_path: nil + base_commit_sha: "sha" ) end @@ -2514,10 +2512,9 @@ def default_dependency_files ] end - def build_service(job: build_job) + def build_service instance_double( Dependabot::Service, - fetch_job: job, create_pull_request: nil, update_pull_request: nil, close_pull_request: nil, @@ -2570,7 +2567,8 @@ def build_job(requested_dependencies: nil, allowed_updates: default_allowed_upda "prefix-development" => "[bump-dev]", "include-scope" => true }, - security_updates_only: security_updates_only + security_updates_only: security_updates_only, + repo_contents_path: nil ) end diff --git a/updater/spec/fixtures/fetch_job.json b/updater/spec/fixtures/fetch_job.json deleted file mode 100644 index 806af3753e6..00000000000 --- a/updater/spec/fixtures/fetch_job.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "data": { - "attributes": { - "allowed-updates": [ - { - "dependency-type": "direct", - "update-type": "all" - }, - { - "dependency-type": "indirect", - "update-type": "security" - } - ], - "credentials-metadata": [ - { - "type": "git_source", - "host": "github.com" - }, - { - "type": "rubygems_index", - "host": "my.rubygems-host.org" - } - ], - "dependencies": null, - "directory": "/", - "existing-pull-requests": [], - "ignore-conditions": [], - "security-advisories": [], - "package_manager": "bundler", - "repo-name": "dependabot-fixtures/dependabot-test-ruby-package", - "source": { - "provider": "github", - "repo": "dependabot-fixtures/dependabot-test-ruby-package", - "directory": "/", - "branch": null, - "hostname": "github.com", - "api-endpoint": "https://api.github.com/" - }, - "lockfile-only": false, - "requirements-update-strategy": null, - "update-subdependencies": false, - "updating-a-pull-request": false, - "vendor-dependencies": false, - "security-updates-only": false - } - } -}