Merge branch 'master' into 'backstage/gb/rename-ci-cd-processing-sidekiq-queues'

# Conflicts:
#   db/schema.rb
This commit is contained in:
Kamil Trzciński 2017-08-25 12:10:53 +00:00
commit a653c8ead4
474 changed files with 2906 additions and 1594 deletions

View File

@ -6,6 +6,7 @@
},
"extends": "airbnb-base",
"globals": {
"__webpack_public_path__": true,
"_": false,
"gl": false,
"gon": false,

View File

@ -2,6 +2,180 @@
documentation](doc/development/changelog.md) for instructions on adding your own
entry.
## 9.5.1 (2017-08-23)
- [FIXED] Fix merge request pipeline status when pipeline has errors. !13664
- [FIXED] Commit rows would occasionally render with the wrong language.
- [FIXED] Fix caching of future broadcast messages.
- [FIXED] Only require Sidekiq throttling library when enabled, to reduce cache misses.
- Raise Housekeeping timeout to 24 hours. !13719
## 9.5.0 (2017-08-22)
- [FIXED] Fix timeouts when creating projects in groups with many members. !13508
- [FIXED] Improve API pagination headers when no record found. !13629 (Jordan Patterson)
- [FIXED] Fix deleting GitLab Pages files when a project is removed. !13631
- [FIXED] Fix commit list not loading the correct page when scrolling.
- [OTHER] Cache the number of forks of a project. !13535
- GPG signed commits integration. !9546 (Alexis Reigel)
- Alert the user if a Wiki page changed while they were editing it in order to prevent overwriting changes. !9707 (Hiroyuki Sato)
- Add custom linter for inline JavaScript to haml_lint. !9742 (winniehell)
- Add /shrug and /tableflip commands. !10068 (Alex Ives)
- Allow wiki pages to be renamed in the UI. !10069 (wendy0402)
- Insert user name directly without encoding. !10085 (Nathan Neulinger <nneul@neulinger.org>)
- Avoid plucking Todo ids in TodoService. !10845
- Handle errors while a project is being deleted asynchronously. !11088
- Decrease ABC threshold to 56.96. !11227 (Maxim Rydkin)
- Remove Mattermost team when deleting a group. !11362
- Block access to failing repository storage. !11449
- Add coordinator url to admin area runner page. !11603
- Allow testing any events for project hooks and system hooks. !11728 (Alexander Randa (@randaalex))
- Disallow running the pipeline if ref is protected and user cannot merge the branch or create the tag. !11910
- Remove project_key from the Jira configuration. !12050
- Add CSRF token verification to API. !12154 (Vitaliy @blackst0ne Klachkov)
- Fixes needed when GitLab sign-in is not enabled. !12491 (Robin Bobbitt)
- Lazy load images for better Frontend performance. !12503
- Replaces dashboard/event_filters.feature spinach with rspec. !12651 (Alexander Randa (@randaalex))
- Toggle import description with import_sources_enabled. !12691 (Brianna Kicia)
- Bump scss-lint to 0.54.0. !12733 (Takuya Noguchi)
- Enable SpaceAfterComma in scss-lint. !12734 (Takuya Noguchi)
- Remove CSS for nprogress removed. !12737 (Takuya Noguchi)
- Enable UnnecessaryParentReference in scss-lint. !12738 (Takuya Noguchi)
- Extract "@request.env[devise.mapping] = Devise.mappings[:user]" to a test helper. !12742 (Jacopo Beschi @jacopo-beschi)
- Enable ImportPath in scss-lint. !12749 (Takuya Noguchi)
- Enable PropertySpelling in scss-lint. !12752 (Takuya Noguchi)
- Add API for protected branches to allow for wildcard matching and no access restrictions. !12756 (Eric Yu)
- refactor initializations in dropzone_input.js. !12768 (Brandon Everett)
- Improve CSS for global nav dropdown UI. !12772 (Takuya Noguchi)
- Remove public/ci/favicon.ico. !12803 (Takuya Noguchi)
- Enable DeclarationOrder in scss-lint. !12805 (Takuya Noguchi)
- Increase width of dropdown menus automatically. !12809 (Thomas Wucher)
- Enable BangFormat in scss-lint [ci skip]. !12815 (Takuya Noguchi)
- Added /duplicate quick action to close a duplicate issue. !12845 (Ryan Scott)
- Make all application-settings accessible through the API. !12851
- Remove Inactive Personal Access Tokens list from Access Tokens page. !12866
- Replaces dashboard/dashboard.feature spinach with rspec. !12876 (Alexander Randa (@randaalex))
- Reduce memory usage of the GitHub importer. !12886
- Bump fog-core to 1.44.3 and fog providers' plugins to latest. !12897 (Takuya Noguchi)
- Use only CSS to truncate commit message in blame. !12900 (Takuya Noguchi)
- Protect manual actions against protected tag too. !12908
- Allow to configure automatic retry of a failed CI/CD job. !12909
- Remove help message about prioritized labels for non-members. !12912 (Takuya Noguchi)
- Add link to doc/api/ci/lint.md. !12914 (Takuya Noguchi)
- Add RequestCache which makes caching with RequestStore easier. !12920
- Free up some top level words, reject top level groups named like files in the public folder. !12932
- Extend API for Group Secret Variable. !12936
- Hide description about protected branches to non-member. !12945 (Takuya Noguchi)
- Support custom directory in gitlab:backup:create task. !12984 (Markus Koller)
- Raise guessed encoding confidence threshold to 50. !12990
- Add author_id & assignee_id param to /issues API. !13004
- Fix today day highlight in calendar. !13048
- Prevent LDAP login callback from being called with a GET request. !13059
- Add top-level merge_requests API endpoint. !13060
- Handle maximum pages artifacts size correctly. !13072
- Enable gitaly_post_upload_pack by default. !13078
- Add Prometheus metrics exporter to Sidekiq. !13082
- Fix improperly skipped backups of wikis. !13096
- Projects can be created from templates. !13108
- Fix the /projects/:id/repository/branches endpoint to handle dots in the branch name when the project full path contains a `/`. !13115
- Fix project logos that are not centered vertically on list pages. !13124 (Florian Lemaitre)
- Derive project path from import URL. !13131
- Fix deletion of deploy keys linked to other projects. !13162
- repository archive download url now ends with selected file extension. !13178 (haseebeqx)
- Show auto-generated avatars for Groups without avatars. !13188
- Allow any logged in users to read_users_list even if it's restricted. !13201
- Unlock stuck merge request and set the proper state. !13207
- Fix timezone inconsistencies in user contribution graph. !13208
- Fix Issue board when using Ruby 2.4. !13220
- Don't rename namespace called system when upgrading from 9.1.x to 9.5. !13228
- Fix encoding error for WebHook logging. !13230 (Alexander Randa (@randaalex))
- Uniquify reserved word usernames on OAuth user creation. !13244 (Robin Bobbitt)
- Expose target_iid in Events API. !13247 (sue445)
- Add star for action scope, in order to delete image from registry. !13248 (jean)
- Make Delete Merged Branches handle wildcard protected branches correctly. !13251
- Fix an order of operations for CI connection error message in merge request widget. !13252
- Don't send rejection mails for all auto-generated mails. !13254
- Expose noteable_iid in Note. !13265 (sue445)
- Fix pipeline_schedules pages when active schedule has an abnormal state. !13286
- Move some code from services to workers in order to improve performance. !13326
- Fix destroy of case-insensitive conflicting redirects. !13357
- Fix the /projects/:id/repository/tags endpoint to handle dots in the tag name when the project full path contains a `/`. !13368
- Fix the /projects/:id/repository/commits endpoint to handle dots in the ref name when the project full path contains a `/`. !13370
- Project pending delete no longer return 500 error in admins projects view. !13389
- Use full path of user's avatar in webhooks. !13401 (Vitaliy @blackst0ne Klachkov)
- Make GPGME temporary directory handling thread safe. !13481 (Alexis Reigel)
- Add support for kube_namespace in Metrics queries. !16169
- Fix bar chart does not display label at 0 hour. !35136 (Jason Dai)
- Use project_ref_path to create the link to a branch to fix links that 404.
- Declare related resources into V4 API entities.
- Add Slack and JIRA services counts to Usage Data.
- Prevent web hook and project service background jobs from going to the dead jobs queue.
- Display specific error message when JIRA test fails.
- clean up merge request widget UI.
- Associate Issues tab only with internal issues tracker.
- Remove events column from notification settings table.
- Clarifies and rearranges the input variables on the kubernetes integration page and adjusts the docs slightly to meet the same order.
- Respect blockquote line breaks in markdown.
- Update confidential issue UI - add confidential visibility and settings to sidebar.
- Add icons to contextual sidebars.
- Make contextual sidebar collapsible.
- Update Pipeline's badge count in Merge Request and Commits view to match real-time content.
- Added link to the MR widget that directs to the monitoring dashboard.
- Use jQuery to control scroll behavior in job log for cross browser consistency.
- move edit comment button outside of dropdown.
- Updates vue resource and code according to breaking changes.
- Add GitHub imported projects count to usage data.
- Rename about to overview for group and project page.
- Prevent disabled pagination button to be clicked.
- Remove coffee-rails gem. (Takuya Noguchi)
- Remove net-ssh gem. (Takuya Noguchi)
- Bump rubocop to 0.49.1 and rubocop-rspec to 1.15.1. (Takuya Noguchi)
- improve file upload/replace experience.
- allow closing Cycle Analytics intro box in firefox.
- Fix label creation from new list for subgroup projects.
- fix transient js error in rspec tests.
- fix jump to next discussion button.
- Fix translations for Star/Unstar in JS file.
- Improve mobile sidebar.
- Rename Pipelines tab to CI / CD in new navigation.
- Fix display of new diff comments after changing b between diff views.
- Store & use ConvDev percentages returned by the Version app.
- Fixes new issue button for failed job returning 404.
- Align OR separator to center in new project page.
- Add filtered search to group issue dashboard.
- Cache Appearance instances in Redis.
- Fixed breadcrumbs title aggressively collapsing.
- Better caching and indexing of broadcast messages.
- Moved diff changed files into a dropdown.
- Improve performance of large (initial) push into default branch.
- Improve performance of checking for projects on the projects dashboard.
- Eager load project creators for project dashboards.
- Modify if condition to be more readable.
- Fix links to group milestones from issue and merge request sidebar.
- Remove hidden symlinks from project import files.
- Fixed sign-in restrictions buttons not toggling active state.
- Fix replying to commit comments on merge requests created from forks.
- Support Markdown references, autocomplete, and quick actions for group milestones.
- Cache recent projects for group-level new resource creation.
- Fix API responses when dealing with txt files.
- Fix project milestones import when projects belongs to a group.
- Fix Mattermost integration.
- Memoize the number of personal projects a user has to reduce COUNT queries.
- Merge issuable "reopened" state into "opened".
- Migrate events into a new format to reduce the storage necessary and improve performance.
- MR branch link now links to tree instead of commits.
- Use Prev/Next pagination for exploring projects.
- Pass before_script and script as-is preserving arrays.
- Change project FK migration to skip existing FKs.
- Remove redundant query when retrieving the most recent push of a user.
- Re-organise "issues" indexes for faster ordering.
- Disallow Git URLs that include a username or hostname beginning with a non-alphanumeric character.
- Fix search box losing focus when typing.
- Add structured logging for Rails processes.
- Skip oAuth authorization for trusted applications.
- Use a specialized class for querying events to improve performance.
- Update build badges to be pipeline badges and display passing instead of success.
## 9.4.5 (2017-08-14)
- Fix deletion of deploy keys linked to other projects. !13162

