Merge branch 'master' into ci-tables-ui-improvements
* master: (129 commits) Code style improvements remove require.context from network_bundle remove require.context from graphs_bundle remove require.context from filtered_search_bundle Ignore two Rails CVEs in bundler:audit job Remove Pages readme Change Pages redirect Add missing index.md to Pages docs Added double newline after file upload markdown insert Reorder main index items in Pages overview remove html comments remove <> wrapping text - part 3 wrapping text - part 2 [ci skip] fix link wrap text - part 1 - [ci skip] typo fix spelling, add intermediate cert link Improve `Gitlab::EeCompatCheck` by using the `git apply --3way` flag remove link to unfinished video ...
This commit is contained in:
commit
aeed48cf15
305 changed files with 3661 additions and 1447 deletions
|
@ -281,7 +281,7 @@ bundler:audit:
|
|||
- master@gitlab/gitlabhq
|
||||
- master@gitlab/gitlab-ee
|
||||
script:
|
||||
- "bundle exec bundle-audit check --update --ignore OSVDB-115941"
|
||||
- "bundle exec bundle-audit check --update --ignore OSVDB-115941 CVE-2016-6316 CVE-2016-6317"
|
||||
|
||||
migration paths:
|
||||
stage: test
|
||||
|
|
180
CHANGELOG.md
180
CHANGELOG.md
|
@ -2,6 +2,186 @@
|
|||
documentation](doc/development/changelog.md) for instructions on adding your own
|
||||
entry.
|
||||
|
||||
## 8.17.0 (2017-02-22)
|
||||
|
||||
- API: Fix file downloading. !0 (8267)
|
||||
- Changed composer installer script in the CI PHP example doc. !4342 (Jeffrey Cafferata)
|
||||
- Display fullscreen button on small screens. !5302 (winniehell)
|
||||
- Add system hook for when a project is updated (other than rename/transfer). !5711 (Tommy Beadle)
|
||||
- Fix notifications when set at group level. !6813 (Alexandre Maia)
|
||||
- Project labels can now be promoted to group labels. !7242 (Olaf Tomalka)
|
||||
- use webpack to bundle frontend assets and use karma for frontend testing. !7288
|
||||
- Adds back ability to stop all environments. !7379
|
||||
- Added labels empty state. !7443
|
||||
- Add ability to define a coverage regex in the .gitlab-ci.yml. !7447 (Leandro Camargo)
|
||||
- Disable automatic login after clicking email confirmation links. !7472
|
||||
- Search feature: redirects to commit page if query is commit sha and only commit found. !8028 (YarNayar)
|
||||
- Create a TODO for user who set auto-merge when a build fails, merge conflict occurs. !8056 (twonegatives)
|
||||
- Don't group issues by project on group-level and dashboard issue indexes. !8111 (Bernardo Castro)
|
||||
- Mark MR as WIP when pushing WIP commits. !8124 (Jurre Stender @jurre)
|
||||
- Flag multiple empty lines in eslint, fix offenses. !8137
|
||||
- Add sorting pipeline for a commit. !8319 (Takuya Noguchi)
|
||||
- Adds service trigger events to api. !8324
|
||||
- Update pipeline and commit links when CI status is updated. !8351
|
||||
- Hide version check image if there is no internet connection. !8355 (Ken Ding)
|
||||
- Prevent removal of input fields if it is the parent dropdown element. !8397
|
||||
- Introduce maximum session time for terminal websocket connection. !8413
|
||||
- Allow creating protected branches when user can merge to such branch. !8458
|
||||
- Refactor MergeRequests::BuildService. !8462 (Rydkin Maxim)
|
||||
- Added GitLab Pages to CE. !8463
|
||||
- Support notes when a project is not specified (personal snippet notes). !8468
|
||||
- Use warning icon in mini-graph if stage passed conditionally. !8503
|
||||
- Don’t count tasks that are not defined as list items correctly. !8526
|
||||
- Reformat messages ChatOps. !8528
|
||||
- Copy commit SHA to clipboard. !8547
|
||||
- Improve button accessibility on pipelines page. !8561
|
||||
- Display project ID in project settings. !8572 (winniehell)
|
||||
- PlantUML support for Markdown. !8588 (Horacio Sanson)
|
||||
- Fix reply by email without sub-addressing for some clients from Microsoft and Apple. !8620
|
||||
- Fix nested tasks in ordered list. !8626
|
||||
- Fix Sort by Recent Sign-in in Admin Area. !8637 (Poornima M)
|
||||
- Avoid repeated dashes in $CI_ENVIRONMENT_SLUG. !8638
|
||||
- Only show Merge Request button when user can create a MR. !8639
|
||||
- Prevent copying of line numbers in parallel diff view. !8706
|
||||
- Improve build policy and access abilities. !8711
|
||||
- API: Remove /projects/:id/keys/.. endpoints. !8716 (Robert Schilling)
|
||||
- API: Remove deprecated 'expires_at' from project snippets. !8723 (Robert Schilling)
|
||||
- Add `copy` backup strategy to combat file changed errors. !8728
|
||||
- adds avatar for discussion note. !8734
|
||||
- Add link verification to badge partial in order to render a badge without a link. !8740
|
||||
- Reduce hits to LDAP on Git HTTP auth by reordering auth mechanisms. !8752
|
||||
- prevent diff unfolding link from appearing when there are no more lines to show. !8761
|
||||
- Redesign searchbar in admin project list. !8776
|
||||
- Rename Builds to Pipelines, CI/CD Pipelines, or Jobs everywhere. !8787
|
||||
- dismiss sidebar on repo buttons click. !8798 (Adam Pahlevi)
|
||||
- fixed small mini pipeline graph line glitch. !8804
|
||||
- Make all system notes lowercase. !8807
|
||||
- Support unauthenticated LFS object downloads for public projects. !8824 (Ben Boeckel)
|
||||
- Add read-only full_path and full_name attributes to Group API. !8827
|
||||
- allow relative url change without recompiling frontend assets. !8831
|
||||
- Use vue.js Pipelines table in commit and merge request view. !8844
|
||||
- Use reCaptcha when an issue is identified as a spam. !8846
|
||||
- resolve deprecation warnings. !8855 (Adam Pahlevi)
|
||||
- Cop for gem fetched from a git source. !8856 (Adam Pahlevi)
|
||||
- Remove flash warning from login page. !8864 (Gerald J. Padilla)
|
||||
- Adds documentation for how to use Vue.js. !8866
|
||||
- Add 'View on [env]' link to blobs and individual files in diffs. !8867
|
||||
- Replace word user with member. !8872
|
||||
- Change the reply shortcut to focus the field even without a selection. !8873 (Brian Hall)
|
||||
- Unify MR diff file button style. !8874
|
||||
- Unify projects search by removing /projects/:search endpoint. !8877
|
||||
- Fix disable storing of sensitive information when importing a new repo. !8885 (Bernard Pietraga)
|
||||
- Fix pipeline graph vertical spacing in Firefox and Safari. !8886
|
||||
- Fix filtered search user autocomplete for gitlab instances that are hosted on a subdirectory. !8891
|
||||
- Fix Ctrl+Click support for Todos and Merge Request page tabs. !8898
|
||||
- Fix wrong call to ProjectCacheWorker.perform. !8910
|
||||
- Don't perform Devise trackable updates on blocked User records. !8915
|
||||
- Add ability to export project inherited group members to Import/Export. !8923
|
||||
- replace `find_with_namespace` with `find_by_full_path`. !8949 (Adam Pahlevi)
|
||||
- Fixes flickering of avatar border in mention dropdown. !8950
|
||||
- Remove unnecessary queries for .atom and .json in Dashboard::ProjectsController#index. !8956
|
||||
- Fix deleting projects with pipelines and builds. !8960
|
||||
- Fix broken anchor links when special characters are used. !8961 (Andrey Krivko)
|
||||
- Ensure autogenerated title does not cause failing spec. !8963 (brian m. carlson)
|
||||
- Update doc for enabling or disabling GitLab CI. !8965 (Takuya Noguchi)
|
||||
- Remove deprecated MR and Issue endpoints and preserve V3 namespace. !8967
|
||||
- Fixed "substract" typo on /help/user/project/slash_commands. !8976 (Jason Aquino)
|
||||
- Preserve backward compatibility CI/CD and disallow setting `coverage` regexp in global context. !8981
|
||||
- use babel to transpile all non-vendor javascript assets regardless of file extension. !8988
|
||||
- Fix MR widget url. !8989
|
||||
- Fixes hover cursor on pipeline pagenation. !9003
|
||||
- Layer award emoji dropdown over the right sidebar. !9004
|
||||
- Do not display deploy keys in user's own ssh keys list. !9024
|
||||
- upgrade babel 5.8.x to babel 6.22.x. !9072
|
||||
- upgrade to webpack v2.2. !9078
|
||||
- Trigger autocomplete after selecting a slash command. !9117
|
||||
- Add space between text and loading icon in Megre Request Widget. !9119
|
||||
- Fix job to pipeline renaming. !9147
|
||||
- Replace static fixture for merge_request_tabs_spec.js. !9172 (winniehell)
|
||||
- Replace static fixture for right_sidebar_spec.js. !9211 (winniehell)
|
||||
- Show merge errors in merge request widget. !9229
|
||||
- Increase process_commit queue weight from 2 to 3. !9326 (blackst0ne)
|
||||
- Don't require lib/gitlab/request_profiler/middleware.rb in config/initializers/request_profiler.rb.
|
||||
- Force new password after password reset via API. (George Andrinopoulos)
|
||||
- Allows to search within project by commit hash. (YarNayar)
|
||||
- Show organisation membership and delete comment on smaller viewports, plus change comment author name to username.
|
||||
- Remove turbolinks.
|
||||
- Convert pipeline action icons to svg to have them propperly positioned.
|
||||
- Remove rogue scrollbars for issue comments with inline elements.
|
||||
- Align Segoe UI label text.
|
||||
- Color + and - signs in diffs to increase code legibility.
|
||||
- Fix tab index order on branch commits list page. (Ryan Harris)
|
||||
- Add hover style to copy icon on commit page header. (Ryan Harris)
|
||||
- Remove hover animation from row elements.
|
||||
- Improve pipeline status icon linking in widgets.
|
||||
- Fix commit title bar and repository view copy clipboard button order on last commit in repository view.
|
||||
- Fix mini-pipeline stage tooltip text wrapping.
|
||||
- Updated builds info link on the project settings page. (Ryan Harris)
|
||||
- 27240 Make progress bars consistent.
|
||||
- Only render hr when user can't archive project.
|
||||
- 27352-search-label-filter-header.
|
||||
- Include :author, :project, and :target in Event.with_associations.
|
||||
- Don't instantiate AR objects in Event.in_projects.
|
||||
- Don't capitalize environment name in show page.
|
||||
- Update and pin the `jwt` gem to ~> 1.5.6.
|
||||
- Edited the column header for the environments list from created to updated and added created to environments detail page colum header titles.
|
||||
- Give ci status text on pipeline graph a better font-weight.
|
||||
- Add default labels to bulk assign dropdowns.
|
||||
- Only return target project's comments for a commit.
|
||||
- Fixes Pipelines table is not showing branch name for commit.
|
||||
- Fix regression where cmd-click stopped working for todos and merge request tabs.
|
||||
- Fix stray pipelines API request when showing MR.
|
||||
- Fix Merge request pipelines displays JSON.
|
||||
- Fix current build arrow indicator.
|
||||
- Fix contribution activity alignment.
|
||||
- Show Pipeline(not Job) in MR desktop notification.
|
||||
- Fix tooltips in mini pipeline graph.
|
||||
- Display loading indicator when filtering ref switcher dropdown.
|
||||
- Show pipeline graph in MR widget if there are any stages.
|
||||
- Fix icon colors in merge request widget mini graph.
|
||||
- Improve blockquote formatting in notification emails.
|
||||
- Adds container to tooltip in order to make it work with overflow:hidden in parent element.
|
||||
- Restore pagination to admin abuse reports.
|
||||
- Ensure export files are removed after a namespace is deleted.
|
||||
- Add `y` keyboard shortcut to move to file permalink.
|
||||
- Adds /target_branch slash command functionality for merge requests. (YarNayar)
|
||||
- Patch Asciidocs rendering to block XSS.
|
||||
- contribution calendar scrolls from right to left.
|
||||
- Copying a rendered issue/comment will paste into GFM textareas as actual GFM.
|
||||
- Don't delete assigned MRs/issues when user is deleted.
|
||||
- Remove new branch button for confidential issues.
|
||||
- Don't allow project guests to subscribe to merge requests through the API. (Robert Schilling)
|
||||
- Don't connect in Gitlab::Database.adapter_name.
|
||||
- Prevent users from creating notes on resources they can't access.
|
||||
- Ignore encrypted attributes in Import/Export.
|
||||
- Change rspec test to guarantee window is resized before visiting page.
|
||||
- Prevent users from deleting system deploy keys via the project deploy key API.
|
||||
- Fix XSS vulnerability in SVG attachments.
|
||||
- Make MR-review-discussions more reliable.
|
||||
- fix incorrect sidekiq concurrency count in admin background page. (wendy0402)
|
||||
- Make notification_service spec DRYer by making test reusable. (YarNayar)
|
||||
- Redirect http://someproject.git to http://someproject. (blackst0ne)
|
||||
- Fixed group label links in issue/merge request sidebar.
|
||||
- Improve gl.utils.handleLocationHash tests.
|
||||
- Fixed Issuable sidebar not closing on smaller/mobile sized screens.
|
||||
- Resets assignee dropdown when sidebar is open.
|
||||
- Disallow system notes for closed issuables.
|
||||
- Fix timezone on issue boards due date.
|
||||
- Remove unused js response from refs controller.
|
||||
- Prevent the GitHub importer from assigning labels and comments to merge requests or issues belonging to other projects.
|
||||
- Fixed merge requests tab extra margin when fixed to window.
|
||||
- Patch XSS vulnerability in RDOC support.
|
||||
- Refresh authorizations when transferring projects.
|
||||
- Remove issue and MR counts from labels index.
|
||||
- Don't use backup Active Record connections for Sidekiq.
|
||||
- Add index to ci_trigger_requests for commit_id.
|
||||
- Add indices to improve loading of labels page.
|
||||
- Reduced query count for snippet search.
|
||||
- Update GitLab Pages to v0.3.1.
|
||||
- Upgrade omniauth gem to 1.3.2.
|
||||
- Remove deprecated GitlabCiService.
|
||||
- Requeue pending deletion projects.
|
||||
|
||||
## 8.16.6 (2017-02-17)
|
||||
|
||||
- API: Fix file downloading. !0 (8267)
|
||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
8.17.0-pre
|
||||
8.18.0-pre
|
||||
|
|
1
app/assets/images/icon-merge-request-unmerged.svg
Normal file
1
app/assets/images/icon-merge-request-unmerged.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg width="12" height="15" viewBox="0 0 12 15" xmlns="http://www.w3.org/2000/svg"><path d="M10.267 11.028V5.167c-.028-.728-.318-1.372-.878-1.923-.56-.55-1.194-.85-1.922-.877h-.934V.5l-2.8 2.8 2.8 2.8V4.233h.934a.976.976 0 0 1 .644.29.88.88 0 0 1 .289.644v5.861a1.86 1.86 0 0 0 .933 3.472 1.86 1.86 0 0 0 .934-3.472zM3.733 3.3a1.86 1.86 0 0 0-1.866-1.867 1.86 1.86 0 0 0-.934 3.472v6.123a1.86 1.86 0 0 0 .933 3.472 1.86 1.86 0 0 0 .934-3.472V4.905c.55-.317.933-.914.933-1.605z" fill-rule="nonzero"/></svg>
|
After Width: | Height: | Size: 506 B |
BIN
app/assets/images/mailers/gitlab_footer_logo.gif
Normal file
BIN
app/assets/images/mailers/gitlab_footer_logo.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
BIN
app/assets/images/mailers/gitlab_header_logo.gif
Normal file
BIN
app/assets/images/mailers/gitlab_header_logo.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 3 KiB |
|
@ -1,16 +1,20 @@
|
|||
/* eslint-disable one-var, quote-props, comma-dangle, space-before-function-paren, import/newline-after-import, no-multi-spaces, max-len */
|
||||
/* eslint-disable one-var, quote-props, comma-dangle, space-before-function-paren */
|
||||
/* global Vue */
|
||||
/* global BoardService */
|
||||
|
||||
function requireAll(context) { return context.keys().map(context); }
|
||||
|
||||
window.Vue = require('vue');
|
||||
window.Vue.use(require('vue-resource'));
|
||||
requireAll(require.context('./models', true, /^\.\/.*\.(js|es6)$/));
|
||||
requireAll(require.context('./stores', true, /^\.\/.*\.(js|es6)$/));
|
||||
requireAll(require.context('./services', true, /^\.\/.*\.(js|es6)$/));
|
||||
requireAll(require.context('./mixins', true, /^\.\/.*\.(js|es6)$/));
|
||||
requireAll(require.context('./filters', true, /^\.\/.*\.(js|es6)$/));
|
||||
require('./models/issue');
|
||||
require('./models/label');
|
||||
require('./models/list');
|
||||
require('./models/milestone');
|
||||
require('./models/user');
|
||||
require('./stores/boards_store');
|
||||
require('./stores/modal_store');
|
||||
require('./services/board_service');
|
||||
require('./mixins/modal_mixins');
|
||||
require('./mixins/sortable_default_options');
|
||||
require('./filters/due_date_filters');
|
||||
require('./components/board');
|
||||
require('./components/board_sidebar');
|
||||
require('./components/new_list_dropdown');
|
||||
|
@ -93,17 +97,53 @@ $(() => {
|
|||
modal: ModalStore.store,
|
||||
store: Store.state,
|
||||
},
|
||||
watch: {
|
||||
disabled() {
|
||||
this.updateTooltip();
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
disabled() {
|
||||
return !this.store.lists.filter(list => list.type !== 'blank' && list.type !== 'done').length;
|
||||
},
|
||||
tooltipTitle() {
|
||||
if (this.disabled) {
|
||||
return 'Please add a list to your board first';
|
||||
}
|
||||
|
||||
return '';
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
updateTooltip() {
|
||||
const $tooltip = $(this.$el);
|
||||
|
||||
this.$nextTick(() => {
|
||||
if (this.disabled) {
|
||||
$tooltip.tooltip();
|
||||
} else {
|
||||
$tooltip.tooltip('destroy');
|
||||
}
|
||||
});
|
||||
},
|
||||
openModal() {
|
||||
if (!this.disabled) {
|
||||
this.toggleModal(true);
|
||||
}
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.updateTooltip();
|
||||
},
|
||||
template: `
|
||||
<button
|
||||
class="btn btn-create pull-right prepend-left-10 has-tooltip"
|
||||
class="btn btn-create pull-right prepend-left-10"
|
||||
type="button"
|
||||
:disabled="disabled"
|
||||
@click="toggleModal(true)">
|
||||
data-placement="bottom"
|
||||
:class="{ 'disabled': disabled }"
|
||||
:title="tooltipTitle"
|
||||
:aria-disabled="disabled"
|
||||
@click="openModal">
|
||||
Add issues
|
||||
</button>
|
||||
`,
|
||||
|
|
|
@ -4,10 +4,20 @@
|
|||
|
||||
window.Vue = require('vue');
|
||||
window.Cookies = require('js-cookie');
|
||||
|
||||
function requireAll(context) { return context.keys().map(context); }
|
||||
requireAll(require.context('./svg', false, /^\.\/.*\.(js|es6)$/));
|
||||
requireAll(require.context('.', true, /^\.\/(?!cycle_analytics_bundle).*\.(js|es6)$/));
|
||||
require('./svg/icon_branch');
|
||||
require('./svg/icon_build_status');
|
||||
require('./svg/icon_commit');
|
||||
require('./components/stage_code_component');
|
||||
require('./components/stage_issue_component');
|
||||
require('./components/stage_plan_component');
|
||||
require('./components/stage_production_component');
|
||||
require('./components/stage_review_component');
|
||||
require('./components/stage_staging_component');
|
||||
require('./components/stage_test_component');
|
||||
require('./components/total_time_component');
|
||||
require('./cycle_analytics_service');
|
||||
require('./cycle_analytics_store');
|
||||
require('./default_event_objects');
|
||||
|
||||
$(() => {
|
||||
const OVERVIEW_DIALOG_COOKIE = 'cycle_analytics_help_dismissed';
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
/* eslint-disable func-names, comma-dangle, new-cap, no-new, import/newline-after-import, no-multi-spaces, max-len */
|
||||
/* eslint-disable func-names, comma-dangle, new-cap, no-new, max-len */
|
||||
/* global Vue */
|
||||
/* global ResolveCount */
|
||||
|
||||
function requireAll(context) { return context.keys().map(context); }
|
||||
const Vue = require('vue');
|
||||
requireAll(require.context('./models', false, /^\.\/.*\.(js|es6)$/));
|
||||
requireAll(require.context('./stores', false, /^\.\/.*\.(js|es6)$/));
|
||||
requireAll(require.context('./services', false, /^\.\/.*\.(js|es6)$/));
|
||||
requireAll(require.context('./mixins', false, /^\.\/.*\.(js|es6)$/));
|
||||
requireAll(require.context('./components', false, /^\.\/.*\.(js|es6)$/));
|
||||
require('./models/discussion');
|
||||
require('./models/note');
|
||||
require('./stores/comments');
|
||||
require('./services/resolve');
|
||||
require('./mixins/discussion');
|
||||
require('./components/comment_resolve_btn');
|
||||
require('./components/jump_to_discussion');
|
||||
require('./components/resolve_btn');
|
||||
require('./components/resolve_count');
|
||||
require('./components/resolve_discussion_btn');
|
||||
|
||||
$(() => {
|
||||
const projectPath = document.querySelector('.merge-request').dataset.projectPath;
|
||||
|
|
|
@ -126,13 +126,14 @@ require('./preview_markdown');
|
|||
};
|
||||
pasteText = function(text) {
|
||||
var afterSelection, beforeSelection, caretEnd, caretStart, textEnd;
|
||||
var formattedText = text + "\n\n";
|
||||
caretStart = $(child)[0].selectionStart;
|
||||
caretEnd = $(child)[0].selectionEnd;
|
||||
textEnd = $(child).val().length;
|
||||
beforeSelection = $(child).val().substring(0, caretStart);
|
||||
afterSelection = $(child).val().substring(caretEnd, textEnd);
|
||||
$(child).val(beforeSelection + text + afterSelection);
|
||||
child.get(0).setSelectionRange(caretStart + text.length, caretEnd + text.length);
|
||||
$(child).val(beforeSelection + formattedText + afterSelection);
|
||||
child.get(0).setSelectionRange(caretStart + formattedText.length, caretEnd + formattedText.length);
|
||||
return form_textarea.trigger("input");
|
||||
};
|
||||
getFilename = function(e) {
|
||||
|
|
|
@ -15,29 +15,29 @@ module.exports = Vue.component('actions-component', {
|
|||
},
|
||||
|
||||
template: `
|
||||
<div class="inline">
|
||||
<div class="dropdown">
|
||||
<a class="dropdown-new btn btn-default" data-toggle="dropdown">
|
||||
<div class="btn-group" role="group">
|
||||
<button class="dropdown btn btn-default dropdown-new" data-toggle="dropdown">
|
||||
<span>
|
||||
<span class="js-dropdown-play-icon-container" v-html="playIconSvg"></span>
|
||||
<i class="fa fa-caret-down"></i>
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<ul class="dropdown-menu dropdown-menu-align-right">
|
||||
<li v-for="action in actions">
|
||||
<a :href="action.play_path"
|
||||
data-method="post"
|
||||
rel="nofollow"
|
||||
class="js-manual-action-link">
|
||||
<ul class="dropdown-menu dropdown-menu-align-right">
|
||||
<li v-for="action in actions">
|
||||
<a :href="action.play_path"
|
||||
data-method="post"
|
||||
rel="nofollow"
|
||||
class="js-manual-action-link">
|
||||
|
||||
<span class="js-action-play-icon-container" v-html="playIconSvg"></span>
|
||||
<span class="js-action-play-icon-container" v-html="playIconSvg"></span>
|
||||
|
||||
<span>
|
||||
{{action.name}}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<span>
|
||||
{{action.name}}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</button>
|
||||
</div>
|
||||
`,
|
||||
});
|
||||
|
|
|
@ -505,39 +505,26 @@ module.exports = Vue.component('environment-item', {
|
|||
|
||||
<td class="hidden-xs">
|
||||
<div v-if="!model.isFolder">
|
||||
<div v-if="hasManualActions && canCreateDeployment"
|
||||
class="inline js-manual-actions-container">
|
||||
<actions-component
|
||||
<div class="btn-group" role="group">
|
||||
<actions-component v-if="hasManualActions && canCreateDeployment"
|
||||
:play-icon-svg="playIconSvg"
|
||||
:actions="manualActions">
|
||||
</actions-component>
|
||||
</div>
|
||||
|
||||
<div v-if="externalURL && canReadEnvironment"
|
||||
class="inline js-external-url-container">
|
||||
<external-url-component
|
||||
<external-url-component v-if="externalURL && canReadEnvironment"
|
||||
:external-url="externalURL">
|
||||
</external-url-component>
|
||||
</div>
|
||||
|
||||
<div v-if="hasStopAction && canCreateDeployment"
|
||||
class="inline js-stop-component-container">
|
||||
<stop-component
|
||||
<stop-component v-if="hasStopAction && canCreateDeployment"
|
||||
:stop-url="model.stop_path">
|
||||
</stop-component>
|
||||
</div>
|
||||
|
||||
<div v-if="model && model.terminal_path"
|
||||
class="inline js-terminal-button-container">
|
||||
<terminal-button-component
|
||||
<terminal-button-component v-if="model && model.terminal_path"
|
||||
:terminal-icon-svg="terminalIconSvg"
|
||||
:terminal-path="model.terminal_path">
|
||||
</terminal-button-component>
|
||||
</div>
|
||||
|
||||
<div v-if="canRetry && canCreateDeployment"
|
||||
class="inline js-rollback-component-container">
|
||||
<rollback-component
|
||||
<rollback-component v-if="canRetry && canCreateDeployment"
|
||||
:is-last-deployment="isLastDeployment"
|
||||
:retry-url="retryUrl">
|
||||
</rollback-component>
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
function requireAll(context) { return context.keys().map(context); }
|
||||
|
||||
requireAll(require.context('./', true, /^\.\/(?!filtered_search_bundle).*\.(js|es6)$/));
|
||||
require('./dropdown_hint');
|
||||
require('./dropdown_non_user');
|
||||
require('./dropdown_user');
|
||||
require('./dropdown_utils');
|
||||
require('./filtered_search_dropdown_manager');
|
||||
require('./filtered_search_dropdown');
|
||||
require('./filtered_search_manager');
|
||||
require('./filtered_search_token_keys');
|
||||
require('./filtered_search_tokenizer');
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// require everything else in this directory
|
||||
function requireAll(context) { return context.keys().map(context); }
|
||||
requireAll(require.context('.', false, /^\.\/(?!graphs_bundle).*\.(js|es6)$/));
|
||||
require('./stat_graph_contributors_graph');
|
||||
require('./stat_graph_contributors_util');
|
||||
require('./stat_graph_contributors');
|
||||
require('./stat_graph');
|
||||
|
|
|
@ -2,9 +2,8 @@
|
|||
/* global Network */
|
||||
/* global ShortcutsNetwork */
|
||||
|
||||
// require everything else in this directory
|
||||
function requireAll(context) { return context.keys().map(context); }
|
||||
requireAll(require.context('.', false, /^\.\/(?!network_bundle).*\.(js|es6)$/));
|
||||
require('./branch_graph');
|
||||
require('./network');
|
||||
|
||||
(function() {
|
||||
$(function() {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
(() => {
|
||||
class VersionCheckImage {
|
||||
static bindErrorEvent(imageElement) {
|
||||
imageElement.off('error').on('error', () => imageElement.hide());
|
||||
}
|
||||
class VersionCheckImage {
|
||||
static bindErrorEvent(imageElement) {
|
||||
imageElement.off('error').on('error', () => imageElement.hide());
|
||||
}
|
||||
}
|
||||
|
||||
window.gl = window.gl || {};
|
||||
gl.VersionCheckImage = VersionCheckImage;
|
||||
})();
|
||||
window.gl = window.gl || {};
|
||||
gl.VersionCheckImage = VersionCheckImage;
|
||||
|
||||
module.exports = VersionCheckImage;
|
||||
|
|
|
@ -148,11 +148,16 @@ header {
|
|||
}
|
||||
|
||||
.header-logo {
|
||||
display: inline-block;
|
||||
margin: 0 8px 0 3px;
|
||||
position: relative;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 7px;
|
||||
transition-duration: .3s;
|
||||
z-index: 999;
|
||||
|
||||
#logo {
|
||||
position: relative;
|
||||
left: -50%;
|
||||
}
|
||||
|
||||
svg,
|
||||
img {
|
||||
|
@ -162,6 +167,15 @@ header {
|
|||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@media (max-width: $screen-xs-max) {
|
||||
right: 20px;
|
||||
left: auto;
|
||||
|
||||
#logo {
|
||||
left: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
|
@ -169,7 +183,7 @@ header {
|
|||
padding-right: 20px;
|
||||
margin: 0;
|
||||
font-size: 18px;
|
||||
max-width: 450px;
|
||||
max-width: 385px;
|
||||
display: inline-block;
|
||||
line-height: $header-height;
|
||||
font-weight: normal;
|
||||
|
@ -179,6 +193,10 @@ header {
|
|||
vertical-align: top;
|
||||
white-space: nowrap;
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
@media (max-width: $screen-xs-max) {
|
||||
max-width: 190px;
|
||||
}
|
||||
|
|
|
@ -96,16 +96,6 @@ ul.unstyled-list > li {
|
|||
border-bottom: none;
|
||||
}
|
||||
|
||||
ul.task-list {
|
||||
li.task-list-item {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
ul:not(.task-list) {
|
||||
padding-left: 1.3em;
|
||||
}
|
||||
}
|
||||
|
||||
// Generic content list
|
||||
ul.content-list {
|
||||
@include basic-list;
|
||||
|
|
|
@ -76,6 +76,13 @@
|
|||
#{$property}: $value;
|
||||
}
|
||||
|
||||
/* http://phrappe.com/css/conditional-css-for-webkit-based-browsers/ */
|
||||
@mixin on-webkit-only {
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin keyframes($animation-name) {
|
||||
@-webkit-keyframes #{$animation-name} {
|
||||
@content;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
@mixin fade($gradient-direction, $gradient-color) {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
z-index: 1;
|
||||
z-index: 2;
|
||||
position: absolute;
|
||||
bottom: 12px;
|
||||
width: 43px;
|
||||
|
@ -18,7 +18,7 @@
|
|||
|
||||
.fa {
|
||||
position: relative;
|
||||
top: 6px;
|
||||
top: 5px;
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
@ -79,6 +79,7 @@
|
|||
}
|
||||
|
||||
&.sub-nav {
|
||||
text-align: center;
|
||||
background-color: $gray-normal;
|
||||
|
||||
.container-fluid {
|
||||
|
@ -286,6 +287,7 @@
|
|||
background: $gray-light;
|
||||
border-bottom: 1px solid $border-color;
|
||||
transition: padding $sidebar-transition-duration;
|
||||
text-align: center;
|
||||
|
||||
.container-fluid {
|
||||
position: relative;
|
||||
|
@ -351,7 +353,7 @@
|
|||
right: -5px;
|
||||
|
||||
.fa {
|
||||
right: -28px;
|
||||
right: -7px;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -381,7 +383,7 @@
|
|||
left: 0;
|
||||
|
||||
.fa {
|
||||
left: -4px;
|
||||
left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,14 +29,16 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
.content-wrapper {
|
||||
padding-right: $gutter_collapsed_width;
|
||||
}
|
||||
}
|
||||
|
||||
.right-sidebar-collapsed {
|
||||
padding-right: 0;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
.content-wrapper {
|
||||
padding-right: $gutter_collapsed_width;
|
||||
}
|
||||
|
||||
.merge-request-tabs-holder.affix {
|
||||
right: $gutter_collapsed_width;
|
||||
}
|
||||
|
@ -54,12 +56,6 @@
|
|||
.right-sidebar-expanded {
|
||||
padding-right: 0;
|
||||
|
||||
@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
|
||||
&:not(.build-sidebar):not(.wiki-sidebar) {
|
||||
padding-right: $gutter_collapsed_width;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: $screen-md-min) {
|
||||
.content-wrapper {
|
||||
padding-right: $gutter_width;
|
||||
|
|
|
@ -134,7 +134,7 @@
|
|||
ul,
|
||||
ol {
|
||||
padding: 0;
|
||||
margin: 3px 0 3px 28px !important;
|
||||
margin: 3px 0 !important;
|
||||
}
|
||||
|
||||
ul:dir(rtl),
|
||||
|
@ -144,6 +144,29 @@
|
|||
|
||||
li {
|
||||
line-height: 1.6em;
|
||||
margin-left: 25px;
|
||||
padding-left: 3px;
|
||||
|
||||
/* Normalize the bullet position on webkit. */
|
||||
@include on-webkit-only {
|
||||
margin-left: 28px;
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
ul.task-list {
|
||||
li.task-list-item {
|
||||
list-style-type: none;
|
||||
position: relative;
|
||||
padding-left: 28px;
|
||||
margin-left: 0 !important;
|
||||
|
||||
input.task-list-item-checkbox {
|
||||
position: absolute;
|
||||
left: 8px;
|
||||
top: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a[href*="/uploads/"],
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
display: table-cell;
|
||||
}
|
||||
|
||||
.environments-name,
|
||||
.environments-commit,
|
||||
.environments-actions {
|
||||
width: 20%;
|
||||
|
@ -45,6 +44,7 @@
|
|||
width: 10%;
|
||||
}
|
||||
|
||||
.environments-name,
|
||||
.environments-deploy,
|
||||
.environments-build {
|
||||
width: 15%;
|
||||
|
@ -62,6 +62,22 @@
|
|||
}
|
||||
}
|
||||
|
||||
.btn-group {
|
||||
|
||||
> a {
|
||||
color: $gl-text-color-secondary;
|
||||
}
|
||||
|
||||
svg path {
|
||||
fill: $gl-text-color-secondary;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.commit-title {
|
||||
margin: 0;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
.issue-labels {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.icon-merge-request-unmerged {
|
||||
height: 13px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -652,23 +652,29 @@ pre.light-well {
|
|||
}
|
||||
}
|
||||
|
||||
.container-fluid.project-stats-container {
|
||||
@media (max-width: $screen-xs-max) {
|
||||
padding: 12px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.project-last-commit {
|
||||
background-color: $gray-light;
|
||||
padding: 12px $gl-padding;
|
||||
border: 1px solid $border-color;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
margin-top: $gl-padding;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
border-radius: $border-radius-base;
|
||||
&.container-fluid {
|
||||
padding-top: 12px;
|
||||
padding-bottom: 12px;
|
||||
background-color: $gray-light;
|
||||
border: 1px solid $border-color;
|
||||
border-right-width: 0;
|
||||
border-left-width: 0;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
border-right-width: 1px;
|
||||
border-left-width: 1px;
|
||||
}
|
||||
}
|
||||
|
||||
&.container-limited {
|
||||
@media (min-width: 1281px) {
|
||||
border-radius: $border-radius-base;
|
||||
}
|
||||
}
|
||||
|
||||
.ci-status {
|
||||
|
|
|
@ -9,24 +9,32 @@ module IssuableCollections
|
|||
|
||||
private
|
||||
|
||||
def issuable_meta_data(issuable_collection)
|
||||
def issuable_meta_data(issuable_collection, collection_type)
|
||||
# map has to be used here since using pluck or select will
|
||||
# throw an error when ordering issuables by priority which inserts
|
||||
# a new order into the collection.
|
||||
# We cannot use reorder to not mess up the paginated collection.
|
||||
issuable_ids = issuable_collection.map(&:id)
|
||||
issuable_note_count = Note.count_for_collection(issuable_ids, @collection_type)
|
||||
issuable_ids = issuable_collection.map(&:id)
|
||||
issuable_note_count = Note.count_for_collection(issuable_ids, @collection_type)
|
||||
issuable_votes_count = AwardEmoji.votes_for_collection(issuable_ids, @collection_type)
|
||||
issuable_merge_requests_count =
|
||||
if collection_type == 'Issue'
|
||||
MergeRequestsClosingIssues.count_for_collection(issuable_ids)
|
||||
else
|
||||
[]
|
||||
end
|
||||
|
||||
issuable_ids.each_with_object({}) do |id, issuable_meta|
|
||||
downvotes = issuable_votes_count.find { |votes| votes.awardable_id == id && votes.downvote? }
|
||||
upvotes = issuable_votes_count.find { |votes| votes.awardable_id == id && votes.upvote? }
|
||||
notes = issuable_note_count.find { |notes| notes.noteable_id == id }
|
||||
upvotes = issuable_votes_count.find { |votes| votes.awardable_id == id && votes.upvote? }
|
||||
notes = issuable_note_count.find { |notes| notes.noteable_id == id }
|
||||
merge_requests = issuable_merge_requests_count.find { |mr| mr.first == id }
|
||||
|
||||
issuable_meta[id] = Issuable::IssuableMeta.new(
|
||||
upvotes.try(:count).to_i,
|
||||
downvotes.try(:count).to_i,
|
||||
notes.try(:count).to_i
|
||||
notes.try(:count).to_i,
|
||||
merge_requests.try(:last).to_i
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,7 +10,7 @@ module IssuesAction
|
|||
.page(params[:page])
|
||||
|
||||
@collection_type = "Issue"
|
||||
@issuable_meta_data = issuable_meta_data(@issues)
|
||||
@issuable_meta_data = issuable_meta_data(@issues, @collection_type)
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
|
|
|
@ -9,7 +9,7 @@ module MergeRequestsAction
|
|||
.page(params[:page])
|
||||
|
||||
@collection_type = "MergeRequest"
|
||||
@issuable_meta_data = issuable_meta_data(@merge_requests)
|
||||
@issuable_meta_data = issuable_meta_data(@merge_requests, @collection_type)
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -26,7 +26,7 @@ class Projects::IssuesController < Projects::ApplicationController
|
|||
@collection_type = "Issue"
|
||||
@issues = issues_collection
|
||||
@issues = @issues.page(params[:page])
|
||||
@issuable_meta_data = issuable_meta_data(@issues)
|
||||
@issuable_meta_data = issuable_meta_data(@issues, @collection_type)
|
||||
|
||||
if @issues.out_of_range? && @issues.total_pages != 0
|
||||
return redirect_to url_for(params.merge(page: @issues.total_pages))
|
||||
|
|
|
@ -39,7 +39,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
|||
@collection_type = "MergeRequest"
|
||||
@merge_requests = merge_requests_collection
|
||||
@merge_requests = @merge_requests.page(params[:page])
|
||||
@issuable_meta_data = issuable_meta_data(@merge_requests)
|
||||
@issuable_meta_data = issuable_meta_data(@merge_requests, @collection_type)
|
||||
|
||||
if @merge_requests.out_of_range? && @merge_requests.total_pages != 0
|
||||
return redirect_to url_for(params.merge(page: @merge_requests.total_pages))
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module EmailsHelper
|
||||
include AppearancesHelper
|
||||
|
||||
# Google Actions
|
||||
# https://developers.google.com/gmail/markup/reference/go-to-action
|
||||
def email_action(url)
|
||||
|
@ -49,4 +51,19 @@ module EmailsHelper
|
|||
msg = "This link is valid for #{password_reset_token_valid_time}. "
|
||||
msg << "After it expires, you can #{link_tag}."
|
||||
end
|
||||
|
||||
def header_logo
|
||||
if brand_item && brand_item.header_logo?
|
||||
image_tag(
|
||||
brand_item.header_logo,
|
||||
style: 'height: 50px'
|
||||
)
|
||||
else
|
||||
image_tag(
|
||||
image_url('mailers/gitlab_header_logo.gif'),
|
||||
size: "55x50",
|
||||
alt: "GitLab"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -22,8 +22,8 @@ module Emails
|
|||
mail(bcc: recipients,
|
||||
subject: pipeline_subject(status),
|
||||
skip_premailer: true) do |format|
|
||||
format.html { render layout: false }
|
||||
format.text
|
||||
format.html { render layout: 'mailer' }
|
||||
format.text { render layout: 'mailer' }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -16,9 +16,9 @@ module Issuable
|
|||
include TimeTrackable
|
||||
|
||||
# This object is used to gather issuable meta data for displaying
|
||||
# upvotes, downvotes and notes count for issues and merge requests
|
||||
# upvotes, downvotes, notes and closing merge requests count for issues and merge requests
|
||||
# lists avoiding n+1 queries and improving performance.
|
||||
IssuableMeta = Struct.new(:upvotes, :downvotes, :notes_count)
|
||||
IssuableMeta = Struct.new(:upvotes, :downvotes, :notes_count, :merge_requests_count)
|
||||
|
||||
included do
|
||||
cache_markdown_field :title, pipeline: :single_line
|
||||
|
|
|
@ -4,4 +4,12 @@ class MergeRequestsClosingIssues < ActiveRecord::Base
|
|||
|
||||
validates :merge_request_id, uniqueness: { scope: :issue_id }, presence: true
|
||||
validates :issue_id, presence: true
|
||||
|
||||
class << self
|
||||
def count_for_collection(ids)
|
||||
group(:issue_id).
|
||||
where(issue_id: ids).
|
||||
pluck('issue_id', 'COUNT(*) as count')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -59,7 +59,8 @@ module Ci
|
|||
private
|
||||
|
||||
def skip_ci?
|
||||
pipeline.git_commit_message =~ /\[(ci skip|skip ci)\]/i if pipeline.git_commit_message
|
||||
return false unless pipeline.git_commit_message
|
||||
pipeline.git_commit_message =~ /\[(ci[ _-]skip|skip[ _-]ci)\]/i
|
||||
end
|
||||
|
||||
def commit
|
||||
|
|
|
@ -55,7 +55,7 @@ module Files
|
|||
file_path = action[:file_path]
|
||||
file_path = action[:previous_path] if action[:action] == :move
|
||||
|
||||
blob = repository.blob_at_branch(params[:branch_name], file_path)
|
||||
blob = repository.blob_at_branch(params[:branch], file_path)
|
||||
|
||||
unless blob
|
||||
raise_error("File to be #{action[:action]}d `#{file_path}` does not exist.")
|
||||
|
@ -89,7 +89,7 @@ module Files
|
|||
def validate_create(action)
|
||||
return if project.empty_repo?
|
||||
|
||||
if repository.blob_at_branch(params[:branch_name], action[:file_path])
|
||||
if repository.blob_at_branch(params[:branch], action[:file_path])
|
||||
raise_error("Your changes could not be committed because a file with the name `#{action[:file_path]}` already exists.")
|
||||
end
|
||||
end
|
||||
|
@ -102,14 +102,14 @@ module Files
|
|||
raise_error("You must supply the original file path when moving file `#{action[:file_path]}`.")
|
||||
end
|
||||
|
||||
blob = repository.blob_at_branch(params[:branch_name], action[:file_path])
|
||||
blob = repository.blob_at_branch(params[:branch], action[:file_path])
|
||||
|
||||
if blob
|
||||
raise_error("Move destination `#{action[:file_path]}` already exists.")
|
||||
end
|
||||
|
||||
if action[:content].nil?
|
||||
blob = repository.blob_at_branch(params[:branch_name], action[:previous_path])
|
||||
blob = repository.blob_at_branch(params[:branch], action[:previous_path])
|
||||
blob.load_all_data!(repository) if blob.truncated?
|
||||
params[:actions][index][:content] = blob.data
|
||||
end
|
||||
|
|
19
app/views/groups/_head.html.haml
Normal file
19
app/views/groups/_head.html.haml
Normal file
|
@ -0,0 +1,19 @@
|
|||
= content_for :sub_nav do
|
||||
.scrolling-tabs-container.sub-nav-scroll
|
||||
= render 'shared/nav_scroll'
|
||||
.nav-links.sub-nav.scrolling-tabs
|
||||
%ul{ class: container_class }
|
||||
= nav_link(path: 'groups#show', html_options: { class: 'home' }) do
|
||||
= link_to group_path(@group), title: 'Group Home' do
|
||||
%span
|
||||
Home
|
||||
|
||||
= nav_link(path: 'groups#activity') do
|
||||
= link_to activity_group_path(@group), title: 'Activity' do
|
||||
%span
|
||||
Activity
|
||||
|
||||
= nav_link(path: 'group_members#index') do
|
||||
= link_to group_group_members_path(@group), title: 'Members' do
|
||||
%span
|
||||
Members
|
19
app/views/groups/_head_issues.html.haml
Normal file
19
app/views/groups/_head_issues.html.haml
Normal file
|
@ -0,0 +1,19 @@
|
|||
= content_for :sub_nav do
|
||||
.scrolling-tabs-container.sub-nav-scroll
|
||||
= render 'shared/nav_scroll'
|
||||
.nav-links.sub-nav.scrolling-tabs
|
||||
%ul{ class: container_class }
|
||||
= nav_link(path: 'groups#issues', html_options: { class: 'home' }) do
|
||||
= link_to issues_group_path(@group), title: 'List' do
|
||||
%span
|
||||
List
|
||||
|
||||
= nav_link(path: 'labels#index') do
|
||||
= link_to group_labels_path(@group), title: 'Labels' do
|
||||
%span
|
||||
Labels
|
||||
|
||||
= nav_link(path: 'milestones#index') do
|
||||
= link_to group_milestones_path(@group), title: 'Milestones' do
|
||||
%span
|
||||
Milestones
|
|
@ -2,7 +2,8 @@
|
|||
- if current_user
|
||||
= auto_discovery_link_tag(:atom, group_url(@group, format: :atom, private_token: current_user.private_token), title: "#{@group.name} activity")
|
||||
|
||||
- page_title "Activity"
|
||||
- page_title "Activity"
|
||||
= render 'groups/head'
|
||||
|
||||
%section.activities
|
||||
= render 'activities'
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "Members"
|
||||
= render 'groups/head'
|
||||
|
||||
.project-members-page.prepend-top-default
|
||||
%h4
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "Issues"
|
||||
= render "head_issues"
|
||||
= content_for :meta_tags do
|
||||
- if current_user
|
||||
= auto_discovery_link_tag(:atom, url_for(params.merge(format: :atom, private_token: current_user.private_token)), title: "#{@group.name} issues")
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title 'Labels'
|
||||
= render "groups/head_issues"
|
||||
|
||||
.top-area.adjust
|
||||
.nav-text
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- page_title "Milestones"
|
||||
= render "groups/head_issues"
|
||||
|
||||
.top-area
|
||||
= render 'shared/milestones_filter'
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
- if current_user
|
||||
= auto_discovery_link_tag(:atom, group_url(@group, format: :atom, private_token: current_user.private_token), title: "#{@group.name} activity")
|
||||
|
||||
= render 'groups/head'
|
||||
= render 'groups/home_panel'
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.page-with-sidebar{ class: page_gutter_class }
|
||||
- if defined?(nav) && nav
|
||||
.layout-nav
|
||||
%div{ class: container_class }
|
||||
.container-fluid
|
||||
= render "layouts/nav/#{nav}"
|
||||
.content-wrapper{ class: "#{layout_nav_class}" }
|
||||
= yield :sub_nav
|
||||
|
|
|
@ -61,12 +61,12 @@
|
|||
%div
|
||||
= link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in btn-success'
|
||||
|
||||
%h1.title= title
|
||||
|
||||
.header-logo
|
||||
= link_to root_path, class: 'home', title: 'Dashboard', id: 'logo' do
|
||||
= brand_header_logo
|
||||
|
||||
%h1.title= title
|
||||
|
||||
= yield :header_content
|
||||
|
||||
= render 'shared/outdated_browser'
|
||||
|
|
72
app/views/layouts/mailer.html.haml
Normal file
72
app/views/layouts/mailer.html.haml
Normal file
|
@ -0,0 +1,72 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
%html{ lang: "en" }
|
||||
%head
|
||||
%meta{ content: "text/html; charset=UTF-8", "http-equiv" => "Content-Type" }/
|
||||
%meta{ content: "width=device-width, initial-scale=1", name: "viewport" }/
|
||||
%meta{ content: "IE=edge", "http-equiv" => "X-UA-Compatible" }/
|
||||
%title= message.subject
|
||||
:css
|
||||
/* CLIENT-SPECIFIC STYLES */
|
||||
body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
|
||||
table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }
|
||||
img { -ms-interpolation-mode: bicubic; }
|
||||
|
||||
/* iOS BLUE LINKS */
|
||||
a[x-apple-data-detectors] {
|
||||
color: inherit !important;
|
||||
text-decoration: none !important;
|
||||
font-size: inherit !important;
|
||||
font-family: inherit !important;
|
||||
font-weight: inherit !important;
|
||||
line-height: inherit !important;
|
||||
}
|
||||
|
||||
/* ANDROID MARGIN HACK */
|
||||
body { margin:0 !important; }
|
||||
div[style*="margin: 16px 0"] { margin:0 !important; }
|
||||
|
||||
@media only screen and (max-width: 639px) {
|
||||
body, #body {
|
||||
min-width: 320px !important;
|
||||
}
|
||||
table.wrapper {
|
||||
width: 100% !important;
|
||||
min-width: 320px !important;
|
||||
}
|
||||
table.wrapper > tbody > tr > td {
|
||||
border-left: 0 !important;
|
||||
border-right: 0 !important;
|
||||
border-radius: 0 !important;
|
||||
padding-left: 10px !important;
|
||||
padding-right: 10px !important;
|
||||
}
|
||||
}
|
||||
%body{ style: "background-color:#fafafa;margin:0;padding:0;text-align:center;min-width:640px;width:100%;height:100%;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" }
|
||||
%table#body{ border: "0", cellpadding: "0", cellspacing: "0", style: "background-color:#fafafa;margin:0;padding:0;text-align:center;min-width:640px;width:100%;" }
|
||||
%tbody
|
||||
%tr.line
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#6b4fbb;height:4px;font-size:4px;line-height:4px;" }
|
||||
%tr.header
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" }
|
||||
= header_logo
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" }
|
||||
%table.wrapper{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:640px;margin:0 auto;border-collapse:separate;border-spacing:0;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#ffffff;text-align:left;padding:18px 25px;border:1px solid #ededed;border-radius:3px;overflow:hidden;" }
|
||||
%table.content{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;border-collapse:separate;border-spacing:0;" }
|
||||
%tbody
|
||||
= yield
|
||||
|
||||
%tr.footer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" }
|
||||
%img{ alt: "GitLab", height: "33", src: image_url('mailers/gitlab_footer_logo.gif'), style: "display:block;margin:0 auto 1em;", width: "90" }/
|
||||
%div
|
||||
%a{ href: profile_notifications_url, style: "color:#3777b0;text-decoration:none;" } Manage all notifications
|
||||
·
|
||||
%a{ href: help_url, style: "color:#3777b0;text-decoration:none;" } Help
|
||||
%div
|
||||
You're receiving this email because of your account on
|
||||
= succeed "." do
|
||||
%a{ href: root_url, style: "color:#3777b0;text-decoration:none;" }= Gitlab.config.gitlab.host
|
5
app/views/layouts/mailer.text.haml
Normal file
5
app/views/layouts/mailer.text.haml
Normal file
|
@ -0,0 +1,5 @@
|
|||
= yield
|
||||
|
||||
You're receiving this email because of your account on #{Gitlab.config.gitlab.host}.
|
||||
Manage all notifications: #{profile_notifications_url}
|
||||
Help: #{help_url}
|
|
@ -5,23 +5,11 @@
|
|||
.fade-right
|
||||
= icon('angle-right')
|
||||
%ul.nav-links.scrolling-tabs
|
||||
= nav_link(path: 'groups#show', html_options: {class: 'home'}) do
|
||||
= nav_link(path: ['groups#show', 'groups#activity', 'group_members#index'], html_options: { class: 'home' }) do
|
||||
= link_to group_path(@group), title: 'Home' do
|
||||
%span
|
||||
Group
|
||||
= nav_link(path: 'groups#activity') do
|
||||
= link_to activity_group_path(@group), title: 'Activity' do
|
||||
%span
|
||||
Activity
|
||||
= nav_link(controller: [:group, :labels]) do
|
||||
= link_to group_labels_path(@group), title: 'Labels' do
|
||||
%span
|
||||
Labels
|
||||
= nav_link(controller: [:group, :milestones]) do
|
||||
= link_to group_milestones_path(@group), title: 'Milestones' do
|
||||
%span
|
||||
Milestones
|
||||
= nav_link(path: 'groups#issues') do
|
||||
= nav_link(path: ['groups#issues', 'labels#index', 'milestones#index']) do
|
||||
= link_to issues_group_path(@group), title: 'Issues' do
|
||||
%span
|
||||
Issues
|
||||
|
@ -33,7 +21,3 @@
|
|||
Merge Requests
|
||||
- merge_requests = MergeRequestsFinder.new(current_user, group_id: @group.id, state: 'opened', non_archived: true).execute
|
||||
%span.badge.count= number_with_delimiter(merge_requests.count)
|
||||
= nav_link(controller: [:group_members]) do
|
||||
= link_to group_group_members_path(@group), title: 'Members' do
|
||||
%span
|
||||
Members
|
||||
|
|
|
@ -1,179 +1,109 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
%html{ lang: "en" }
|
||||
%head
|
||||
%meta{ content: "text/html; charset=UTF-8", "http-equiv" => "Content-Type" }/
|
||||
%meta{ content: "width=device-width, initial-scale=1", name: "viewport" }/
|
||||
%meta{ content: "IE=edge", "http-equiv" => "X-UA-Compatible" }/
|
||||
%title= message.subject
|
||||
:css
|
||||
/* CLIENT-SPECIFIC STYLES */
|
||||
body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
|
||||
table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }
|
||||
img { -ms-interpolation-mode: bicubic; }
|
||||
|
||||
/* iOS BLUE LINKS */
|
||||
a[x-apple-data-detectors] {
|
||||
color: inherit !important;
|
||||
text-decoration: none !important;
|
||||
font-size: inherit !important;
|
||||
font-family: inherit !important;
|
||||
font-weight: inherit !important;
|
||||
line-height: inherit !important;
|
||||
}
|
||||
|
||||
/* ANDROID MARGIN HACK */
|
||||
body { margin:0 !important; }
|
||||
div[style*="margin: 16px 0"] { margin:0 !important; }
|
||||
|
||||
@media only screen and (max-width: 639px) {
|
||||
body, #body {
|
||||
min-width: 320px !important;
|
||||
}
|
||||
table.wrapper {
|
||||
width: 100% !important;
|
||||
min-width: 320px !important;
|
||||
}
|
||||
table.wrapper > tbody > tr > td {
|
||||
border-left: 0 !important;
|
||||
border-right: 0 !important;
|
||||
border-radius: 0 !important;
|
||||
padding-left: 10px !important;
|
||||
padding-right: 10px !important;
|
||||
}
|
||||
}
|
||||
%body{ style: "background-color:#fafafa;margin:0;padding:0;text-align:center;min-width:640px;width:100%;height:100%;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" }
|
||||
%table#body{ border: "0", cellpadding: "0", cellspacing: "0", style: "background-color:#fafafa;margin:0;padding:0;text-align:center;min-width:640px;width:100%;" }
|
||||
%tr.alert
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:10px;border-radius:3px;font-size:14px;line-height:1.3;text-align:center;overflow:hidden;background-color:#d22f57;color:#ffffff;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;margin:0 auto;" }
|
||||
%tbody
|
||||
%tr.line
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#6b4fbb;height:4px;font-size:4px;line-height:4px;" }
|
||||
%tr.header
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" }
|
||||
%img{ alt: "GitLab", height: "50", src: image_url('mailers/ci_pipeline_notif_v1/gitlab-logo.gif'), width: "55" }/
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" }
|
||||
%table.wrapper{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:640px;margin:0 auto;border-collapse:separate;border-spacing:0;" }
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;vertical-align:middle;color:#ffffff;text-align:center;padding-right:5px;" }
|
||||
%img{ alt: "x", height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-x-red-inverted.gif'), style: "display:block;", width: "13" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;vertical-align:middle;color:#ffffff;text-align:center;" }
|
||||
Your pipeline has failed.
|
||||
%tr.spacer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
|
||||
|
||||
%tr.section
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:0 15px;border:1px solid #ededed;border-radius:3px;overflow:hidden;" }
|
||||
%table.info{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;" } Project
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;" }
|
||||
- namespace_name = @project.group ? @project.group.name : @project.namespace.owner.name
|
||||
- namespace_url = @project.group ? group_url(@project.group) : user_url(@project.namespace.owner)
|
||||
%a.muted{ href: namespace_url, style: "color:#333333;text-decoration:none;" }
|
||||
= namespace_name
|
||||
\/
|
||||
%a.muted{ href: project_url(@project), style: "color:#333333;text-decoration:none;" }
|
||||
= @project.name
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Branch
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#ffffff;text-align:left;padding:18px 25px;border:1px solid #ededed;border-radius:3px;overflow:hidden;" }
|
||||
%table.content{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;border-collapse:separate;border-spacing:0;" }
|
||||
%tbody
|
||||
%tr.alert
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:10px;border-radius:3px;font-size:14px;line-height:1.3;text-align:center;overflow:hidden;background-color:#d22f57;color:#ffffff;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;margin:0 auto;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;vertical-align:middle;color:#ffffff;text-align:center;padding-right:5px;" }
|
||||
%img{ alt: "x", height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-x-red-inverted.gif'), style: "display:block;", width: "13" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;vertical-align:middle;color:#ffffff;text-align:center;" }
|
||||
Your pipeline has failed.
|
||||
%tr.spacer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
|
||||
|
||||
%tr.section
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:0 15px;border:1px solid #ededed;border-radius:3px;overflow:hidden;" }
|
||||
%table.info{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;" } Project
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;" }
|
||||
- namespace_name = @project.group ? @project.group.name : @project.namespace.owner.name
|
||||
- namespace_url = @project.group ? group_url(@project.group) : user_url(@project.namespace.owner)
|
||||
%a.muted{ href: namespace_url, style: "color:#333333;text-decoration:none;" }
|
||||
= namespace_name
|
||||
\/
|
||||
%a.muted{ href: project_url(@project), style: "color:#333333;text-decoration:none;" }
|
||||
= @project.name
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Branch
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-branch-gray.gif'), style: "display:block;", width: "13", alt: "Branch icon" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
%a.muted{ href: commits_url(@pipeline), style: "color:#333333;text-decoration:none;" }
|
||||
= @pipeline.ref
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Commit
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-commit-gray.gif'), style: "display:block;", width: "13", alt: "Commit icon" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
%a{ href: commit_url(@pipeline), style: "color:#3777b0;text-decoration:none;" }
|
||||
= @pipeline.short_sha
|
||||
- if @merge_request
|
||||
in
|
||||
%a{ href: merge_request_url(@merge_request), style: "color:#3777b0;text-decoration:none;" }
|
||||
= @merge_request.to_reference
|
||||
.commit{ style: "color:#5c5c5c;font-weight:300;" }
|
||||
= @pipeline.git_commit_message.truncate(50)
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Author
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
- commit = @pipeline.commit
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img.avatar{ height: "24", src: avatar_icon(commit.author || commit.author_email, 24), style: "display:block;border-radius:12px;margin:-2px 0;", width: "24", alt: "Avatar" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
- if commit.author
|
||||
%a.muted{ href: user_url(commit.author), style: "color:#333333;text-decoration:none;" }
|
||||
= commit.author.name
|
||||
- else
|
||||
%span
|
||||
= commit.author_name
|
||||
%tr.spacer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
|
||||
|
||||
- failed = @pipeline.statuses.latest.failed
|
||||
%tr.pre-section
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#333333;font-size:15px;font-weight:400;line-height:1.4;padding:15px 0;" }
|
||||
Pipeline
|
||||
%a{ href: pipeline_url(@pipeline), style: "color:#3777b0;text-decoration:none;" }
|
||||
= "\##{@pipeline.id}"
|
||||
had
|
||||
= failed.size
|
||||
failed
|
||||
#{'build'.pluralize(failed.size)}.
|
||||
%tr.warning
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;border:1px solid #ededed;border-bottom:0;border-radius:3px 3px 0 0;overflow:hidden;background-color:#fdf4f6;color:#d22852;font-size:14px;line-height:1.4;text-align:center;padding:8px 15px;" }
|
||||
Logs may contain sensitive data. Please consider before forwarding this email.
|
||||
%tr.section
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:0 15px;border:1px solid #ededed;border-radius:3px;overflow:hidden;border-top:0;border-radius:0 0 3px 3px;" }
|
||||
%table.builds{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;border-collapse:collapse;" }
|
||||
%tbody
|
||||
- failed.each do |build|
|
||||
%tr.build-state
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:20px 0;color:#8c8c8c;font-weight:500;font-size:15px;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#8c8c8c;font-weight:500;font-size:15px;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ alt: "x", height: "10", src: image_url('mailers/ci_pipeline_notif_v1/icon-x-red.gif'), style: "display:block;", width: "10" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#8c8c8c;font-weight:500;font-size:15px;vertical-align:middle;" }
|
||||
= build.stage
|
||||
%td{ align: "right", style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:20px 0;color:#8c8c8c;font-weight:500;font-size:15px;" }
|
||||
= render "notify/links/#{build.to_partial_path}", pipeline: @pipeline, build: build
|
||||
%tr.build-log
|
||||
- if build.has_trace?
|
||||
%td{ colspan: "2", style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:0 0 15px;" }
|
||||
%pre{ style: "font-family:Monaco,'Lucida Console','Courier New',Courier,monospace;background-color:#fafafa;border-radius:3px;overflow:hidden;white-space:pre-wrap;word-break:break-all;font-size:13px;line-height:1.4;padding:12px;color:#333333;margin:0;" }
|
||||
= build.trace_html(last_lines: 10).html_safe
|
||||
- else
|
||||
%td{ colspan: "2" }
|
||||
%tr.footer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" }
|
||||
%img{ alt: "GitLab", height: "33", src: image_url('mailers/ci_pipeline_notif_v1/gitlab-logo-full-horizontal.gif'), style: "display:block;margin:0 auto 1em;", width: "90" }/
|
||||
%div
|
||||
%a{ href: profile_notifications_url, style: "color:#3777b0;text-decoration:none;" } Manage all notifications
|
||||
·
|
||||
%a{ href: help_url, style: "color:#3777b0;text-decoration:none;" } Help
|
||||
%div
|
||||
You're receiving this email because of your account on
|
||||
= succeed "." do
|
||||
%a{ href: root_url, style: "color:#3777b0;text-decoration:none;" }= Gitlab.config.gitlab.host
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-branch-gray.gif'), style: "display:block;", width: "13", alt: "Branch icon" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
%a.muted{ href: commits_url(@pipeline), style: "color:#333333;text-decoration:none;" }
|
||||
= @pipeline.ref
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Commit
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-commit-gray.gif'), style: "display:block;", width: "13", alt: "Commit icon" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
%a{ href: commit_url(@pipeline), style: "color:#3777b0;text-decoration:none;" }
|
||||
= @pipeline.short_sha
|
||||
- if @merge_request
|
||||
in
|
||||
%a{ href: merge_request_url(@merge_request), style: "color:#3777b0;text-decoration:none;" }
|
||||
= @merge_request.to_reference
|
||||
.commit{ style: "color:#5c5c5c;font-weight:300;" }
|
||||
= @pipeline.git_commit_message.truncate(50)
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Author
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
- commit = @pipeline.commit
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img.avatar{ height: "24", src: avatar_icon(commit.author || commit.author_email, 24), style: "display:block;border-radius:12px;margin:-2px 0;", width: "24", alt: "Avatar" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
- if commit.author
|
||||
%a.muted{ href: user_url(commit.author), style: "color:#333333;text-decoration:none;" }
|
||||
= commit.author.name
|
||||
- else
|
||||
%span
|
||||
= commit.author_name
|
||||
%tr.spacer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
|
||||
|
||||
- failed = @pipeline.statuses.latest.failed
|
||||
%tr.pre-section
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#333333;font-size:15px;font-weight:400;line-height:1.4;padding:15px 0;" }
|
||||
Pipeline
|
||||
%a{ href: pipeline_url(@pipeline), style: "color:#3777b0;text-decoration:none;" }
|
||||
= "\##{@pipeline.id}"
|
||||
had
|
||||
= failed.size
|
||||
failed
|
||||
#{'build'.pluralize(failed.size)}.
|
||||
%tr.warning
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;border:1px solid #ededed;border-bottom:0;border-radius:3px 3px 0 0;overflow:hidden;background-color:#fdf4f6;color:#d22852;font-size:14px;line-height:1.4;text-align:center;padding:8px 15px;" }
|
||||
Logs may contain sensitive data. Please consider before forwarding this email.
|
||||
%tr.section
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:0 15px;border:1px solid #ededed;border-radius:3px;overflow:hidden;border-top:0;border-radius:0 0 3px 3px;" }
|
||||
%table.builds{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;border-collapse:collapse;" }
|
||||
%tbody
|
||||
- failed.each do |build|
|
||||
%tr.build-state
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:20px 0;color:#8c8c8c;font-weight:500;font-size:15px;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#8c8c8c;font-weight:500;font-size:15px;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ alt: "x", height: "10", src: image_url('mailers/ci_pipeline_notif_v1/icon-x-red.gif'), style: "display:block;", width: "10" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#8c8c8c;font-weight:500;font-size:15px;vertical-align:middle;" }
|
||||
= build.stage
|
||||
%td{ align: "right", style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:20px 0;color:#8c8c8c;font-weight:500;font-size:15px;" }
|
||||
= render "notify/links/#{build.to_partial_path}", pipeline: @pipeline, build: build
|
||||
%tr.build-log
|
||||
- if build.has_trace?
|
||||
%td{ colspan: "2", style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:0 0 15px;" }
|
||||
%pre{ style: "font-family:Monaco,'Lucida Console','Courier New',Courier,monospace;background-color:#fafafa;border-radius:3px;overflow:hidden;white-space:pre-wrap;word-break:break-all;font-size:13px;line-height:1.4;padding:12px;color:#333333;margin:0;" }
|
||||
= build.trace_html(last_lines: 10).html_safe
|
||||
- else
|
||||
%td{ colspan: "2" }
|
||||
|
|
|
@ -27,7 +27,3 @@ Trace: <%= build.trace_with_state(last_lines: 10)[:text] %>
|
|||
<% end -%>
|
||||
|
||||
<% end -%>
|
||||
|
||||
You're receiving this email because of your account on <%= Gitlab.config.gitlab.host %>.
|
||||
Manage all notifications: <%= profile_notifications_url %>
|
||||
Help: <%= help_url %>
|
||||
|
|
|
@ -1,154 +1,84 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
%html{ lang: "en" }
|
||||
%head
|
||||
%meta{ content: "text/html; charset=UTF-8", "http-equiv" => "Content-Type" }/
|
||||
%meta{ content: "width=device-width, initial-scale=1", name: "viewport" }/
|
||||
%meta{ content: "IE=edge", "http-equiv" => "X-UA-Compatible" }/
|
||||
%title= message.subject
|
||||
:css
|
||||
/* CLIENT-SPECIFIC STYLES */
|
||||
body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
|
||||
table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }
|
||||
img { -ms-interpolation-mode: bicubic; }
|
||||
|
||||
/* iOS BLUE LINKS */
|
||||
a[x-apple-data-detectors] {
|
||||
color: inherit !important;
|
||||
text-decoration: none !important;
|
||||
font-size: inherit !important;
|
||||
font-family: inherit !important;
|
||||
font-weight: inherit !important;
|
||||
line-height: inherit !important;
|
||||
}
|
||||
|
||||
/* ANDROID MARGIN HACK */
|
||||
body { margin:0 !important; }
|
||||
div[style*="margin: 16px 0"] { margin:0 !important; }
|
||||
|
||||
@media only screen and (max-width: 639px) {
|
||||
body, #body {
|
||||
min-width: 320px !important;
|
||||
}
|
||||
table.wrapper {
|
||||
width: 100% !important;
|
||||
min-width: 320px !important;
|
||||
}
|
||||
table.wrapper > tbody > tr > td {
|
||||
border-left: 0 !important;
|
||||
border-right: 0 !important;
|
||||
border-radius: 0 !important;
|
||||
padding-left: 10px !important;
|
||||
padding-right: 10px !important;
|
||||
}
|
||||
}
|
||||
%body{ style: "background-color:#fafafa;margin:0;padding:0;text-align:center;min-width:640px;width:100%;height:100%;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" }
|
||||
%table#body{ border: "0", cellpadding: "0", cellspacing: "0", style: "background-color:#fafafa;margin:0;padding:0;text-align:center;min-width:640px;width:100%;" }
|
||||
%tr.success
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:10px;border-radius:3px;font-size:14px;line-height:1.3;text-align:center;overflow:hidden;color:#ffffff;background-color:#31af64;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;margin:0 auto;" }
|
||||
%tbody
|
||||
%tr.line
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#6b4fbb;height:4px;font-size:4px;line-height:4px;" }
|
||||
%tr.header
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" }
|
||||
%img{ alt: "GitLab", height: "50", src: image_url('mailers/ci_pipeline_notif_v1/gitlab-logo.gif'), width: "55" }/
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" }
|
||||
%table.wrapper{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:640px;margin:0 auto;border-collapse:separate;border-spacing:0;" }
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;vertical-align:middle;color:#ffffff;text-align:center;padding-right:5px;" }
|
||||
%img{ alt: "✓", height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-check-green-inverted.gif'), style: "display:block;", width: "13" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;vertical-align:middle;color:#ffffff;text-align:center;" }
|
||||
Your pipeline has passed.
|
||||
%tr.spacer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
|
||||
|
||||
%tr.section
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:0 15px;border:1px solid #ededed;border-radius:3px;overflow:hidden;" }
|
||||
%table.info{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;" } Project
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;" }
|
||||
- namespace_name = @project.group ? @project.group.name : @project.namespace.owner.name
|
||||
- namespace_url = @project.group ? group_url(@project.group) : user_url(@project.namespace.owner)
|
||||
%a.muted{ href: namespace_url, style: "color:#333333;text-decoration:none;" }
|
||||
= namespace_name
|
||||
\/
|
||||
%a.muted{ href: project_url(@project), style: "color:#333333;text-decoration:none;" }
|
||||
= @project.name
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Branch
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#ffffff;text-align:left;padding:18px 25px;border:1px solid #ededed;border-radius:3px;overflow:hidden;" }
|
||||
%table.content{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;border-collapse:separate;border-spacing:0;" }
|
||||
%tbody
|
||||
%tr.success
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:10px;border-radius:3px;font-size:14px;line-height:1.3;text-align:center;overflow:hidden;color:#ffffff;background-color:#31af64;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;margin:0 auto;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;vertical-align:middle;color:#ffffff;text-align:center;padding-right:5px;" }
|
||||
%img{ alt: "✓", height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-check-green-inverted.gif'), style: "display:block;", width: "13" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;vertical-align:middle;color:#ffffff;text-align:center;" }
|
||||
Your pipeline has passed.
|
||||
%tr.spacer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
|
||||
|
||||
%tr.section
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:0 15px;border:1px solid #ededed;border-radius:3px;overflow:hidden;" }
|
||||
%table.info{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;" } Project
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;" }
|
||||
- namespace_name = @project.group ? @project.group.name : @project.namespace.owner.name
|
||||
- namespace_url = @project.group ? group_url(@project.group) : user_url(@project.namespace.owner)
|
||||
%a.muted{ href: namespace_url, style: "color:#333333;text-decoration:none;" }
|
||||
= namespace_name
|
||||
\/
|
||||
%a.muted{ href: project_url(@project), style: "color:#333333;text-decoration:none;" }
|
||||
= @project.name
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Branch
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-branch-gray.gif'), style: "display:block;", width: "13", alt: "Branch icon" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
%a.muted{ href: commits_url(@pipeline), style: "color:#333333;text-decoration:none;" }
|
||||
= @pipeline.ref
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Commit
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-commit-gray.gif'), style: "display:block;", width: "13", alt: "Commit icon" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
%a{ href: commit_url(@pipeline), style: "color:#3777b0;text-decoration:none;" }
|
||||
= @pipeline.short_sha
|
||||
- if @merge_request
|
||||
in
|
||||
%a{ href: merge_request_url(@merge_request), style: "color:#3777b0;text-decoration:none;" }
|
||||
= @merge_request.to_reference
|
||||
.commit{ style: "color:#5c5c5c;font-weight:300;" }
|
||||
= @pipeline.git_commit_message.truncate(50)
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Author
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
- commit = @pipeline.commit
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img.avatar{ height: "24", src: avatar_icon(commit.author || commit.author_email, 24), style: "display:block;border-radius:12px;margin:-2px 0;", width: "24", alt: "Avatar" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
- if commit.author
|
||||
%a.muted{ href: user_url(commit.author), style: "color:#333333;text-decoration:none;" }
|
||||
= commit.author.name
|
||||
- else
|
||||
%span
|
||||
= commit.author_name
|
||||
%tr.spacer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
|
||||
|
||||
%tr.success-message
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#333333;font-size:15px;font-weight:400;line-height:1.4;padding:15px 5px;text-align:center;" }
|
||||
- build_count = @pipeline.statuses.latest.size
|
||||
- stage_count = @pipeline.stages_count
|
||||
Pipeline
|
||||
%a{ href: pipeline_url(@pipeline), style: "color:#3777b0;text-decoration:none;" }
|
||||
= "\##{@pipeline.id}"
|
||||
successfully completed
|
||||
#{build_count} #{'build'.pluralize(build_count)}
|
||||
in
|
||||
#{stage_count} #{'stage'.pluralize(stage_count)}.
|
||||
%tr.footer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" }
|
||||
%img{ alt: "GitLab", height: "33", src: image_url('mailers/ci_pipeline_notif_v1/gitlab-logo-full-horizontal.gif'), style: "display:block;margin:0 auto 1em;", width: "90" }/
|
||||
%div
|
||||
%a{ href: profile_notifications_url, style: "color:#3777b0;text-decoration:none;" } Manage all notifications
|
||||
·
|
||||
%a{ href: help_url, style: "color:#3777b0;text-decoration:none;" } Help
|
||||
%div
|
||||
You're receiving this email because of your account on
|
||||
= succeed "." do
|
||||
%a{ href: root_url, style: "color:#3777b0;text-decoration:none;" }= Gitlab.config.gitlab.host
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-branch-gray.gif'), style: "display:block;", width: "13", alt: "Branch icon" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
%a.muted{ href: commits_url(@pipeline), style: "color:#333333;text-decoration:none;" }
|
||||
= @pipeline.ref
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Commit
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-commit-gray.gif'), style: "display:block;", width: "13", alt: "Commit icon" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
%a{ href: commit_url(@pipeline), style: "color:#3777b0;text-decoration:none;" }
|
||||
= @pipeline.short_sha
|
||||
- if @merge_request
|
||||
in
|
||||
%a{ href: merge_request_url(@merge_request), style: "color:#3777b0;text-decoration:none;" }
|
||||
= @merge_request.to_reference
|
||||
.commit{ style: "color:#5c5c5c;font-weight:300;" }
|
||||
= @pipeline.git_commit_message.truncate(50)
|
||||
%tr
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Author
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
|
||||
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
|
||||
%tbody
|
||||
%tr
|
||||
- commit = @pipeline.commit
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" }
|
||||
%img.avatar{ height: "24", src: avatar_icon(commit.author || commit.author_email, 24), style: "display:block;border-radius:12px;margin:-2px 0;", width: "24", alt: "Avatar" }/
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
|
||||
- if commit.author
|
||||
%a.muted{ href: user_url(commit.author), style: "color:#333333;text-decoration:none;" }
|
||||
= commit.author.name
|
||||
- else
|
||||
%span
|
||||
= commit.author_name
|
||||
%tr.spacer
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
|
||||
|
||||
%tr.success-message
|
||||
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#333333;font-size:15px;font-weight:400;line-height:1.4;padding:15px 5px;text-align:center;" }
|
||||
- build_count = @pipeline.statuses.latest.size
|
||||
- stage_count = @pipeline.stages_count
|
||||
Pipeline
|
||||
%a{ href: pipeline_url(@pipeline), style: "color:#3777b0;text-decoration:none;" }
|
||||
= "\##{@pipeline.id}"
|
||||
successfully completed
|
||||
#{build_count} #{'build'.pluralize(build_count)}
|
||||
in
|
||||
#{stage_count} #{'stage'.pluralize(stage_count)}.
|
||||
|
|
|
@ -18,7 +18,3 @@ Commit Author: <%= commit.author_name %>
|
|||
<% build_count = @pipeline.statuses.latest.size -%>
|
||||
<% stage_count = @pipeline.stages_count -%>
|
||||
Pipeline #<%= @pipeline.id %> ( <%= pipeline_url(@pipeline) %> ) successfully completed <%= build_count %> <%= 'build'.pluralize(build_count) %> in <%= stage_count %> <%= 'stage'.pluralize(stage_count) %>.
|
||||
|
||||
You're receiving this email because of your account on <%= Gitlab.config.gitlab.host %>.
|
||||
Manage all notifications: <%= profile_notifications_url %>
|
||||
Help: <%= help_url %>
|
||||
|
|
|
@ -25,3 +25,10 @@
|
|||
HTML
|
||||
.col-md-10.code.js-syntax-highlight
|
||||
= highlight('.html', badge.to_html)
|
||||
.row
|
||||
%hr
|
||||
.row
|
||||
.col-md-2.text-center
|
||||
AsciiDoc
|
||||
.col-md-10.code.js-syntax-highlight
|
||||
= highlight('.adoc', badge.to_asciidoc)
|
||||
|
|
|
@ -13,70 +13,69 @@
|
|||
= render "home_panel"
|
||||
|
||||
- if current_user && can?(current_user, :download_code, @project)
|
||||
.project-stats-container{ class: container_class }
|
||||
%nav.project-stats
|
||||
%ul.nav
|
||||
%nav.project-stats{ class: container_class }
|
||||
%ul.nav
|
||||
%li
|
||||
= link_to project_files_path(@project) do
|
||||
Files (#{storage_counter(@project.statistics.total_repository_size)})
|
||||
%li
|
||||
= link_to namespace_project_commits_path(@project.namespace, @project, current_ref) do
|
||||
#{'Commit'.pluralize(@project.statistics.commit_count)} (#{number_with_delimiter(@project.statistics.commit_count)})
|
||||
%li
|
||||
= link_to namespace_project_branches_path(@project.namespace, @project) do
|
||||
#{'Branch'.pluralize(@repository.branch_count)} (#{number_with_delimiter(@repository.branch_count)})
|
||||
%li
|
||||
= link_to namespace_project_tags_path(@project.namespace, @project) do
|
||||
#{'Tag'.pluralize(@repository.tag_count)} (#{number_with_delimiter(@repository.tag_count)})
|
||||
|
||||
- if default_project_view != 'readme' && @repository.readme
|
||||
%li
|
||||
= link_to project_files_path(@project) do
|
||||
Files (#{storage_counter(@project.statistics.total_repository_size)})
|
||||
= link_to 'Readme', readme_path(@project)
|
||||
|
||||
- if @repository.changelog
|
||||
%li
|
||||
= link_to namespace_project_commits_path(@project.namespace, @project, current_ref) do
|
||||
#{'Commit'.pluralize(@project.statistics.commit_count)} (#{number_with_delimiter(@project.statistics.commit_count)})
|
||||
= link_to 'Changelog', changelog_path(@project)
|
||||
|
||||
- if @repository.license_blob
|
||||
%li
|
||||
= link_to namespace_project_branches_path(@project.namespace, @project) do
|
||||
#{'Branch'.pluralize(@repository.branch_count)} (#{number_with_delimiter(@repository.branch_count)})
|
||||
= link_to license_short_name(@project), license_path(@project)
|
||||
|
||||
- if @repository.contribution_guide
|
||||
%li
|
||||
= link_to namespace_project_tags_path(@project.namespace, @project) do
|
||||
#{'Tag'.pluralize(@repository.tag_count)} (#{number_with_delimiter(@repository.tag_count)})
|
||||
= link_to 'Contribution guide', contribution_guide_path(@project)
|
||||
|
||||
- if default_project_view != 'readme' && @repository.readme
|
||||
%li
|
||||
= link_to 'Readme', readme_path(@project)
|
||||
- if @repository.gitlab_ci_yml
|
||||
%li
|
||||
= link_to 'CI configuration', ci_configuration_path(@project)
|
||||
|
||||
- if @repository.changelog
|
||||
%li
|
||||
= link_to 'Changelog', changelog_path(@project)
|
||||
- if current_user && can_push_branch?(@project, @project.default_branch)
|
||||
- unless @repository.changelog
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: 'CHANGELOG') do
|
||||
Add Changelog
|
||||
- unless @repository.license_blob
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: 'LICENSE') do
|
||||
Add License
|
||||
- unless @repository.contribution_guide
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: 'CONTRIBUTING.md', commit_message: 'Add contribution guide') do
|
||||
Add Contribution guide
|
||||
- unless @repository.gitlab_ci_yml
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: '.gitlab-ci.yml') do
|
||||
Set up CI
|
||||
- if koding_enabled? && @repository.koding_yml.blank?
|
||||
%li.missing
|
||||
= link_to 'Set up Koding', add_koding_stack_path(@project)
|
||||
- if @repository.gitlab_ci_yml.blank? && @project.deployment_service.present?
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: '.gitlab-ci.yml', commit_message: 'Set up auto deploy', target_branch: 'auto-deploy', context: 'autodeploy') do
|
||||
Set up auto deploy
|
||||
|
||||
- if @repository.license_blob
|
||||
%li
|
||||
= link_to license_short_name(@project), license_path(@project)
|
||||
|
||||
- if @repository.contribution_guide
|
||||
%li
|
||||
= link_to 'Contribution guide', contribution_guide_path(@project)
|
||||
|
||||
- if @repository.gitlab_ci_yml
|
||||
%li
|
||||
= link_to 'CI configuration', ci_configuration_path(@project)
|
||||
|
||||
- if current_user && can_push_branch?(@project, @project.default_branch)
|
||||
- unless @repository.changelog
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: 'CHANGELOG') do
|
||||
Add Changelog
|
||||
- unless @repository.license_blob
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: 'LICENSE') do
|
||||
Add License
|
||||
- unless @repository.contribution_guide
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: 'CONTRIBUTING.md', commit_message: 'Add contribution guide') do
|
||||
Add Contribution guide
|
||||
- unless @repository.gitlab_ci_yml
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: '.gitlab-ci.yml') do
|
||||
Set up CI
|
||||
- if koding_enabled? && @repository.koding_yml.blank?
|
||||
%li.missing
|
||||
= link_to 'Set up Koding', add_koding_stack_path(@project)
|
||||
- if @repository.gitlab_ci_yml.blank? && @project.deployment_service.present?
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: '.gitlab-ci.yml', commit_message: 'Set up auto deploy', target_branch: 'auto-deploy', context: 'autodeploy') do
|
||||
Set up auto deploy
|
||||
|
||||
- if @repository.commit
|
||||
.project-last-commit
|
||||
= render 'projects/last_commit', commit: @repository.commit, ref: current_ref, project: @project
|
||||
- if @repository.commit
|
||||
.project-last-commit{ class: container_class }
|
||||
= render 'projects/last_commit', commit: @repository.commit, ref: current_ref, project: @project
|
||||
|
||||
%div{ class: container_class }
|
||||
- if @project.archived?
|
||||
|
|
|
@ -6,5 +6,5 @@
|
|||
= f.text_field :key, class: "form-control", placeholder: "PROJECT_VARIABLE", required: true
|
||||
.form-group
|
||||
= f.label :value, "Value", class: "label-light"
|
||||
= f.text_area :value, class: "form-control", placeholder: "PROJECT_VARIABLE", required: true
|
||||
= f.text_area :value, class: "form-control", placeholder: "PROJECT_VARIABLE"
|
||||
= f.submit btn_text, class: "btn btn-save"
|
||||
|
|
|
@ -2,6 +2,12 @@
|
|||
- issue_votes = @issuable_meta_data[issuable.id]
|
||||
- upvotes, downvotes = issue_votes.upvotes, issue_votes.downvotes
|
||||
- issuable_url = @collection_type == "Issue" ? issue_path(issuable, anchor: 'notes') : merge_request_path(issuable, anchor: 'notes')
|
||||
- issuable_mr = @issuable_meta_data[issuable.id].merge_requests_count
|
||||
|
||||
- if issuable_mr > 0
|
||||
%li
|
||||
= image_tag('icon-merge-request-unmerged', class: 'icon-merge-request-unmerged')
|
||||
= issuable_mr
|
||||
|
||||
- if upvotes > 0
|
||||
%li
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Rename Builds to Pipelines, CI/CD Pipelines, or Jobs everywhere
|
||||
merge_request: 8787
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Don't require lib/gitlab/request_profiler/middleware.rb in config/initializers/request_profiler.rb
|
||||
merge_request:
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Added labels empty state
|
||||
merge_request: 7443
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Use reCaptcha when an issue is identified as a spam
|
||||
merge_request: 8846
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Unify projects search by removing /projects/:search endpoint
|
||||
merge_request: 8877
|
||||
author:
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Standardize branch name params as branch on V4 API
|
||||
merge_request: 8936
|
||||
author:
|
4
changelogs/unreleased/22466-task-list-alignment.yml
Normal file
4
changelogs/unreleased/22466-task-list-alignment.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Align task list checkboxes
|
||||
merge_request: 6487
|
||||
author: Jared Deckard <jared.deckard@gmail.com>
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Allow creating protected branches when user can merge to such branch
|
||||
merge_request: 8458
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Adds service trigger events to api
|
||||
merge_request: 8324
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Create a TODO for user who set auto-merge when a build fails, merge conflict occurs
|
||||
merge_request: 8056
|
||||
author: twonegatives
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Don't group issues by project on group-level and dashboard issue indexes.
|
||||
merge_request: 8111
|
||||
author: Bernardo Castro
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Fix disable storing of sensitive information when importing a new repo
|
||||
merge_request: 8885
|
||||
author: Bernard Pietraga
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Adds back ability to stop all environments
|
||||
merge_request: 7379
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Force new password after password reset via API
|
||||
merge_request:
|
||||
author: George Andrinopoulos
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Fix Ctrl+Click support for Todos and Merge Request page tabs
|
||||
merge_request: 8898
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Refactor MergeRequests::BuildService
|
||||
merge_request: 8462
|
||||
author: Rydkin Maxim
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: 'Allows to search within project by commit hash'
|
||||
merge_request:
|
||||
author: YarNayar
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Fix nested tasks in ordered list
|
||||
merge_request: 8626
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Show organisation membership and delete comment on smaller viewports, plus change comment author name to username
|
||||
merge_request:
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Prevent removal of input fields if it is the parent dropdown element
|
||||
merge_request: 8397
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Remove flash warning from login page
|
||||
merge_request: 8864
|
||||
author: Gerald J. Padilla
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Replace word user with member
|
||||
merge_request: 8872
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Remove turbolinks.
|
||||
merge_request: !8570
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Update pipeline and commit links when CI status is updated
|
||||
merge_request: 8351
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Convert pipeline action icons to svg to have them propperly positioned
|
||||
merge_request:
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Remove rogue scrollbars for issue comments with inline elements
|
||||
merge_request:
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Align Segoe UI label text
|
||||
merge_request:
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Don’t count tasks that are not defined as list items correctly
|
||||
merge_request: 8526
|
||||
author:
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Added AsciiDoc Snippet to CI/CD Badges
|
||||
merge_request: 9164
|
||||
author: Jan Christophersen
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Add sorting pipeline for a commit
|
||||
merge_request: 8319
|
||||
author: Takuya Noguchi
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Color + and - signs in diffs to increase code legibility
|
||||
merge_request:
|
||||
author:
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Clean-up Groups navigation order
|
||||
merge_request: 9309
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Improve button accessibility on pipelines page
|
||||
merge_request: 8561
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Fix tab index order on branch commits list page
|
||||
merge_request:
|
||||
author: Ryan Harris
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Fix Sort by Recent Sign-in in Admin Area
|
||||
merge_request: 8637
|
||||
author: Poornima M
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Add hover style to copy icon on commit page header
|
||||
merge_request:
|
||||
author: Ryan Harris
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
title: prevent diff unfolding link from appearing when there are no more lines to
|
||||
show
|
||||
merge_request: 8761
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Avoid repeated dashes in $CI_ENVIRONMENT_SLUG
|
||||
merge_request: 8638
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Remove hover animation from row elements
|
||||
merge_request:
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Add `copy` backup strategy to combat file changed errors
|
||||
merge_request: 8728
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Fixes hover cursor on pipeline pagenation
|
||||
merge_request: 9003
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Add link verification to badge partial in order to render a badge without a link
|
||||
merge_request: 8740
|
||||
author:
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
title: Improve pipeline status icon linking in widgets
|
||||
merge_request:
|
||||
author:
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue