mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-09 04:36:11 +10:00
Merge branch 'master' of dev.gitlab.org:gitlab/gitlabhq into prose-requirement
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -1,48 +1,66 @@
|
||||
/* Login Page */
|
||||
.login-page {
|
||||
h1 {
|
||||
font-size: 3em;
|
||||
font-weight: 200;
|
||||
.container {
|
||||
max-width: 960px;
|
||||
}
|
||||
|
||||
.navbar-gitlab .container {
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.brand-holder {
|
||||
font-size: 18px;
|
||||
line-height: 1.5;
|
||||
|
||||
p {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
h1:first-child {
|
||||
font-weight: normal;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.login-box{
|
||||
padding: 0 15px;
|
||||
background: #fafafa;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 0px 2px #CCC;
|
||||
padding: 15px;
|
||||
|
||||
.login-heading h3 {
|
||||
font-weight: 300;
|
||||
line-height: 2;
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.login-footer {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: 12px !important;
|
||||
@extend .btn-block;
|
||||
}
|
||||
}
|
||||
|
||||
.brand-image {
|
||||
img {
|
||||
max-width: 100%;
|
||||
margin-bottom: 20px;
|
||||
a.forgot {
|
||||
float: right;
|
||||
padding-top: 6px
|
||||
}
|
||||
|
||||
&.default-brand-image {
|
||||
margin: 0 80px;
|
||||
.nav .active a {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.login-logo {
|
||||
margin: 10px 0 30px 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -14,6 +14,6 @@ module ProfileHelper
|
||||
end
|
||||
|
||||
def show_profile_remove_tab?
|
||||
gitlab_config.signup_enabled
|
||||
signup_enabled?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -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
|
||||
+3
-2
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'
|
||||
@@ -0,0 +1,3 @@
|
||||
%h3.page-title Application settings
|
||||
%hr
|
||||
= render 'form'
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
+2
-2
@@ -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:
|
||||
.login-box{:'data-no-turbolink' => 'data-no-turbolink'}
|
||||
%span Sign in with
|
||||
- providers.each do |provider|
|
||||
%span
|
||||
- if default_providers.include?(provider)
|
||||
@@ -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.
|
||||
@@ -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"
|
||||
@@ -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'
|
||||
|
||||
@@ -1,36 +1,33 @@
|
||||
!!! 5
|
||||
%html{ lang: "en"}
|
||||
= render "layouts/head"
|
||||
%body.ui_basic.login-page
|
||||
.container
|
||||
%body.ui_mars.login-page.application
|
||||
= render "layouts/broadcast"
|
||||
= render "layouts/public_head_panel", title: ''
|
||||
.container.navless-container
|
||||
.content
|
||||
.login-title
|
||||
%h1= brand_title
|
||||
= render 'shared/outdated_browser'
|
||||
%hr
|
||||
.container
|
||||
.content
|
||||
= render "layouts/flash"
|
||||
.row
|
||||
.col-md-7.brand-holder
|
||||
- if brand_item
|
||||
.brand-image
|
||||
= brand_image
|
||||
.brand_text
|
||||
= 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
|
||||
|
||||
%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.
|
||||
|
||||
.col-md-5
|
||||
- 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_text
|
||||
- else
|
||||
%h3 Open source software to collaborate on code
|
||||
|
||||
%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)
|
||||
|
||||
%hr
|
||||
.container
|
||||
.footer-links
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
-if @status
|
||||
:plain
|
||||
location.reload();
|
||||
merge_request.mergeInProgress();
|
||||
-else
|
||||
:plain
|
||||
merge_request.alreadyOrCannotBeMerged()
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -109,6 +109,8 @@ Gitlab::Application.routes.draw do
|
||||
end
|
||||
end
|
||||
|
||||
resource :application_settings, only: [:show, :update]
|
||||
|
||||
root to: "dashboard#index"
|
||||
end
|
||||
|
||||
|
||||
@@ -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
|
||||
+11
-1
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
- [](http://ci.gitlab.org/projects/1?ref=master) on ci.gitlab.org (master branch)
|
||||
|
||||
- [](https://semaphoreapp.com/gitlabhq/gitlabhq) (master branch)
|
||||
|
||||
- [](https://codeclimate.com/github/gitlabhq/gitlabhq)
|
||||
|
||||
- [](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)
|
||||
|
||||
- [](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)`
|
||||
|
||||
+87
-216
@@ -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:
|
||||
Xth: (6 working days before 22th)
|
||||
|
||||
- [ ] Merge CE in to EE (#LINK)
|
||||
- [ ] Close the omnibus-gitlab milestone
|
||||
- [ ] 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
|
||||
|
||||
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:
|
||||
|
||||
- [ ] 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
|
||||
|
||||
Xth: (4 working days before 22th)
|
||||
|
||||
- [ ] 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)
|
||||
|
||||
Xth: (3 working days before 22th)
|
||||
|
||||
- [ ] Create regression issues (CE, CI) (#LINK)
|
||||
- [ ] Tweet about rc1 (#LINK)
|
||||
- [ ] Prepare the blog post (#LINK)
|
||||
|
||||
|
||||
Xth: (2 working days before 22th)
|
||||
|
||||
- [ ] 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)
|
||||
|
||||
Xth: (1 working day before 22th)
|
||||
|
||||
- [ ] Create CE, EE, CI stable versions (#LINK)
|
||||
- [ ] Create Omnibus tags and build packages
|
||||
|
||||
22nd:
|
||||
|
||||
- [ ] Release CE, EE and CI (#LINK)
|
||||
|
||||
Xth:
|
||||
Xth: (1 working day after 22th)
|
||||
|
||||
- [ ] Deploy to GitLab.com (#LINK)
|
||||
|
||||
```
|
||||
|
||||
### **4. Update changelog**
|
||||
- - -
|
||||
|
||||
## Code Freeze
|
||||
|
||||
Stop merging code in master, except for important bug fixes
|
||||
|
||||
## 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**
|
||||
## Create RC1 (CE, EE, CI)
|
||||
|
||||
Ensure that there is enough time to incorporate the findings of the release candidate, etc.
|
||||
[Follow this How-to guide](howto_rc1.md) to create RC1.
|
||||
|
||||
# **6 workdays before release- Merge the CE into EE**
|
||||
## QA
|
||||
|
||||
Do this via a merge request.
|
||||
Create issue on dev.gitlab.org `gitlab` repository, named "GitLab X.X QA" in order to keep track of the progress.
|
||||
|
||||
# **5 workdays before release - Create RC1**
|
||||
Use the omnibus packages of Enterprise Edition using [this guide](https://dev.gitlab.org/gitlab/gitlab-ee/blob/master/doc/release/manual_testing.md).
|
||||
|
||||
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.
|
||||
**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.
|
||||
|
||||
### **1. Update the installation guide**
|
||||
#### Fix anything coming out of the QA
|
||||
|
||||
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.
|
||||
Create an issue with description of a problem, if it is quick fix fix it yourself otherwise contact the team for advice.
|
||||
|
||||
### **2. Create update guides**
|
||||
**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.
|
||||
|
||||
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.
|
||||
|
||||
- [](http://ci.gitlab.org/projects/1?ref=master) on ci.gitlab.org (master branch)
|
||||
|
||||
- [](https://semaphoreapp.com/gitlabhq/gitlabhq) (master branch)
|
||||
|
||||
- [](https://codeclimate.com/github/gitlabhq/gitlabhq)
|
||||
|
||||
- [](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)
|
||||
|
||||
- [](https://coveralls.io/r/gitlabhq/gitlabhq)
|
||||
|
||||
### **4. Run release tool**
|
||||
|
||||
**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)`
|
||||
|
||||
|
||||
# **4 workdays before release - Release RC1**
|
||||
|
||||
### **1. Determine QA person**
|
||||
|
||||
Notify person of QA day.
|
||||
|
||||
### **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**
|
||||
## Prepare the blog post
|
||||
|
||||
### **0. Doublecheck blog post**
|
||||
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)'
|
||||
|
||||
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**
|
||||
|
||||
**Make sure EE `x-x-stable-ee` has latest changes from CE `x-x-stable`**
|
||||
|
||||
|
||||
### **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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
# ----------------------------------------
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe ApplicationSetting, models: true do
|
||||
it { ApplicationSetting.create_from_defaults.should be_valid }
|
||||
end
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user