Commit a08e3c67 authored by Yorick Peterse's avatar Yorick Peterse

Merge branch 'master' into 8-8-stable

parents c2254499 e4a1af83
...@@ -45,7 +45,7 @@ v 8.8.0 (unreleased) ...@@ -45,7 +45,7 @@ v 8.8.0 (unreleased)
- Add support for supressing text diffs using .gitattributes on the default branch (Matt Oakes) - Add support for supressing text diffs using .gitattributes on the default branch (Matt Oakes)
- Add eager load paths to help prevent dependency load issues in Sidekiq workers. !3724 - Add eager load paths to help prevent dependency load issues in Sidekiq workers. !3724
- Added multiple colors for labels in dropdowns when dups happen. - Added multiple colors for labels in dropdowns when dups happen.
- Always group commits by server timezone, not commit timestamp - Show commits in the same order as `git log`
- Improve description for the Two-factor Authentication sign-in screen. (Connor Shea) - Improve description for the Two-factor Authentication sign-in screen. (Connor Shea)
- API support for the 'since' and 'until' operators on commit requests (Paco Guzman) - API support for the 'since' and 'until' operators on commit requests (Paco Guzman)
- Fix Gravatar hint in user profile when Gravatar is disabled. !3988 (Artem Sidorenko) - Fix Gravatar hint in user profile when Gravatar is disabled. !3988 (Artem Sidorenko)
......
...@@ -12,7 +12,7 @@ $gutter_inner_width: 258px; ...@@ -12,7 +12,7 @@ $gutter_inner_width: 258px;
*/ */
$border-color: #e5e5e5; $border-color: #e5e5e5;
$focus-border-color: #3aabf0; $focus-border-color: #3aabf0;
$table-border-color: #ececec; $table-border-color: #f0f0f0;
$background-color: #fafafa; $background-color: #fafafa;
/* /*
......
...@@ -3,20 +3,44 @@ class Projects::VariablesController < Projects::ApplicationController ...@@ -3,20 +3,44 @@ class Projects::VariablesController < Projects::ApplicationController
layout 'project_settings' layout 'project_settings'
def index
@variable = Ci::Variable.new
end
def show def show
@variable = @project.variables.find(params[:id])
end end
def update def update
if project.update_attributes(project_params) @variable = @project.variables.find(params[:id])
if @variable.update_attributes(project_params)
redirect_to namespace_project_variables_path(project.namespace, project), notice: 'Variable was successfully updated.'
else
render action: "show"
end
end
def create
@variable = Ci::Variable.new(project_params)
if @variable.valid? && @project.variables << @variable
redirect_to namespace_project_variables_path(project.namespace, project), notice: 'Variables were successfully updated.' redirect_to namespace_project_variables_path(project.namespace, project), notice: 'Variables were successfully updated.'
else else
render action: 'show' render action: "index"
end end
end end
def destroy
@key = @project.variables.find(params[:id])
@key.destroy
redirect_to namespace_project_variables_path(project.namespace, project), notice: 'Variable was successfully removed.'
end
private private
def project_params def project_params
params.require(:project).permit({ variables_attributes: [:id, :key, :value, :_destroy] }) params.require(:variable).permit([:id, :key, :value, :_destroy])
end end
end end
...@@ -98,9 +98,7 @@ class MergeRequestDiff < ActiveRecord::Base ...@@ -98,9 +98,7 @@ class MergeRequestDiff < ActiveRecord::Base
commits = compare.commits commits = compare.commits
if commits.present? if commits.present?
commits = Commit.decorate(commits, merge_request.source_project). commits = Commit.decorate(commits, merge_request.source_project).reverse
sort_by(&:created_at).
reverse
end end
commits commits
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
- commits, hidden = limited_commits(@commits) - commits, hidden = limited_commits(@commits)
- commits.group_by { |c| c.committed_date.in_time_zone.to_date }.sort.reverse.each do |day, commits| - commits.chunk { |c| c.committed_date.in_time_zone.to_date }.each do |day, commits|
.row.commits-row .row.commits-row
.col-md-2.hidden-xs.hidden-sm .col-md-2.hidden-xs.hidden-sm
%h5.commits-row-date %h5.commits-row-date
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
%ul.well-list %ul.well-list
= render @enabled_keys = render @enabled_keys
- else - else
.profile-settings-message.text-center .settings-message.text-center
No deploy keys found. Create one with the form above or add existing one below. No deploy keys found. Create one with the form above or add existing one below.
%h5.prepend-top-default %h5.prepend-top-default
Deploy keys from projects you have access to (#{@available_project_keys.size}) Deploy keys from projects you have access to (#{@available_project_keys.size})
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
%ul.well-list %ul.well-list
= render @available_project_keys = render @available_project_keys
- else - else
.profile-settings-message.text-center .settings-message.text-center
No deploy keys from your projects could be found. Create one with the form above or add existing one below. No deploy keys from your projects could be found. Create one with the form above or add existing one below.
- if @available_public_keys.any? - if @available_public_keys.any?
%h5.prepend-top-default %h5.prepend-top-default
......
...@@ -80,5 +80,5 @@ ...@@ -80,5 +80,5 @@
- @hooks.each do |hook| - @hooks.each do |hook|
= render "project_hook", hook: hook = render "project_hook", hook: hook
- else - else
%p.profile-settings-message.text-center.append-bottom-0 %p.settings-message.text-center.append-bottom-0
No webhooks found, add one in the form above. No webhooks found, add one in the form above.
%h5.prepend-top-0 %h5.prepend-top-0
Already Protected (#{@branches.size}) Already Protected (#{@branches.size})
- if @branches.empty? - if @branches.empty?
%p.profile-settings-message.text-center %p.settings-message.text-center
No branches are protected, protect a branch with the form above. No branches are protected, protect a branch with the form above.
- else - else
- can_admin_project = can?(current_user, :admin_project, @project) - can_admin_project = can?(current_user, :admin_project, @project)
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
%th %th
= render partial: 'trigger', collection: @triggers, as: :trigger = render partial: 'trigger', collection: @triggers, as: :trigger
- else - else
%p.profile-settings-message.text-center.append-bottom-default %p.settings-message.text-center.append-bottom-default
There are no triggers to use, add one by the button below. There are no triggers to use, add one by the button below.
= form_for @trigger, url: url_for(controller: 'projects/triggers', action: 'create') do |f| = form_for @trigger, url: url_for(controller: 'projects/triggers', action: 'create') do |f|
......
%h4.prepend-top-0
Secret Variables
%p
These variables will be set to environment by the runner.
%p
So you can use them for passwords, secret keys or whatever you want.
%p
The value of the variable can be visible in build log if explicitly asked to do so.
= form_for [@project.namespace.becomes(Namespace), @project, @variable] do |f|
= form_errors(@variable)
.form-group
= f.label :key, "Key", class: "label-light"
= f.text_field :key, class: "form-control", placeholder: "PROJECT_VARIABLE", required: true
.form-group
= f.label :value, "Value", class: "label-light"
= f.text_area :value, class: "form-control", placeholder: "PROJECT_VARIABLE", required: true
= f.submit btn_text, class: "btn btn-save"
.table-responsive.variables-table
%table.table
%colgroup
%col
%col
%col{ width: 100 }
%thead
%th Key
%th Value
%th
%tbody
- @project.variables.each do |variable|
- if variable.id?
%tr
%td= variable.key
%td= variable.value
%td
= link_to namespace_project_variable_path(@project.namespace, @project, variable), class: "btn btn-transparent btn-variable-edit" do
%span.sr-only
Update
= icon("pencil")
= link_to namespace_project_variable_path(@project.namespace, @project, variable), class: "btn btn-transparent btn-variable-delete", method: :delete, data: { confirm: "Are you sure?" } do
%span.sr-only
Remove
= icon("trash")
- page_title "Variables"
.row.prepend-top-default.append-bottom-default
.col-lg-3
= render "content"
.col-lg-9
%h5.prepend-top-0
Add a variable
= render "form", btn_text: "Add new variable"
%hr
%h5.prepend-top-0
Your variables (#{@project.variables.size})
- if @project.variables.empty?
%p.settings-message.text-center.append-bottom-0
No variables found, add one with the form above.
- else
= render "table"
- page_title "Variables" - page_title "Variables"
%h3.page-title
Secret Variables
%p.light .row.prepend-top-default.append-bottom-default
These variables will be set to environment by the runner. .col-lg-3
%br = render "content"
So you can use them for passwords, secret keys or whatever you want. .col-lg-9
%br %h5.prepend-top-0
The value of the variable can be visible in build log if explicitly asked to do so. Update variable
= render "form", btn_text: "Save variable"
%hr
= nested_form_for @project, url: url_for(controller: 'projects/variables', action: 'update'), html: { class: 'form-horizontal' } do |f|
= form_errors(@project)
= f.fields_for :variables do |variable_form|
.form-group
= variable_form.label :key, 'Key', class: 'control-label'
.col-sm-10
= variable_form.text_field :key, class: 'form-control', placeholder: "PROJECT_VARIABLE"
.form-group
= variable_form.label :value, 'Value', class: 'control-label'
.col-sm-10
= variable_form.text_area :value, class: 'form-control', rows: 2, placeholder: ""
= variable_form.link_to_remove "Remove this variable", class: 'btn btn-danger pull-right prepend-top-10'
%hr
%p
.clearfix
= f.link_to_add "Add a variable", :variables, class: 'btn btn-success pull-right'
.form-actions
= f.submit 'Save changes', class: 'btn btn-save', return_to: request.original_url
...@@ -663,7 +663,7 @@ Rails.application.routes.draw do ...@@ -663,7 +663,7 @@ Rails.application.routes.draw do
end end
resources :protected_branches, only: [:index, :create, :update, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex } resources :protected_branches, only: [:index, :create, :update, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }
resource :variables, only: [:show, :update] resources :variables, only: [:index, :show, :update, :create, :destroy]
resources :triggers, only: [:index, :create, :destroy] resources :triggers, only: [:index, :create, :destroy]
resources :builds, only: [:index, :show], constraints: { id: /\d+/ } do resources :builds, only: [:index, :show], constraints: { id: /\d+/ } do
......
require 'spec_helper' require 'spec_helper'
describe "Variables" do describe 'Project variables', js: true do
let(:user) { create(:user) } let(:user) { create(:user) }
before { login_as(user) } let(:project) { create(:project) }
let(:variable) { create(:ci_variable, key: 'test') }
describe "specific runners" do
before do before do
@project = FactoryGirl.create :empty_project login_as(user)
@project.team << [user, :master] project.team << [user, :master]
project.variables << variable
visit namespace_project_variables_path(project.namespace, project)
end
it 'should show list of variables' do
page.within('.variables-table') do
expect(page).to have_content(variable.key)
end
end
it 'should add new variable' do
fill_in('variable_key', with: 'key')
fill_in('variable_value', with: 'key value')
click_button('Add new variable')
page.within('.variables-table') do
expect(page).to have_content('key')
end
end
it 'should delete variable' do
page.within('.variables-table') do
find('.btn-variable-delete').click
end
expect(page).to_not have_selector('variables-table')
end
it 'should edit variable' do
page.within('.variables-table') do
find('.btn-variable-edit').click
end end
it "creates variable", js: true do fill_in('variable_key', with: 'key')
visit namespace_project_variables_path(@project.namespace, @project) fill_in('variable_value', with: 'key value')
click_on "Add a variable" click_button('Save variable')
fill_in "Key", with: "SECRET_KEY"
fill_in "Value", with: "SECRET_VALUE"
click_on "Save changes"
expect(page).to have_content("Variables were successfully updated.") page.within('.variables-table') do
expect(@project.variables.count).to eq(1) expect(page).to have_content('key')
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment