GitHub import fails when missing url parameter in omniauth_providers

Summary

When attempting to import repositories from a GitHub account after enabling GitHub OAuth, the process fails with the generic error Requesting your github repositories failed.

Steps to reproduce

  1. Set up a GitLab instance using the gitlab/gitlab-ee:latest image
  2. Use this .rb Omnibus configuration (as mentioned in the docs: https://docs.gitlab.com/ee/integration/github.html#enable-github-oauth-in-gitlab)
external_url "https://gitlab.example.com"
allow_single_sign_on = true
auto_link_ldap_user = true
gitlab_rails['omniauth_providers'] = [
  {
    name: "github",
    app_id: "xxx",
    app_secret: "xxx",
    args: { scope: "user:email" }
  }
]
  1. Connect GitHub account to GitLab
  2. Go to the import page (https://gitlab.example.com/import/github/status)

What is the current bug behavior?

Import process fails to list repositories with error Requesting your github repositories failed

What is the expected correct behavior?

Page shows list of repositories to import.

Relevant logs and/or screenshots

==> /var/log/gitlab/gitlab-rails/production.log <==

ArgumentError (wrong number of arguments (given 1, expected 0)):

(eval):1:in `default'
app/controllers/import/github_controller.rb:105:in `dig'
app/controllers/import/github_controller.rb:105:in `block in provider_url'
lib/gitlab/utils/strong_memoize.rb:44:in `strong_memoize'
app/controllers/import/github_controller.rb:104:in `provider_url'
app/controllers/import/github_controller.rb:120:in `serialized_imported_projects'
app/controllers/import/base_controller.rb:13:in `block (2 levels) in status'
app/controllers/import/base_controller.rb:11:in `status'
app/controllers/import/github_controller.rb:49:in `status'
ee/lib/gitlab/ip_address_state.rb:10:in `with'
ee/app/controllers/ee/application_controller.rb:45:in `set_current_ip_address'
app/controllers/application_controller.rb:530:in `set_current_admin'
lib/gitlab/session.rb:11:in `with_session'
app/controllers/application_controller.rb:521:in `set_session_storage'
lib/gitlab/i18n.rb:107:in `with_locale'
lib/gitlab/i18n.rb:113:in `with_user_locale'
app/controllers/application_controller.rb:515:in `set_locale'
app/controllers/application_controller.rb:509:in `set_current_context'
lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call'
lib/gitlab/middleware/memory_report.rb:13:in `call'
lib/gitlab/middleware/speedscope.rb:13:in `call'
lib/gitlab/database/load_balancing/rack_middleware.rb:23:in `call'
lib/gitlab/middleware/rails_queue_duration.rb:33:in `call'
lib/gitlab/metrics/rack_middleware.rb:16:in `block in call'
lib/gitlab/metrics/web_transaction.rb:46:in `run'
lib/gitlab/metrics/rack_middleware.rb:16:in `call'
lib/gitlab/jira/middleware.rb:19:in `call'
lib/gitlab/middleware/go.rb:20:in `call'
lib/gitlab/etag_caching/middleware.rb:21:in `call'
lib/gitlab/middleware/query_analyzer.rb:11:in `block in call'
lib/gitlab/database/query_analyzer.rb:37:in `within'
lib/gitlab/middleware/query_analyzer.rb:11:in `call'
lib/gitlab/middleware/multipart.rb:173:in `call'
lib/gitlab/middleware/read_only/controller.rb:50:in `call'
lib/gitlab/middleware/read_only.rb:18:in `call'
lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call'
lib/gitlab/middleware/basic_health_check.rb:25:in `call'
lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
lib/gitlab/middleware/request_context.rb:21:in `call'
lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'
config/initializers/fix_local_cache_middleware.rb:11:in `call'
lib/gitlab/middleware/compressed_json.rb:26:in `call'
lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'
lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:77:in `call'
lib/gitlab/middleware/release_env.rb:13:in `call'

Possible fixes

The culprit: https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/app/controllers/import/github_controller.rb#L105

That line indicates it's looking for the url parameter in the OAuth configuration and should default to the github.com URL if not present (as the docs suggest). In order to fix the bug I've simply added the default GitHub URL to my configuration:

external_url "https://gitlab.example.com"
allow_single_sign_on = true
auto_link_ldap_user = true
gitlab_rails['omniauth_providers'] = [
  {
    name: "github",
    # label: "Provider name", # optional label for login button, defaults to "GitHub"
    app_id: "xxx",
    app_secret: "xxx",
    url: "https://github.com/",
    args: { scope: "user:email" }
  }
]

Two possible fixes:

  • Update the example from the docs to include the url parameter even if not using GitHub Enterprise
  • Fix the default parameter when url is missing