View File

@ -207,9 +207,6 @@ gem 'kubeclient', '~> 2.2.0'
# d3
gem 'd3_rails', '~> 3.5.0'
# underscore-rails
gem 'underscore-rails', '~> 1.8.0'
# Sanitize user input
gem 'sanitize', '~> 2.0'
gem 'babosa', '~> 1.0.2'
@ -396,12 +393,12 @@ gem 'net-ssh', '~> 4.1.0'
# Required for ED25519 SSH host key support
group :ed25519 do
gem 'rbnacl-libsodium'
gem 'rbnacl', '~> 3.2'
gem 'rbnacl', '~> 4.0'
gem 'bcrypt_pbkdf', '~> 1.0'
end
# Gitaly GRPC client
gem 'gitaly', '~> 0.29.0'
gem 'gitaly-proto', '~> 0.31.0', require: 'gitaly'
gem 'toml-rb', '~> 0.3.15', require: false

View File

@ -203,7 +203,7 @@ GEM
multi_json
fast_gettext (1.4.0)
ffaker (2.4.0)
ffi (1.9.10)
ffi (1.9.18)
flay (2.8.1)
erubis (~> 2.7.0)
path_expander (~> 1.0)
@ -275,7 +275,7 @@ GEM
po_to_json (>= 1.0.0)
rails (>= 3.2.0)
gherkin-ruby (0.3.2)
gitaly (0.29.0)
gitaly-proto (0.31.0)
google-protobuf (~> 3.1)
grpc (~> 1.0)
github-linguist (4.7.6)
@ -682,7 +682,7 @@ GEM
rake (12.0.0)
rblineprof (0.3.6)
debugger-ruby_core_source (~> 1.3)
rbnacl (3.4.0)
rbnacl (4.0.2)
ffi
rbnacl-libsodium (1.0.11)
rbnacl (>= 3.0.1)
@ -899,7 +899,6 @@ GEM
uglifier (2.7.2)
execjs (>= 0.3.0)
json (>= 1.8.0)
underscore-rails (1.8.3)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.2)
@ -1019,7 +1018,7 @@ DEPENDENCIES
gettext (~> 3.2.2)
gettext_i18n_rails (~> 1.8.0)
gettext_i18n_rails_js (~> 1.2.0)
gitaly (~> 0.29.0)
gitaly-proto (~> 0.31.0)
github-linguist (~> 4.7.0)
gitlab-flowdock-git-hook (~> 1.0.1)
gitlab-markup (~> 1.5.1)
@ -1107,7 +1106,7 @@ DEPENDENCIES
rainbow (~> 2.2)
raindrops (~> 0.18)
rblineprof (~> 0.3.6)
rbnacl (~> 3.2)
rbnacl (~> 4.0)
rbnacl-libsodium
rdoc (~> 4.2)
re2 (~> 1.1.1)
@ -1163,7 +1162,6 @@ DEPENDENCIES
truncato (~> 0.7.8)
u2f (~> 0.2.1)
uglifier (~> 2.7.2)
underscore-rails (~> 1.8.0)
unf (~> 0.1.4)
unicorn (~> 5.1.0)
unicorn-worker-killer (~> 0.4.4)

View File

@ -1 +1 @@
9.5.0-pre
9.6.0-pre

View File

