summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSytse Sijbrandij <sytse@gitlab.com>2015-01-10 19:19:44 -0800
committerSytse Sijbrandij <sytse@gitlab.com>2015-01-10 19:19:44 -0800
commita28cad0cf3cdb387e6da221ba2feef73182013da (patch)
treeafd8a4b47a3bf5b456f629660ff010236d7cf0b0
parent703087b8bfb2e416cc429da28a4bf7b12743ff49 (diff)
parent679b450c49198734dcce96ca996dce7456838d26 (diff)
downloadgitlab-ce-a28cad0cf3cdb387e6da221ba2feef73182013da.tar.gz
Merge branch 'master' of dev.gitlab.org:gitlab/gitlabhq into prose-requirement
-rw-r--r--CHANGELOG18
-rw-r--r--Gemfile2
-rw-r--r--app/assets/javascripts/merge_request.js.coffee13
-rw-r--r--app/assets/stylesheets/sections/login.scss89
-rw-r--r--app/controllers/admin/application_settings_controller.rb31
-rw-r--r--app/controllers/application_controller.rb4
-rw-r--r--app/controllers/projects/merge_requests_controller.rb7
-rw-r--r--app/controllers/registrations_controller.rb4
-rw-r--r--app/controllers/sessions_controller.rb22
-rw-r--r--app/helpers/application_helper.rb5
-rw-r--r--app/helpers/application_settings_helper.rb17
-rw-r--r--app/helpers/profile_helper.rb2
-rw-r--r--app/models/application_setting.rb15
-rw-r--r--app/models/user.rb5
-rw-r--r--app/services/base_service.rb6
-rw-r--r--app/services/gravatar_service.rb4
-rw-r--r--app/views/admin/application_settings/_form.html.haml33
-rw-r--r--app/views/admin/application_settings/show.html.haml3
-rw-r--r--app/views/admin/dashboard/index.html.haml4
-rw-r--r--app/views/devise/sessions/_new_base.html.haml2
-rw-r--r--app/views/devise/sessions/_new_ldap.html.haml1
-rw-r--r--app/views/devise/sessions/new.html.haml52
-rw-r--r--app/views/devise/shared/_oauth_box.html.haml (renamed from app/views/devise/sessions/_oauth_providers.html.haml)4
-rw-r--r--app/views/devise/shared/_signin_box.html.haml25
-rw-r--r--app/views/devise/shared/_signup_box.html.haml17
-rw-r--r--app/views/layouts/_public_head_panel.html.haml13
-rw-r--r--app/views/layouts/devise.html.haml47
-rw-r--r--app/views/layouts/nav/_admin.html.haml5
-rw-r--r--app/views/projects/merge_requests/_show.html.haml2
-rw-r--r--app/views/projects/merge_requests/automerge.js.haml3
-rw-r--r--app/workers/auto_merge_worker.rb13
-rw-r--r--config/routes.rb2
-rw-r--r--db/migrate/20150108073740_create_application_settings.rb13
-rw-r--r--db/schema.rb12
-rw-r--r--doc/release/howto_rc1.md126
-rw-r--r--doc/release/monthly.md291
-rw-r--r--features/admin/settings.feature9
-rw-r--r--features/steps/admin/settings.rb16
-rw-r--r--features/steps/shared/paths.rb4
-rw-r--r--lib/gitlab/current_settings.rb26
-rw-r--r--lib/gitlab/popen.rb3
-rw-r--r--spec/features/profile_spec.rb4
-rw-r--r--spec/features/users_spec.rb2
-rw-r--r--spec/helpers/application_helper_spec.rb2
-rw-r--r--spec/models/application_setting_spec.rb5
-rw-r--r--spec/requests/api/users_spec.rb4
46 files changed, 637 insertions, 350 deletions
diff --git a/CHANGELOG b/CHANGELOG
index b7e85f2e5e9..bef78efe60a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -22,6 +22,24 @@ v 7.7.0
-
- Added API support for sorting projects
- Update gitlab_git to version 7.0.0.rc13
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ - Change some of application settings on fly in admin area UI
+ - Redesign signin/signup pages
+ - Close standard input in Gitlab::Popen.popen
v 7.6.0
- Fork repository to groups
diff --git a/Gemfile b/Gemfile
index 46ba460506b..bfd3c22f7b6 100644
--- a/Gemfile
+++ b/Gemfile
@@ -175,7 +175,6 @@ gem 'semantic-ui-sass', '~> 0.16.1.0'
gem "sass-rails", '~> 4.0.2'
gem "coffee-rails"
gem "uglifier"
-gem "therubyracer"
gem 'turbolinks'
gem 'jquery-turbolinks'
@@ -260,6 +259,7 @@ end
group :production do
gem "gitlab_meta", '7.0'
+ gem "therubyracer"
end
gem "newrelic_rpm"
diff --git a/app/assets/javascripts/merge_request.js.coffee b/app/assets/javascripts/merge_request.js.coffee
index 9e3ca45ce04..5bcbd56852d 100644
--- a/app/assets/javascripts/merge_request.js.coffee
+++ b/app/assets/javascripts/merge_request.js.coffee
@@ -135,3 +135,16 @@ class @MergeRequest
this.$('.automerge_widget').hide()
this.$('.merge-in-progress').hide()
this.$('.automerge_widget.already_cannot_be_merged').show()
+
+ mergeInProgress: ->
+ $.ajax
+ type: 'GET'
+ url: $('.merge-request').data('url')
+ success: (data) =>
+ switch data.state
+ when 'merged'
+ location.reload()
+ else
+ setTimeout(merge_request.mergeInProgress, 3000)
+ dataType: 'json'
+
diff --git a/app/assets/stylesheets/sections/login.scss b/app/assets/stylesheets/sections/login.scss
index 1bcb1f6d68e..901733ef9ff 100644
--- a/app/assets/stylesheets/sections/login.scss
+++ b/app/assets/stylesheets/sections/login.scss
@@ -1,48 +1,66 @@
/* Login Page */
.login-page {
- h1 {
- font-size: 3em;
- font-weight: 200;
+ .container {
+ max-width: 960px;
}
- .login-box{
- padding: 0 15px;
+ .navbar-gitlab .container {
+ max-width: none;
+ }
- .login-heading h3 {
- font-weight: 300;
- line-height: 2;
- }
+ .brand-holder {
+ font-size: 18px;
+ line-height: 1.5;
- .login-footer {
- margin-top: 10px;
+ p {
+ color: #888;
}
- .btn {
- padding: 12px !important;
- @extend .btn-block;
+ h1:first-child {
+ font-weight: normal;
+ margin-bottom: 30px;
}
- }
- .brand-image {
img {
max-width: 100%;
- margin-bottom: 20px;
+ margin-bottom: 30px;
}
- &.default-brand-image {
- margin: 0 80px;
+ a {
+ font-weight: bold;
}
}
- .login-logo {
- margin: 10px 0 30px 0;
- display: block;
+ .login-box{
+ background: #fafafa;
+ border-radius: 10px;
+ box-shadow: 0 0px 2px #CCC;
+ padding: 15px;
+
+ .login-heading h3 {
+ font-weight: 300;
+ line-height: 1.5;
+ margin: 0;
+ display: none;
+ }
+
+ .login-footer {
+ margin-top: 10px;
+ }
+
+ a.forgot {
+ float: right;
+ padding-top: 6px
+ }
+
+ .nav .active a {
+ background: transparent;
+ }
}
.form-control {
- background-color: #F5F5F5;
- font-size: 16px;
- padding: 14px 10px;
+ font-size: 14px;
+ padding: 10px 8px;
width: 100%;
height: auto;
@@ -68,11 +86,6 @@
}
}
- .login-box a.forgot {
- float: right;
- padding-top: 6px
- }
-
.devise-errors {
h2 {
font-size: 14px;
@@ -80,7 +93,19 @@
}
}
- .brand-holder {
- border-right: 1px solid #EEE;
+ .remember-me {
+ margin-top: -10px;
+
+ label {
+ font-weight: normal;
+ }
+ }
+}
+
+@media (max-width: $screen-xs-max) {
+ .login-page {
+ .col-sm-5.pull-right {
+ float: none !important;
+ }
}
}
diff --git a/app/controllers/admin/application_settings_controller.rb b/app/controllers/admin/application_settings_controller.rb
new file mode 100644
index 00000000000..5116f1f177a
--- /dev/null
+++ b/app/controllers/admin/application_settings_controller.rb
@@ -0,0 +1,31 @@
+class Admin::ApplicationSettingsController < Admin::ApplicationController
+ before_filter :set_application_setting
+
+ def show
+ end
+
+ def update
+ if @application_setting.update_attributes(application_setting_params)
+ redirect_to admin_application_settings_path,
+ notice: 'Application settings saved successfully'
+ else
+ render :show
+ end
+ end
+
+ private
+
+ def set_application_setting
+ @application_setting = ApplicationSetting.current
+ end
+
+ def application_setting_params
+ params.require(:application_setting).permit(
+ :default_projects_limit,
+ :signup_enabled,
+ :signin_enabled,
+ :gravatar_enabled,
+ :sign_in_text,
+ )
+ end
+end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 4b8cae469e3..b83de68c5d2 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,6 +1,8 @@
require 'gon'
class ApplicationController < ActionController::Base
+ include Gitlab::CurrentSettings
+
before_filter :authenticate_user_from_token!
before_filter :authenticate_user!
before_filter :reject_blocked!
@@ -13,7 +15,7 @@ class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
- helper_method :abilities, :can?
+ helper_method :abilities, :can?, :current_application_settings
rescue_from Encoding::CompatibilityError do |exception|
log_exception(exception)
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index d23461821d7..3f702b0af97 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -27,6 +27,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
respond_to do |format|
format.html
+ format.json { render json: @merge_request }
format.diff { render text: @merge_request.to_diff(current_user) }
format.patch { render text: @merge_request.to_patch(current_user) }
end
@@ -104,15 +105,15 @@ class Projects::MergeRequestsController < Projects::ApplicationController
if @merge_request.unchecked?
@merge_request.check_if_can_be_merged
end
- render json: {merge_status: @merge_request.merge_status_name}
+
+ render json: { merge_status: @merge_request.merge_status_name }
end
def automerge
return access_denied! unless allowed_to_merge?
if @merge_request.open? && @merge_request.can_be_merged?
- @merge_request.should_remove_source_branch = params[:should_remove_source_branch]
- @merge_request.automerge!(current_user, params[:commit_message])
+ AutoMergeWorker.perform_async(@merge_request.id, current_user.id, params)
@status = true
else
@status = false
diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb
index 6d3214b70a8..52db44bf822 100644
--- a/app/controllers/registrations_controller.rb
+++ b/app/controllers/registrations_controller.rb
@@ -26,7 +26,9 @@ class RegistrationsController < Devise::RegistrationsController
private
def signup_enabled?
- redirect_to new_user_session_path unless Gitlab.config.gitlab.signup_enabled
+ unless current_application_settings.signup_enabled?
+ redirect_to(new_user_session_path)
+ end
end
def sign_up_params
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index 5ced98152a5..7b6982c5074 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -1,16 +1,16 @@
class SessionsController < Devise::SessionsController
-
def new
- redirect_path = if request.referer.present? && (params['redirect_to_referer'] == 'yes')
- referer_uri = URI(request.referer)
- if referer_uri.host == Gitlab.config.gitlab.host
- referer_uri.path
- else
- request.fullpath
- end
- else
- request.fullpath
- end
+ redirect_path =
+ if request.referer.present? && (params['redirect_to_referer'] == 'yes')
+ referer_uri = URI(request.referer)
+ if referer_uri.host == Gitlab.config.gitlab.host
+ referer_uri.path
+ else
+ request.fullpath
+ end
+ else
+ request.fullpath
+ end
# Prevent a 'you are already signed in' message directly after signing:
# we should never redirect to '/users/sign_in' after signing in successfully.
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 092a1ba9229..f21b0bd1f50 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -305,4 +305,9 @@ module ApplicationHelper
profile_key_path(key)
end
end
+
+ def redirect_from_root?
+ request.env['rack.session']['user_return_to'] ==
+ '/'
+ end
end
diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb
new file mode 100644
index 00000000000..04299316102
--- /dev/null
+++ b/app/helpers/application_settings_helper.rb
@@ -0,0 +1,17 @@
+module ApplicationSettingsHelper
+ def gravatar_enabled?
+ current_application_settings.gravatar_enabled?
+ end
+
+ def signup_enabled?
+ current_application_settings.signup_enabled?
+ end
+
+ def signin_enabled?
+ current_application_settings.signin_enabled?
+ end
+
+ def extra_sign_in_text
+ current_application_settings.sign_in_text
+ end
+end
diff --git a/app/helpers/profile_helper.rb b/app/helpers/profile_helper.rb
index 6480fd3886f..9e37e44732a 100644
--- a/app/helpers/profile_helper.rb
+++ b/app/helpers/profile_helper.rb
@@ -14,6 +14,6 @@ module ProfileHelper
end
def show_profile_remove_tab?
- gitlab_config.signup_enabled
+ signup_enabled?
end
end
diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb
new file mode 100644
index 00000000000..47fa6f1071c
--- /dev/null
+++ b/app/models/application_setting.rb
@@ -0,0 +1,15 @@
+class ApplicationSetting < ActiveRecord::Base
+ def self.current
+ ApplicationSetting.last
+ end
+
+ def self.create_from_defaults
+ create(
+ default_projects_limit: Settings.gitlab['default_projects_limit'],
+ signup_enabled: Settings.gitlab['signup_enabled'],
+ signin_enabled: Settings.gitlab['signin_enabled'],
+ gravatar_enabled: Settings.gravatar['enabled'],
+ sign_in_text: Settings.extra['sign_in_text'],
+ )
+ end
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index 7dae318e780..6e5ac9b39c8 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -51,14 +51,15 @@ require 'file_size_validator'
class User < ActiveRecord::Base
include Gitlab::ConfigHelper
- extend Gitlab::ConfigHelper
include TokenAuthenticatable
+ extend Gitlab::ConfigHelper
+ extend Gitlab::CurrentSettings
default_value_for :admin, false
default_value_for :can_create_group, gitlab_config.default_can_create_group
default_value_for :can_create_team, false
default_value_for :hide_no_ssh_key, false
- default_value_for :projects_limit, gitlab_config.default_projects_limit
+ default_value_for :projects_limit, current_application_settings.default_projects_limit
default_value_for :theme_id, gitlab_config.default_theme
devise :database_authenticatable, :lockable, :async,
diff --git a/app/services/base_service.rb b/app/services/base_service.rb
index 0d46eeaa18f..bb51795df7c 100644
--- a/app/services/base_service.rb
+++ b/app/services/base_service.rb
@@ -1,4 +1,6 @@
class BaseService
+ include Gitlab::CurrentSettings
+
attr_accessor :project, :current_user, :params
def initialize(project, user, params = {})
@@ -29,6 +31,10 @@ class BaseService
SystemHooksService.new
end
+ def current_application_settings
+ ApplicationSetting.current
+ end
+
private
def error(message)
diff --git a/app/services/gravatar_service.rb b/app/services/gravatar_service.rb
index a69c7c78377..4bee0c26a68 100644
--- a/app/services/gravatar_service.rb
+++ b/app/services/gravatar_service.rb
@@ -1,6 +1,8 @@
class GravatarService
+ include Gitlab::CurrentSettings
+
def execute(email, size = nil)
- if gravatar_config.enabled && email.present?
+ if current_application_settings.gravatar_enabled? && email.present?
size = 40 if size.nil? || size <= 0
sprintf gravatar_url,
diff --git a/app/views/admin/application_settings/_form.html.haml b/app/views/admin/application_settings/_form.html.haml
new file mode 100644
index 00000000000..5ca9585e9a9
--- /dev/null
+++ b/app/views/admin/application_settings/_form.html.haml
@@ -0,0 +1,33 @@
+= form_for @application_setting, url: admin_application_settings_path, html: { class: 'form-horizontal fieldset-form' } do |f|
+ - if @application_setting.errors.any?
+ #error_explanation
+ .alert.alert-danger
+ - @application_setting.errors.full_messages.each do |msg|
+ %p= msg
+
+ %fieldset
+ %legend Features
+ .form-group
+ = f.label :signup_enabled, class: 'control-label'
+ .col-sm-10
+ = f.check_box :signup_enabled, class: 'checkbox'
+ .form-group
+ = f.label :signin_enabled, class: 'control-label'
+ .col-sm-10
+ = f.check_box :signin_enabled, class: 'checkbox'
+ .form-group
+ = f.label :gravatar_enabled, class: 'control-label'
+ .col-sm-10
+ = f.check_box :gravatar_enabled, class: 'checkbox'
+ %fieldset
+ %legend Misc
+ .form-group
+ = f.label :default_projects_limit, class: 'control-label'
+ .col-sm-10
+ = f.number_field :default_projects_limit, class: 'form-control'
+ .form-group
+ = f.label :sign_in_text, class: 'control-label'
+ .col-sm-10
+ = f.text_area :sign_in_text, class: 'form-control'
+ .form-actions
+ = f.submit 'Save', class: 'btn btn-primary'
diff --git a/app/views/admin/application_settings/show.html.haml b/app/views/admin/application_settings/show.html.haml
new file mode 100644
index 00000000000..39b66647a5a
--- /dev/null
+++ b/app/views/admin/application_settings/show.html.haml
@@ -0,0 +1,3 @@
+%h3.page-title Application settings
+%hr
+= render 'form'
diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml
index 7427cea7e8b..c6badeb4bd9 100644
--- a/app/views/admin/dashboard/index.html.haml
+++ b/app/views/admin/dashboard/index.html.haml
@@ -104,7 +104,7 @@
%p
Sign up
%span.light.pull-right
- = boolean_to_icon gitlab_config.signup_enabled
+ = boolean_to_icon signup_enabled?
%p
LDAP
%span.light.pull-right
@@ -112,7 +112,7 @@
%p
Gravatar
%span.light.pull-right
- = boolean_to_icon Gitlab.config.gravatar.enabled
+ = boolean_to_icon gravatar_enabled?
%p
OmniAuth
%span.light.pull-right
diff --git a/app/views/devise/sessions/_new_base.html.haml b/app/views/devise/sessions/_new_base.html.haml
index e819847e5ea..ab9085f0ba7 100644
--- a/app/views/devise/sessions/_new_base.html.haml
+++ b/app/views/devise/sessions/_new_base.html.haml
@@ -2,7 +2,7 @@
= f.text_field :login, class: "form-control top", placeholder: "Username or Email", autofocus: "autofocus"
= f.password_field :password, class: "form-control bottom", placeholder: "Password"
- if devise_mapping.rememberable?
- .clearfix.append-bottom-10
+ .remember-me
%label.checkbox.remember_me{for: "user_remember_me"}
= f.check_box :remember_me
%span Remember me
diff --git a/app/views/devise/sessions/_new_ldap.html.haml b/app/views/devise/sessions/_new_ldap.html.haml
index bf8a593c254..e986989a728 100644
--- a/app/views/devise/sessions/_new_ldap.html.haml
+++ b/app/views/devise/sessions/_new_ldap.html.haml
@@ -1,5 +1,4 @@
= form_tag(user_omniauth_callback_path(provider), id: 'new_ldap_user' ) do
= text_field_tag :username, nil, {class: "form-control top", placeholder: "LDAP Login", autofocus: "autofocus"}
= password_field_tag :password, nil, {class: "form-control bottom", placeholder: "Password"}
- %br/
= button_tag "LDAP Sign in", class: "btn-save btn"
diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.html.haml
index ca7e9570b43..6d8415613d1 100644
--- a/app/views/devise/sessions/new.html.haml
+++ b/app/views/devise/sessions/new.html.haml
@@ -1,43 +1,15 @@
-.login-box
- .login-heading
- %h3 Sign in
- .login-body
- - if ldap_enabled?
- %ul.nav.nav-tabs
- - @ldap_servers.each_with_index do |server, i|
- %li{class: (:active if i.zero?)}
- = link_to server['label'], "#tab-#{server['provider_name']}", 'data-toggle' => 'tab'
- - if gitlab_config.signin_enabled
- %li
- = link_to 'Standard', '#tab-signin', 'data-toggle' => 'tab'
- .tab-content
- - @ldap_servers.each_with_index do |server, i|
- %div.tab-pane{id: "tab-#{server['provider_name']}", class: (:active if i.zero?)}
- = render 'devise/sessions/new_ldap', provider: server['provider_name']
- - if gitlab_config.signin_enabled
- %div#tab-signin.tab-pane
- = render 'devise/sessions/new_base'
+%div
+ = render 'devise/shared/signin_box'
- - elsif gitlab_config.signin_enabled
- = render 'devise/sessions/new_base'
- - else
- %div
- No authentication methods configured.
+ - if Gitlab.config.omniauth.enabled && devise_mapping.omniauthable?
+ .prepend-top-20
+ = render 'devise/shared/oauth_box'
- = render 'devise/sessions/oauth_providers' if Gitlab.config.omniauth.enabled && devise_mapping.omniauthable?
+ - if signup_enabled?
+ .prepend-top-20
+ = render 'devise/shared/signup_box'
- .login-footer
- - if gitlab_config.signup_enabled
- %p
- %span.light
- Don't have an account?
- %strong
- = link_to "Sign up", new_registration_path(resource_name)
-
- %p
- %span.light Did not receive confirmation email?
- = link_to "Send again", new_confirmation_path(resource_name)
-
- - if extra_config.has_key?('sign_in_text')
- %hr
- = markdown(extra_config.sign_in_text)
+.clearfix.prepend-top-20
+ %p
+ %span.light Did not receive confirmation email?
+ = link_to "Send again", new_confirmation_path(resource_name)
diff --git a/app/views/devise/sessions/_oauth_providers.html.haml b/app/views/devise/shared/_oauth_box.html.haml
index 8d6aaefb9ff..c2e1373de30 100644
--- a/app/views/devise/sessions/_oauth_providers.html.haml
+++ b/app/views/devise/shared/_oauth_box.html.haml
@@ -1,7 +1,7 @@
- providers = additional_providers
- if providers.present?
- .bs-callout.bs-callout-info{:'data-no-turbolink' => 'data-no-turbolink'}
- %span Sign in with: &nbsp;
+ .login-box{:'data-no-turbolink' => 'data-no-turbolink'}
+ %span Sign in with &nbsp;
- providers.each do |provider|
%span
- if default_providers.include?(provider)
diff --git a/app/views/devise/shared/_signin_box.html.haml b/app/views/devise/shared/_signin_box.html.haml
new file mode 100644
index 00000000000..70587329033
--- /dev/null
+++ b/app/views/devise/shared/_signin_box.html.haml
@@ -0,0 +1,25 @@
+.login-box
+ .login-heading
+ %h3 Sign in
+ .login-body
+ - if ldap_enabled?
+ %ul.nav.nav-tabs
+ - @ldap_servers.each_with_index do |server, i|
+ %li{class: (:active if i.zero?)}
+ = link_to server['label'], "#tab-#{server['provider_name']}", 'data-toggle' => 'tab'
+ - if signin_enabled?
+ %li
+ = link_to 'Standard', '#tab-signin', 'data-toggle' => 'tab'
+ .tab-content
+ - @ldap_servers.each_with_index do |server, i|
+ %div.tab-pane{id: "tab-#{server['provider_name']}", class: (:active if i.zero?)}
+ = render 'devise/sessions/new_ldap', provider: server['provider_name']
+ - if signin_enabled?
+ %div#tab-signin.tab-pane
+ = render 'devise/sessions/new_base'
+
+ - elsif signin_enabled?
+ = render 'devise/sessions/new_base'
+ - else
+ %div
+ No authentication methods configured.
diff --git a/app/views/devise/shared/_signup_box.html.haml b/app/views/devise/shared/_signup_box.html.haml
new file mode 100644
index 00000000000..5709c661288
--- /dev/null
+++ b/app/views/devise/shared/_signup_box.html.haml
@@ -0,0 +1,17 @@
+.login-box
+ .login-heading
+ %h3 Sign up
+ .login-body
+ = form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
+ .devise-errors
+ = devise_error_messages!
+ %div
+ = f.text_field :name, class: "form-control top", placeholder: "Name", required: true
+ %div
+ = f.text_field :username, class: "form-control middle", placeholder: "Username", required: true
+ %div
+ = f.email_field :email, class: "form-control middle", placeholder: "Email", required: true
+ .form-group#password-strength
+ = f.password_field :password, class: "form-control bottom", id: "user_password_sign_up", placeholder: "Password", required: true
+ %div
+ = f.submit "Sign up", class: "btn-create btn"
diff --git a/app/views/layouts/_public_head_panel.html.haml b/app/views/layouts/_public_head_panel.html.haml
index 02a5e4868d1..1d5bbb2aade 100644
--- a/app/views/layouts/_public_head_panel.html.haml
+++ b/app/views/layouts/_public_head_panel.html.haml
@@ -12,12 +12,13 @@
%span.sr-only Toggle navigation
%i.fa.fa-bars
- .pull-right.hidden-xs
- = link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in btn-new'
+ - unless current_controller?('sessions')
+ .pull-right.hidden-xs
+ = link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in btn-new'
- .navbar-collapse.collapse
- %ul.nav.navbar-nav
- %li.visible-xs
- = link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes')
+ .navbar-collapse.collapse
+ %ul.nav.navbar-nav
+ %li.visible-xs
+ = link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes')
= render 'shared/outdated_browser'
diff --git a/app/views/layouts/devise.html.haml b/app/views/layouts/devise.html.haml
index 6539a24119c..857ebd9b8d9 100644
--- a/app/views/layouts/devise.html.haml
+++ b/app/views/layouts/devise.html.haml
@@ -1,36 +1,33 @@
!!! 5
%html{ lang: "en"}
= render "layouts/head"
- %body.ui_basic.login-page
- .container
- .content
- .login-title
- %h1= brand_title
- = render 'shared/outdated_browser'
- %hr
- .container
+ %body.ui_mars.login-page.application
+ = render "layouts/broadcast"
+ = render "layouts/public_head_panel", title: ''
+ .container.navless-container
.content
- = render "layouts/flash"
- .row
- .col-md-7.brand-holder
+ - unless redirect_from_root?
+ = render "layouts/flash"
+ .row.prepend-top-20
+ .col-sm-5.pull-right
+ = yield
+ .col-sm-7.brand-holder.pull-left
+ %h1
+ = brand_title
- if brand_item
- .brand-image
- = brand_image
- .brand_text
- = brand_text
+ = brand_image
+ = brand_text
- else
- .brand-image.default-brand-image.hidden-sm.hidden-xs
- = image_tag 'brand_logo.png'
- .brand_text.hidden-xs
- %h2 Open source software to collaborate on code
+ %h3 Open source software to collaborate on code
- %p.lead
- Manage git repositories with fine grained access controls that keep your code secure.
- Perform code reviews and enhance collaboration with merge requests.
- Each project can also have an issue tracker and a wiki.
+ %p
+ Manage git repositories with fine grained access controls that keep your code secure.
+ Perform code reviews and enhance collaboration with merge requests.
+ Each project can also have an issue tracker and a wiki.
+
+ - if extra_sign_in_text.present?
+ = markdown(extra_sign_in_text)
- .col-md-5
- = yield
%hr
.container
.footer-links
diff --git a/app/views/layouts/nav/_admin.html.haml b/app/views/layouts/nav/_admin.html.haml
index ea503a9cc2e..fdc517617e3 100644
--- a/app/views/layouts/nav/_admin.html.haml
+++ b/app/views/layouts/nav/_admin.html.haml
@@ -40,3 +40,8 @@
%span
Background Jobs
+ = nav_link(controller: :application_settings) do
+ = link_to admin_application_settings_path do
+ %i.fa.fa-cogs
+ %span
+ Settings
diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml
index f8d2673335a..8e31a7e3fe4 100644
--- a/app/views/projects/merge_requests/_show.html.haml
+++ b/app/views/projects/merge_requests/_show.html.haml
@@ -1,4 +1,4 @@
-.merge-request
+.merge-request{'data-url' => project_merge_request_path(@project, @merge_request)}
= render "projects/merge_requests/show/mr_title"
%hr
= render "projects/merge_requests/show/mr_box"
diff --git a/app/views/projects/merge_requests/automerge.js.haml b/app/views/projects/merge_requests/automerge.js.haml
index e01ff662e7d..a53cbb150a4 100644
--- a/app/views/projects/merge_requests/automerge.js.haml
+++ b/app/views/projects/merge_requests/automerge.js.haml
@@ -1,7 +1,6 @@
-if @status
:plain
- location.reload();
+ merge_request.mergeInProgress();
-else
:plain
merge_request.alreadyOrCannotBeMerged()
-
diff --git a/app/workers/auto_merge_worker.rb b/app/workers/auto_merge_worker.rb
new file mode 100644
index 00000000000..a6dd73eee5f
--- /dev/null
+++ b/app/workers/auto_merge_worker.rb
@@ -0,0 +1,13 @@
+class AutoMergeWorker
+ include Sidekiq::Worker
+
+ sidekiq_options queue: :default
+
+ def perform(merge_request_id, current_user_id, params)
+ params = params.with_indifferent_access
+ current_user = User.find(current_user_id)
+ merge_request = MergeRequest.find(merge_request_id)
+ merge_request.should_remove_source_branch = params[:should_remove_source_branch]
+ merge_request.automerge!(current_user, params[:commit_message])
+ end
+end
diff --git a/config/routes.rb b/config/routes.rb
index d36540024aa..c4df4283cba 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -109,6 +109,8 @@ Gitlab::Application.routes.draw do
end
end
+ resource :application_settings, only: [:show, :update]
+
root to: "dashboard#index"
end
diff --git a/db/migrate/20150108073740_create_application_settings.rb b/db/migrate/20150108073740_create_application_settings.rb
new file mode 100644
index 00000000000..651e35fdf7a
--- /dev/null
+++ b/db/migrate/20150108073740_create_application_settings.rb
@@ -0,0 +1,13 @@
+class CreateApplicationSettings < ActiveRecord::Migration
+ def change
+ create_table :application_settings do |t|
+ t.integer :default_projects_limit
+ t.boolean :signup_enabled
+ t.boolean :signin_enabled
+ t.boolean :gravatar_enabled
+ t.text :sign_in_text
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index cb945e71665..6cdff168742 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,11 +11,21 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20141226080412) do
+ActiveRecord::Schema.define(version: 20150108073740) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
+ create_table "application_settings", force: true do |t|
+ t.integer "default_projects_limit"
+ t.boolean "signup_enabled"
+ t.boolean "signin_enabled"
+ t.boolean "gravatar_enabled"
+ t.text "sign_in_text"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
create_table "broadcast_messages", force: true do |t|
t.text "message", null: false
t.datetime "starts_at"
diff --git a/doc/release/howto_rc1.md b/doc/release/howto_rc1.md
new file mode 100644
index 00000000000..2bfc23951ec
--- /dev/null
+++ b/doc/release/howto_rc1.md
@@ -0,0 +1,126 @@
+# How to create RC1
+
+The RC1 release comes with the task to update the installation and upgrade docs. Be mindful that there might already be merge requests for this on GitLab or GitHub.
+
+### **1. Update the installation guide**
+
+1. Check if it references the correct branch `x-x-stable` (doesn't exist yet, but that is okay)
+1. Check the [GitLab Shell version](/lib/tasks/gitlab/check.rake#L782)
+1. Check the [Git version](/lib/tasks/gitlab/check.rake#L794)
+1. There might be other changes. Ask around.
+
+### **2. Create update guides**
+
+1. Create: CE update guide from previous version. Like `7.3-to-7.4.md`
+1. Create: CE to EE update guide in EE repository for latest version.
+1. Update: `6.x-or-7.x-to-7.x.md` to latest version.
+1. Create: CI update guide from previous version
+
+It's best to copy paste the previous guide and make changes where necessary.
+The typical steps are listed below with any points you should specifically look at.
+
+#### 0. Any major changes?
+
+List any major changes here, so the user is aware of them before starting to upgrade. For instance:
+
+- Database updates
+- Web server changes
+- File structure changes
+
+#### 1. Stop server
+
+#### 2. Make backup
+
+#### 3. Do users need to update dependencies like `git`?
+
+- Check if the [GitLab Shell version](/lib/tasks/gitlab/check.rake#L782) changed since the last release.
+
+- Check if the [Git version](/lib/tasks/gitlab/check.rake#L794) changed since the last release.
+
+#### 4. Get latest code
+
+#### 5. Does GitLab shell need to be updated?
+
+#### 6. Install libs, migrations, etc.
+
+#### 7. Any config files updated since last release?
+
+Check if any of these changed since last release:
+
+- [lib/support/nginx/gitlab](/lib/support/nginx/gitlab)
+- [lib/support/nginx/gitlab-ssl](/lib/support/nginx/gitlab-ssl)
+- <https://gitlab.com/gitlab-org/gitlab-shell/commits/master/config.yml.example>
+- [config/gitlab.yml.example](/config/gitlab.yml.example)
+- [config/unicorn.rb.example](/config/unicorn.rb.example)
+- [config/database.yml.mysql](/config/database.yml.mysql)
+- [config/database.yml.postgresql](/config/database.yml.postgresql)
+- [config/initializers/rack_attack.rb.example](/config/initializers/rack_attack.rb.example)
+- [config/resque.yml.example](/config/resque.yml.example)
+
+#### 8. Need to update init script?
+
+Check if the `init.d/gitlab` script changed since last release: [lib/support/init.d/gitlab](/lib/support/init.d/gitlab)
+
+#### 9. Start application
+
+#### 10. Check application status
+
+### **3. Code quality indicators**
+
+Make sure the code quality indicators are green / good.
+
+- [![Build status](http://ci.gitlab.org/projects/1/status.png?ref=master)](http://ci.gitlab.org/projects/1?ref=master) on ci.gitlab.org (master branch)
+
+- [![Build Status](https://semaphoreapp.com/api/v1/projects/2f1a5809-418b-4cc2-a1f4-819607579fe7/243338/badge.png)](https://semaphoreapp.com/gitlabhq/gitlabhq) (master branch)
+
+- [![Code Climate](https://codeclimate.com/github/gitlabhq/gitlabhq.png)](https://codeclimate.com/github/gitlabhq/gitlabhq)
+
+- [![Dependency Status](https://gemnasium.com/gitlabhq/gitlabhq.png)](https://gemnasium.com/gitlabhq/gitlabhq) this button can be yellow (small updates are available) but must not be red (a security fix or an important update is available)
+
+- [![Coverage Status](https://coveralls.io/repos/gitlabhq/gitlabhq/badge.png?branch=master)](https://coveralls.io/r/gitlabhq/gitlabhq)
+
+### 4. Run release tool for CE and EE
+
+**Make sure EE `master` has latest changes from CE `master`**
+
+Get release tools
+
+```
+git clone git@dev.gitlab.org:gitlab/release-tools.git
+cd release-tools
+```
+
+Release candidate creates stable branch from master.
+So we need to sync master branch between all CE remotes. Also do same for EE.
+
+```
+bundle exec rake sync
+```
+
+Create release candidate and stable branch:
+
+```
+bundle exec rake release["x.x.0.rc1"]
+```
+
+Now developers can use master for merging new features.
+So you should use stable branch for future code chages related to release.
+
+
+### 5. Release GitLab CI RC1
+
+Add to your local `gitlab-ci/.git/config`:
+
+```
+[remote "public"]
+ url = none
+ pushurl = git@dev.gitlab.org:gitlab/gitlab-ci.git
+ pushurl = git@gitlab.com:gitlab-org/gitlab-ci.git
+ pushurl = git@github.com:gitlabhq/gitlab-ci.git
+```
+
+* Create a stable branch `x-y-stable`
+* Bump VERSION to `x.y.0.rc1`
+* `git tag -a v$(cat VERSION) -m "Version $(cat VERSION)"
+* `git push public x-y-stable v$(cat VERSION)`
+
diff --git a/doc/release/monthly.md b/doc/release/monthly.md
index b31fd885404..c0f66964a9a 100644
--- a/doc/release/monthly.md
+++ b/doc/release/monthly.md
@@ -2,209 +2,112 @@
NOTE: This is a guide for GitLab developers.
-# **7 workdays before release - Code Freeze & Release Manager**
+It starts 7 days before release. Current release manager must choose next release manager.
+New release manager should create overall issue at GitLab
-### **1. Stop merging in code, except for important bug fixes**
-### **2. Release Manager**
+## Release Manager
A release manager is selected that coordinates all releases the coming month, including the patch releases for previous releases.
The release manager has to make sure all the steps below are done and delegated where necessary.
This person should also make sure this document is kept up to date and issues are created and updated.
-### **3. Create an overall issue**
+## Take weekend and vacations into account
+
+The time is measured in weekdays to compensate for weekends.
+Do things on time to prevent problems due to rush jobs or too little testing time.
+Make sure that you take into account vacations of maintainers.
+
+## Create an overall issue and follow it
Create issue for GitLab CE project(internal). Name it "Release x.x.x" for easier searching.
Replace the dates with actual dates based on the number of workdays before the release.
+All steps from issue template are explained below
```
-Xth:
+Xth: (7 working days before 22th)
+- [ ] Code freeze
- [ ] Update the CE changelog (#LINK)
- [ ] Update the EE changelog (#LINK)
- [ ] Update the CI changelog (#LINK)
- [ ] Triage the omnibus-gitlab milestone
-Xth:
-
-- [ ] Merge CE in to EE (#LINK)
-- [ ] Close the omnibus-gitlab milestone
-
-Xth:
-
-- [ ] Create x.x.0.rc1 (#LINK)
-- [ ] Create x.x.0.rc1-ee (#LINK)
-- [ ] Create CI y.y.0.rc1 (#LINK)
-- [ ] Build package for GitLab.com (https://dev.gitlab.org/cookbooks/chef-repo/blob/master/doc/administration.md#build-a-package)
+Xth: (6 working days before 22th)
-Xth:
+- [ ] Merge CE master in to EE master via merge request (#LINK)
+- [ ] Create CE, EE, CI RC1 versions (#LINK)
+- [ ] Determine QA person and notify this person
-- [ ] Update GitLab.com with rc1 (#LINK) (https://dev.gitlab.org/cookbooks/chef-repo/blob/master/doc/administration.md#deploy-the-package)
-- [ ] Regression issues (CE, CI) and tweet about rc1 (#LINK)
-- [ ] Start blog post (#LINK)
-
-Xth:
+Xth: (5 working days before 22th)
- [ ] Do QA and fix anything coming out of it (#LINK)
+- [ ] Close the omnibus-gitlab milestone
-22nd:
-
-- [ ] Release CE, EE and CI (#LINK)
-
-Xth:
-
-- [ ] Deploy to GitLab.com (#LINK)
-
-```
-
-### **4. Update changelog**
-
-Any changes not yet added to the changelog are added by lead developer and in that merge request the complete team is asked if there is anything missing.
-
-There are three changelogs that need to be updated: CE, EE and CI.
-
-### **5. Take weekend and vacations into account**
-
-Ensure that there is enough time to incorporate the findings of the release candidate, etc.
-
-# **6 workdays before release- Merge the CE into EE**
-
-Do this via a merge request.
-
-# **5 workdays before release - Create RC1**
-
-The RC1 release comes with the task to update the installation and upgrade docs. Be mindful that there might already be merge requests for this on GitLab or GitHub.
-
-### **1. Update the installation guide**
-
-1. Check if it references the correct branch `x-x-stable` (doesn't exist yet, but that is okay)
-1. Check the [GitLab Shell version](/lib/tasks/gitlab/check.rake#L782)
-1. Check the [Git version](/lib/tasks/gitlab/check.rake#L794)
-1. There might be other changes. Ask around.
-
-### **2. Create update guides**
-
-1. Create: CE update guide from previous version. Like `7.3-to-7.4.md`
-1. Create: CE to EE update guide in EE repository for latest version.
-1. Update: `6.x-or-7.x-to-7.x.md` to latest version.
-1. Create: CI update guide from previous version
-
-It's best to copy paste the previous guide and make changes where necessary.
-The typical steps are listed below with any points you should specifically look at.
-
-#### 0. Any major changes?
-
-List any major changes here, so the user is aware of them before starting to upgrade. For instance:
-
-- Database updates
-- Web server changes
-- File structure changes
-
-#### 1. Stop server
-
-#### 2. Make backup
-
-#### 3. Do users need to update dependencies like `git`?
-
-- Check if the [GitLab Shell version](/lib/tasks/gitlab/check.rake#L782) changed since the last release.
-
-- Check if the [Git version](/lib/tasks/gitlab/check.rake#L794) changed since the last release.
-
-#### 4. Get latest code
-
-#### 5. Does GitLab shell need to be updated?
-
-#### 6. Install libs, migrations, etc.
-
-#### 7. Any config files updated since last release?
-
-Check if any of these changed since last release:
-
-- [lib/support/nginx/gitlab](/lib/support/nginx/gitlab)
-- [lib/support/nginx/gitlab-ssl](/lib/support/nginx/gitlab-ssl)
-- <https://gitlab.com/gitlab-org/gitlab-shell/commits/master/config.yml.example>
-- [config/gitlab.yml.example](/config/gitlab.yml.example)
-- [config/unicorn.rb.example](/config/unicorn.rb.example)
-- [config/database.yml.mysql](/config/database.yml.mysql)
-- [config/database.yml.postgresql](/config/database.yml.postgresql)
-- [config/initializers/rack_attack.rb.example](/config/initializers/rack_attack.rb.example)
-- [config/resque.yml.example](/config/resque.yml.example)
-
-#### 8. Need to update init script?
-
-Check if the `init.d/gitlab` script changed since last release: [lib/support/init.d/gitlab](/lib/support/init.d/gitlab)
+Xth: (4 working days before 22th)
-#### 9. Start application
+- [ ] Build rc1 package for GitLab.com (https://dev.gitlab.org/cookbooks/chef-repo/blob/master/doc/administration.md#build-a-package)
+- [ ] Update GitLab.com with rc1 (#LINK) (https://dev.gitlab.org/cookbooks/chef-repo/blob/master/doc/administration.md#deploy-the-package)
-#### 10. Check application status
+Xth: (3 working days before 22th)
-### **3. Code quality indicators**
+- [ ] Create regression issues (CE, CI) (#LINK)
+- [ ] Tweet about rc1 (#LINK)
+- [ ] Prepare the blog post (#LINK)
-Make sure the code quality indicators are green / good.
-- [![Build status](http://ci.gitlab.org/projects/1/status.png?ref=master)](http://ci.gitlab.org/projects/1?ref=master) on ci.gitlab.org (master branch)
+Xth: (2 working days before 22th)
-- [![Build Status](https://semaphoreapp.com/api/v1/projects/2f1a5809-418b-4cc2-a1f4-819607579fe7/243338/badge.png)](https://semaphoreapp.com/gitlabhq/gitlabhq) (master branch)
+- [ ] Merge CE stable branch into EE stable branch
+- [ ] Check that everyone is mentioned on the blog post (the reviewer should have done this one working day ago)
-- [![Code Climate](https://codeclimate.com/github/gitlabhq/gitlabhq.png)](https://codeclimate.com/github/gitlabhq/gitlabhq)
+Xth: (1 working day before 22th)
-- [![Dependency Status](https://gemnasium.com/gitlabhq/gitlabhq.png)](https://gemnasium.com/gitlabhq/gitlabhq) this button can be yellow (small updates are available) but must not be red (a security fix or an important update is available)
+- [ ] Create CE, EE, CI stable versions (#LINK)
+- [ ] Create Omnibus tags and build packages
-- [![Coverage Status](https://coveralls.io/repos/gitlabhq/gitlabhq/badge.png?branch=master)](https://coveralls.io/r/gitlabhq/gitlabhq)
+22nd:
-### **4. Run release tool**
+- [ ] Release CE, EE and CI (#LINK)
-**Make sure EE `master` has latest changes from CE `master`**
+Xth: (1 working day after 22th)
-Get release tools
+- [ ] Deploy to GitLab.com (#LINK)
```
-git clone git@dev.gitlab.org:gitlab/release-tools.git
-cd release-tools
-```
-Release candidate creates stable branch from master.
-So we need to sync master branch between all CE remotes. Also do same for EE.
+- - -
-```
-bundle exec rake sync
-```
+## Code Freeze
-Create release candidate and stable branch:
+Stop merging code in master, except for important bug fixes
-```
-bundle exec rake release["x.x.0.rc1"]
-```
+## Update changelog
+
+Any changes not yet added to the changelog are added by lead developer and in that merge request the complete team is asked if there is anything missing.
-Now developers can use master for merging new features.
-So you should use stable branch for future code chages related to release.
+There are three changelogs that need to be updated: CE, EE and CI.
+## Create RC1 (CE, EE, CI)
-### 5. Release GitLab CI RC1
+[Follow this How-to guide](howto_rc1.md) to create RC1.
-Add to your local `gitlab-ci/.git/config`:
+## QA
-```
-[remote "public"]
- url = none
- pushurl = git@dev.gitlab.org:gitlab/gitlab-ci.git
- pushurl = git@gitlab.com:gitlab-org/gitlab-ci.git
- pushurl = git@github.com:gitlabhq/gitlab-ci.git
-```
+Create issue on dev.gitlab.org `gitlab` repository, named "GitLab X.X QA" in order to keep track of the progress.
-* Create a stable branch `x-y-stable`
-* Bump VERSION to `x.y.0.rc1`
-* `git tag -a v$(cat VERSION) -m "Version $(cat VERSION)"
-* `git push public x-y-stable v$(cat VERSION)`
+Use the omnibus packages of Enterprise Edition using [this guide](https://dev.gitlab.org/gitlab/gitlab-ee/blob/master/doc/release/manual_testing.md).
+**NOTE** Upgrader can only be tested when tags are pushed to all repositories. Do not forget to confirm it is working before releasing. Note that in the issue.
-# **4 workdays before release - Release RC1**
+#### Fix anything coming out of the QA
-### **1. Determine QA person**
+Create an issue with description of a problem, if it is quick fix fix it yourself otherwise contact the team for advice.
-Notify person of QA day.
+**NOTE** If there is a problem that cannot be fixed in a timely manner, reverting the feature is an option! If the feature is reverted,
+create an issue about it in order to discuss the next steps after the release.
-### **2. Update GitLab.com**
+## Update GitLab.com with RC1
Merge the RC1 EE code into GitLab.com.
Once the build is green, create a package.
@@ -212,23 +115,7 @@ If there are big database migrations consider testing them with the production d
Try to deploy in the morning.
It is important to do this as soon as possible, so we can catch any errors before we release the full version.
-### **3. Prepare the blog post**
-
-- Start with a complete copy of the [release blog template](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/doc/release_blog_template.md) and fill it out.
-- Make sure the blog post contains information about the GitLab CI release.
-- Check the changelog of CE and EE for important changes.
-- Also check the CI changelog
-- Add a proposed tweet text to the blog post WIP MR description.
-- Create a WIP MR for the blog post
-- Ask Dmitriy to add screenshots to the WIP MR.
-- Decide with team who will be the MVP user.
-- Create WIP MR for adding MVP to MVP page on website
-- Add a note if there are security fixes: This release fixes an important security issue and we advise everyone to upgrade as soon as possible.
-- Create a merge request on [GitLab.com](https://gitlab.com/gitlab-com/www-gitlab-com/tree/master)
-- Assign to one reviewer who will fix spelling issues by editing the branch (either with a git client or by using the online editor)
-- Comment to the reviewer: '@person Please mention the whole team as soon as you are done (3 workdays before release at the latest)'
-
-### **4. Create a regressions issue**
+## Create a regressions issue
On [the GitLab CE issue tracker on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/issues/) create an issue titled "GitLab X.X regressions" add the following text:
@@ -239,43 +126,29 @@ The release manager will comment here about the plans for patch releases.
Assign the issue to the release manager and /cc all the core-team members active on the issue tracker. If there are any known bugs in the release add them immediately.
-### **5. Tweet**
+## Tweet about RC1
Tweet about the RC release:
> GitLab x.x.0.rc1 is out. This release candidate is only suitable for testing. Please link regressions issues from LINK_TO_REGRESSION_ISSUE
-# **1 workdays before release - Preparation**
-
-### **0. Doublecheck blog post**
-
-Doublecheck the everyone has been mentioned in the blog post.
-
-### **1. Pre QA merge**
-
-Merge CE into EE before doing the QA.
-
-### **2. QA**
-
-Create issue on dev.gitlab.org `gitlab` repository, named "GitLab X.X QA" in order to keep track of the progress.
-
-Use the omnibus packages of Enterprise Edition using [this guide](https://dev.gitlab.org/gitlab/gitlab-ee/blob/master/doc/release/manual_testing.md).
-
-**NOTE** Upgrader can only be tested when tags are pushed to all repositories. Do not forget to confirm it is working before releasing. Note that in the issue.
-
-### **3. Fix anything coming out of the QA**
-
-Create an issue with description of a problem, if it is quick fix fix it yourself otherwise contact the team for advice.
-
-**NOTE** If there is a problem that cannot be fixed in a timely manner, reverting the feature is an option! If the feature is reverted,
-create an issue about it in order to discuss the next steps after the release.
-
-# **Workday before release - Create Omnibus tags and build packages**
+## Prepare the blog post
-**Make sure EE `x-x-stable-ee` has latest changes from CE `x-x-stable`**
+1. Start with a complete copy of the [release blog template](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/doc/release_blog_template.md) and fill it out.
+1. Make sure the blog post contains information about the GitLab CI release.
+1. Check the changelog of CE and EE for important changes.
+1. Also check the CI changelog
+1. Add a proposed tweet text to the blog post WIP MR description.
+1. Create a WIP MR for the blog post
+1. Ask Dmitriy to add screenshots to the WIP MR.
+1. Decide with team who will be the MVP user.
+1. Create WIP MR for adding MVP to MVP page on website
+1. Add a note if there are security fixes: This release fixes an important security issue and we advise everyone to upgrade as soon as possible.
+1. Create a merge request on [GitLab.com](https://gitlab.com/gitlab-com/www-gitlab-com/tree/master)
+1. Assign to one reviewer who will fix spelling issues by editing the branch (either with a git client or by using the online editor)
+1. Comment to the reviewer: '@person Please mention the whole team as soon as you are done (3 workdays before release at the latest)'
-
-### **1. Release code**
+## Create CE, EE, CI stable versions
Get release tools
@@ -292,32 +165,31 @@ bundle exec rake release["x.x.0"]
Also perform these steps for GitLab CI:
-- bump version in the stable branch
-- create annotated tag
-- push the stable branch and the annotated tag to the public repositories
-
-### **2. Update installation.md**
+1. bump version in the stable branch
+1. create annotated tag
+1. push the stable branch and the annotated tag to the public repositories
Update [installation.md](/doc/install/installation.md) to the newest version in master.
-### **3. Build the Omnibus packages**
+## Create Omnibus tags and build packages
Follow the [release doc in the Omnibus repository](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/release.md).
This can happen before tagging because Omnibus uses tags in its own repo and SHA1's to refer to the GitLab codebase.
-# **22nd - Release CE, EE and CI**
+## Release CE, EE and CI
-### **1. Publish packages for new release**
+__1. Publish packages for new release__
Update `downloads/index.html` and `downloads/archive/index.html` in `www-gitlab-com` repository.
-### **2. Publish blog for new release**
+__2. Publish blog for new release__
+Doublecheck the everyone has been mentioned in the blog post.
Merge the [blog merge request](#1-prepare-the-blog-post) in `www-gitlab-com` repository.
-### **3. Tweet to blog**
+__3. Tweet to blog__
Send out a tweet to share the good news with the world.
List the most important features and link to the blog post.
@@ -326,7 +198,6 @@ Proposed tweet "Release of GitLab X.X & CI Y.Y! FEATURE, FEATURE and FEATURE <li
Consider creating a post on Hacker News.
-# **1 workday after release - Update GitLab.com**
+## Update GitLab.com with stable version
-- Build a package for gitlab.com based on the official release instead of RC1
- Deploy the package (should not need downtime because of the small difference with RC1)
diff --git a/features/admin/settings.feature b/features/admin/settings.feature
new file mode 100644
index 00000000000..8799c053ea2
--- /dev/null
+++ b/features/admin/settings.feature
@@ -0,0 +1,9 @@
+@admin
+Feature: Admin Settings
+ Background:
+ Given I sign in as an admin
+ And I visit admin settings page
+
+ Scenario: Change application settings
+ When I disable gravatars and save form
+ Then I should be see gravatar disabled
diff --git a/features/steps/admin/settings.rb b/features/steps/admin/settings.rb
new file mode 100644
index 00000000000..e8168e85def
--- /dev/null
+++ b/features/steps/admin/settings.rb
@@ -0,0 +1,16 @@
+class Spinach::Features::AdminSettings < Spinach::FeatureSteps
+ include SharedAuthentication
+ include SharedPaths
+ include SharedAdmin
+ include Gitlab::CurrentSettings
+
+ step 'I disable gravatars and save form' do
+ uncheck 'Gravatar enabled'
+ click_button 'Save'
+ end
+
+ step 'I should be see gravatar disabled' do
+ current_application_settings.gravatar_enabled.should be_false
+ page.should have_content 'Application settings saved successfully'
+ end
+end
diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb
index e657fceb704..689b297dffc 100644
--- a/features/steps/shared/paths.rb
+++ b/features/steps/shared/paths.rb
@@ -167,6 +167,10 @@ module SharedPaths
visit admin_teams_path
end
+ step 'I visit admin settings page' do
+ visit admin_application_settings_path
+ end
+
# ----------------------------------------
# Generic Project
# ----------------------------------------
diff --git a/lib/gitlab/current_settings.rb b/lib/gitlab/current_settings.rb
new file mode 100644
index 00000000000..5d88a601dea
--- /dev/null
+++ b/lib/gitlab/current_settings.rb
@@ -0,0 +1,26 @@
+module Gitlab
+ module CurrentSettings
+ def current_application_settings
+ begin
+ if ActiveRecord::Base.connection.table_exists?('application_settings')
+ ApplicationSetting.current ||
+ ApplicationSetting.create_from_defaults
+ else
+ fake_application_settings
+ end
+ rescue ActiveRecord::NoDatabaseError
+ fake_application_settings
+ end
+ end
+
+ def fake_application_settings
+ OpenStruct.new(
+ default_projects_limit: Settings.gitlab['default_projects_limit'],
+ signup_enabled: Settings.gitlab['signup_enabled'],
+ signin_enabled: Settings.gitlab['signin_enabled'],
+ gravatar_enabled: Settings.gravatar['enabled'],
+ sign_in_text: Settings.extra['sign_in_text'],
+ )
+ end
+ end
+end
diff --git a/lib/gitlab/popen.rb b/lib/gitlab/popen.rb
index e2fbafb3899..fea4d2d55d2 100644
--- a/lib/gitlab/popen.rb
+++ b/lib/gitlab/popen.rb
@@ -21,6 +21,9 @@ module Gitlab
@cmd_output = ""
@cmd_status = 0
Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|
+ # We are not using stdin so we should close it, in case the command we
+ # are running waits for input.
+ stdin.close
@cmd_output << stdout.read
@cmd_output << stderr.read
@cmd_status = wait_thr.value.exitstatus
diff --git a/spec/features/profile_spec.rb b/spec/features/profile_spec.rb
index bdf7b59114b..4a76e89fd34 100644
--- a/spec/features/profile_spec.rb
+++ b/spec/features/profile_spec.rb
@@ -9,7 +9,7 @@ describe "Profile account page", feature: true do
describe "when signup is enabled" do
before do
- Gitlab.config.gitlab.stub(:signup_enabled).and_return(true)
+ ApplicationSetting.any_instance.stub(signup_enabled?: true)
visit profile_account_path
end
@@ -23,7 +23,7 @@ describe "Profile account page", feature: true do
describe "when signup is disabled" do
before do
- Gitlab.config.gitlab.stub(:signup_enabled).and_return(false)
+ ApplicationSetting.any_instance.stub(signup_enabled?: false)
visit profile_account_path
end
diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb
index a1206989d39..e2b631001c9 100644
--- a/spec/features/users_spec.rb
+++ b/spec/features/users_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe 'Users', feature: true do
describe "GET /users/sign_up" do
before do
- Gitlab.config.gitlab.stub(:signup_enabled).and_return(true)
+ ApplicationSetting.any_instance.stub(signup_enabled?: true)
end
it "should create a new user account" do
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 07dd33b211b..9cdbc846b19 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -87,7 +87,7 @@ describe ApplicationHelper do
let(:user_email) { 'user@email.com' }
it "should return a generic avatar path when Gravatar is disabled" do
- Gitlab.config.gravatar.stub(:enabled).and_return(false)
+ ApplicationSetting.any_instance.stub(gravatar_enabled?: false)
gravatar_icon(user_email).should match('no_avatar.png')
end
diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb
new file mode 100644
index 00000000000..039775dddda
--- /dev/null
+++ b/spec/models/application_setting_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe ApplicationSetting, models: true do
+ it { ApplicationSetting.create_from_defaults.should be_valid }
+end
diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb
index 1ecc79ea7ef..dec488c6d00 100644
--- a/spec/requests/api/users_spec.rb
+++ b/spec/requests/api/users_spec.rb
@@ -186,7 +186,7 @@ describe API::API, api: true do
describe "GET /users/sign_up" do
context 'enabled' do
before do
- Gitlab.config.gitlab.stub(:signup_enabled).and_return(true)
+ ApplicationSetting.any_instance.stub(signup_enabled?: true)
end
it "should return sign up page if signup is enabled" do
@@ -197,7 +197,7 @@ describe API::API, api: true do
context 'disabled' do
before do
- Gitlab.config.gitlab.stub(:signup_enabled).and_return(false)
+ ApplicationSetting.any_instance.stub(signup_enabled?: false)
end
it "should redirect to sign in page if signup is disabled" do