Commit 25149ce4 authored by Valery Sizov's avatar Valery Sizov

Merge branch 'ci-and-ce-sitting-in-a-tree-k-i-s-s-i-n-g' of...

Merge branch 'ci-and-ce-sitting-in-a-tree-k-i-s-s-i-n-g' of gitlab.com:gitlab-org/gitlab-ce into ci-and-ce-sitting-in-a-tree-k-i-s-s-i-n-g
parents ad5d2c3e 15eeae5f
Please view this file on the master branch, on stable branches it's out of date.
v 8.0.0 (unreleased)
- Bump rouge to 1.10.1 to remove warning noise and fix other syntax highlighting bugs (Stan Hu)
- Gracefully handle errors in syntax highlighting by leaving the block unformatted (Stan Hu)
- Fix URL construction for merge requests, issues, notes, and commits for relative URL config (Stan Hu)
- Fix emoji URLs in Markdown when relative_url_root is used (Stan Hu)
- Omit filename in Content-Disposition header in raw file download to avoid RFC 6266 encoding issues (Stan HU)
- Fix broken Wiki Page History (Stan Hu)
- Prevent anchors from being hidden by header (Stan Hu)
- Fix bug where only the first 15 Bitbucket issues would be imported (Stan Hu)
- Sort issues by creation date in Bitbucket importer (Stan Hu)
- Upgrade gitlab_git to 7.2.15 to fix `git blame` errors with ISO-encoded files (Stan Hu)
- Prevent too many redirects upon login when home page URL is set to external_url (Stan Hu)
- Improve dropdown positioning on the project home page (Hannes Rosenögger)
- Upgrade browser gem to 1.0.0 to avoid warning in IE11 compatibilty mode (Stan Hu)
......@@ -35,20 +37,29 @@ v 8.0.0 (unreleased)
- Retrieving oauth token with LDAP credentials
- Load Application settings from running database unless env var USE_DB=false
- Added Drone CI integration (Kirill Zaitsev)
- Refactored service API and added automatically service docs generator (Kirill Zaitsev)
- Refactored service API and added automatically service docs generator (Kirill Zaitsev)
- Added web_url key project hook_attrs (Kirill Zaitsev)
- Add ability to get user information by ID of an SSH key via the API
- Fix bug which IE cannot show image at markdown when the image is raw file of gitlab
- Fix bug which IE cannot show image at markdown when the image is raw file of gitlab
- Add support for Crowd
- Global Labels that are available to all projects
- Fix highlighting of deleted lines in diffs.
- Added service API endpoint to retrieve service parameters (Petheő Bence)
- Add FogBugz project import (Jared Szechy)
v 7.14.3
- No changes
v 7.14.2
- Upgrade gitlab_git to 7.2.15 to fix `git blame` errors with ISO-encoded files (Stan Hu)
v 7.14.1
- Improve abuse reports management from admin area
- Fix "Reload with full diff" URL button in compare branch view (Stan Hu)
- Disabled DNS lookups for SSH in docker image (Rowan Wookey)
- Only include base URL in OmniAuth full_host parameter (Stan Hu)
- Fix Error 500 in API when accessing a group that has an avatar (Stan Hu)
- Ability to enable SSL verification for Webhooks
- Add FogBugz project import (Jared Szechy)
v 7.14.0
- Fix bug where non-project members of the target project could set labels on new merge requests.
......
......@@ -294,7 +294,7 @@ GEM
github-markup (~> 1.3.3)
gollum-grit_adapter (~> 1.0)
nokogiri (~> 1.6.4)
rouge (~> 1.7.4)
rouge (~> 1.10.1)
sanitize (~> 2.1.0)
stringex (~> 2.5.1)
gon (5.0.4)
......@@ -565,7 +565,7 @@ GEM
netrc (~> 0.7)
rinku (1.7.3)
rotp (1.6.1)
rouge (1.7.7)
rouge (1.10.1)
rqrcode (0.7.0)
chunky_png
rqrcode-rails3 (0.1.7)
......
......@@ -10,20 +10,10 @@
# WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
# GO AFTER THE REQUIRES BELOW.
#
#= require jquery
#= require bootstrap
#= require jquery_ujs
#= require turbolinks
#= require jquery.turbolinks
#= require jquery.endless-scroll
#= require pager
#= require nprogress
#= require nprogress-turbolinks
#= require jquery_nested_form
#= require_tree .
#
#
$(document).on 'click', '.edit-runner-link', (event) ->
event.preventDefault()
......
......@@ -16,7 +16,7 @@
complete: =>
$(".loading").hide()
success: (data) =>
Pager.append(data.count, data.html)
CiPager.append(data.count, data.html)
dataType: "json"
append: (count, html) ->
......@@ -34,9 +34,9 @@
fireDelay: 1000
fireOnce: true
ceaseFire: ->
Pager.disable
CiPager.disable
callback: (i) =>
unless $(".loading").is(':visible')
$(".loading").show()
Pager.getItems()
CiPager.getItems()
......@@ -167,6 +167,7 @@ class @DropzoneInput
dataType: "json"
).success (data) ->
preview.html data.body
preview.syntaxHighlight()
renderReferencedUsers data.references.users
......
......@@ -122,8 +122,9 @@ class @Notes
# or skip if rendered
if @isNewNote(note)
@note_ids.push(note.id)
$('ul.main-notes-list').append(note.html)
$('.js-syntax-highlight').syntaxHighlight()
$('ul.main-notes-list').
append(note.html).
syntaxHighlight()
@initTaskList()
###
......
# Syntax Highlighter
#
# Applies a syntax highlighting color scheme CSS class to any element with the
# `js-syntax-highlight` class
#
......@@ -6,7 +8,13 @@
# <div class="js-syntax-highlight"></div>
#
$.fn.syntaxHighlight = ->
$(this).addClass(gon.user_color_scheme)
if $(this).hasClass('js-syntax-highlight')
# Given the element itself, apply highlighting
$(this).addClass(gon.user_color_scheme)
else
# Given a parent element, recurse to any of its applicable children
$children = $(this).find('.js-syntax-highlight')
$children.syntaxHighlight() if $children.length
$(document).on 'ready page:load', ->
$('.js-syntax-highlight').syntaxHighlight()
......@@ -61,3 +61,9 @@
* Styles for JS behaviors.
*/
@import "behaviors.scss";
/**
* CI specific styles:
*/
@import "ci/**/*";
......@@ -156,10 +156,16 @@
* Add some extra stuff to panels
*
*/
.container-blank .panel .panel-heading {
font-size: 17px;
line-height: 38px;
}
.panel {
.panel-heading {
font-weight: bold;
box-shadow: none;
.panel-heading {
.panel-head-actions {
position: relative;
top: -5px;
......@@ -182,6 +188,10 @@
.pagination {
margin: 0;
}
.btn {
min-width: 124px;
}
}
&.panel-small {
......@@ -209,6 +219,12 @@
}
}
.alert-help {
background-color: $background-color;
border: 1px solid $border-color;
color: $gl-gray;
}
// Typography =================================================================
.text-primary,
......
......@@ -114,11 +114,12 @@ $alert-border-radius: 0;
//
//##
$panel-border-radius: 0;
$panel-default-text: $text-color;
$panel-default-border: #E7E9ED;
$panel-default-heading-bg: #F8FAFC;
$panel-border-radius: 2px;
$panel-default-text: $text-color;
$panel-default-border: $border-color;
$panel-default-heading-bg: $background-color;
$panel-footer-bg: $background-color;
$panel-inner-border: $border-color;
//== Wells
//
......
......@@ -55,10 +55,10 @@
}
@mixin md-typography {
color: #444;
color: $md-text-color;
a {
color: #3084bb;
color: $md-link-color;
}
img {
......
......@@ -2,6 +2,8 @@ $hover: #FFFAF1;
$gl-text-color: #54565b;
$gl-header-color: #4c4e54;
$gl-link-color: #333c48;
$md-text-color: #444;
$md-link-color: #3084bb;
$nprogress-color: #c0392b;
$gl-font-size: 15px;
$list-font-size: 15px;
......
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the top of the
* compiled file, but it's generally better to create a new file per style scope.
*
*= require_self
*/
@import "../base/fonts";
@import "../base/variables";
@import "../base/mixins";
@import "../base/layout";
@import "../base/gl_variables";
@import "../base/gl_bootstrap";
/**
* Customized Twitter bootstrap
*/
@import '../base/gl_variables';
@import '../base/gl_bootstrap';
/**
* Font icons
*
*/
@import "font-awesome";
/**
* Generic css (forms, nav etc):
*/
@import "../generic/**/*";
/**
* Page specific styles (issues, projects etc):
*/
@import "xterm";
@import "sections/*";
/*
* NProgress
*/
$nprogress-color: #9BC;
@import 'nprogress';
@import 'nprogress-bootstrap';
body {
padding-top: 0 !important;
a {
color: #3084bb;
}
}
.ci-body {
pre.trace {
background: #111111;
color: #fff;
font-family: $monospace_font;
white-space: pre;
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
overflow: auto;
overflow-y: hidden;
font-size: 12px;
.fa-refresh {
font-size: 24px;
margin-left: 20px;
}
}
.autoscroll-container {
position: fixed;
bottom: 10px;
right: 20px;
z-index: 100;
}
.scroll-controls {
position: fixed;
bottom: 10px;
left: 250px;
z-index: 100;
a {
display: block;
margin-bottom: 5px;
}
}
.page-sidebar-collapsed {
.scroll-controls {
left: 70px;
}
}
.build-widget {
padding: 10px;
background: $background-color;
margin-bottom: 20px;
border-radius: 4px;
.title {
margin-top: 0;
color: #666;
line-height: 1.5;
}
.attr-name {
color: #777;
}
}
.alert-disabled {
background: $background-color;
a {
color: #3084bb !important;
}
}
}
.ci-body {
.incorrect-syntax{
font-size: 19px;
color: red;
}
.correct-syntax{
font-size: 19px;
color: #47a447;
}
}
.ci-body {
.project-title {
margin: 0;
color: #444;
font-size: 20px;
line-height: 1.5;
}
.builds {
@extend .table;
.build {
&.alert{
margin-bottom: 6px;
}
}
}
.projects-table {
td {
vertical-align: middle !important;
}
}
.commit-info {
font-size: 14px;
.attr-name {
font-weight: 300;
color: #666;
margin-right: 5px;
}
pre.commit-message {
font-size: 14px;
background: none;
padding: 0;
margin: 0;
border: none;
margin: 20px 0;
border-bottom: 1px solid #EEE;
padding-bottom: 20px;
border-radius: 0;
}
}
.loading{
font-size: 20px;
}
}
.ci-body {
.runner-state {
padding: 6px 12px;
margin-right: 10px;
color: #FFF;
&.runner-state-shared {
background: #32b186;
}
&.runner-state-specific {
background: #3498db;
}
}
.runner-status-online {
color: green;
}
.runner-status-offline {
color: gray;
}
.runner-status-paused {
color: red;
}
.runner {
.btn {
padding: 1px 6px;
}
h4 {
font-weight: normal;
}
}
}
pre.trace {
background: #111111;
color: #fff;
font-family: $monospace_font;
white-space: pre;
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
overflow: auto;
overflow-y: hidden;
font-size: 12px;
.fa-refresh {
font-size: 24px;
margin-left: 20px;
}
}
.autoscroll-container {
position: fixed;
bottom: 10px;
right: 20px;
z-index: 100;
}
.scroll-controls {
position: fixed;
bottom: 10px;
left: 20px;
z-index: 100;
a {
display: block;
margin-bottom: 5px;
}
}
.build-widget {
padding: 10px;
background: #f4f4f4;
margin-bottom: 20px;
border-radius: 4px;
.title {
margin-top: 0;
color: #666;
line-height: 1.5;
}
.attr-name {
color: #777;
}
}
.alert-disabled {
background: #EEE;
a {
color: #3084bb !important;
}
}
.incorrect-syntax{
font-size: 19px;
color: red;
}
.correct-syntax{
font-size: 19px;
color: #47a447;
}
\ No newline at end of file
.login-block {
padding: 15px;
margin: 0 auto;
text-align: center;
p {
font-size: 15px;
}
.btn-login {
padding: 18px 32px;
}
}
.navbar-static-top {
margin-bottom: 20px;
}
.navbar-ci {
background: #224466;
.navbar-brand {
color: #fff;
&:hover {
color: #fff;
}
}
.brand,
.nav > li > a {
color: #fff;
&:hover, &:focus, &:active {
background: none;
}
}
.profile-holder {
position: relative;
img {
position: absolute;
top: -8px;
width: 32px;
@include border-radius(32px);
}
span {
margin-left: 42px;
}
}
.btn-login {
padding: 7px 22px;
margin-top: 7px;
&:hover, &:active, &:focus {
background: #018865 !important;
}
}
}
.turbolink-spinner {
position: absolute;
top: 11px;
left: 50%;
color: #FFF;
font-size: 20px;
}
.project-title {
margin: 0;
color: #444;
font-size: 20px;
line-height: 1.5;
}
.builds {
@extend .table;
.build {
&.alert{
margin-bottom: 6px;
}
}
}
.projects-table {
td {
vertical-align: middle !important;
}
}
.commit-info {
font-size: 14px;
.attr-name {
font-weight: 300;
color: #666;
margin-right: 5px;
}
pre.commit-message {
font-size: 14px;
background: none;
padding: 0;
margin: 0;
border: none;
margin: 20px 0;
border-bottom: 1px solid #EEE;
padding-bottom: 20px;
border-radius: 0;
}
}
.search{
width: 300px;
.search-input{
height: 35px;
}
form{
margin-top: 0;
margin-bottom: 0;
}
}
.loading{
font-size: 20px;
}
.runner-state {
padding: 6px 12px;
margin-right: 10px;
color: #FFF;
&.runner-state-shared {
background: #32b186;
}
&.runner-state-specific {
background: #3498db;
}
}
.runner-status-online {
color: green;
}
.runner-status-offline {
color: gray;
}
.runner-status-paused {
color: red;
}
.runner {
.btn {
padding: 1px 6px;
}
h4 {
font-weight: normal;
}
}
.welcome-block {
margin-top: 50px;
color: #555;
font-size: 16px;
line-height: 1.5;
h1, h2, h3 {
font-weight: bold;
margin-bottom: 20px;
}
}
This diff is collapsed.
......@@ -27,6 +27,10 @@
border-bottom: 1px solid #e7e9ed;
color: $gl-gray;
&.top-block {
border-top: none;
}
&.middle-block {
margin-top: 0;
margin-bottom: 0;
......
......@@ -10,7 +10,7 @@
}
&.btn-save {
@extend .btn-primary;
@extend .btn-success;
}
&.btn-remove {
......
......@@ -3,7 +3,11 @@
*
*/
.file-holder {
border: 1px solid $border-color;
margin-left: -$gl-padding;
margin-right: -$gl-padding;
border: none;
border-top: 1px solid #E7E9EE;
border-bottom: 1px solid #E7E9EE;
margin-bottom: 1em;
table {
......@@ -49,7 +53,7 @@
}
&.wiki {
padding: 25px;
padding: $gl-padding;
.highlight {
margin-bottom: 9px;
......@@ -90,7 +94,7 @@
border-right: none;
}
background: #fff;
padding: 8px;
padding: 10px $gl-padding;
}
.lines {
pre {
......@@ -100,6 +104,33 @@
border: none;
}
}
img.avatar {
border: 0 none;
float: none;
margin: 0;
padding: 0;
}
td.blame-commit {
background: #f9f9f9;
min-width: 350px;
.commit-author-link {
color: #888;
}
}
td.blame-numbers {
pre {
color: #AAA;
white-space: pre;
}
background: #f1f1f1;
border-left: 1px solid #DDD;
}
td.lines {
code {
font-family: $monospace_font;
}
}
}
&.logs {
......
......@@ -28,12 +28,18 @@
padding: $gl-padding;
border: 1px solid #e7e9ed;
min-height: 90vh;
&.container-blank {
background: none;
padding: 0;
border: none;
}
}
}
.nav-sidebar {
margin-top: 14 + $header-height;
margin-bottom: 50px;
margin-bottom: 100px;
transition-duration: .3s;
list-style: none;
overflow: hidden;
......
......@@ -5,15 +5,19 @@ pre.code.highlight.white,
background-color: #fff;
color: #333;
pre.highlight,
.line-numbers,
.line-numbers a {
background-color: $background-color !important;
color: $gl-gray !important;
}
pre.highlight {
background-color: #fff !important;
color: #333 !important;
}
pre.code {
border-left: 1px solid #bbb;
border-left: 1px solid $border-color;
}
// highlight line via anchor
......
.diff-file {
margin-left: -16px;
margin-right: -16px;
margin-left: -$gl-padding;
margin-right: -$gl-padding;
border: none;
border-bottom: 1px solid #E7E9EE;
......@@ -8,7 +8,7 @@
position: relative;
background: $background-color;
border-bottom: 1px solid $border-color;
padding: 10px 15px;
padding: 10px 16px;
color: #555;
z-index: 10;
......
......@@ -48,7 +48,6 @@
p {
color: #7f8fa4;
display: inline;
}
}
......@@ -204,26 +203,18 @@ ul.nav.nav-projects-tabs {
}
.fork-namespaces {
.thumbnail {
.fork-thumbnail {
text-align: center;
margin-bottom: $gl-padding;
&.fork-exists-thumbnail {
border-color: #EEE;
.caption {
color: #999;
}
}
&.fork-thumbnail {
border-color: #AAA;
&:hover {
background-color: $hover;
}
.caption {
padding: $gl-padding 0;
min-height: 30px;
}
a {
text-decoration: none;
img {
@include border-radius(50%);
max-width: 100px;
}
}
}
......
......@@ -78,36 +78,6 @@
}
}
}
.blame {
img.avatar {
border: 0 none;
float: none;
margin: 0;
padding: 0;
}
td.blame-commit {
background: #f9f9f9;
min-width: 350px;
.commit-author-link {
color: #888;
}
}
td.blame-numbers {
pre {
color: #AAA;
white-space: pre;
}
background: #f1f1f1;
border-left: 1px solid #DDD;
}
td.lines {
code {
font-family: $monospace_font;
}
}
}
}
.tree-ref-holder {
......@@ -132,17 +102,14 @@
list-style: none;
margin: 0;
padding: 0;
margin-bottom: 10px;
margin-bottom: 5px;
.commit {
padding: 10px 15px;
padding: $gl-padding 0;
.commit-row-title {
font-size: 13px;
.commit-row-message {
font-weight: normal;
color: #555;
}
}
}
......
......@@ -7,6 +7,7 @@ module Ci
before_filter :authorize_manage_project!, except: [:status, :show, :retry, :cancel]
before_filter :authorize_manage_builds!, only: [:retry, :cancel]
before_filter :build, except: [:show]
layout 'ci/project'
def show
if params[:id] =~ /\A\d+\Z/
......
......@@ -6,6 +6,7 @@ module Ci
before_filter :authorize_access_project!, except: [:status, :show, :cancel]
before_filter :authorize_manage_builds!, only: [:cancel]
before_filter :commit, only: :show
layout 'ci/project'
def show
@builds = @commit.builds
......
......@@ -22,7 +22,7 @@ module Ci
@page = @offset == 0 ? 1 : (@offset / @limit + 1)
@gl_projects = current_user.authorized_projects
@gl_projects = @gl_projects.where("name LIKE %?%", params[:search]) if params[:search]
@gl_projects = @gl_projects.where("name LIKE ?", "%#{params[:search]}%") if params[:search]
@gl_projects = @gl_projects.page(@page).per(@limit)
@projects = Ci::Project.where(gitlab_id: @gl_projects.map(&:id)).ordered_by_last_commit_date
......
......@@ -31,4 +31,26 @@ module PageLayoutHelper
@fluid_layout
end
end
def blank_container(enabled = false)
if @blank_container.nil?
@blank_container = enabled
else
@blank_container
end
end
def container_class
css_class = "container-fluid"
unless fluid_layout
css_class += " container-limited"
end
if blank_container
css_class += " container-blank"
end
css_class
end
end
%h4.page-title
= link_to ci_project_path(@project)
= link_to @project.name, ci_project_path(@project)
@
= @commit.short_sha
......
......@@ -63,7 +63,7 @@
%i.fa.fa-time
#{time_interval_in_words @commit.duration}
%table.builds
%table.table.builds
%thead
%tr
%th Status
......@@ -81,7 +81,7 @@
%h3
Retried builds
%table.builds
%table.table.builds
%thead
%tr
%th Status
......
%li
= link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, :remote => remote
%li.disabled
= link_to raw(t 'views.pagination.truncate'), '#'
%li
= link_to_unless current_page.last?, raw(t 'views.pagination.last'), url, {:remote => remote}
%li
= link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, :rel => 'next', :remote => remote
%li{class: "#{'active' if page.current?}"}
= link_to page, page.current? ? '#' : url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil}
= paginator.render do
%ul.pagination
= first_page_tag unless current_page.first?
= prev_page_tag unless current_page.first?
- each_page do |page|
- if page.left_outer? || page.right_outer? || page.inside_window?
= page_tag page
- elsif !page.was_truncated?
= gap_tag
= next_page_tag unless current_page.last?
= last_page_tag unless current_page.last?
%li
= link_to_unless current_page.first?, raw(t 'views.pagination.previous'), url, :rel => 'prev', :remote => remote
- if current_user
= content_for :title do
%h3.project-title
Dashboard
.pull-right
= render "search"
= render "search"
.projects
%p.fetch-status.light
%i.fa.fa-refresh.fa-spin
......@@ -12,6 +7,6 @@
$.get '#{gitlab_ci_projects_path}', (data) ->
$(".projects").html data.html
CiPager.init "#{gitlab_ci_projects_path}", #{Ci::ProjectsController::PROJECTS_BATCH}, false
- else
= render 'public'
......@@ -16,7 +16,8 @@
%li{class: 'active'}
= link_to @ref, ci_project_path(@project, ref: @ref)
%li.pull-right
= link_to 'View on GitLab', @project.gitlab_url, no_turbolink.merge( class: 'btn btn-sm' )
- if @ref
%p
......@@ -37,7 +38,7 @@
%table.builds
%table.table.builds
%thead
%tr
%th Status
......
- @blank_container = true
.panel.panel-default
.panel-heading
%strong= @group.name
......
......@@ -19,7 +19,7 @@
= current_user.username
.content-wrapper
= render "layouts/flash"
%div{ class: fluid_layout ? "container-fluid" : "container-fluid container-limited" }
%div{ class: container_class }
.content
.clearfix
= yield
%head
%meta{charset: "utf-8"}
%meta{content: "GitLab Continuous Integration", name: "description"}
%title GitLab CI
= stylesheet_link_tag "ci/application", :media => "all"
= javascript_include_tag "ci/application"
= csrf_meta_tags
= favicon_link_tag 'ci/favicon.ico'
:erb
<meta name="viewport" content="width=device-width, initial-scale=1.0">
.navbar.navbar-static-top.navbar-ci
.container
.navbar-header
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
%span.sr-only Toggle navigation
%i.fa.fa-reorder
= link_to 'GitLab CI', ci_root_path, class: "navbar-brand"
.collapse.navbar-collapse
%ul.nav.navbar-nav
- if current_user && current_user.is_admin?
%li
= link_to ci_admin_projects_path do
Admin
%li
= link_to 'Help', ci_help_path
%ul.nav.navbar-nav.pull-right
- if current_user
%li
= link_to "/profile", no_turbolink do
.profile-holder
= image_tag user_avatar_url(current_user, 64), class: 'avatar s32', alt: ''
%span= current_user.name
%li
= link_to destroy_user_session_path, class: "logout", method: :delete do
%i.fa.fa-signout
Logout
- else
%li
= link_to "Login with GitLab", auth_ci_user_sessions_path, no_turbolink.merge(class: 'btn btn-success btn-login')
%ul.nav.nav-pills.nav-stacked.admin-menu
%ul.nav.nav-sidebar
= nav_link do
= link_to ci_root_path, title: 'Back to dashboard', data: {placement: 'right'}, class: 'back-link' do
= icon('caret-square-o-left fw')
%span
Back to Dashboard
%li.separate-item
= nav_link path: 'projects#index' do
= link_to ci_admin_projects_path do
%i.fa.fa-list-alt
......@@ -19,8 +26,6 @@
Builds
%small.pull-right
= Ci::Build.count(:all)
%li
%hr
= nav_link(controller: :application_settings, html_options: { class: 'separate-item'}) do
= link_to ci_admin_application_settings_path do
%i.fa.fa-cogs
......
%ul.nav.nav-sidebar
= nav_link do
= link_to root_path, title: 'Back to dashboard', data: {placement: 'right'}, class: 'back-link' do
= icon('caret-square-o-left fw')
%span
Back to GitLab
%li.separate-item
= nav_link path: 'projects#show' do
= link_to ci_root_path do
%i.fa.fa-home
%span
Projects
- if current_user && current_user.is_admin?
%li
= link_to ci_admin_projects_path do
%i.fa.fa-cogs
%span
Admin
%li
= link_to ci_help_path do
%i.fa.fa-info
%span
Help
%ul.nav.nav-pills.nav-stacked.project-menu
%ul.nav.nav-sidebar
= nav_link path: 'projects#show' do
= link_to ci_project_path(@project) do
%i.fa.fa-list-alt
Commits
%small.pull-right= @project.commits.count
%span
Commits
%small.pull-right= @project.commits.count
= nav_link path: 'charts#show' do
= link_to ci_project_charts_path(@project) do
%i.fa.fa-bar-chart
Charts
%span
Charts
= nav_link path: ['runners#index', 'runners#show'] do
= link_to ci_project_runners_path(@project) do
%i.fa.fa-cog
Runners
%span
Runners
= nav_link path: 'variables#show' do
= link_to ci_project_variables_path(@project) do
%i.fa.fa-code
Variables
%span
Variables
= nav_link path: 'web_hooks#index' do
= link_to ci_project_web_hooks_path(@project) do
%i.fa.fa-link
Web Hooks
%span
Web Hooks
= nav_link path: 'triggers#index' do
= link_to ci_project_triggers_path(@project) do
%i.fa.fa-retweet
Triggers
%span
Triggers
= nav_link path: 'services#index' do
= link_to ci_project_services_path(@project) do
%i.fa.fa-share
Services
%span
Services
= nav_link path: 'events#index' do
= link_to ci_project_events_path(@project) do
%i.fa.fa-book
Events
%li
%hr
%span
Events
%li.separate-item
= nav_link path: 'projects#edit' do
= link_to edit_ci_project_path(@project) do
%i.fa.fa-cogs
Settings
%span
Settings
.page-with-sidebar{ class: nav_sidebar_class }
= render "layouts/broadcast"
.sidebar-wrapper.nicescroll
.header-logo
= link_to ci_root_path, class: 'home', title: 'Dashboard', id: 'js-shortcuts-home', data: {toggle: 'tooltip', placement: 'bottom'} do
= brand_header_logo
.gitlab-text-container
%h3 GitLab CI
- if defined?(sidebar) && sidebar
= render "layouts/ci/#{sidebar}"
- elsif current_user
= render 'layouts/nav/dashboard'
.collapse-nav
= render partial: 'layouts/collapse_button'
- if current_user
= link_to current_user, class: 'sidebar-user' do
= image_tag avatar_icon(current_user.email, 60), alt: 'User activity', class: 'avatar avatar s36'
.username
= current_user.username
.content-wrapper
= render "layouts/flash"
= render 'layouts/ci/info'
%div{ class: container_class }
.content
.clearfix
= yield
!!! 5
%html{ lang: "en"}
= render 'layouts/ci/head'
%body{ :'data-page' => body_data_page }
= render 'layouts/ci/nav'
= render 'layouts/ci/info'
- if content_for?(:title)
.container.container-title
= yield(:title)
%hr
= render 'layouts/head'
%body{class: "ci-body #{user_application_theme}", 'data-page' => body_data_page}
- header_title = "Admin area"
- if current_user
= render "layouts/header/default", title: header_title
- else
= render "layouts/header/public", title: header_title
.container.container-body
.content
.row
.col-md-2.append-bottom-20
= render 'layouts/ci/nav_admin'
.col-md-10
= yield
= render 'layouts/ci/page', sidebar: 'nav_admin'
!!! 5
%html{ lang: "en"}
= render 'layouts/ci/head'
%body{ :'data-page' => body_data_page }
= render 'layouts/ci/nav'
= render 'layouts/ci/info'
- if content_for?(:title)
.container.container-title
= yield(:title)
%hr
= render 'layouts/head'
%body{class: "ci-body #{user_application_theme}", 'data-page' => body_data_page}
- header_title = "CI Projects"
- if current_user
= render "layouts/header/default", title: header_title
- else
= render "layouts/header/public", title: header_title
.container.container-body
.content
= yield
= render 'layouts/ci/page', sidebar: 'nav_dashboard'
!!! 5
%html{ lang: "en"}
= render 'layouts/ci/head'
%body{ :'data-page' => body_data_page }
= render 'layouts/ci/info'
- if content_for?(:title)
.container.container-title
= yield(:title)
%hr
.container.container-body
.content
= yield
!!! 5
%html{ lang: "en"}
= render 'layouts/ci/head'
%body{ :'data-page' => body_data_page }
= render 'layouts/ci/nav'
= render 'layouts/ci/info'
.container
%h3.project-title
= @project.name
- if @project.public
%small
%i.fa.fa-globe
Public
= render 'layouts/head'
%body{class: "ci-body #{user_application_theme}", 'data-page' => body_data_page}
- header_title = @project.name
- if current_user
= render "layouts/header/default", title: header_title
- else
= render "layouts/header/public", title: header_title
.pull-right
= link_to 'View on GitLab', @project.gitlab_url, no_turbolink.merge( class: 'btn btn-sm' )
%hr
.container.container-body
.content
- if current_user && can?(current_user, :admin_project, gl_project)
.row
.col-md-2.append-bottom-20
= render 'layouts/ci/nav_project'
.col-md-10
= yield
- else
= yield
= render 'layouts/ci/page', sidebar: 'nav_project'
......@@ -37,14 +37,15 @@
= icon('clipboard fw')
%span
Snippets
= nav_link(controller: :help) do
= link_to help_path, title: 'Help', data: {placement: 'right'} do
= icon('question-circle fw')
%span
Help
- if current_user
%li.separate-item
= nav_link(controller: :profile) do
= link_to profile_path, title: 'Profile settings', data: {toggle: 'tooltip', placement: 'bottom'} do
= icon('user fw')
%span
Profile Settings
= nav_link(controller: :help) do
= link_to help_path, title: 'Help', data: {placement: 'right'} do
= icon('question-circle fw')
%span
Help
......@@ -11,7 +11,7 @@
= link_to profile_path, title: 'Profile', data: {placement: 'right'} do
= icon('user fw')
%span
Profile
Profile Settings
= nav_link(controller: [:accounts, :two_factor_auths]) do
= link_to profile_account_path, title: 'Account', data: {placement: 'right'} do
= icon('gear fw')
......
- page_title "Profile Settings"
- header_title "Profile Settings", profile_path
- unless @header_title
- header_title "Profile Settings", profile_path
- sidebar "profile"
= render template: "layouts/application"
- page_title "Account"
%h3.page-title
= page_title
%p.light
Change your username and basic account settings.
%hr
- header_title page_title, profile_account_path
- @blank_container = true
- if current_user.ldap_user?
.alert.alert-info
Some options are unavailable for LDAP accounts
......@@ -69,7 +67,7 @@
- button_based_providers.each do |provider|
.btn-group
= link_to provider_image_tag(provider), user_omniauth_authorize_path(provider), method: :post, class: "btn btn-lg #{'active' if auth_active?(provider)}", "data-no-turbolink" => "true"
- if auth_active?(provider)
= link_to unlink_profile_account_path(provider: provider), method: :delete, class: 'btn btn-lg' do
= icon('close')
......
- page_title "Applications"
%h3.page-title
= page_title
%p.light
- header_title page_title, applications_profile_path
.gray-content-block.top-block
- if user_oauth_applications?
Manage applications that can use GitLab as an OAuth provider,
Manage applications that can use GitLab as an OAuth provider,
and applications that you've authorized to use your account.
- else
Manage applications that you've authorized to use your account.
%hr
- if user_oauth_applications?
.oauth-applications
......
- page_title "Audit Log"
%h3.page-title Audit Log
%p.light History of authentications
- header_title page_title, audit_log_profile_path
= render 'event_table', events: @events
\ No newline at end of file
.gray-content-block.top-block
History of authentications
.prepend-top-default
= render 'event_table', events: @events
- page_title "Emails"
%h3.page-title
= page_title
%p.light
Control emails linked to your account
%hr
- header_title page_title, profile_emails_path
.gray-content-block.top-block
Control emails linked to your account
%ul
%ul.prepend-top-default
%li
Your
%b Primary Email
......
- page_title "SSH Keys"
%h3.page-title
= page_title
- header_title page_title, profile_keys_path
.gray-content-block.top-block
.pull-right
= link_to "Add SSH Key", new_profile_key_path, class: "btn btn-new"
%p.light
Before you can add an SSH key you need to
= link_to "generate it.", help_page_path("ssh", "README")
%hr
.oneline
Before you can add an SSH key you need to
= link_to "generate it.", help_page_path("ssh", "README")
.prepend-top-default
= render 'key_table'
- page_title "Notifications"
%h3.page-title
= page_title
%p.light
- header_title page_title, profile_notifications_path
.gray-content-block.top-block
These are your global notification settings.
%hr
.prepend-top-default
= form_for @user, url: profile_notifications_path, method: :put, html: { class: 'update-notifications form-horizontal global-notifications-form' } do |f|
-if @user.errors.any?
%div.alert.alert-danger
......
- page_title "Password"
%h3.page-title
= page_title
%p.light
- header_title page_title, edit_profile_password_path
.gray-content-block.top-block
- if @user.password_automatically_set?
Set your password.
- else
Change your password or recover your current one.
%hr
.update-password
.update-password.prepend-top-default
= form_for @user, url: profile_password_path, method: :put, html: { class: 'form-horizontal' } do |f|
%div
%p.slead
......
......@@ -12,7 +12,7 @@
%ul
- @user.errors.full_messages.each do |msg|
%li= msg
- unless @user.password_automatically_set?
.form-group
= f.label :current_password, class: 'control-label'
......
- page_title 'Preferences'
%h3.page-title
= page_title
%p.light
- header_title page_title, profile_preferences_path
- @blank_container = true
.alert.alert-help
These settings allow you to customize the appearance and behavior of the site.
They are saved with your account and will persist to any device you use to
access the site.
%hr
= form_for @user, url: profile_preferences_path, remote: true, method: :put, html: {class: 'js-preferences-form form-horizontal'} do |f|
.panel.panel-default.application-theme
......
- page_title "Profile"
%h3.page-title
= page_title
%p.light
.gray-content-block.top-block
This information will appear on your profile.
- if current_user.ldap_user?
Some options are unavailable for LDAP accounts
%hr
.prepend-top-default
= form_for @user, url: profile_path, method: :put, html: { multipart: true, class: "edit_user form-horizontal" }, authenticity_token: true do |f|
-if @user.errors.any?
%div.alert.alert-danger
......
......@@ -7,6 +7,13 @@
- if @project.description.present?
= markdown(@project.description, pipeline: :description)
- if forked_from_project = @project.forked_from_project
%p
Forked from
= link_to project_path(forked_from_project) do
= forked_from_project.namespace.try(:name)
.project-repo-buttons
= render 'projects/buttons/star'
......@@ -14,12 +21,6 @@
- unless empty_repo
= render 'projects/buttons/fork'
- if forked_from_project = @project.forked_from_project
= link_to project_path(forked_from_project), class: 'btn' do
= icon("code-fork fw")
Forked from
= forked_from_project.namespace.try(:name)
- if can? current_user, :download_code, @project
= link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), class: 'btn', rel: 'nofollow' do
= icon('download fw')
......
......@@ -15,7 +15,7 @@
- else
= link_to title, '#'
%ul.blob-commit-info.well.hidden-xs
%ul.blob-commit-info.hidden-xs
- blob_commit = @repository.last_commit_for_path(@commit.id, blob.path)
= render blob_commit, project: @project
......
- @blank_container = true
.project-edit-container
.project-edit-errors
.project-edit-content
%div
%h3.page-title
.panel.panel-default
.panel-heading
Project settings
%hr
.panel-body
= form_for [@project.namespace.becomes(Namespace), @project], remote: true, html: { multipart: true, class: "edit_project form-horizontal fieldset-form" }, authenticity_token: true do |f|
......
......@@ -10,21 +10,22 @@
- group.each do |namespace|
.col-md-2.col-sm-3
- if fork = namespace.find_fork_of(@project)
.thumbnail.fork-exists-thumbnail
.fork-thumbnail
= link_to project_path(fork), title: "Visit project fork", class: 'has_tooltip' do
= image_tag namespace_icon(namespace, 200)
= image_tag namespace_icon(namespace, 100)
.caption
%h4=namespace.human_name
%p
= namespace.path
%strong
= namespace.human_name
%div.text-primary
Already forked
- else
.thumbnail.fork-thumbnail
.fork-thumbnail
= link_to namespace_project_fork_path(@project.namespace, @project, namespace_key: namespace.id), title: "Fork here", method: "POST", class: 'has_tooltip' do
= image_tag namespace_icon(namespace, 200)
= image_tag namespace_icon(namespace, 100)
.caption
%h4=namespace.human_name
%p
= namespace.path
%strong
= namespace.human_name
%p.light
Fork is a copy of a project repository.
......
......@@ -9,7 +9,7 @@
= f.label :title, class: 'control-label' do
%strong= 'Title *'
.col-sm-10
= f.text_field :title, maxlength: 255, autofocus: true,
= f.text_field :title, maxlength: 255, autofocus: true, autocomplete: 'off',
class: 'form-control pad js-gfm-input', required: true
- if issuable.is_a?(MergeRequest)
......
......@@ -2,7 +2,12 @@
require 'gitlab/current_settings'
include Gitlab::CurrentSettings
Settings.gitlab['session_expire_delay'] = current_application_settings.session_expire_delay
# allow it to fail: it may to do so when create_from_defaults is executed before migrations are actually done
begin
Settings.gitlab['session_expire_delay'] = current_application_settings.session_expire_delay
rescue
end
Gitlab::Application.config.session_store(
:redis_store, # Using the cookie_store would enable session replay attacks.
......
class CreateProjects < ActiveRecord::Migration
def up
create_table :projects do |t|
t.string :name, null: false
t.string :path, null: false
t.integer :timeout, null: false, default: 1800
t.text :scripts, null: false
t.timestamps
end
end
def down
end
end
class CreateBuilds < ActiveRecord::Migration
def up
create_table :builds do |t|
t.integer :project_id
t.string :commit_ref
t.string :status
t.datetime :finished_at
t.text :trace
t.timestamps
end
end
def down
end
end
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Database authenticatable
t.string :email, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, :default => 0
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
## Token authenticatable
# t.string :authentication_token
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
# add_index :users, :confirmation_token, :unique => true
# add_index :users, :unlock_token, :unique => true
# add_index :users, :authentication_token, :unique => true
end
end
class AddTokenToProject < ActiveRecord::Migration
def change
add_column :projects, :token, :string, null: true
end
end
class AddRefFunctionality < ActiveRecord::Migration
def change
rename_column :builds, :commit_ref, :ref
add_column :builds, :sha, :string
add_column :projects, :default_ref, :string
end
def down
end
end
class AddGitlabUrlToProject < ActiveRecord::Migration
def change
add_column :projects, :gitlab_url, :string, null: true
end
end
class AddStartedAtToBuild < ActiveRecord::Migration
def change
add_column :builds, :started_at, :datetime, null: true
end
end
class IncreateTraceColunmLimit < ActiveRecord::Migration
def up
change_column :builds, :trace, :text, :limit => 1073741823
end
def down
end
end
class AddTmpFileToBuild < ActiveRecord::Migration
def change
add_column :builds, :tmp_file, :string
end
end
class AddBeforeShaToBuild < ActiveRecord::Migration
def change
add_column :builds, :before_sha, :string, null: true
end
end
class AddScheduleToProjects < ActiveRecord::Migration
def change
add_column :projects, :always_build, :boolean, default: false, null: false
add_column :projects, :polling_interval, :string, null: true
end
end
class ChangeScheduleInvertal < ActiveRecord::Migration
def up
if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
connection.execute(%q{
ALTER TABLE projects
ALTER COLUMN polling_interval
TYPE integer USING CAST(polling_interval AS integer)
})
else
change_column :projects, :polling_interval, :integer, null: true
end
end
def down
if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
connection.execute(%q{
ALTER TABLE projects
ALTER COLUMN polling_interval
TYPE integer USING CAST(polling_interval AS varchar)
})
else
change_column :projects, :polling_interval, :string, null: true
end
end
end
class AddPublicFlagToProject < ActiveRecord::Migration
def change
add_column :projects, :public, :boolean, null: false, default: false
end
end
class AddDataFieldToBuild < ActiveRecord::Migration
def change
add_column :builds, :push_data, :text
end
end
class RemovePathFieldFromProject < ActiveRecord::Migration
def up
remove_column :projects, :path
end
def down
end
end
class CreateRunners < ActiveRecord::Migration
def change
create_table :runners do |t|
t.string :token
t.text :public_key
t.timestamps
end
end
end
class AddRunnerIdToBuild < ActiveRecord::Migration
def change
add_column :builds, :runner_id, :integer
end
end
class RemoveUsersTable < ActiveRecord::Migration
def up
drop_table :users
end
end
class AddMoreFieldsToProject < ActiveRecord::Migration
def change
add_column :projects, :ssh_url_to_repo, :string
end
end
class CreateRunnerProjects < ActiveRecord::Migration
def change
create_table :runner_projects do |t|
t.integer :runner_id, null: false
t.integer :project_id, null: false
t.timestamps
end
end
end
class AddProjectGitlabIdToProject < ActiveRecord::Migration
def change
add_column :projects, :gitlab_id, :integer
end
end
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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