@ -96,18 +96,17 @@ const Api = {
.done(projects => callback(projects));
},
commitMultiple(id, data, callback) {
commitMultiple(id, data) {
// see https://docs.gitlab.com/ce/api/commits.html#create-a-commit-with-multiple-files-and-actions
const url = Api.buildUrl(Api.commitPath)
.replace(':id', id);
return $.ajax({
return this.wrapAjaxCall({
url,
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(data),
dataType: 'json',
})
.done(commitData => callback(commitData))
.fail(message => callback(message.responseJSON));
});
},
// Return text for a specific license

View File

@ -42,7 +42,9 @@ export default {
actions,
};
Store.submitCommitsLoading = true;
Service.commitFiles(payload, this.resetCommitState);
Service.commitFiles(payload)
.then(this.resetCommitState)
.catch(() => Flash('An error occured while committing your changes'));
},
resetCommitState() {

View File

@ -1,13 +1,11 @@
/* eslint-disable no-underscore-dangle, camelcase */
/* global __webpack_public_path__ */
import monacoContext from 'monaco-editor/dev/vs/loader';
monacoContext.require.config({
paths: {
vs: `${__webpack_public_path__}monaco-editor/vs`,
vs: `${__webpack_public_path__}monaco-editor/vs`, // eslint-disable-line camelcase
},
});
// eslint-disable-next-line no-underscore-dangle
window.__monaco_context__ = monacoContext;
export default monacoContext.require;

View File

@ -65,15 +65,17 @@ const RepoService = {
return urlArray.join('/');
},
commitFiles(payload, cb) {
Api.commitMultiple(Store.projectId, payload, (data) => {
if (data.short_id && data.stats) {
Flash(`Your changes have been committed. Commit ${data.short_id} with ${data.stats.additions} additions, ${data.stats.deletions} deletions.`, 'notice');
} else {
Flash(data.message);
}
cb();
});
commitFiles(payload) {
return Api.commitMultiple(Store.projectId, payload)
.then(this.commitFlash);
},
commitFlash(data) {
if (data.short_id && data.stats) {
window.Flash(`Your changes have been committed. Commit ${data.short_id} with ${data.stats.additions} additions, ${data.stats.deletions} deletions.`, 'notice');
} else {
window.Flash(data.message);
}
},
};

View File

@ -588,9 +588,10 @@ function UsersSelect(currentUser, els) {
if (showEmailUser && data.results.length === 0 && query.term.match(/^[^@]+@[^@]+$/)) {
var trimmed = query.term.trim();
emailUser = {
name: "Invite \"" + query.term + "\"",
name: "Invite \"" + query.term + "\" by email",
username: trimmed,
id: trimmed
id: trimmed,
invite: true
};
data.results.unshift(emailUser);
}
@ -642,7 +643,7 @@ UsersSelect.prototype.formatResult = function(user) {
} else {
avatar = gon.default_avatar_url;
}
return "<div class='user-result " + (!user.username ? 'no-username' : void 0) + "'> <div class='user-image'><img class='avatar avatar-inline s32' src='" + avatar + "'></div> <div class='user-name dropdown-menu-user-full-name'>" + user.name + "</div> <div class='user-username dropdown-menu-user-username'>" + ("@" + user.username || "") + "</div> </div>";
return "<div class='user-result " + (!user.username ? 'no-username' : void 0) + "'> <div class='user-image'><img class='avatar avatar-inline s32' src='" + avatar + "'></div> <div class='user-name dropdown-menu-user-full-name'>" + user.name + "</div> <div class='user-username dropdown-menu-user-username'>" + (!user.invite ? "@" + _.escape(user.username) : "") + "</div> </div>";
};
UsersSelect.prototype.formatSelection = function(user) {

View File

@ -5,5 +5,5 @@
*/
if (gon && gon.webpack_public_path) {
__webpack_public_path__ = gon.webpack_public_path; // eslint-disable-line
__webpack_public_path__ = gon.webpack_public_path; // eslint-disable-line camelcase
}

View File

@ -78,7 +78,7 @@
&.s60 { font-size: 32px; line-height: 58px; }
&.s70 { font-size: 34px; line-height: 70px; }
&.s90 { font-size: 36px; line-height: 88px; }
&.s110 { font-size: 40px; line-height: 108px; font-weight: 300; }
&.s110 { font-size: 40px; line-height: 108px; font-weight: $gl-font-weight-normal; }
&.s140 { font-size: 72px; line-height: 138px; }
&.s160 { font-size: 96px; line-height: 158px; }
}

View File

@ -1,5 +1,5 @@
.badge {
font-weight: normal;
font-weight: $gl-font-weight-normal;
background-color: $badge-bg;
color: $badge-color;
vertical-align: baseline;

View File

@ -8,7 +8,7 @@
text-align: center;
padding: 20px;
color: $gl-text-color;
font-weight: normal;
font-weight: $gl-font-weight-normal;
font-size: 14px;
line-height: 36px;
@ -213,7 +213,7 @@
h1 {
display: inline;
font-weight: normal;
font-weight: $gl-font-weight-normal;
font-size: 24px;
color: $gl-text-color;
}

View File

@ -1,7 +1,7 @@
@mixin btn-default {
border-radius: 3px;
font-size: $gl-font-size;
font-weight: 400;
font-weight: $gl-font-weight-normal;
padding: $gl-vert-padding $gl-btn-padding;
&:focus,

View File

@ -52,13 +52,13 @@
.pika-label {
color: $gl-text-color-secondary;
font-size: 14px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
th {
padding: 2px 0;
color: $note-disabled-comment-color;
font-weight: normal;
font-weight: $gl-font-weight-normal;
text-transform: lowercase;
border-top: 1px solid $calendar-border-color;
}
@ -88,7 +88,7 @@
.is-today {
.pika-day {
color: inherit;
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
}

View File

@ -36,12 +36,12 @@
color: $common-gray;
font-size: 14px;
margin-bottom: 12px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
line-height: 24px;
}
.bold {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
.tab-content {
@ -89,7 +89,7 @@ hr {
}
}
.item-title { font-weight: 600; }
.item-title { font-weight: $gl-font-weight-bold; }
/** FLASH message **/
.author_link,
@ -118,18 +118,18 @@ table a code {
span.update-author {
display: block;
color: $update-author-color;
font-weight: normal;
font-weight: $gl-font-weight-normal;
font-style: italic;
strong {
font-weight: bold;
font-weight: $gl-font-weight-bold;
font-style: normal;
}
}
.user-mention {
color: $user-mention-color;
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
.field_with_errors {
@ -222,7 +222,7 @@ li.note {
text-align: center;
background: $error-bg;
color: $white-light;
font-weight: bold;
font-weight: $gl-font-weight-bold;
a {
color: $white-light;
@ -339,7 +339,7 @@ table {
.header-with-avatar {
h3 {
margin: 0;
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
.username {

View File

@ -195,7 +195,7 @@
margin-top: 2px;
margin-bottom: 0;
font-size: 14px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
padding: 8px 0;
background-color: $white-light;
border: 1px solid $dropdown-border-color;
@ -268,7 +268,7 @@
}
.dropdown-bold-header {
font-weight: 600;
font-weight: $gl-font-weight-bold;
line-height: 22px;
padding: 0 16px;
}
@ -432,7 +432,7 @@
.dropdown-menu-user-full-name {
display: block;
font-weight: 500;
font-weight: $gl-font-weight-normal;
line-height: 16px;
text-overflow: ellipsis;
overflow: hidden;
@ -468,7 +468,7 @@
&.is-indeterminate,
&.is-active {
font-weight: 600;
font-weight: $gl-font-weight-bold;
color: $gl-text-color;
&::before {
@ -502,7 +502,7 @@
position: relative;
padding: 2px 25px 10px;
margin: 0 10px 10px;
font-weight: 600;
font-weight: $gl-font-weight-bold;
line-height: 1;
text-align: center;
text-overflow: ellipsis;
@ -685,7 +685,7 @@
.dropdown-menu-inner-title {
display: block;
color: $gl-text-color;
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
.dropdown-menu-inner-content {

View File

@ -371,7 +371,7 @@
}
> .value {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
@ -452,7 +452,7 @@
.dropdown-light-content {
font-size: 14px;
font-weight: 400;
font-weight: $gl-font-weight-normal;
}
.dropdown-user {

View File

@ -25,7 +25,7 @@
a.flash-action {
margin-left: 5px;
text-decoration: none;
font-weight: normal;
font-weight: $gl-font-weight-normal;
border-bottom: 1px solid;
&:hover {

View File

@ -32,7 +32,7 @@ label {
}
&.label-light {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
@ -73,7 +73,7 @@ label {
margin-right: 0;
.control-label {
font-weight: bold;
font-weight: $gl-font-weight-bold;
padding-top: 4px;
}
@ -157,7 +157,7 @@ label {
.form-group .control-label,
.form-group .control-label-full-width {
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
.form-control::-webkit-input-placeholder {

View File

@ -160,7 +160,7 @@ header {
li {
&.active a {
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
}
}
@ -250,7 +250,7 @@ header {
font-size: 18px;
line-height: 22px;
display: inline-block;
font-weight: normal;
font-weight: $gl-font-weight-normal;
color: $gl-text-color;
vertical-align: top;
white-space: nowrap;
@ -326,7 +326,7 @@ header {
.badge {
position: inherit;
top: -8px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
margin-left: -11px;
font-size: 11px;
color: $white-light;

View File

@ -113,7 +113,7 @@ ul.content-list {
}
.title {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
a {
@ -212,7 +212,7 @@ ul.content-list {
}
.row-title {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
.row-second-line {

View File

@ -43,7 +43,7 @@
background: $gray-light;
a {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}

View File

@ -8,7 +8,7 @@
}
.text-danger {
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
}

View File

@ -70,7 +70,7 @@
&.active a {
border-bottom: 2px solid $link-underline-blue;
color: $black;
font-weight: 600;
font-weight: $gl-font-weight-bold;
.badge {
color: $black;
@ -352,7 +352,7 @@
z-index: 300;
li.active {
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
}
}

View File

@ -43,7 +43,7 @@
.commit-committer-link,
.commit-author-link {
color: $gl-text-color;
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
.commit-info {

View File

@ -76,7 +76,7 @@
}
.select2-results li.select2-result-with-children > .select2-result-label {
font-weight: 600;
font-weight: $gl-font-weight-bold;
color: $gl-text-color;
}
@ -227,7 +227,7 @@
}
.group-name {
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
.group-path {
@ -252,12 +252,12 @@
.namespace-result {
.namespace-kind {
color: $namespace-kind-color;
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
.namespace-path {
margin-left: 10px;
font-weight: bolder;
font-weight: $gl-font-weight-bold;
}
}
@ -283,7 +283,7 @@
padding: 0 1px;
.select2-match {
font-weight: bold;
font-weight: $gl-font-weight-bold;
text-decoration: none;
}

View File

@ -30,7 +30,7 @@
.snippet-title {
font-size: 24px;
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
.snippet-edited-ago {

View File

@ -32,7 +32,7 @@ table {
th {
background-color: $gray-light;
font-weight: normal;
font-weight: $gl-font-weight-normal;
border-bottom: none;
&.wide {

View File

@ -103,7 +103,7 @@ summary {
padding: 4px 5px;
font-size: 12px;
font-style: normal;
font-weight: normal;
font-weight: $gl-font-weight-normal;
display: inline-block;
&.label-gray {
@ -165,7 +165,7 @@ summary {
.panel-heading {
padding: 6px 15px;
font-size: 13px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
a {
color: $panel-heading-link-color;

View File

@ -13,6 +13,9 @@
img {
/*max-width: 100%;*/
margin: 0 0 8px;
}
img.lazy {
min-width: 200px;
min-height: 100px;
background-color: $gray-lightest;
@ -71,7 +74,7 @@
h1 {
font-size: 1.75em;
font-weight: 600;
font-weight: $gl-font-weight-bold;
margin: 24px 0 16px;
padding-bottom: 0.3em;
border-bottom: 1px solid $white-dark;
@ -84,7 +87,7 @@
h2 {
font-size: 1.5em;
font-weight: 600;
font-weight: $gl-font-weight-bold;
margin: 24px 0 16px;
padding-bottom: 0.3em;
border-bottom: 1px solid $white-dark;
@ -277,7 +280,7 @@ body {
margin-top: $gl-padding;
line-height: 1.3;
font-size: 1.25em;
font-weight: 600;
font-weight: $gl-font-weight-bold;
&:last-child {
margin-bottom: 0;
@ -288,7 +291,7 @@ body {
margin-top: 0;
line-height: 1.3;
font-size: 1.25em;
font-weight: 600;
font-weight: $gl-font-weight-bold;
margin: 12px 7px;
}
@ -299,11 +302,11 @@ h4,
h5,
h6 {
color: $gl-text-color;
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
.light-header {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
/** CODE **/

View File

@ -111,6 +111,8 @@ $well-light-text-color: #5b6169;
* Text
*/
$gl-font-size: 14px;
$gl-font-weight-normal: 400;
$gl-font-weight-bold: 600;
$gl-text-color: #2e2e2e;
$gl-text-color-secondary: #707070;
$gl-text-color-tertiary: #949494;

View File

@ -69,7 +69,7 @@
.well-centered {
h1 {
font-weight: normal;
font-weight: $gl-font-weight-normal;
text-align: center;
font-size: 48px;
}

View File

@ -204,11 +204,11 @@ $dark-il: #de935f;
.cs { color: $dark-cs; } /* Comment.Special */
.gd { color: $dark-gd; } /* Generic.Deleted */
.ge { font-style: italic; } /* Generic.Emph */
.gh { color: $dark-gh; font-weight: bold; } /* Generic.Heading */
.gh { color: $dark-gh; font-weight: $gl-font-weight-bold; } /* Generic.Heading */
.gi { color: $dark-gi; } /* Generic.Inserted */
.gp { color: $dark-gp; font-weight: bold; } /* Generic.Prompt */
.gs { font-weight: bold; } /* Generic.Strong */
.gu { color: $dark-gu; font-weight: bold; } /* Generic.Subheading */
.gp { color: $dark-gp; font-weight: $gl-font-weight-bold; } /* Generic.Prompt */
.gs { font-weight: $gl-font-weight-bold; } /* Generic.Strong */
.gu { color: $dark-gu; font-weight: $gl-font-weight-bold; } /* Generic.Subheading */
.kc { color: $dark-kc; } /* Keyword.Constant */
.kd { color: $dark-kd; } /* Keyword.Declaration */
.kn { color: $dark-kn; } /* Keyword.Namespace */

View File

@ -203,7 +203,7 @@ $monokai-gi: #a6e22e;
.c1 { color: $monokai-c1; } /* Comment.Single */
.cs { color: $monokai-cs; } /* Comment.Special */
.ge { font-style: italic; } /* Generic.Emph */
.gs { font-weight: bold; } /* Generic.Strong */
.gs { font-weight: $gl-font-weight-bold; } /* Generic.Strong */
.kc { color: $monokai-kc; } /* Keyword.Constant */
.kd { color: $monokai-kd; } /* Keyword.Declaration */
.kn { color: $monokai-kn; } /* Keyword.Namespace */

View File

@ -231,7 +231,7 @@ $solarized-dark-il: #2aa198;
.gi { color: $solarized-dark-gi; } /* Generic.Inserted */
.go { color: $solarized-dark-go; } /* Generic.Output */
.gp { color: $solarized-dark-gp; } /* Generic.Prompt */
.gs { color: $solarized-dark-gs; font-weight: bold; } /* Generic.Strong */
.gs { color: $solarized-dark-gs; font-weight: $gl-font-weight-bold; } /* Generic.Strong */
.gu { color: $solarized-dark-gu; } /* Generic.Subheading */
.gt { color: $solarized-dark-gt; } /* Generic.Traceback */
.kc { color: $solarized-dark-kc; } /* Keyword.Constant */

View File

@ -239,7 +239,7 @@ $solarized-light-il: #2aa198;
.gi { color: $solarized-light-gi; } /* Generic.Inserted */
.go { color: $solarized-light-go; } /* Generic.Output */
.gp { color: $solarized-light-gp; } /* Generic.Prompt */
.gs { color: $solarized-light-gs; font-weight: bold; } /* Generic.Strong */
.gs { color: $solarized-light-gs; font-weight: $gl-font-weight-bold; } /* Generic.Strong */
.gu { color: $solarized-light-gu; } /* Generic.Subheading */
.gt { color: $solarized-light-gt; } /* Generic.Traceback */
.kc { color: $solarized-light-kc; } /* Keyword.Constant */

View File

@ -211,12 +211,12 @@ $white-gc-bg: #eaf2f5;
.hll { background-color: $white-hll-bg; }
.c { color: $white-c; font-style: italic; }
.err { color: $white-err; background-color: $white-err-bg; }
.k { font-weight: bold; }
.o { font-weight: bold; }
.k { font-weight: $gl-font-weight-bold; }
.o { font-weight: $gl-font-weight-bold; }
.cm { color: $white-cm; font-style: italic; }
.cp { color: $white-cp; font-weight: bold; }
.cp { color: $white-cp; font-weight: $gl-font-weight-bold; }
.c1 { color: $white-c1; font-style: italic; }
.cs { color: $white-cs; font-weight: bold; font-style: italic; }
.cs { color: $white-cs; font-weight: $gl-font-weight-bold; font-style: italic; }
.gd { color: $white-gd; background-color: $white-gd-bg; }
.gd .x { color: $white-gd-x; background-color: $white-gd-x-bg; }
.ge { font-style: italic; }
@ -226,29 +226,29 @@ $white-gc-bg: #eaf2f5;
.gi .x { color: $white-gi-x; background-color: $white-gi-x-bg; }
.go { color: $white-go; }
.gp { color: $white-gp; }
.gs { font-weight: bold; }
.gu { color: $white-gu; font-weight: bold; }
.gs { font-weight: $gl-font-weight-bold; }
.gu { color: $white-gu; font-weight: $gl-font-weight-bold; }
.gt { color: $white-gt; }
.kc { font-weight: bold; }
.kd { font-weight: bold; }
.kn { font-weight: bold; }
.kp { font-weight: bold; }
.kr { font-weight: bold; }
.kt { color: $white-kt; font-weight: bold; }
.kc { font-weight: $gl-font-weight-bold; }
.kd { font-weight: $gl-font-weight-bold; }
.kn { font-weight: $gl-font-weight-bold; }
.kp { font-weight: $gl-font-weight-bold; }
.kr { font-weight: $gl-font-weight-bold; }
.kt { color: $white-kt; font-weight: $gl-font-weight-bold; }
.m { color: $white-m; }
.s { color: $white-s; }
.n { color: $white-n; }
.na { color: $white-na; }
.nb { color: $white-nb; }
.nc { color: $white-nc; font-weight: bold; }
.nc { color: $white-nc; font-weight: $gl-font-weight-bold; }
.no { color: $white-no; }
.ni { color: $white-ni; }
.ne { color: $white-ne; font-weight: bold; }
.nf { color: $white-nf; font-weight: bold; }
.ne { color: $white-ne; font-weight: $gl-font-weight-bold; }
.nf { color: $white-nf; font-weight: $gl-font-weight-bold; }
.nn { color: $white-nn; }
.nt { color: $white-nt; }
.nv { color: $white-nv; }
.ow { font-weight: bold; }
.ow { font-weight: $gl-font-weight-bold; }
.w { color: $white-w; }
.mf { color: $white-mf; }
.mh { color: $white-mh; }

View File

@ -152,12 +152,12 @@ span.highlight_word {
.hll { background-color: $highlighted-hll-bg; }
.c { color: $highlighted-c; font-style: italic; }
.err { color: $highlighted-err; background-color: $highlighted-err-bg; }
.k { font-weight: bold; }
.o { font-weight: bold; }
.k { font-weight: $gl-font-weight-bold; }
.o { font-weight: $gl-font-weight-bold; }
.cm { color: $highlighted-cm; font-style: italic; }
.cp { color: $highlighted-cp; font-weight: bold; }
.cp { color: $highlighted-cp; font-weight: $gl-font-weight-bold; }
.c1 { color: $highlighted-c1; font-style: italic; }
.cs { color: $highlighted-cs; font-weight: bold; font-style: italic; }
.cs { color: $highlighted-cs; font-weight: $gl-font-weight-bold; font-style: italic; }
.gd { color: $highlighted-gd; background-color: $highlighted-gd-bg; }
.gd .x { color: $highlighted-gd; background-color: $highlighted-gd-x-bg; }
.ge { font-style: italic; }
@ -167,29 +167,29 @@ span.highlight_word {
.gi .x { color: $highlighted-gi; background-color: $highlighted-gi-x-bg; }
.go { color: $highlighted-go; }
.gp { color: $highlighted-gp; }
.gs { font-weight: bold; }
.gu { color: $highlighted-gu; font-weight: bold; }
.gs { font-weight: $gl-font-weight-bold; }
.gu { color: $highlighted-gu; font-weight: $gl-font-weight-bold; }
.gt { color: $highlighted-gt; }
.kc { font-weight: bold; }
.kd { font-weight: bold; }
.kn { font-weight: bold; }
.kp { font-weight: bold; }
.kr { font-weight: bold; }
.kt { color: $highlighted-kt; font-weight: bold; }
.kc { font-weight: $gl-font-weight-bold; }
.kd { font-weight: $gl-font-weight-bold; }
.kn { font-weight: $gl-font-weight-bold; }
.kp { font-weight: $gl-font-weight-bold; }
.kr { font-weight: $gl-font-weight-bold; }
.kt { color: $highlighted-kt; font-weight: $gl-font-weight-bold; }
.m { color: $highlighted-m; }
.s { color: $highlighted-s; }
.n { color: $highlighted-n; }
.na { color: $highlighted-na; }
.nb { color: $highlighted-nb; }
.nc { color: $highlighted-nc; font-weight: bold; }
.nc { color: $highlighted-nc; font-weight: $gl-font-weight-bold; }
.no { color: $highlighted-no; }
.ni { color: $highlighted-ni; }
.ne { color: $highlighted-ne; font-weight: bold; }
.nf { color: $highlighted-nf; font-weight: bold; }
.ne { color: $highlighted-ne; font-weight: $gl-font-weight-bold; }
.nf { color: $highlighted-nf; font-weight: $gl-font-weight-bold; }
.nn { color: $highlighted-nn; }
.nt { color: $highlighted-nt; }
.nv { color: $highlighted-nv; }
.ow { font-weight: bold; }
.ow { font-weight: $gl-font-weight-bold; }
.w { color: $highlighted-w; }
.mf { color: $highlighted-mf; }
.mh { color: $highlighted-mh; }

View File

@ -134,7 +134,7 @@ header.navbar-gitlab-new {
li {
.badge {
box-shadow: none;
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
}
@ -193,7 +193,7 @@ header.navbar-gitlab-new {
&.active > a {
box-shadow: inset 0 -3px 0 $indigo-500;
color: $white-light;
font-weight: 700;
font-weight: $gl-font-weight-bold;
}
> a {
@ -371,7 +371,7 @@ header.navbar-gitlab-new {
> a {
&:last-of-type:not(:first-child) {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
}
@ -411,7 +411,7 @@ header.navbar-gitlab-new {
.breadcrumbs-sub-title {
margin: 2px 0;
font-size: 16px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
line-height: 1;
ul {
@ -430,7 +430,7 @@ header.navbar-gitlab-new {
}
&:last-child a {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}

View File

@ -46,7 +46,7 @@ $new-sidebar-collapsed-width: 50px;
a {
border-bottom: 1px solid $border-color;
font-weight: 600;
font-weight: $gl-font-weight-bold;
display: flex;
align-items: center;
padding: 10px 16px 10px 10px;
@ -70,8 +70,7 @@ $new-sidebar-collapsed-width: 50px;
background-color: $white-light;
}
.project-title,
.group-title {
.sidebar-context-title {
overflow: hidden;
text-overflow: ellipsis;
}
@ -109,7 +108,7 @@ $new-sidebar-collapsed-width: 50px;
}
.badge,
.project-title {
.sidebar-context-title {
display: none;
}
@ -160,7 +159,7 @@ $new-sidebar-collapsed-width: 50px;
> a {
color: $active-color;
font-weight: 700;
font-weight: $gl-font-weight-bold;
}
svg {
@ -308,7 +307,7 @@ $new-sidebar-collapsed-width: 50px;
.badge {
color: $active-color;
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
.sidebar-sub-level-items {
@ -474,6 +473,6 @@ $new-sidebar-collapsed-width: 50px;
border-bottom-color: $active-border;
.badge {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}

View File

@ -471,7 +471,7 @@
padding-right: 35px;
> strong {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
}

View File

@ -277,7 +277,7 @@
}
.trigger-build-variable {
font-weight: normal;
font-weight: $gl-font-weight-normal;
color: $code-color;
}
@ -378,7 +378,7 @@
}
&.active {
font-weight: bold;
font-weight: $gl-font-weight-bold;
.fa-arrow-right {
display: block;

View File

@ -22,7 +22,7 @@
vertical-align: middle !important;
a {
font-weight: normal;
font-weight: $gl-font-weight-normal;
text-decoration: none;
}
}

View File

@ -213,7 +213,7 @@
.commit-sha {
font-size: 14px;
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
@ -286,6 +286,9 @@
.gpg-status-box {
padding: 2px 10px;
margin-right: $gl-padding;
&:empty {
display: none;
}
@ -303,7 +306,7 @@
.gpg-popover-status {
display: flex;
align-items: center;
font-weight: normal;
font-weight: $gl-font-weight-normal;
line-height: 1.5;
}
@ -314,7 +317,6 @@
&.valid {
svg {
border: 1px solid $brand-success;
fill: $brand-success;
}
}
@ -322,7 +324,6 @@
&.invalid {
svg {
border: 1px solid $common-gray-light;
fill: $common-gray-light;
}
}

View File

@ -23,7 +23,7 @@ $space-between-cards: 8px;
line-height: 1;
color: $gl-text-color-secondary;
margin-left: 8px;
font-weight: 500;
font-weight: $gl-font-weight-normal;
a {
font-size: 18px;
@ -139,7 +139,7 @@ $space-between-cards: 8px;
.card-score-value {
font-size: 16px;
color: $gl-text-color;
font-weight: 500;
font-weight: $gl-font-weight-normal;
}
.card-score-big {
@ -147,7 +147,7 @@ $space-between-cards: 8px;
border-bottom: 1px solid $border-color;
font-size: 22px;
padding: 10px 0;
font-weight: 500;
font-weight: $gl-font-weight-normal;
}
.card-buttons {

View File

@ -68,7 +68,7 @@
}
.stage-name {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
@ -93,7 +93,7 @@
.header {
font-size: 30px;
line-height: 38px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
margin: 0;
}
@ -130,7 +130,7 @@
&.title {
line-height: 19px;
font-size: 14px;
font-weight: 600;
font-weight: $gl-font-weight-bold;
color: $gl-text-color;
}
@ -211,7 +211,7 @@
box-shadow: inset 2px 0 0 0 $active-item-blue;
.stage-name {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
@ -404,7 +404,7 @@
color: $gl-link-color;
line-height: 1.3;
vertical-align: top;
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
.fa {

View File

@ -40,7 +40,7 @@
// "Changes suppressed. Click to show." link
.show-suppressed-diff {
font-size: 110%;
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
}
@ -104,7 +104,7 @@
a {
float: left;
width: 35px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
&[disabled] {
cursor: default;
@ -395,7 +395,7 @@
background-color: transparent;
border: 0;
color: $gl-link-color;
font-weight: 600;
font-weight: $gl-font-weight-bold;
&:hover,
&:focus {

View File

@ -6,7 +6,7 @@
}
.environments-folder-name {
font-weight: normal;
font-weight: $gl-font-weight-normal;
padding-top: 20px;
}
@ -246,13 +246,13 @@
}
.text-metric-bold {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
.label-axis-text,
.text-metric-usage {
fill: $black;
font-weight: 500;
font-weight: $gl-font-weight-normal;
font-size: 12px;
}

View File

@ -57,7 +57,7 @@
.event-title {
@include str-truncated(calc(100% - 174px));
font-weight: 600;
font-weight: $gl-font-weight-bold;
color: $list-text-color;
}

View File

@ -271,7 +271,7 @@
}
.light {
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
.no-value {
@ -306,7 +306,7 @@
display: block;
margin-top: 4px;
font-size: 13px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
.hide-expanded {
@ -689,7 +689,7 @@
.issuable-info,
.task-status,
.issuable-updated-at {
font-weight: normal;
font-weight: $gl-font-weight-normal;
color: $gl-text-color-secondary;
a {

View File

@ -75,7 +75,7 @@ ul.related-merge-requests > li {
.merge-requests-title,
.related-branches-title {
font-size: 16px;
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
.merge-request-id {
@ -244,7 +244,7 @@ ul.related-merge-requests > li {
strong {
display: block;
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
}

View File

@ -22,7 +22,7 @@
}
h1:first-child {
font-weight: normal;
font-weight: $gl-font-weight-normal;
margin-bottom: 0.68em;
margin-top: 0;
font-size: 34px;
@ -38,7 +38,7 @@
}
a {
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
}
@ -54,7 +54,7 @@
padding: 15px;
.login-heading h3 {
font-weight: 300;
font-weight: $gl-font-weight-normal;
line-height: 1.5;
margin: 0 0 10px;
}
@ -186,7 +186,7 @@
}
label {
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
.submit-container {

View File

@ -46,7 +46,7 @@
}
strong {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
@ -221,7 +221,7 @@
}
.member {
font-weight: bold;
font-weight: $gl-font-weight-bold;
overflow-wrap: break-word;
word-break: break-all;
}

View File

@ -197,7 +197,7 @@
@extend .ref-name;
color: $gl-text-color;
font-weight: 600;
font-weight: $gl-font-weight-bold;
overflow: hidden;
word-break: break-all;
@ -228,7 +228,7 @@
.mr-widget-body {
h4 {
float: left;
font-weight: 600;
font-weight: $gl-font-weight-bold;
font-size: 14px;
line-height: inherit;
margin-top: 0;
@ -239,7 +239,7 @@
}
time {
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
}
@ -249,7 +249,7 @@
}
label {
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
.spacing {
@ -257,12 +257,12 @@
}
.bold {
font-weight: 600;
font-weight: $gl-font-weight-bold;
color: $gl-gray-light;
}
.state-label {
font-weight: 600;
font-weight: $gl-font-weight-bold;
padding-right: 10px;
}
@ -336,7 +336,7 @@
.text {
span {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
p {
@ -505,7 +505,7 @@
.panel-new-merge-request {
.panel-heading {
padding: 5px 10px;
font-weight: 600;
font-weight: $gl-font-weight-bold;
line-height: 25px;
}

View File

@ -7,7 +7,7 @@
padding: 10px 16px;
h4 {
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
.progress {
@ -81,7 +81,7 @@
}
.remaining-days strong {
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
.milestone-stat {

View File

@ -188,7 +188,7 @@
.close {
color: $white-light;
opacity: 0.85;
font-weight: normal;
font-weight: $gl-font-weight-normal;
&:hover {
opacity: 1;

View File

@ -12,7 +12,7 @@
.interval-pattern-form-group {
label {
margin-right: 10px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
&[for='custom'] {
margin-right: 0;

View File

@ -128,7 +128,7 @@
.branch-commit {
.ref-name {
font-weight: bold;
font-weight: $gl-font-weight-bold;
max-width: 120px;
overflow: hidden;
display: inline-block;
@ -272,7 +272,7 @@
.build-name {
float: right;
font-weight: 500;
font-weight: $gl-font-weight-normal;
}
.ci-status-icon-failed svg {
@ -281,7 +281,7 @@
.stage {
color: $gl-text-color-secondary;
font-weight: 500;
font-weight: $gl-font-weight-normal;
vertical-align: middle;
}
}
@ -420,7 +420,7 @@
.stage-name {
margin: 0 0 15px 10px;
font-weight: bold;
font-weight: $gl-font-weight-bold;
width: 176px;
white-space: nowrap;
overflow: hidden;
@ -580,7 +580,7 @@
vertical-align: bottom;
display: inline-block;
position: relative;
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
@mixin mini-pipeline-graph-color($color-light, $color-main, $color-dark) {
@ -724,7 +724,7 @@ button.mini-pipeline-graph-dropdown-toggle {
.mini-pipeline-graph-dropdown-item {
padding: 3px 7px 4px;
clear: both;
font-weight: normal;
font-weight: $gl-font-weight-normal;
line-height: 1.428571429;
white-space: nowrap;
margin: 0 5px;

View File

@ -83,7 +83,7 @@
&::after {
content: "\00B7"; // Middle Dot
padding: 0 6px;
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
&:last-child {
@ -277,7 +277,7 @@ table.u2f-registrations {
.oauth-application-show {
.scope-name {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
.scopes-list {

View File

@ -2,7 +2,7 @@
margin: -16px;
.alert-link {
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
}
@ -114,7 +114,7 @@
margin-top: 10px;
margin-bottom: 10px;
font-size: 24px;
font-weight: 400;
font-weight: $gl-font-weight-normal;
line-height: 1;
word-wrap: break-word;
@ -259,7 +259,7 @@
border-width: 1px;
border-style: solid;
font-size: 13px;
font-weight: 600;
font-weight: $gl-font-weight-bold;
line-height: 13px;
letter-spacing: .4px;
padding: 6px 14px;
@ -309,7 +309,7 @@
}
.option-title {
font-weight: normal;
font-weight: $gl-font-weight-normal;
display: inline-block;
color: $gl-text-color;
}
@ -575,7 +575,7 @@ a.deploy-project-label {
color: $gl-text-color-tertiary;
transform: translateY(-50%);
font-size: 12px;
font-weight: bold;
font-weight: $gl-font-weight-bold;
line-height: 20px;
// Mobile
@ -826,7 +826,7 @@ pre.light-well {
.new-protected-tag {
label {
margin-top: 6px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
}
@ -853,7 +853,7 @@ pre.light-well {
}
&.is-active {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}
@ -952,7 +952,7 @@ pre.light-well {
&::before {
font-family: FontAwesome;
font-weight: normal;
font-weight: $gl-font-weight-normal;
font-style: normal;
}
}

View File

@ -267,7 +267,7 @@
display: inline-block;
font-size: 10px;
text-transform: uppercase;
font-weight: bold;
font-weight: $gl-font-weight-bold;
color: $gray-darkest;
white-space: nowrap;
overflow: hidden;

View File

@ -30,7 +30,7 @@
}
h4 {
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
}

View File

@ -94,7 +94,7 @@ input[type="checkbox"]:hover {
&::before {
font-family: FontAwesome;
font-weight: normal;
font-weight: $gl-font-weight-normal;
font-style: normal;
}
}

View File

@ -29,5 +29,5 @@ table .sherlock-code {
.sherlock-line-samples-table .slow {
color: $red-500;
font-weight: bold;
font-weight: $gl-font-weight-bold;
}

View File

@ -108,14 +108,14 @@
margin: 0;
float: none;
display: inline-block;
font-weight: normal;
font-weight: $gl-font-weight-normal;
padding: 0 5px;
line-height: inherit;
font-size: 14px;
}
.action-name {
font-weight: normal;
font-weight: $gl-font-weight-normal;
}
.todo-body {
@ -262,6 +262,6 @@
}
a {
font-weight: 600;
font-weight: $gl-font-weight-bold;
}
}

View File

@ -231,7 +231,7 @@
}
.upload-link {
font-weight: normal;
font-weight: $gl-font-weight-normal;
color: $md-link-color;
}

View File

@ -1,7 +1,7 @@
.gitlab-ui-dev-kit {
> h2 {
margin: 35px 0 20px;
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
.example {

View File

@ -37,7 +37,7 @@
}
.light {
font-weight: normal;
font-weight: $gl-font-weight-normal;
color: $gl-text-color-secondary;
}
@ -89,7 +89,7 @@
h3 {
font-size: 19px;
font-weight: normal;
font-weight: $gl-font-weight-normal;
margin: $gl-padding 0;
}
}

View File

@ -281,7 +281,7 @@
$xterm-fg-255: #eee;
.term-bold {
font-weight: bold;
font-weight: $gl-font-weight-bold;
}
.term-italic {

View File

@ -17,7 +17,7 @@
.wiki h3 {
font-size: 18px;
font-weight: bold;
font-weight: 600;
}
header,

View File

@ -1,2 +1,11 @@
class Admin::LogsController < Admin::ApplicationController
def show
@loggers = [
Gitlab::AppLogger,
Gitlab::GitLogger,
Gitlab::EnvironmentLogger,
Gitlab::SidekiqLogger,
Gitlab::RepositoryCheckLogger
]
end
end

View File

@ -3,9 +3,9 @@ class Admin::ProjectsController < Admin::ApplicationController
before_action :group, only: [:show, :transfer]
def index
finder = Admin::ProjectsFinder.new(params: params, current_user: current_user)
@projects = finder.execute
@sort = finder.sort
params[:sort] ||= 'latest_activity_desc'
@sort = params[:sort]
@projects = Admin::ProjectsFinder.new(params: params, current_user: current_user).execute
respond_to do |format|
format.html

View File

@ -10,6 +10,14 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
end
end
if Gitlab::LDAP::Config.enabled?
Gitlab::LDAP::Config.available_servers.each do |server|
define_method server['provider_name'] do
ldap
end
end
end
# Extend the standard message generation to accept our custom exception
def failure_message
exception = env["omniauth.error"]

View File

@ -4,7 +4,6 @@ class Projects::ServicesController < Projects::ApplicationController
# Authorize
before_action :authorize_admin_project!
before_action :service, only: [:edit, :update, :test]
before_action :update_service, only: [:update, :test]
respond_to :html
@ -14,6 +13,8 @@ class Projects::ServicesController < Projects::ApplicationController
end
def update
@service.attributes = service_params[:service]
if @service.save(context: :manual_change)
redirect_to(project_settings_integrations_path(@project), notice: success_message)
else
@ -24,7 +25,7 @@ class Projects::ServicesController < Projects::ApplicationController
def test
message = {}
if @service.can_test?
if @service.can_test? && @service.update_attributes(service_params[:service])
data = @service.test_data(project, current_user)
outcome = @service.test(data)
@ -50,10 +51,6 @@ class Projects::ServicesController < Projects::ApplicationController
end
end
def update_service
@service.assign_attributes(service_params[:service])
end
def service
@service ||= @project.find_or_initialize_service(params[:id])
end

View File

@ -5,14 +5,6 @@ class SessionsController < Devise::SessionsController
skip_before_action :check_two_factor_requirement, only: [:destroy]
# Explicitly call protect from forgery before anything else. Otherwise the
# CSFR-token might be cleared before authentication is done. This was the case
# when LDAP was enabled and the `OmniauthCallbacksController` is loaded
#
# *Note:* `prepend: true` is the default for rails4, but this will be changed
# to `prepend: false` in rails5.
protect_from_forgery prepend: true, with: :exception
prepend_before_action :check_initial_setup, only: [:new]
prepend_before_action :authenticate_with_two_factor,
if: :two_factor_enabled?, only: [:create]

View File

@ -1,33 +1,67 @@
class Admin::ProjectsFinder
attr_reader :sort, :namespace_id, :visibility_level, :with_push,
:abandoned, :last_repository_check_failed, :archived,
:personal, :name, :page, :current_user
attr_reader :params, :current_user
def initialize(params:, current_user:)
@params = params
@current_user = current_user
@sort = params.fetch(:sort) { 'latest_activity_desc' }
@namespace_id = params[:namespace_id]
@visibility_level = params[:visibility_level]
@with_push = params[:with_push]
@abandoned = params[:abandoned]
@last_repository_check_failed = params[:last_repository_check_failed]
@archived = params[:archived]
@personal = params[:personal]
@name = params[:name]
@page = params[:page]
end
def execute
items = Project.without_deleted.with_statistics
items = items.in_namespace(namespace_id) if namespace_id.present?
items = items.where(visibility_level: visibility_level) if visibility_level.present?
items = items.with_push if with_push.present?
items = items.abandoned if abandoned.present?
items = items.where(last_repository_check_failed: true) if last_repository_check_failed.present?
items = items.non_archived unless archived.present?
items = items.personal(current_user) if personal.present?
items = items.search(name) if name.present?
items = items.sort(sort)
items.includes(:namespace).order("namespaces.path, projects.name ASC").page(page)
items = by_namespace_id(items)
items = by_visibilty_level(items)
items = by_with_push(items)
items = by_abandoned(items)
items = by_last_repository_check_failed(items)
items = by_archived(items)
items = by_personal(items)
items = by_name(items)
items = sort(items)
items.includes(:namespace).order("namespaces.path, projects.name ASC").page(params[:page])
end
private
def by_namespace_id(items)
params[:namespace_id].present? ? items.in_namespace(params[:namespace_id]) : items
end
def by_visibilty_level(items)
params[:visibility_level].present? ? items.where(visibility_level: params[:visibility_level]) : items
end
def by_with_push(items)
params[:with_push].present? ? items.with_push : items
end
def by_abandoned(items)
params[:abandoned].present? ? items.abandoned : items
end
def by_last_repository_check_failed(items)
params[:last_repository_check_failed].present? ? items.where(last_repository_check_failed: true) : items
end
def by_archived(items)
if params[:archived] == 'only'
items.archived
elsif params[:archived].blank?
items.non_archived
else
items
end
end
def by_personal(items)
params[:personal].present? ? items.personal(current_user) : items
end
def by_name(items)
params[:name].present? ? items.search(params[:name]) : items
end
def sort(items)
sort = params.fetch(:sort) { 'latest_activity_desc' }
items.sort(sort)
end
end

View File

@ -125,9 +125,18 @@ class ProjectsFinder < UnionFinder
end
def by_archived(projects)
# Back-compatibility with the places where `params[:archived]` can be set explicitly to `false`
params[:non_archived] = !Gitlab::Utils.to_boolean(params[:archived]) if params.key?(:archived)
params[:non_archived] ? projects.non_archived : projects
if params[:non_archived]
projects.non_archived
elsif params.key?(:archived) # Back-compatibility with the places where `params[:archived]` can be set explicitly to `false`
if params[:archived] == 'only'
projects.archived
elsif Gitlab::Utils.to_boolean(params[:archived])
projects
else
projects.non_archived
end
else
projects
end
end
end

View File

@ -12,11 +12,18 @@ module AvatarsHelper
avatar_size = options[:size] || 16
user_name = options[:user].try(:name) || options[:user_name]
avatar_url = options[:url] || avatar_icon(options[:user] || options[:user_email], avatar_size)
data_attributes = { container: 'body' }
has_tooltip = options[:has_tooltip].nil? ? true : options[:has_tooltip]
data_attributes = {}
css_class = %W[avatar s#{avatar_size}].push(*options[:css_class])
if has_tooltip
css_class.push('has-tooltip')
data_attributes = { container: 'body' }
end
image_tag(
avatar_url,
class: %W[avatar has-tooltip s#{avatar_size}].push(*options[:css_class]),
class: css_class,
alt: "#{user_name}'s avatar",
title: user_name,
data: data_attributes,

View File

@ -114,7 +114,7 @@ module CommitsHelper
end
def commit_signature_badge_classes(additional_classes)
%w(btn status-box gpg-status-box) + Array(additional_classes)
%w(btn gpg-status-box) + Array(additional_classes)
end
protected

View File

@ -181,6 +181,7 @@ module EventsHelper
end
def event_commit_title(message)
message ||= ''
(message.split("\n").first || "").truncate(70)
rescue
"--broken encoding"

View File

@ -19,11 +19,21 @@ class BroadcastMessage < ActiveRecord::Base
after_commit :flush_redis_cache
def self.current
Rails.cache.fetch(CACHE_KEY) do
where('ends_at > :now AND starts_at <= :now', now: Time.zone.now)
.reorder(id: :asc)
.to_a
end
messages = Rails.cache.fetch(CACHE_KEY) { current_and_future_messages.to_a }
return messages if messages.empty?
now_or_future = messages.select(&:now_or_future?)
# If there are cached entries but none are to be displayed we'll purge the
# cache so we don't keep running this code all the time.
Rails.cache.delete(CACHE_KEY) if now_or_future.empty?
now_or_future.select(&:now?)
end
def self.current_and_future_messages
where('ends_at > :now', now: Time.zone.now).reorder(id: :asc)
end
def active?
@ -38,6 +48,18 @@ class BroadcastMessage < ActiveRecord::Base
ends_at < Time.zone.now
end
def now?
(starts_at..ends_at).cover?(Time.zone.now)
end
def future?
starts_at > Time.zone.now
end
def now_or_future?
now? || future?
end
def flush_redis_cache
Rails.cache.delete(CACHE_KEY)
end

View File

@ -46,7 +46,10 @@ module Ci
before_save :ensure_token
before_destroy { unscoped_project }
after_create :execute_hooks
after_create do |build|
run_after_commit { BuildHooksWorker.perform_async(build.id) }
end
after_commit :update_project_statistics_after_save, on: [:create, :update]
after_commit :update_project_statistics, on: :destroy

View File

@ -393,7 +393,8 @@ module Ci
def predefined_variables
[
{ key: 'CI_PIPELINE_ID', value: id.to_s, public: true },
{ key: 'CI_CONFIG_PATH', value: ci_yaml_file_path, public: true }
{ key: 'CI_CONFIG_PATH', value: ci_yaml_file_path, public: true },
{ key: 'CI_PIPELINE_SOURCE', value: source.to_s, public: true }
]
end

View File

@ -17,6 +17,10 @@ module Ci
validates :pipeline, presence: true, unless: :importing?
validates :name, presence: true, unless: :importing?
after_initialize do |stage|
self.status = DEFAULT_STATUS if self.status.nil?
end
state_machine :status, initial: :created do
event :enqueue do
transition created: :pending

View File

@ -406,7 +406,7 @@ class Event < ActiveRecord::Base
def body?
if push?
push_with_commits? || rm_ref?
push_with_commits?
elsif note?
true
else

View File

@ -50,7 +50,10 @@ class Issue < ActiveRecord::Base
scope :preload_associations, -> { preload(:labels, project: :namespace) }
scope :public_only, -> { where(confidential: false) }
after_save :expire_etag_cache
after_commit :update_project_counter_caches, on: :destroy
attr_spammable :title, spam_title: true
attr_spammable :description, spam_description: true
@ -266,6 +269,10 @@ class Issue < ActiveRecord::Base
end
end
def update_project_counter_caches
Projects::OpenIssuesCountService.new(project).refresh_cache
end
private
# Returns `true` if the given User can read the current Issue.

View File

@ -31,6 +31,7 @@ class MergeRequest < ActiveRecord::Base
after_create :ensure_merge_request_diff, unless: :importing?
after_update :reload_diff_if_branch_changed
after_commit :update_project_counter_caches, on: :destroy
# When this attribute is true some MR validation is ignored
# It allows us to close or modify broken merge requests
@ -682,9 +683,8 @@ class MergeRequest < ActiveRecord::Base
if !include_description && closes_issues_references.present?
message << "Closes #{closes_issues_references.to_sentence}"
end
message << "#{description}" if include_description && description.present?
message << "See merge request #{to_reference}"
message << "See merge request #{to_reference(full: true)}"
message.join("\n\n")
end
@ -936,6 +936,10 @@ class MergeRequest < ActiveRecord::Base
true
end
def update_project_counter_caches
Projects::OpenMergeRequestsCountService.new(target_project).refresh_cache
end
private
def write_ref

View File

@ -247,6 +247,7 @@ class Project < ActiveRecord::Base
scope :joined, ->(user) { where('namespace_id != ?', user.namespace_id) }
scope :starred_by, ->(user) { joins(:users_star_projects).where('users_star_projects.user_id': user.id) }
scope :visible_to_user, ->(user) { where(id: user.authorized_projects.select(:id).reorder(nil)) }
scope :archived, -> { where(archived: true) }
scope :non_archived, -> { where(archived: false) }
scope :for_milestones, ->(ids) { joins(:milestones).where('milestones.id' => ids).distinct }
scope :with_push, -> { joins(:events).where('events.action = ?', Event::PUSHED) }
@ -1017,7 +1018,7 @@ class Project < ActiveRecord::Base
name: name,
description: description,
web_url: web_url,
avatar_url: avatar_url,
avatar_url: avatar_url(only_path: false),
git_ssh_url: ssh_url_to_repo,
git_http_url: http_url_to_repo,
namespace: namespace.name,
@ -1167,7 +1168,11 @@ class Project < ActiveRecord::Base
end
def open_issues_count
issues.opened.count
Projects::OpenIssuesCountService.new(self).count
end
def open_merge_requests_count
Projects::OpenMergeRequestsCountService.new(self).count
end
def visibility_level_allowed_as_fork?(level = self.visibility_level)

View File

@ -24,6 +24,8 @@ class KubernetesService < DeploymentService
validates :token
end
before_validation :enforce_namespace_to_lower_case
validates :namespace,
allow_blank: true,
length: 1..63,
@ -207,4 +209,8 @@ class KubernetesService < DeploymentService
max_session_time: current_application_settings.terminal_max_session_time
}
end
def enforce_namespace_to_lower_case
self.namespace = self.namespace&.downcase
end
end

View File

@ -206,12 +206,18 @@ class Repository
end
def branch_exists?(branch_name)
branch_names.include?(branch_name)
return false unless raw_repository
@branch_exists_memo ||= Hash.new do |hash, key|
hash[key] = raw_repository.branch_exists?(key)
end
@branch_exists_memo[branch_name]
end
def ref_exists?(ref)
rugged.references.exist?(ref)
rescue Rugged::ReferenceError
!!raw_repository&.ref_exists?(ref)
rescue ArgumentError
false
end
@ -266,6 +272,7 @@ class Repository
def expire_branches_cache
expire_method_caches(%i(branch_names branch_count))
@local_branches = nil
@branch_exists_memo = nil
end
def expire_statistics_caches
@ -1185,7 +1192,7 @@ class Repository
end
def initialize_raw_repository
Gitlab::Git::Repository.new(project.repository_storage, disk_path + '.git')
Gitlab::Git::Repository.new(project.repository_storage, disk_path + '.git', Gitlab::GlRepository.gl_repository(project, false))
end
def circuit_breaker

View File

@ -17,7 +17,7 @@ module Commits
new_commit = create_commit!
success(result: new_commit)
rescue ValidationError, ChangeError, Gitlab::Git::Index::IndexError, Repository::CommitError, GitHooksService::PreReceiveError => ex
rescue ValidationError, ChangeError, Gitlab::Git::Index::IndexError, Repository::CommitError, Gitlab::Git::HooksService::PreReceiveError => ex
error(ex.message)
end

View File

@ -14,7 +14,7 @@ class CreateBranchService < BaseService
else
error('Invalid reference name')
end
rescue GitHooksService::PreReceiveError => ex
rescue Gitlab::Git::HooksService::PreReceiveError => ex
error(ex.message)
end

View File

@ -16,7 +16,7 @@ class DeleteBranchService < BaseService
else
error('Failed to remove branch')
end
rescue GitHooksService::PreReceiveError => ex
rescue Gitlab::Git::HooksService::PreReceiveError => ex
error(ex.message)
end

View File

@ -1,32 +0,0 @@
class GitHooksService
PreReceiveError = Class.new(StandardError)
attr_accessor :oldrev, :newrev, :ref
def execute(user, project, oldrev, newrev, ref)
@project = project
@user = Gitlab::GlId.gl_id(user)
@oldrev = oldrev
@newrev = newrev
@ref = ref
%w(pre-receive update).each do |hook_name|
status, message = run_hook(hook_name)
unless status
raise PreReceiveError, message
end
end
yield(self).tap do
run_hook('post-receive')
end
end
private
def run_hook(name)
hook = Gitlab::Git::Hook.new(name, @project)
hook.trigger(@user, oldrev, newrev, ref)
end
end

View File

@ -1,8 +1,10 @@
class GitOperationService
attr_reader :user, :repository
attr_reader :committer, :repository
def initialize(committer, new_repository)
committer = Gitlab::Git::Committer.from_user(committer) if committer.is_a?(User)
@committer = committer
def initialize(new_user, new_repository)
@user = new_user
@repository = new_repository
end
@ -118,9 +120,9 @@ class GitOperationService
end
def with_hooks(ref, newrev, oldrev)
GitHooksService.new.execute(
user,
repository.project,
Gitlab::Git::HooksService.new.execute(
committer,
repository,
oldrev,
newrev,
ref) do |service|

View File

@ -0,0 +1,45 @@
module Groups
class NestedCreateService < Groups::BaseService
attr_reader :group_path
def initialize(user, params)
@current_user, @params = user, params.dup
@group_path = @params.delete(:group_path)
end
def execute
return nil unless group_path
if group = Group.find_by_full_path(group_path)
return group
end
create_group_path
end
private
def create_group_path
group_path_segments = group_path.split('/')
last_group = nil
partial_path_segments = []
while subgroup_name = group_path_segments.shift
partial_path_segments << subgroup_name
partial_path = partial_path_segments.join('/')
new_params = params.reverse_merge(
path: subgroup_name,
name: subgroup_name,
parent: last_group
)
new_params[:visibility_level] ||= Gitlab::CurrentSettings.current_application_settings.default_group_visibility
last_group = Group.find_by_full_path(partial_path) || Groups::CreateService.new(current_user, new_params).execute
end
last_group
end
end
end

View File

@ -192,6 +192,8 @@ class IssuableBaseService < BaseService
def after_create(issuable)
# To be overridden by subclasses
issuable.update_project_counter_caches
end
def before_update(issuable)
@ -200,6 +202,8 @@ class IssuableBaseService < BaseService
def after_update(issuable)
# To be overridden by subclasses
issuable.update_project_counter_caches
end
def update(issuable)

View File

@ -27,6 +27,8 @@ module Issues
todo_service.new_issue(issuable, current_user)
user_agent_detail_service.create
resolve_discussions_with_issue(issuable)
super
end
def resolve_discussions_with_issue(issue)

Some files were not shown because too many files have changed in this diff Show More